#include #include #include #include /*taille 2 de plus pour avoir les bordures du plateau de jeu*/ #define H 42 #define L 62 /*initialisation des compteur(timer et deplacement du serpent*/ #define DELTA 1000000L #define DELTO 100L /*affichage du plateau de jeu en fonction du tableau*/ void AfficheTab(int tab[H][L], int posx, int posy, int i, int j){ couleur c; if(tab[i][j]==0){ c=CouleurParNom("black"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); } if(tab[i][j]==40){ c=CouleurParNom("dark grey"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); c=CouleurParNom("black"); ChoisirCouleurDessin(c); DessinerRectangle(posx+2,posy+2,16,16); } if(tab[i][j]==1){ c=CouleurParNom("dark orange"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); c=CouleurParNom("brown"); ChoisirCouleurDessin(c); RemplirArc(posx+5,posy+5,10,10,360,360); } if(tab[i][j]==9){ c=CouleurParNom("yellow"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); } if(tab[i][j]==7){ c=CouleurParNom("brown"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); } if(tab[i][j]==8){ c=CouleurParNom("green"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); } if(tab[i][j]==6){ c=CouleurParNom("purple"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); } if(tab[i][j]==30){ c=CouleurParNom("red"); ChoisirCouleurDessin(c); RemplirArc(posx,posy,20,20,360,360); } if(tab[i][j]==50){ c=CouleurParNom("purple"); ChoisirCouleurDessin(c); RemplirArc(posx,posy,20,20,360,360); } } /*parcours du tableau pour rendu graphique*/ void Affiche(int tab[H][L]){ int i,j,posx=0,posy=0; for(i=0;i<=H;i++){ for(j=0;j<=L;j++){ AfficheTab(tab, posx, posy, i, j); posx=posx+20; } posx=0; posy=posy+20; } posx=0; posy=0; } int CliqueTouche(int defaut){ switch(Touche()){ case XK_Up: if(defaut!=0){ defaut=2; return defaut; } case XK_Down: if(defaut!=2){ defaut=0; return defaut; } case XK_Right: if(defaut!=1){ defaut=3; return defaut; } case XK_Left: if(defaut!=3){ defaut=1; return defaut; } default : return defaut; } } /*affichage du timer*/ void DessinerTimer(int n) { couleur c; char buf[100]; c=CouleurParNom("dark blue"); ChoisirCouleurDessin(c); RemplirRectangle(0,875,200,100); c=CouleurParNom("white"); ChoisirCouleurDessin(c); snprintf(buf,100,"time : %d",n); EcrireTexte(50,900,buf,2); } /*affichage du score*/ void DessinerScore(int n){ couleur c; char buf[100]; c=CouleurParNom("dark blue"); ChoisirCouleurDessin(c); RemplirRectangle(200,875,200,100); c=CouleurParNom("white"); ChoisirCouleurDessin(c); snprintf(buf,100,"score : %d",n); EcrireTexte(250,900,buf,2); } /*Mise en place de pastilles le plateau de jeu en fonction de ce que l'on veut placer */ int Pastille(int tab[H][L],int nb,int type){ int ia,ja; if(nb==0){ return 1; } srand(time(NULL)); while(nb!=0){ ia=rand()%40; ja=rand()%60; if(tab[ia][ja]==0){ if(type==1){ /*pommes*/ tab[ia][ja]=30; }else if(type==2){ /*pommes pour mur*/ tab[ia][ja]=50; }else if(type==3){ /*mur*/ tab[ia][ja]=40; } nb=nb-1; } } } /*initialisation du plateau de jeu*/ void init(int tab[H][L]){ /*creation page*/ InitialiserGraphique(); CreerFenetre(10,10,1700,1000); int i,j; couleur c; c=CouleurParNom("dark blue"); ChoisirCouleurDessin(c); RemplirRectangle(0,0,1700,1000); DessinerScore(0); /*initialisation de la grille a 0(vert)*/ for(i=1;isuivant){ n++; DessinerTimer(n); suivant=Microsecondes()+DELTA; } if(Microsecondes()>suivant3){ if(direc==0){ sxmin=sxmin+1; tab[sxmin][symin]=0; direc=VoirCase(tab,sxmin,symin,direc); } if(direc==1){ symin=symin-1; tab[sxmin][symin]=0; direc=VoirCase(tab,sxmin,symin,direc); } if(direc==2){ sxmin=sxmin-1; tab[sxmin][symin]=0; direc=VoirCase(tab,sxmin,symin,direc); } if(direc==3){ symin=symin+1; tab[sxmin][symin]=0; direc=VoirCase(tab,sxmin,symin,direc); } suivant3=Microsecondes()+DELTO; } /*deplacement tete*/ if(Microsecondes()>suivant2){ /*haut*/ if(direction==2){ if(VerifChemin(tab,sxmax-1,symax)==1){ sxmax=sxmax-1; tab[sxmax][symax]=1; }else if(VerifChemin(tab,sxmax-1,symax)==3){ sxmax=sxmax-1; tab[sxmax][symax]=1; point=point+5; DessinerScore(point); Pastille(tab,1,1); }else if(VerifChemin(tab,sxmax-1,symax)==2){ sxmax=sxmax-1; tab[sxmax][symax]=1; Pastille(tab,5,3); Pastille(tab,1,2); }else{ fin=1; } } /*droite*/ if(direction==3){ if(VerifChemin(tab,sxmax,symax+1)==1){ symax=symax+1; tab[sxmax][symax]=1; }else if(VerifChemin(tab,sxmax,symax+1)==3){ symax=symax+1; tab[sxmax][symax]=1; point=point+5; DessinerScore(point); Pastille(tab,1,1); }else if(VerifChemin(tab,sxmax,symax+1)==2){ symax=symax+1; tab[sxmax][symax]=1;; Pastille(tab,5,3); Pastille(tab,1,2); }else{ fin=1; } } /*gauche*/ if(direction==1){ if(VerifChemin(tab,sxmax,symax-1)==1){ symax=symax-1; tab[sxmax][symax]=1; } else if(VerifChemin(tab,sxmax,symax-1)==3){ symax=symax-1; tab[sxmax][symax]=1; point=point+5; DessinerScore(point); Pastille(tab,1,1); }else if(VerifChemin(tab,sxmax,symax-1)==2){ symax=symax-1; tab[sxmax][symax]=1;; Pastille(tab,5,3); Pastille(tab,1,2); }else{ fin=1; } } /*bas*/ if(direction==0){ if(VerifChemin(tab,sxmax+1,symax)==1){ sxmax=sxmax+1; tab[sxmax][symax]=1; } else if(VerifChemin(tab,sxmax+1,symax)==3){ sxmax=sxmax+1; tab[sxmax][symax]=1; point=point+5; DessinerScore(point); Pastille(tab,1,1); }else if(VerifChemin(tab,sxmax+1,symax)==2){ sxmax=sxmax+1; tab[sxmax][symax]=1;; Pastille(tab,5,3); Pastille(tab,1,2); }else{ fin=1; } } suivant2=Microsecondes()+DELTO; } if(fin==1){ return EXIT_SUCCESS; } } }