ajout de la délimitation du terrain de jeu et coupure du jeu si le serpent se rentre dedans

This commit is contained in:
Yann KERAUDREN 2023-12-18 00:30:29 +01:00
parent cc1e72bee9
commit bf8ac1a5fd
4 changed files with 321 additions and 83 deletions

@ -14,7 +14,7 @@
void deplacement (struct adresse* pointeur, unsigned char* sens) {
unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) {
int** plateau = pointeur -> plateau;
@ -46,7 +46,18 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
if (touche == XK_Left) {
plateau[tete[0]][tete[1]] = 0;
/* test de dépassement des limites du plateau de jeu */
if ( tete[1] == 0) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else{
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
@ -54,6 +65,16 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
tete[1] = tete[1] - 1;
/* test si le serpent se rentre dedans */
if (plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@ -66,13 +87,35 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
return;
return 1;
}
}
}
if (touche == XK_Right) {
plateau[tete[0]][tete[1]] = 0;
/* test de dépassement des limites du plateau de jeu */
if (tete[1] == COLONNES - 1) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else{
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
@ -80,6 +123,16 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
tete[1] = tete[1] + 1;
/* test si le serpent se rentre dedans */
if ( plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@ -90,12 +143,32 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
plateau[tete[0]][tete[1]] = 1;
return;
return 1;
}
}
}
if (touche == XK_Up) {
plateau[tete[0]][tete[1]] = 0;
/* test de dépassement des limites du plateau de jeu */
if (tete[0] == 0) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else{
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
@ -103,6 +176,15 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
tete[0] = tete[0] - 1;
/* test si le serpent se rentre dedans */
if (plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@ -113,12 +195,30 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
plateau[tete[0]][tete[1]] = 1;
return;
return 1;
}
}
}
if (touche == XK_Down) {
plateau[tete[0]][tete[1]] = 0;
/* test de dépassement des limites du plateau de jeu */
if (tete[0] == LIGNES - 1) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else{
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
@ -126,6 +226,18 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
tete[0] = tete[0] + 1;
/* test si le serpent se rentre dedans */
if (plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@ -136,22 +248,50 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
plateau[tete[0]][tete[1]] = 1;
return;
return 1;
}
}
}
}
else {
if ( *sens == BAS) {
/* test de dépassement des limites du plateau de jeu */
if ( tete[0] == LIGNES - 1 ) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else {
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[0] = tete[0] + 1;
/* test si le serpent se rentre dedans */
if (plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
@ -161,15 +301,39 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
if ( *sens == HAUT) {
/* test de dépassement des limites du plateau de jeu */
if ( tete[0] == 0) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else{
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[0] = tete[0] - 1;
/* test si le serpent se rentre dedans */
if (plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@ -178,6 +342,11 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
@ -185,11 +354,32 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
if ( *sens == DROITE) {
/* test de dépassement des limites du plateau de jeu */
if ( tete[1] == COLONNES - 1) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else{
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[1] = tete[1] + 1;
/* test si le serpent se rentre dedans */
if (plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@ -197,16 +387,42 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
if ( *sens == GAUCHE) {
/* test de dépassement des limites du plateau de jeu */
if (tete[1] == 0) {
return 0;
}
/* modificaton du plateau de jeu et affichage de la tête */
else {
plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
tete[1] = tete[1] - 1;
/* test si le serpent se rentre dedans */
if (plateau[tete[0]][tete[1]] == 1) {
return 0;
}else{
ChoisirCouleurDessin(yellow);
RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@ -214,6 +430,11 @@ void deplacement (struct adresse* pointeur, unsigned char* sens) {
supp_queue(pointeur);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
}

@ -9,6 +9,6 @@
#define GAUCHE 3
#include "plateau_init.h"
void deplacement (struct adresse* pointeur, unsigned char* sens);
unsigned char deplacement (struct adresse* pointeur, unsigned char* sens);
#endif /* DEPLACEMENT_H */

@ -16,9 +16,11 @@ int main(void) {
struct adresse* pointeur = plateau_init();
int** plateau = pointeur -> plateau;
short int* compteur = NULL;
int i = 0;
int i = 0, j;
unsigned short* indice_queue = pointeur -> indice_queue;
@ -62,18 +64,21 @@ int main(void) {
if (Microsecondes() > suivant) {
printf("%d %d\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);
jeu = deplacement(pointeur, sens);
suivant = Microsecondes() + CYCLE;
}
}

@ -1,4 +1,4 @@
/* Fonction qui mets à jour la position de la queue en fonction des déplacement du serpent
/* Fonction qui efface la queue du serpent lorsqu'il se déplace et augmente la taille du serpent lorsqu'il mange une pomme
Written by Yann KERAUDREN and Titouan LERICHE */
@ -26,7 +26,7 @@ void supp_queue( struct adresse* pointeur ) {
unsigned short* indice_queue = pointeur -> indice_queue;
int ligne_pomme, colonne_pomme;
int ligne_pomme, colonne_pomme, i;
@ -37,8 +37,6 @@ void supp_queue( struct adresse* pointeur ) {
/* teste si le serpent mange une pomme */
if (plateau[tete[0]][tete[1]] == 2 ) {
@ -53,9 +51,23 @@ void supp_queue( struct adresse* pointeur ) {
corps_serpent[*taille_serpent - 1] = malloc( 2 * sizeof(int));
/* printf("%d %d \n", tete[0], tete[1]);
/* problème de mise en place de la tête du serpent au bonne endroit dans le corps */
corps_serpent[*taille_serpent - 1][0] = tete[0];
corps_serpent[*taille_serpent - 1][1] = tete[1];
/*for (i = 0; i < *taille_serpent; i++) {
printf("[%d %d] ", corps_serpent[i][0], corps_serpent[i][1]);
}
printf("\n");*/