diff --git a/snake/Makefile b/snake/Makefile index 8e88d81..34f4da5 100755 --- a/snake/Makefile +++ b/snake/Makefile @@ -8,6 +8,7 @@ but : run OFILES = plateau_init.o \ fenetre.o \ + augmentation_serpent.o \ deplacement.o \ ajout_score.o \ score_init.o \ @@ -25,9 +26,11 @@ plateau_init.o : plateau_init.h fenetre.o : fenetre.h plateau_init.h -deplacement.o : deplacement.h +augmentation_serpent.o : augmentation_serpent.h -supp_queue.o : supp_queue.h +deplacement.o : deplacement.h supp_queue.h + +supp_queue.o : supp_queue.h augmentation_serpent.h ajout_score.o : ajout_score.h diff --git a/snake/augmentation_serpent.c b/snake/augmentation_serpent.c new file mode 100644 index 0000000..3f2ad0d --- /dev/null +++ b/snake/augmentation_serpent.c @@ -0,0 +1,77 @@ +/* Fonction qui sert à aggrandir la taille du serpent lorsque celui-ci mange une pomme + + Written by Yann KERAUDREN and Titouan LERICHE */ + + +#include <stdlib.h> +#include <stdio.h> +#include "augmentation_serpent.h" + + + +void augmentation_serpent (struct adresse* pointeur) { + + + int** corps_serpent = pointeur -> corps_serpent; + + unsigned short* indice_queue = pointeur -> indice_queue; + + unsigned char* tete = pointeur -> tete; + + unsigned short* taille_serpent = pointeur -> taille_serpent; + + int** corps_serpent2 = NULL; + + int i; + + + + /* augmentation de la taille du serpent */ + + *taille_serpent = *taille_serpent + 1; + + + + /* création d'un nouveau tableau */ + + corps_serpent2 = malloc( *taille_serpent * sizeof(int*)); + + for ( i = 0; i < *taille_serpent; i++) { + + corps_serpent2 = malloc( 2 * sizeof(int)); + + } + + + + /* attributions des anciennes cases du corps dans le nouveau tableau et ajout de la nouvelle tête au bonne endroit*/ + + for ( i = 0 ; i < *indice_queue; i++) { + + corps_serpent2[i] = corps_serpent[i] ; + + } + + corps_serpent2[*indice_queue][0] = tete[0]; + corps_serpent2[*indice_queue][1] = tete[1]; + + for ( i = *indice_queue; i < *taille_serpent - 1; i++) { + + corps_serpent2[i+1] = corps_serpent[i]; + + } + + *indice_queue = *indice_queue + 1; + + pointeur -> corps_serpent = corps_serpent2; + + + for ( i = 0; i < *taille_serpent - 1; i++) { + + free( corps_serpent[i]); + } + + free(corps_serpent); + + +} diff --git a/snake/augmentation_serpent.h b/snake/augmentation_serpent.h new file mode 100644 index 0000000..552cdd0 --- /dev/null +++ b/snake/augmentation_serpent.h @@ -0,0 +1,14 @@ + + +#ifndef AUGMENTATION_SERPENT_H + +#define AUGMENTATION_SERPENT_H +#include "plateau_init.h" + +void augmentation_serpent(struct adresse* pointeur); + + + + + +#endif /* AUGMENTATION_SERPENT_H */ diff --git a/snake/deplacement.c b/snake/deplacement.c index d04e40f..2a55388 100644 --- a/snake/deplacement.c +++ b/snake/deplacement.c @@ -14,7 +14,7 @@ -unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { +unsigned char deplacement (struct adresse* pointeur, unsigned char* sens, unsigned char* retard) { int** plateau = pointeur -> plateau; @@ -60,7 +60,6 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { else{ - plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; tete[1] = tete[1] - 1; @@ -74,6 +73,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { }else{ + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; + ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); @@ -81,7 +84,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { *sens = GAUCHE; - supp_queue(pointeur); + supp_queue(pointeur, retard); plateau[tete[0]][tete[1]] = 1; @@ -113,13 +116,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { } - - /* 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; @@ -132,6 +131,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { }else{ + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); @@ -139,7 +141,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { *sens = DROITE; - supp_queue(pointeur); + supp_queue(pointeur, retard); plateau[tete[0]][tete[1]] = 1; @@ -164,15 +166,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { } - - - - /* 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; @@ -183,7 +179,11 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { }else{ + + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); @@ -191,7 +191,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { *sens = HAUT; - supp_queue(pointeur); + supp_queue(pointeur, retard); plateau[tete[0]][tete[1]] = 1; @@ -216,13 +216,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { } - - /* 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; @@ -237,6 +234,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { }else{ + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); @@ -244,7 +244,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { *sens = BAS; - supp_queue(pointeur); + supp_queue(pointeur, retard); plateau[tete[0]][tete[1]] = 1; @@ -276,12 +276,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { } - /* 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; @@ -289,16 +287,20 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { if (plateau[tete[0]][tete[1]] == 1) { return 0; - + + }else{ - + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); - supp_queue(pointeur); + supp_queue(pointeur, retard); + plateau[tete[0]][tete[1]] = 1; return 1; @@ -319,11 +321,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { } - /* 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; @@ -334,12 +334,17 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { }else{ - + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; + + ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); - supp_queue(pointeur); + supp_queue(pointeur, retard); + plateau[tete[0]][tete[1]] = 1; return 1; @@ -361,13 +366,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { } - - - /* 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; @@ -379,12 +380,16 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { }else{ - + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; + ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); - supp_queue(pointeur); + supp_queue(pointeur, retard); + plateau[tete[0]][tete[1]] = 1; return 1; @@ -404,14 +409,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { } - - - - /* 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; @@ -423,12 +424,16 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens) { }else{ - + /* modificaton du plateau de jeu et affichage de la tête */ + + plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0; + ChoisirCouleurDessin(yellow); RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20); - supp_queue(pointeur); + supp_queue(pointeur, retard); + plateau[tete[0]][tete[1]] = 1; return 1; diff --git a/snake/deplacement.h b/snake/deplacement.h index 4cbaaef..98ca5bd 100644 --- a/snake/deplacement.h +++ b/snake/deplacement.h @@ -9,6 +9,6 @@ #define GAUCHE 3 #include "plateau_init.h" -unsigned char deplacement (struct adresse* pointeur, unsigned char* sens); +unsigned char deplacement (struct adresse* pointeur, unsigned char* sens, unsigned char* retard); #endif /* DEPLACEMENT_H */ diff --git a/snake/main.c b/snake/main.c index 79b811a..6f6bb3b 100644 --- a/snake/main.c +++ b/snake/main.c @@ -27,6 +27,7 @@ int main(void) { unsigned char* sens = NULL; + unsigned char* retard = NULL; unsigned char* tete = pointeur -> tete; @@ -40,6 +41,10 @@ int main(void) { *sens = 2; + retard = malloc(sizeof(unsigned char)); + + *retard = 0; + suivant = Microsecondes() + CYCLE; @@ -71,7 +76,7 @@ int main(void) { - jeu = deplacement(pointeur, sens); + jeu = deplacement(pointeur, sens, retard); suivant = Microsecondes() + CYCLE; @@ -117,6 +122,8 @@ int main(void) { free(compteur); + free(retard); + diff --git a/snake/supp_queue.c b/snake/supp_queue.c index dd3bae7..0c3d7a9 100644 --- a/snake/supp_queue.c +++ b/snake/supp_queue.c @@ -8,11 +8,12 @@ #include <graph.h> #include <time.h> #include "supp_queue.h" +#include "augmentation_serpent.h" -void supp_queue( struct adresse* pointeur ) { +void supp_queue( struct adresse* pointeur, unsigned char* retard ) { int** corps_serpent = pointeur -> corps_serpent; @@ -41,67 +42,47 @@ void supp_queue( struct adresse* pointeur ) { 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)); - - /* printf("%d %d \n", tete[0], tete[1]); + *retard = *retard + 2; - /* problème de mise en place de la tête du serpent au bonne endroit dans le corps */ + if (*retard >0 ) { - 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");*/ + augmentation_serpent(pointeur); + *retard = *retard - 1; + }else{ - /* apparition de la nouvelle pomme */ + /* 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; + + /* 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); + + } - 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); @@ -130,6 +111,6 @@ void supp_queue( struct adresse* pointeur ) { } - + diff --git a/snake/supp_queue.h b/snake/supp_queue.h index f97ac29..36e2df4 100644 --- a/snake/supp_queue.h +++ b/snake/supp_queue.h @@ -6,7 +6,7 @@ #include "plateau_init.h" -void supp_queue(struct adresse* pointeur) ; +void supp_queue(struct adresse* pointeur, unsigned char* retard) ; #endif /* SUPP_QUEUE_H */