begin process at 2012 05 27 13:17:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > A5PAINTING,LE PAINT A LA DÉBUTANT

A5PAINTING,LE PAINT A LA DÉBUTANT


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :langage C, dessin, Paint, Gimp, SDL Niveau :Initié Date de création :25/08/2010 Date de mise à jour :31/08/2010 18:00:26 Vu :1 945

Auteur : Chiheb2010

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

C'est un logiciel débutant qui a pour but d'aider peut être des gens a une partie ou ils étaient bloqués.
Le logiciel utilise la SDL et est programmé en langage C.
Le code source est facile a écrire et devrait être opérationnel.

Source

  • Il y a plusieurs fichiers,je vous les donne:
  • constantes.h:
  • #ifndef DEF_CONSTANTES_H
  • #define DEF_CONSTANTES_H
  • #define TAILLE_BLOC 30
  • #define NB_BLOC_LARGEUR 15
  • #define NB_BLOC_HAUTEUR 15
  • #define LARGEUR NB_BLOC_LARGEUR*TAILLE_BLOC
  • #define HAUTEUR NB_BLOC_HAUTEUR*TAILLE_BLOC
  • enum{VIDE,POINT};
  • #endif
  • main.c
  • #include<stdio.h>
  • #include<stdlib.h>
  • #include<SDL/SDL.h>
  • #include<SDL/SDL_image.h>
  • #include"dessiner.h"
  • #include"constantes.h"
  • int main(int argc,char* argv[])
  • {
  • //Declaration des variables et pointeurs de base
  • SDL_Surface *ecran = NULL, *menu = NULL;
  • SDL_Rect position;
  • SDL_Event evente;
  • int continuer = 1;
  • //Initiallisation de SDL
  • SDL_Init(SDL_INIT_VIDEO);
  • //Initialisation des variables
  • ecran = SDL_SetVideoMode(LARGEUR,HAUTEUR,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
  • SDL_WM_SetCaption("A5Painting",NULL);
  • menu = IMG_Load("menu.bmp");
  • position.x = 0;
  • position.y = 0;
  • //Blitage du menu
  • SDL_BlitSurface(menu,NULL,ecran,&position);
  • SDL_Flip(ecran);
  • //Boucle événementielle
  • while(continuer)
  • {
  • SDL_WaitEvent(&evente);
  • switch(evente.type)
  • {
  • case SDL_QUIT:
  • continuer = 0;
  • break;
  • case SDL_KEYDOWN:
  • switch(evente.key.keysym.sym)
  • {
  • case SDLK_e:
  • pinceau(ecran);
  • break;
  • default:
  • continuer = 0;
  • break;
  • }
  • break;
  • }
  • SDL_Flip(ecran);
  • }
  • SDL_FreeSurface(menu);
  • SDL_Quit();
  • return 0;
  • }
  • dessin.c et .h
  • #ifndef DEF_DESSINER_H
  • #define DEF_DESSINER_H
  • void pinceau(SDL_Surface* ecran);
  • #endif
  • dessin.c
  • #include<stdio.h>
  • #include<stdlib.h>
  • #include<SDL/SDL.h>
  • #include<SDL/SDL_image.h>
  • #include"constantes.h"
  • void pinceau(SDL_Surface* ecran)
  • {
  • //Déclaration des variables et pointeur de base
  • SDL_Surface* pinceau = NULL;
  • SDL_Surface* point = NULL;
  • SDL_Surface* vide = NULL;
  • SDL_Surface* erreur = NULL;
  • SDL_Rect position;
  • SDL_Event evente;
  • int c = 1,ClicEnCour = 0;
  • int draw[NB_BLOC_LARGEUR][NB_BLOC_HAUTEUR] = {0};
  • int i = 0,j = 0;
  • //Initialisation des variables et pointeur
  • pinceau = IMG_Load("pinceau.bmp");
  • point = IMG_Load("point.bmp");
  • vide = IMG_Load("vide.bmp");
  • erreur = IMG_Load("erreur.bmp");
  • SDL_EnableKeyRepeat(10,10);
  • //Chargement de draw
  • load(draw);
  • if(load(draw) == NULL || load(draw) == 0)//Si draw n'a pas pu être chargé et que load renvoit NULL ou 0 on affiche ERREUR
  • {
  • position.x = 0;position.y = 0;
  • SDL_BlitSurface(erreur,NULL,ecran,&position);
  • }
  • //Remplie draw
  • for(i = 0;i < NB_BLOC_LARGEUR;i++)
  • {
  • for(j = 0;j < NB_BLOC_HAUTEUR;i++)
  • {
  • position.x = i*TAILLE_BLOC;
  • position.y = j*TAILLE_BLOC;
  • switch(draw[i][j])
  • {
  • case VIDE:
  • SDL_BlitSurface(vide,NULL,ecran,&position);
  • break;
  • case POINT:
  • SDL_BlitSurface(point,NULL,ecran,&position);
  • break;
  • }
  • }
  • }
  • //Boucle événementielle
  • while(c)
  • {
  • SDL_WaitEvent(&evente);
  • switch(evente.type)
  • {
  • case SDL_QUIT:
  • c = 0;
  • break;
  • case SDL_MOUSEMOTION:
  • position.x = evente.motion.x - (pinceau ->w /2);
  • position.y = evente.motion.y - (pinceau ->h /2);
  • break;
  • case SDL_KEYDOWN:
  • switch(evente.key.keysym.sym)
  • {
  • case SDLK_RIGHT:
  • position.x++;
  • SDL_BlitSurface(point,NULL,ecran,&position);
  • break;
  • case SDLK_LEFT:
  • position.x--;
  • SDL_BlitSurface(point,NULL,ecran,&position);
  • break;
  • case SDLK_UP:
  • position.y--;
  • SDL_BlitSurface(point,NULL,ecran,&position);
  • break;
  • case SDLK_DOWN:
  • position.y++;
  • SDL_BlitSurface(point,NULL,ecran,&position);
  • break;
  • case SDLK_s:
  • c = 0;
  • break;
  • case SDLK_n:
  • SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));
  • break;
  • case SDLK_a:
  • save(draw);
  • break;
  • }
  • break;
  • case SDL_MOUSEBUTTONDOWN:
  • if(evente.button.button == SDL_BUTTON_LEFT)
  • {
  • ClicEnCour = 1;
  • }
  • break;
  • case SDL_MOUSEBUTTONUP:
  • ClicEnCour = 0;
  • break;
  • }
  • switch(ClicEnCour)
  • {
  • case 1:
  • SDL_BlitSurface(point,NULL,ecran,&position);
  • break;
  • }
  • SDL_Flip(ecran);
  • }
  • SDL_Flip(ecran);
  • SDL_FreeSurface(point);
  • SDL_FreeSurface(pinceau);
  • SDL_FreeSurface(vide);
  • SDL_FreeSurface(erreur);
  • SDL_Quit();
  • }
  • fichier.c
  • #include<stdio.h>
  • #include<stdlib.h>
  • #include<SDL/SDL.h>
  • #include<SDL/SDL_image.h>
  • #include"constantes.h"
  • int load(int draw[][NB_BLOC_HAUTEUR])
  • {
  • FILE* fichier = NULL;
  • char ligneFichier[NB_BLOC_LARGEUR * NB_BLOC_HAUTEUR + 1] = {0};
  • int i = 0, j = 0;
  • fichier = fopen("save.cd", "r");
  • if (fichier == NULL)
  • return 0;
  • fgets(ligneFichier,NB_BLOC_LARGEUR*NB_BLOC_HAUTEUR +1,fichier);
  • for(i = 0;i < NB_BLOC_LARGEUR;i++)
  • {
  • for(j = 0;j < NB_BLOC_HAUTEUR;j++)
  • {
  • switch(ligneFichier[(i * NB_BLOC_LARGEUR) + j])
  • {
  • case '0':
  • draw[i][j] = 0;
  • break;
  • case '1':
  • draw[i][j] = 1;
  • break;
  • }
  • }
  • }
  • fclose(fichier);
  • return 1;
  • }
  • int save(int draw[][NB_BLOC_HAUTEUR])
  • {
  • FILE* fichier = NULL;
  • int i = 0,j = 0;
  • fichier = fopen("save.cd","w");
  • if (fichier == NULL)
  • return 0;
  • for (i = 0 ; i < NB_BLOC_LARGEUR ; i++)
  • {
  • for (j = 0 ; j < NB_BLOC_HAUTEUR ; j++)
  • {
  • fprintf(fichier, "%d", draw[j][i]);
  • }
  • }
  • fclose(fichier);
  • return 1;
  • }
  • fichier.h
  • #ifndef DEF_FICHIER_H
  • #define DEF_FICHIER_H
  • int load(int draw[][NB_BLOC_HAUTEUR]);
  • int save(int draw[][NB_BLOC_HAUTEUR]);
  • #endif
