void printScreen(int snake[TAILLE_SNAKE][2], int len_snake, int pommes[20][2], int len_pommes, unsigned long int time, int score){ EffacerEcran(CouleurParNom("black")); printTerrain(snake, len_snake, pommes, len_pommes); ChoisirCouleurDessin(CouleurParNom("white")); printScore(score); printTime(time); CopierZone(1,0,0,0,60*TAILLE_CASE+2*BORD,40*TAILLE_CASE+BORD+40,0,0); }
void AfficherScore(int score) { char scoreTab[8] = {'0','0','0','0','0','0','0','\0'}; sprintf(scoreTab,"%07d",score); ChoisirCouleurDessin(CouleurParNom("black")); RemplirRectangle(500,NB_PIXEL_Y_JEU,340,54); ChoisirCouleurDessin(CouleurParNom("white")); EcrireTexte(740,590,scoreTab,2); }
void AfficherTemps(int seconde, int minute, int carre, int* score) // Fonction qui affiche le temps { char tempsTab[6] = {}; sprintf(tempsTab,"%02d:%02d ",minute,seconde); ChoisirCouleurDessin(CouleurParNom("black")); RemplirRectangle(0,NB_PIXEL_Y_JEU,500,54); ChoisirCouleurDessin(CouleurParNom("white")); EcrireTexte(30,590,tempsTab,2); }
void AfficherSerpent(Coordonnees* serpent, int tailleSerpent, int carre, Coordonnees queue){ int i = 0; usleep(60000); // Vitesse du serpent ChoisirCouleurDessin(CouleurParNom("white")); RemplirRectangle(queue.x*carre,queue.y*carre,carre,carre); ChoisirCouleurDessin(CouleurParComposante(27,94,32)); // Vert fonce RemplirRectangle(serpent[0].x*carre,serpent[0].y*carre,carre,carre); for(i = 1; i < tailleSerpent; i++) { ChoisirCouleurDessin(CouleurParNom("green")); // Vert clair RemplirRectangle(serpent[i].x*carre,serpent[i].y*carre,carre,carre); } }
void AfficherSerpentLC(Serpent* serpent, int carre, Coordonnees queue){ EltSerpent* s; usleep(VITESSE_SERPENT); // Vitesse du serpent ChoisirCouleurDessin(CouleurParNom("white")); RemplirRectangle(queue.x*carre,queue.y*carre,carre,carre); for(s = serpent->tete; s ->suivant!= NULL; s = s->suivant) { ChoisirCouleurDessin(CouleurParNom("green")); // Vert clair RemplirRectangle(s->element.x*carre,s->element.y*carre,carre,carre); } ChoisirCouleurDessin(CouleurParComposante(27,94,32)); // Vert fonce RemplirRectangle(s->element.x*carre,s->element.y*carre,carre,carre); }
int CreerPomme(int carre, Pomme* tabPomme, Obstacles* tabObstacle, int tailleSerpent, Coordonnees* serpent){ // Affiche une pomme au hasard sur la map int i,j,k; srand(time(NULL)); for(i = 0; i < NB_POMME; i++) { if(tabPomme[i].flagP == 0) // Si il n'y a pas de pomme sur la map { tabPomme[i].flagP = 1; tabPomme[i].x = (rand() % (MAXGRILLEX - MINGRILLE + 1)) + MINGRILLE; tabPomme[i].y = (rand() % (MAXGRILLEY - MINGRILLE + 1)) + MINGRILLE; for(k = 0; k < NB_OBSTACLE; k++) { while(tabPomme[i].x == tabObstacle[k].x && tabPomme[i].y == tabObstacle[k].y) { tabPomme[i].x = (rand() % (MAXGRILLEX - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 60 sachant que la grille est de 60 par 40 tabPomme[i].y = (rand() % (MAXGRILLEY - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 40 for(j = 1; j < tailleSerpent; j++) { if(tabPomme[i].x == serpent[j].x && tabPomme[i].x == serpent[j].y) { tabPomme[i].x = (rand() % (MAXGRILLEX - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 60 sachant que la grille est de 60 par 40 tabPomme[i].y = (rand() % (MAXGRILLEY - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 40 } } } } ChoisirCouleurDessin(CouleurParNom("red")); RemplirRectangle(tabPomme[i].x*carre,tabPomme[i].y*carre,carre,carre); // On multiplie les valeurs aléatoires obtenues à la taille d'un carré afin d'obtenir une position aléatoire d'un carré } } }
void CreerObstacles(int carre, Obstacle* tabObstacle){ // Affiche une pomme au hasard sur la map int i; for(i = 0; i < NB_OBSTACLE; i++) { tabObstacle[i].x = (rand() % (MAXGRILLEX - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 60 sachant que la grille est de 60 par 40 tabObstacle[i].y = (rand() % (MAXGRILLEY - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 40 ChoisirCouleurDessin(CouleurParNom("black")); RemplirRectangle(tabObstacle[i].x*carre,tabObstacle[i].y*carre,carre,carre); // On multiplie les valeurs aléatoires obtenues à la taille d'un carré afin d'obtenir une position aléatoire d'un carré } }
void DessinerGrille(int carre) // Fonction qui dessine la grille du jeu (60x40) { ChoisirCouleurDessin(CouleurParNom("black")); int i; for(i = 0; i <= NB_PIXEL_X_JEU; i = i+carre) { DessinerSegment(i,0,i,NB_PIXEL_Y_JEU); } for(i = 0; i <= NB_PIXEL_Y_JEU; i = i+carre) { DessinerSegment(0,i,NB_PIXEL_X_JEU,i); } }
int CreerPomme(int carre, Pomme* tabPomme, Obstacle* tabObstacle){ // Affiche une pomme au hasard sur la map int i,j,k; for(i = 0; i < NB_POMME; i++) { if(tabPomme[i].flagP == 0) // Si il n'y a pas de pomme sur la map { tabPomme[i].flagP = 1; tabPomme[i].x = (rand() % (MAXGRILLEX - MINGRILLE + 1)) + MINGRILLE; tabPomme[i].y = (rand() % (MAXGRILLEY - MINGRILLE + 1)) + MINGRILLE; for(k = 0; k < NB_OBSTACLE; k++) { while(tabPomme[i].x == tabObstacle[k].x && tabPomme[i].y == tabObstacle[k].y) { tabPomme[i].x = (rand() % (MAXGRILLEX - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 60 sachant que la grille est de 60 par 40 tabPomme[i].y = (rand() % (MAXGRILLEY - MINGRILLE + 1)) + MINGRILLE; // Permet d'obtenir une valeur aléatoire entre 0 et 40 } } } ChoisirCouleurDessin(CouleurParNom("red")); RemplirRectangle(tabPomme[i].x*carre,tabPomme[i].y*carre,carre,carre); } }
void NettoyerEcran(){ ChoisirCouleurDessin(CouleurParNom("white")); RemplirRectangle(0,0,NB_PIXEL_X_JEU,NB_PIXEL_Y_JEU); }
void printScreen(int snake[300][2], int len_snake, int pommes[20][2], int len_pommes, int time, int score){ EffacerEcran(CouleurParNom("black")); printTerrain(snake, len_snake, pommes, len_pommes); printScore(score); printTime(time); }
void AfficherGameOver(){ ChoisirCouleurDessin(CouleurParNom("red")); EcrireTexte(340,260,"Vous avez perdu !",2); EcrireTexte(120,290,"Appuyez sur n'importe quelle touche pour recommencer",2); EcrireTexte(260,320,"Appuyez sur Echap pour quitter",2); }
int main() // Fonction principale { int carre = NB_PIXEL_X_JEU/60; unsigned long suivant; suivant= Microsecondes()+delta; int i = 0; int etatJeu = 1; int score = 0; int direction = 0; int seconde = 0; int minute = 0; int tailleSerpent = 10; Coordonnees serpent[20]; serpent[0].x = CENTRE_X_GRILLE; serpent[0].y = CENTRE_Y_GRILLE; Coordonnees queue; Pomme tabPomme[NB_POMME] = {}; Obstacles tabObstacle[NB_OBSTACLE] = {}; Coordonnees tete; InitialiserGraphique(); CreerFenetre(10,10,NB_PIXEL_X_FENETRE,NB_PIXEL_Y_FENETRE); while(etatJeu){ InitialiserVariable(&score,&direction,&tailleSerpent,&seconde,&minute,serpent); for (i = 0 ; i < NB_POMME; i++) // Initialisation du serpent { tabPomme[i].x = -1; tabPomme[i].y = -1; tabPomme[i].flagP = 0; } for (i = 1 ; i < TAILLE_MAX_SNAKE; i++) // Initialisation du serpent { serpent[i].x = -1; serpent[i].y = -1; } NettoyerEcran(); RemplirRectangle(0,NB_PIXEL_Y_JEU,1080,carre*3); // Bande noir en bas for(i = 0; i < tailleSerpent; i++) { ChoisirCouleurDessin(CouleurParComposante(27,94,32)); RemplirRectangle(serpent[i].x*carre,serpent[i].y*carre,carre,carre); } AfficherScore(score); AfficherTemps(seconde,minute,carre,&score); CreerObstacles(carre,tabObstacle); while(ToucheEnAttente() != 1) { } while(1)//Boucle principale { // DessinerGrille(carre); direction = DirectionSerpent(direction); if (Microsecondes()>suivant) // Si une seconde est passé { suivant=Microsecondes()+delta; seconde++; if(seconde == 60){ seconde = 0; minute++; } AfficherTemps(seconde,minute,carre,&score); } queue = DeplacerSerpent(carre,direction,serpent,tailleSerpent); tete = serpent[0]; tailleSerpent = VerifieManger(&score,tete,tabPomme,tailleSerpent); CreerPomme(carre,tabPomme,tabObstacle,tailleSerpent,serpent); if(VerifieCollisionSerpent(tete,serpent,tailleSerpent,tabObstacle)){// Touche un mur => GAME OVER break; } AfficherSerpent(serpent,tailleSerpent,carre,queue); } while(ToucheEnAttente() != 1) { ChoisirCouleurDessin(CouleurParNom("red")); EcrireTexte(340,260,"Vous avez perdu !",2); EcrireTexte(120,290,"Appuyez sur n'importe quelle touche pour recommencer",2); EcrireTexte(260,320,"Appuyez sur Echap pour quitter",2); } if(Touche() == XK_Escape) { break; } } FermerGraphique(); return EXIT_SUCCESS; }