#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); } if(tab[i][j]==1||tab[i][j]==6||tab[i][j]==7||tab[i][j]==8||tab[i][j]==9){ c=CouleurParNom("dark orange"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); } if(tab[i][j]==30){ c=CouleurParNom("light green"); ChoisirCouleurDessin(c); RemplirRectangle(posx,posy,20,20); } } /*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; } /*test des touches pour le deplacement*/ 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("white"); ChoisirCouleurDessin(c); RemplirRectangle(0,875,200,100); c=CouleurParNom("black"); ChoisirCouleurDessin(c); snprintf(buf,100,"time : %d",n); EcrireTexte(50,900,buf,2); } void DessinerScore(int n){ couleur c; char buf[100]; c=CouleurParNom("white"); ChoisirCouleurDessin(c); RemplirRectangle(0,875,200,100); c=CouleurParNom("black"); ChoisirCouleurDessin(c); snprintf(buf,100,"score : %d",n); EcrireTexte(250,900,buf,2); } /*Initialisation des pastilles dans le plateau de jeu*/ int Pastille(int tab[H][L],int nb){ 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){ tab[ia][ja]=30; 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; /*initialisation de la grille a 0(vert)*/ for(i=1;isuivant){ n++; DessinerTimer(n); suivant=Microsecondes()+DELTA; } /*deplacement tete*/ if(Microsecondes()>suivant2){ /*haut*/ if(direction==2){ if(VerifChemin(tab,sxmax-1,symax)==1){ sxmax=sxmax-1; tab[sxmax][symax]=1; }else{ fin=1; } } /*droite*/ if(direction==3){ if(VerifChemin(tab,sxmax,symax+1)==1){ symax=symax+1; tab[sxmax][symax]=1; }else{ fin=1; } } /*gauche*/ if(direction==1){ if(VerifChemin(tab,sxmax,symax-1)==1){ symax=symax-1; tab[sxmax][symax]=1; } else{ fin=1; } } /*bas*/ if(direction==0){ if(VerifChemin(tab,sxmax+1,symax)==1){ sxmax=sxmax+1; tab[sxmax][symax]=1; } else{ fin=1; } } suivant2=Microsecondes()+DELTO; } if(fin==1){ return EXIT_SUCCESS; } } }