Il y a plusieurs fichiers,je vous les donne:
constantes.h:

#ifndef DEF_CONSTANTES_H
#define DEF_CONSTANTES_H

#define TAILLE_BLOC 30
#define NB_BLOC_LARGEUR 15
#define NB_BLOC_HAUTEUR 15
#define LARGEUR NB_BLOC_LARGEUR*TAILLE_BLOC
#define HAUTEUR NB_BLOC_HAUTEUR*TAILLE_BLOC

enum{VIDE,POINT};

#endif

main.c

#include<stdio.h>
#include<stdlib.h>
#include<SDL/SDL.h>
#include<SDL/SDL_image.h>
#include"dessiner.h"
#include"constantes.h"

int main(int argc,char* argv[])
{
	//Declaration des variables et pointeurs de base
	SDL_Surface *ecran = NULL, *menu = NULL;
	SDL_Rect position;
	SDL_Event evente;
	int continuer = 1;

	//Initiallisation de SDL
	SDL_Init(SDL_INIT_VIDEO);

	//Initialisation des variables
	ecran = SDL_SetVideoMode(LARGEUR,HAUTEUR,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
	SDL_WM_SetCaption("A5Painting",NULL);
	menu = IMG_Load("menu.bmp");
	position.x = 0;
	position.y = 0;

	//Blitage du menu
	SDL_BlitSurface(menu,NULL,ecran,&position);
	SDL_Flip(ecran);

	//Boucle événementielle
	while(continuer)
	{
		SDL_WaitEvent(&evente);
		switch(evente.type)
		{
		case SDL_QUIT:
			continuer = 0;
			break;
		case SDL_KEYDOWN:
			switch(evente.key.keysym.sym)
			{
			case SDLK_e:
				pinceau(ecran);
				break;
			default:
				continuer = 0;
				break;
			}
			break;
		}
	SDL_Flip(ecran);
	}
	SDL_FreeSurface(menu);
	SDL_Quit();
	return 0;
}

dessin.c et .h

#ifndef DEF_DESSINER_H
#define DEF_DESSINER_H

void pinceau(SDL_Surface* ecran);

#endif

dessin.c

#include<stdio.h>
#include<stdlib.h>
#include<SDL/SDL.h>
#include<SDL/SDL_image.h>
#include"constantes.h"

void pinceau(SDL_Surface* ecran)
{
	//Déclaration des variables et pointeur de base
	SDL_Surface* pinceau = NULL;
	SDL_Surface* point = NULL;
	SDL_Surface* vide = NULL;
	SDL_Surface* erreur = NULL;
	SDL_Rect position;
	SDL_Event evente;
	int c = 1,ClicEnCour = 0;
	int draw[NB_BLOC_LARGEUR][NB_BLOC_HAUTEUR] = {0};
	int i = 0,j = 0;

	//Initialisation des variables et pointeur
	pinceau = IMG_Load("pinceau.bmp");
	point = IMG_Load("point.bmp");
	vide = IMG_Load("vide.bmp");
	erreur = IMG_Load("erreur.bmp");
	SDL_EnableKeyRepeat(10,10);

	//Chargement de draw
	load(draw);
	if(load(draw) == NULL || load(draw) == 0)//Si draw n'a pas pu être chargé et que load renvoit NULL ou 0 on affiche ERREUR
	{
		position.x = 0;position.y = 0;
		SDL_BlitSurface(erreur,NULL,ecran,&position);
	}

     //Remplie draw
	for(i = 0;i < NB_BLOC_LARGEUR;i++)
	{
		for(j = 0;j < NB_BLOC_HAUTEUR;i++)
		{
			position.x = i*TAILLE_BLOC;
			position.y = j*TAILLE_BLOC;
			switch(draw[i][j])
			{
			case VIDE:
				SDL_BlitSurface(vide,NULL,ecran,&position);
				break;
			case POINT:
				SDL_BlitSurface(point,NULL,ecran,&position);
				break;
			}
		}
	}


	//Boucle événementielle
	while(c)
	{
		SDL_WaitEvent(&evente);
		switch(evente.type)
		{
		case SDL_QUIT:
			c = 0;
			break;
		case SDL_MOUSEMOTION:
			position.x = evente.motion.x - (pinceau ->w /2);
			position.y = evente.motion.y - (pinceau ->h /2);
			break;
		case SDL_KEYDOWN:
			switch(evente.key.keysym.sym)
			{
			case SDLK_RIGHT:
				position.x++;
				SDL_BlitSurface(point,NULL,ecran,&position);
				break;
			case SDLK_LEFT:
				position.x--;
				SDL_BlitSurface(point,NULL,ecran,&position);
				break;
			case SDLK_UP:
				position.y--;
				SDL_BlitSurface(point,NULL,ecran,&position);
				break;
			case SDLK_DOWN:
				position.y++;
				SDL_BlitSurface(point,NULL,ecran,&position);
				break;
			case SDLK_s:
				c = 0;
				break;
			case SDLK_n:
				SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));
				break;
			case SDLK_a:
				save(draw);
				break;
			}
			break;
		case SDL_MOUSEBUTTONDOWN:
			if(evente.button.button == SDL_BUTTON_LEFT)
			{
				ClicEnCour = 1;
			}
			break;
		case SDL_MOUSEBUTTONUP:
			ClicEnCour = 0;
			break;
		}
		switch(ClicEnCour)
		{
		case 1:
			SDL_BlitSurface(point,NULL,ecran,&position);
			break;
		}
		
		SDL_Flip(ecran);
	}

	

	SDL_Flip(ecran);

	SDL_FreeSurface(point);
	SDL_FreeSurface(pinceau);
	SDL_FreeSurface(vide);
	SDL_FreeSurface(erreur);
	SDL_Quit();
}

