passage du serpent en allocation dynamique pour régler le problème de pixel

This commit is contained in:
Marco ORFAO 2023-12-13 13:42:56 +01:00
parent f6a4f9b645
commit 4f84d03614
3 changed files with 17 additions and 15 deletions

View File

@ -4,12 +4,13 @@
typedef struct { typedef struct {
int x, y; int x, y;
} Segment; } Segment;
typedef Segment* Serpent;
void initialiserSerpent(Segment serpent[], int *longueur); void initialiserSerpent(Serpent serpent, int *longueur);
int gestionDeplacements(Segment serpent[], int *direction_x, int *direction_y); int gestionDeplacements(Serpent serpent, int *direction_x, int *direction_y);
int tuerSerpent(Segment serpent[], int longueur); int tuerSerpent(Serpent serpent, int longueur);
void mettreAJourSerpent(Segment serpent[], int *longueur, int *direction_x, int *direction_y); void mettreAJourSerpent(Serpent serpent, int *longueur, int *direction_x, int *direction_y);
void dessinerSerpent(Segment serpent[], int *longueur); void dessinerSerpent(Serpent serpent, int *longueur);
void attendreSerpent(unsigned long int microseconds); void attendreSerpent(unsigned long int microseconds);
#endif /*SERPENT_H*/ #endif /*SERPENT_H*/

View File

@ -23,13 +23,13 @@ void afficherScore(int score) {
} }
int mangerPomme(Segment serpent[], Pomme pomme) { int mangerPomme(Serpent serpent[], Pomme pomme) {
return serpent[0].x == pomme.x && serpent[0].y == pomme.y; return serpent[0]->x == pomme.x && serpent[0]->y == pomme.y;
} }
void jouer(int nbPommes, unsigned long int vitesse,int acceleration) { void jouer(int nbPommes, unsigned long int vitesse,int acceleration) {
int i; int i;
Segment serpent[2400]; Serpent serpent=(Serpent) malloc(2400*sizeof(int));
int longueur = 10; int longueur = 10;
int direction_x = 1; int direction_x = 1;
int direction_y = 0; int direction_y = 0;
@ -59,7 +59,7 @@ void jouer(int nbPommes, unsigned long int vitesse,int acceleration) {
for (i = 0; i < nbPommes; i++) { for (i = 0; i < nbPommes; i++) {
if (serpent[0].x == pommes[i].x && serpent[0].y == pommes[i].y) { if (serpent[0].x == pommes[i].x && serpent[0].y == pommes[i].y) {
longueur += 2; longueur += 1000;
score += 5; score += 5;
if (vitesse >= 15000) { if (vitesse >= 15000) {
vitesse -= 40; vitesse -= 40;
@ -78,6 +78,7 @@ void jouer(int nbPommes, unsigned long int vitesse,int acceleration) {
/* Attend le choix du joueur après le game over */ /* Attend le choix du joueur après le game over */
attendreChoixGameOver(); attendreChoixGameOver();
free(serpent);
return; return;
} }

View File

@ -8,7 +8,7 @@
#define HAUTEUR_GRILLE 40 #define HAUTEUR_GRILLE 40
void initialiserSerpent(Segment serpent[], int *longueur) { void initialiserSerpent(Serpent serpent, int *longueur) {
int i; int i;
int centreX = LARGEUR_GRILLE / 2; int centreX = LARGEUR_GRILLE / 2;
int centreY = HAUTEUR_GRILLE / 2; int centreY = HAUTEUR_GRILLE / 2;
@ -21,7 +21,7 @@ void initialiserSerpent(Segment serpent[], int *longueur) {
*longueur = 10; *longueur = 10;
} }
int gestionDeplacements(Segment serpent[], int *direction_x, int *direction_y) { int gestionDeplacements(Serpent serpent, int *direction_x, int *direction_y) {
int touche; int touche;
if (ToucheEnAttente()) { if (ToucheEnAttente()) {
touche = Touche(); touche = Touche();
@ -46,7 +46,7 @@ int gestionDeplacements(Segment serpent[], int *direction_x, int *direction_y) {
return 0; return 0;
} }
int tuerSerpent(Segment serpent[], int longueur) { int tuerSerpent(Serpent serpent, int longueur) {
int i; int i;
/*Vérifier si la tête du serpent est sortie de la grille après le déplacement*/ /*Vérifier si la tête du serpent est sortie de la grille après le déplacement*/
if (serpent[0].x < 0 || serpent[0].x >= LARGEUR_GRILLE || serpent[0].y < 0 || serpent[0].y >= HAUTEUR_GRILLE) { if (serpent[0].x < 0 || serpent[0].x >= LARGEUR_GRILLE || serpent[0].y < 0 || serpent[0].y >= HAUTEUR_GRILLE) {
@ -65,7 +65,7 @@ int tuerSerpent(Segment serpent[], int longueur) {
void mettreAJourSerpent(Segment serpent[], int *longueur, int *direction_x, int *direction_y) { void mettreAJourSerpent(Serpent serpent, int *longueur, int *direction_x, int *direction_y) {
int i; int i;
int ancienX = serpent[*longueur - 1].x; int ancienX = serpent[*longueur - 1].x;
int ancienY = serpent[*longueur - 1].y; int ancienY = serpent[*longueur - 1].y;
@ -91,7 +91,7 @@ void mettreAJourSerpent(Segment serpent[], int *longueur, int *direction_x, int
} }
void dessinerSerpent(Segment serpent[], int *longueur) { void dessinerSerpent(Serpent serpent, int *longueur) {
int i; int i;
for (i = 0; i < *longueur; ++i) { for (i = 0; i < *longueur; ++i) {
ChoisirCouleurDessin(CouleurParNom("yellow")); ChoisirCouleurDessin(CouleurParNom("yellow"));
@ -104,4 +104,4 @@ void attendreSerpent(unsigned long int microseconds) {
while (Microsecondes() < attente_jusqu_a) { while (Microsecondes() < attente_jusqu_a) {
/*Attendre jusqu'au temps données en paramètre de la fonction*/ /*Attendre jusqu'au temps données en paramètre de la fonction*/
} }
} }