ajout de la fonction de manger des pommes

This commit is contained in:
2023-12-17 04:09:38 +01:00
parent ec6bc5987d
commit cc1e72bee9
8 changed files with 165 additions and 97 deletions

View File

@@ -19,11 +19,11 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
int** plateau = pointeur -> plateau; int** plateau = pointeur -> plateau;
signed char* tete = pointeur -> tete; unsigned char* tete = pointeur -> tete;
unsigned int** corps_serpent = pointeur -> corps_serpent; int** corps_serpent = pointeur -> corps_serpent;
unsigned int* indice_queue = pointeur -> indice_queue; unsigned short* indice_queue = pointeur -> indice_queue;
int touche; int touche;
@@ -48,12 +48,12 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
plateau[tete[0]][tete[1]] = 0; plateau[tete[0]][tete[1]] = 0;
plateau[tete[0]][tete[1] - 1] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[1] = tete[1] - 1; tete[1] = tete[1] - 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -62,6 +62,10 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur); supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return; return;
} }
@@ -70,12 +74,12 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
plateau[tete[0]][tete[1]] = 0; plateau[tete[0]][tete[1]] = 0;
plateau[tete[0]][tete[1] + 1] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[1] = tete[1] + 1; tete[1] = tete[1] + 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -84,6 +88,8 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur); supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return; return;
} }
@@ -91,12 +97,12 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
plateau[tete[0]][tete[1]] = 0; plateau[tete[0]][tete[1]] = 0;
plateau[tete[0] - 1][tete[1]] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[0] = tete[0] - 1; tete[0] = tete[0] - 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -105,6 +111,8 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur); supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return; return;
} }
@@ -112,12 +120,12 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
plateau[tete[0]][tete[1]] = 0; plateau[tete[0]][tete[1]] = 0;
plateau[tete[0] + 1][tete[1]] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[0] = tete[0] + 1; tete[0] = tete[0] + 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -126,6 +134,8 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur); supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return; return;
} }
@@ -137,72 +147,77 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
if ( *sens == BAS) { if ( *sens == BAS) {
plateau[tete[0] + 1][tete[1]] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[0] = tete[0] + 1; tete[0] = tete[0] + 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
} }
if ( *sens == HAUT) { if ( *sens == HAUT) {
plateau[tete[0] - 1][tete[1]] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[0] = tete[0] - 1; tete[0] = tete[0] - 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
} }
if ( *sens == DROITE) { if ( *sens == DROITE) {
plateau[tete[0]][tete[1] + 1] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[1] = tete[1] + 1; tete[1] = tete[1] + 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
} }
if ( *sens == GAUCHE) { if ( *sens == GAUCHE) {
plateau[tete[0]][tete[1] - 1] = 1;
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[1] = tete[1] - 1; tete[1] = tete[1] - 1;
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
} }
/* mise à jour de la position de queue dans le plateau et sur le plateau */
supp_queue( pointeur);
} }
} }

View File