fichier.c 

#include<stdio.h>
#include<stdlib.h>
#include<SDL/SDL.h>
#include<SDL/SDL_image.h>
#include"constantes.h"

int load(int draw[][NB_BLOC_HAUTEUR])
{
	FILE* fichier = NULL;
	char ligneFichier[NB_BLOC_LARGEUR * NB_BLOC_HAUTEUR + 1] = {0};
    int i = 0, j = 0;

    fichier = fopen("save.cd", "r");
    if (fichier == NULL)
    return 0;
	fgets(ligneFichier,NB_BLOC_LARGEUR*NB_BLOC_HAUTEUR +1,fichier);
	for(i = 0;i < NB_BLOC_LARGEUR;i++)
	{
		for(j = 0;j < NB_BLOC_HAUTEUR;j++)
		{
			switch(ligneFichier[(i * NB_BLOC_LARGEUR) + j])
			{
			case '0':
				draw[i][j] = 0;
				break;
			case '1':
				draw[i][j] = 1;
				break;
			}

		}
	}
	fclose(fichier);
	return 1;
}

int save(int draw[][NB_BLOC_HAUTEUR])
{
	FILE* fichier = NULL;
	int i = 0,j = 0;

	fichier = fopen("save.cd","w");
	if (fichier == NULL)
        return 0;
	for (i = 0 ; i < NB_BLOC_LARGEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOC_HAUTEUR ; j++)
        {
            fprintf(fichier, "%d", draw[j][i]);
        }
    }

    fclose(fichier);
    return 1;
}

