#include #include #include #include #include #include #include #define MAX_ELEMENTS 50 typedef struct { int x; int y; }position; typedef struct { position contenu[MAX_ELEMENTS]; int nombre; } liste_champi; void affichage(element_t e) { position *p = e; printf("%d %d \n", p->x, p->y); } int main() { SDL_keysym* detail; srand(time(NULL)); char touche; unsigned char bas; int largeur = 1000; int hauteur = 1000; liste_champi muschrooms={.nombre=0}; liste_t listecenti={NULL,0,0}; int h,w,l,i,t; int s=10; char *titre = "Le Centipède"; int champi = chargerLutin("Lutins/millepatte_champi.bmp",0); int Teted = chargerLutin("Lutins/millepatte_tete_droite.bmp",0); int Teteg = chargerLutin("Lutins/millepatte_tete_gauche.bmp",0); int Teteh = chargerLutin("Lutins/millepatte_tete_haut.bmp",0); int Teteb = chargerLutin("Lutins/millepatte_tete_bas.bmp",0); int Corpsg = chargerLutin("Lutins/millepatte_corps_gauche.bmp",0); int Corpsd = chargerLutin("Lutins/millepatte_corps_droite.bmp",0); int Corpsh = chargerLutin("Lutins/millepatte_corps_haut.bmp",0); int Corpsb = chargerLutin("Lutins/millepatte_corps_bas.bmp",0); int gameover = chargerLutin("Lutins/game_over.bmp",0); if(champi<0){ printf("Champi pas là\n"); exit(-1); } tailleLutin(champi,&l,&h); position *pos; position poschampi; position posmillepatte; creerSurface(largeur,hauteur,titre); int x = 300; int y = 500; for(i=0; i<4; i++) { posmillepatte.x = (x + 50*i); posmillepatte.y = y; enfiler(&listecenti,&posmillepatte,sizeof(position)); } //affichage des corpsd du centipede for(i=0; i<4; i++) { pos = enieme(i,&listecenti); afficherLutin(Corpsd,pos->x,pos->y); } posmillepatte.x = (x+200); posmillepatte.y = y; enfiler(&listecenti,&posmillepatte,sizeof(position)); //affichage de la tete du Centipède pos = enieme(4, &listecenti); afficherLutin(Teted,pos->x,pos->y); for(i = 0 ; i < 20; i++) { rectanglePlein(i*50,0,1,1000,5); //pose de la grille rectanglePlein(0,i*50,1000,1,5); } for(w=0;w<10;w++) { poschampi.x = (rand()%20)*50; //fixe coordonnées des champignons poschampi.y = (rand()%20)*50; if(poschampi.y > 570 || poschampi.y < 430) { muschrooms.contenu[muschrooms.nombre++]=poschampi; } else w--; } printf("%d %d \n",l,h); for(w=0;w<10;w++){ afficherLutin(champi,(muschrooms.contenu[w].x)+1,(muschrooms.contenu[w].y)+6); }//affiche les champis majSurface(); int gomme = creerLutin(0,0,50,50,0); majSurface(); while(1){ if(lireTouche(&bas,&touche,(void **)&detail) && bas==1) { if(detail->sym==SDLK_RIGHT) t=0; if(detail->sym==SDLK_UP) t=1; if(detail->sym==SDLK_LEFT) t=2; if(detail->sym==SDLK_DOWN) t=3; } usleep(500000); if((t==0 && s!=2) || s==0) { printf("dans le droite\n"); pos = premier(&listecenti); afficherLutin(gomme,pos->x,pos->y); defiler(&listecenti); pos = dernier(&listecenti); afficherLutin(gomme,pos->x,pos->y); afficherLutin(Corpsd,(pos->x),pos->y); posmillepatte.x = pos->x+50; posmillepatte.y = pos->y; if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){ afficherLutin(gameover,400,400); majSurface(); sleep(5); fermerSurface(); } enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte)); afficherLutin(Teted,posmillepatte.x,posmillepatte.y); majSurface(); s=0; } if((t==1 && s!=3) || s==1) { printf("dans le haut\n"); pos = premier(&listecenti); afficherLutin(gomme,pos->x,pos->y); defiler(&listecenti); pos = dernier(&listecenti); afficherLutin(gomme,pos->x,pos->y); afficherLutin(Corpsh,(pos->x),pos->y); posmillepatte.x = pos->x; posmillepatte.y = pos->y-50; if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){ afficherLutin(gameover,400,400); majSurface(); sleep(5); fermerSurface(); } enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte)); afficherLutin(Teteh,posmillepatte.x,posmillepatte.y); majSurface(); s=1; } if((t==2 && s!=0) || s==2) { printf("dans le gauche\n"); pos = premier(&listecenti); afficherLutin(gomme,pos->x,pos->y); defiler(&listecenti); pos = dernier(&listecenti); afficherLutin(gomme,pos->x,pos->y); afficherLutin(Corpsg,(pos->x),pos->y); posmillepatte.x = pos->x-50; posmillepatte.y = pos->y; if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){ afficherLutin(gameover,400,400); majSurface(); sleep(5); fermerSurface(); } enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte)); afficherLutin(Teteg,posmillepatte.x,posmillepatte.y); majSurface(); s=2; } if((t==3 && s!=1) || s==3) { printf("dans le bas\n"); pos = premier(&listecenti); afficherLutin(gomme,pos->x,pos->y); defiler(&listecenti); pos = dernier(&listecenti); afficherLutin(gomme,pos->x,pos->y); afficherLutin(Corpsb,(pos->x),pos->y); posmillepatte.x = pos->x; posmillepatte.y = pos->y+50; if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){ afficherLutin(gameover,400,400); majSurface(); sleep(5); fermerSurface(); } enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte)); afficherLutin(Teteb,posmillepatte.x,posmillepatte.y); majSurface(); s=3; } if(touche=='a') { fermerSurface(); //condition d'arret return 0; } } return 0; }