@@ -6,15 +6,16 @@
#include <stdlib.h> #include <stdlib.h>
#include <graph.h> #include <graph.h>
#include "plateau_init.h" #include "plateau_init.h"
#include "fenetre.h"
int start (struct adresse* pointeur) { void start (struct adresse* pointeur) {
couleur green, grey, yellow, red, black, white; couleur green, grey, yellow, red, black, white;
int** tableau = pointeur -> plateau; int** plateau = pointeur -> plateau;
int i, j; int i, j;
@@ -86,14 +87,14 @@ int start (struct adresse* pointeur) {
for (i = 0; i < LIGNES; i++) { for (i = 0; i < LIGNES; i++) {
for (j = 0; j < COLONNES; j++) { for (j = 0; j < COLONNES; j++) {
if ( tableau[i][j] == 0) { if ( plateau[i][j] == 0) {
green = CouleurParComposante(50,205,50); green = CouleurParComposante(50,205,50);
ChoisirCouleurDessin(green); ChoisirCouleurDessin(green);
RemplirRectangle(20*(j+1),20*(i+1),20,20); RemplirRectangle(20*(j+1),20*(i+1),20,20);
} }
if ( tableau[i][j] == 1) { if ( plateau[i][j] == 1) {
yellow = CouleurParComposante(255,255,0); yellow = CouleurParComposante(255,255,0);
ChoisirCouleurDessin(yellow); ChoisirCouleurDessin(yellow);
@@ -101,7 +102,7 @@ int start (struct adresse* pointeur) {
} }
if ( tableau[i][j] == 2) { if ( plateau[i][j] == 2) {
red = CouleurParComposante(255,0,0); red = CouleurParComposante(255,0,0);
ChoisirCouleurDessin(red); ChoisirCouleurDessin(red);
@@ -114,23 +115,6 @@ int start (struct adresse* pointeur) {
/* déallocation du tableau */
for ( i = 0; i < LIGNES; i++) {
free(tableau[i]);
}
free(tableau);
return EXIT_SUCCESS;
} }

Binary file not shown.

View File

@@ -1,9 +1,11 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <graph.h> #include <graph.h>
#include "fenetre.h" #include "fenetre.h"
#include "plateau_init.h" #include "plateau_init.h"
#include "deplacement.h" #include "deplacement.h"
#include "score_init.h"
#define CYCLE 200000L #define CYCLE 200000L
@@ -19,7 +21,7 @@ int main(void) {
int i = 0; int i = 0;
unsigned int* indice_queue = pointeur -> indice_queue; unsigned short* indice_queue = pointeur -> indice_queue;
unsigned char* sens = NULL; unsigned char* sens = NULL;
@@ -51,31 +53,27 @@ int main(void) {
start(pointeur); start(pointeur);
compteur = score_init(); compteur = score_init();
while ( jeu = 1) { while ( jeu == 1) {
if (Microsecondes() > suivant) { if (Microsecondes() > suivant) {
printf("%u %u\n", pointeur -> corps_serpent[*indice_queue][0], pointeur -> corps_serpent[*indice_queue][1]); printf("%d %d\n", pointeur -> corps_serpent[*indice_queue][0], pointeur -> corps_serpent[*indice_queue][1]);
printf("[%hhu %hhu]\n", tete[0], tete[1]); printf("[%hhu %hhu]\n", tete[0], tete[1]);
deplacement(pointeur, sens); deplacement(pointeur, sens);
suivant = Microsecondes() + CYCLE; suivant = Microsecondes() + CYCLE;
} }
} }
@@ -86,12 +84,13 @@ int main(void) {
for ( i = 0; i < LIGNES; i++) { for ( i = 0; i < LIGNES; i++) {
free(pointeur->plateau[i]); free(pointeur -> plateau[i]);
} }
free(pointeur -> plateau);
for ( i =0; i < TAILLE_SERPENT; i++) { for ( i = 0; i < TAILLE_SERPENT; i++) {
free(pointeur -> corps_serpent[i]); free(pointeur -> corps_serpent[i]);
@@ -100,9 +99,6 @@ int main(void) {
free(pointeur -> corps_serpent); free(pointeur -> corps_serpent);
free(pointeur -> plateau);
free(pointeur -> tete); free(pointeur -> tete);
free(pointeur -> indice_queue); free(pointeur -> indice_queue);
@@ -120,7 +116,6 @@ int main(void) {
Touche(); Touche();
FermerGraphique(); FermerGraphique();

View File

@@ -15,10 +15,10 @@ struct adresse* plateau_init(void) {
int ligne_pomme, colonne_pomme, i; int ligne_pomme, colonne_pomme, i;
unsigned char* tete = NULL; unsigned char* tete = NULL;
unsigned int* indice_queue = NULL; unsigned short* indice_queue = NULL;
unsigned int* taille_serpent = NULL; unsigned short* taille_serpent = NULL;
unsigned int** corps_serpent = NULL; int** corps_serpent = NULL;
int** plateau = NULL; int** plateau = NULL;
@@ -42,9 +42,9 @@ struct adresse* plateau_init(void) {
/* allocation du tableau tete et queue */ /* allocation du tableau tete et queue */
tete = malloc(2*sizeof(unsigned char)); tete = malloc(2 * sizeof(unsigned char));
indice_queue = malloc(sizeof(unsigned int)); indice_queue = malloc(sizeof(unsigned short));
@@ -65,11 +65,11 @@ struct adresse* plateau_init(void) {
/* allocation du corps du serpent */ /* allocation du corps du serpent */
corps_serpent = malloc(TAILLE_SERPENT * sizeof(unsigned int*)); corps_serpent = malloc(TAILLE_SERPENT * sizeof(int*));
for ( i = 0; i < TAILLE_SERPENT; i++) { for ( i = 0; i < TAILLE_SERPENT; i++) {
corps_serpent[i] = malloc( 2 * sizeof(unsigned int)); corps_serpent[i] = malloc( 2 * sizeof(int));
} }
@@ -77,7 +77,7 @@ struct adresse* plateau_init(void) {
/* allocation de la taille du serpent */ /* allocation de la taille du serpent */
taille_serpent = malloc(sizeof(unsigned int)); taille_serpent = malloc(sizeof(unsigned short));
/* positionnement du serpent et marquage de la tete et la queue */ /* positionnement du serpent et marquage de la tete et la queue */

View File

@@ -15,10 +15,10 @@
struct adresse { struct adresse {
int** plateau; int** plateau;
unsigned int** corps_serpent; int** corps_serpent;
unsigned int* taille_serpent; unsigned short* taille_serpent;
unsigned char* tete; unsigned char* tete;
unsigned int* indice_queue; unsigned short* indice_queue;
}; };

View File

@@ -9,10 +9,13 @@
short int* score_init(void) { short int* score_init(void) {
short int* compteur = NULL; short int* compteur = NULL;
char a[20];
compteur = malloc(sizeof(short int)); compteur = malloc(sizeof(short int));
*compteur = 0; *compteur = 0;
char a[20];
sprintf(a, "%d", *compteur); sprintf(a, "%d", *compteur);

View File

@@ -6,6 +6,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <graph.h> #include <graph.h>
#include <time.h>
#include "supp_queue.h" #include "supp_queue.h"
@@ -14,19 +15,81 @@
void supp_queue( struct adresse* pointeur ) { void supp_queue( struct adresse* pointeur ) {
unsigned int** corps_serpent = pointeur -> corps_serpent; int** corps_serpent = pointeur -> corps_serpent;
unsigned int* taille_serpent = pointeur -> taille_serpent; int** plateau = pointeur -> plateau;
unsigned short* taille_serpent = pointeur -> taille_serpent;
unsigned char* tete = pointeur -> tete; unsigned char* tete = pointeur -> tete;
unsigned int* indice_queue = pointeur -> indice_queue; unsigned short* indice_queue = pointeur -> indice_queue;
int ligne_pomme, colonne_pomme;
couleur green, red;
srand(time(NULL));
couleur green;
/* teste si le serpent mange une pomme */
if (plateau[tete[0]][tete[1]] == 2 ) {
/* augmentation de la taille du serpent */
*taille_serpent = *taille_serpent + 1;
corps_serpent = realloc( corps_serpent, *taille_serpent * sizeof(int*));
pointeur -> corps_serpent = corps_serpent;
corps_serpent[*taille_serpent - 1] = malloc( 2 * sizeof(int));
corps_serpent[*taille_serpent - 1][0] = tete[0];
corps_serpent[*taille_serpent - 1][1] = tete[1];
/* apparition de la nouvelle pomme */
ligne_pomme = rand() % 40;
colonne_pomme = rand() % 60;
/* teste pour ne pas faire apparaître la pomme sur une case déjà occupée */
while (plateau[ligne_pomme][colonne_pomme] == 2 || plateau[ligne_pomme][colonne_pomme] == 1) {
ligne_pomme = rand() % 40;
colonne_pomme = rand() % 60;
}
plateau[ligne_pomme][colonne_pomme] = 2;
red = CouleurParComposante(255,0,0);
ChoisirCouleurDessin(red);
RemplirRectangle(20*(colonne_pomme + 1),20*(ligne_pomme + 1),20,20);
}
else {
green = CouleurParComposante(50,205,50); green = CouleurParComposante(50,205,50);
ChoisirCouleurDessin(green); ChoisirCouleurDessin(green);
@@ -38,6 +101,14 @@ void supp_queue( struct adresse* pointeur ) {
*indice_queue = *indice_queue + 1; *indice_queue = *indice_queue + 1;
}
if ( *indice_queue == *taille_serpent ) { if ( *indice_queue == *taille_serpent ) {
*indice_queue = 0; *indice_queue = 0;