0/5 (2 avis)
Snippet vu 3 518 fois - Téléchargée 18 fois
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.