fichier.h

#ifndef DEF_FICHIER_H
#define DEF_FICHIER_H

int load(int draw[][NB_BLOC_HAUTEUR]);
int save(int draw[][NB_BLOC_HAUTEUR]);

#endif

 Conclusion

Voila,si vous comprenez ce code,vous êtes tout a fait capable de reproduire un Paint ou pourquoi pas un Gimp (avec beaucoup de patience ^^).

A la prochaine !

PS: cette version est une version instable,elle est donc intestée et par conséquent elle contient quelques bugs :( !!
Ne m'en tenez pas rigeure mais je garde les sources stables pour le moment car elles sont encore en dévellopement,surtout la partie des boutons,elle est vraiment longue et chiante ^^


 Historique

31 août 2010 18:00:26 :
La modification du code source n'est en fait pas une modification du code mais rien que du texte en commentaire,merci !

 Sources du même auteur

GÉRER UN COMBAT DANS UN JEU 2D / ALGORITHME PRIMAIRE D'UNE I...

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture JEU EN SDL "LANGAGE C" par thechef
Source avec Zip Source avec une capture JEU EN SDL\C par thechef
Source avec Zip Source avec une capture DÉBUT D'UN "PAINT" EN SDL par jashnlt
Source avec Zip [TPE] MINI LOGICIEL DE MODIFICATION D'IMAGES AVEC SDL par CChargy

Commentaires et avis

Commentaire de Chiheb2010 le 28/08/2010 16:15:07

Le programme marche tant que la gestion des fichiers n'est pas là,c'est un problème que j'essayerais de régler ^^

Commentaire de Chiheb2010 le 05/11/2010 21:43:36

le blem est résolu, pas de fichiers mais SaveBMP. Je le mettrai pas sur la source tout de suite, vais bientôt dormir :(

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[?] dessin en couleur sous visual C SDK [ par jetsam ] Comment faire pour desiner une ligne en couler en Visual Cjuste en SDK (pas d'objet) avec un HDC problème SDL [ par Synhok ] J'ai essayer le tut sur la librairie SDL et quand je compile avec DevC++, le linker me marque :C:\...\BIN\ld.exe: cannot open -lSDLmain: No such file Texte & SDL en mode Video [ par Gaelle ] Bonjour à tous,Je suis en train d'interfacer une application C à l'aide de SDL. Pour ce qui est de la gestion vidéo et évènements souris aucun problèm librairie SDL et coonio.h [ par gloom ] salut peuple svp qq1 opurrait t'il m'aider voila je cherche a afficher une photo sous console DOS pour cela je sait qu'il ¸faute une librairie SDL mai RichEdit Paint [ par crocejf2000 ] Salut a tous,--&gt;OS Win98, Borland C++ 5Je suis toujours avec mon compilateur maison, et j'ai un petit probleme d'affichage de ma RichEdit -&gt; c'e SDL [ par sabinus ] SabinusBonjour tout le monde.Je recherche la description en français de toutes les instructions et paramétres de la SDL (Windows xp). Lib SDL -> probleme d'images [ par zmc ] bonjour, je debute plus ou moins en SDL, et je n'ai pas réussi a afficher un sprites (animé ou non) sur une image de fond. Selon la méthode que j'empl la librairie SDL pour dev-c++? [ par mioche ] Bonjour,G trouver des sources interessantes concernant la librairie SDL, moins puissante mais beaucoup plus simple que directx.Cependant, je cherche t Lire un wav avec SDL [ par jayce2703 ] Salut tout le monde!Je n'en peux plus : Je n'arrive pas à trouver un exemple SIMPLE de lecture d'un fichier wav sous SDL. Que ce soit sur le site offi Dessin [ par LordBob ] Bonjours a tous,voila je cherche un fichier header un peu comme 'econio.h' ou 'sconio.h' mais avec des fonctions supplémentaire comme par exemple, la


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,232 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales