496 lines
7.0 KiB
C

/* Fonctions qui prend en argument le plateau de jeu et le modifie en fonction des déplacements du serpent
Written by Yann KERAUDREN and Titouan LERICHE */
#include <stdlib.h>
#include <stdio.h>
#include <graph.h>
#include "plateau_init.h"
#include "supp_queue.h"
#include "deplacement.h"
unsigned char deplacement (struct adresse* pointeur, unsigned char* sens, unsigned char* retard, short int* compteur, unsigned long* acceleration, int numsprite) {
int** plateau = pointeur -> plateau;
unsigned char* tete = pointeur -> tete;
int** corps_serpent = pointeur -> corps_serpent;
unsigned short* indice_queue = pointeur -> indice_queue;
int touche;
couleur green, yellow;
green = CouleurParComposante(50,205,50);
yellow = CouleurParComposante(255,255,0);
/* affectations des commandes aux touches du jeu */
if (ToucheEnAttente() == 1) {
touche = Touche();
if (touche == XK_Left) {
/* 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{
tete[1] = tete[1] - 1;
/* test si le serpent se rentre dedans */
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);
*sens = GAUCHE;
supp_queue(pointeur, retard, compteur, acceleration, numsprite);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
if (touche == XK_Right) {
/* test de dépassement des limites du plateau de jeu */
if (tete[1] == COLONNES - 1) {
return 0;
}
else{
tete[1] = tete[1] + 1;
/* test si le serpent se rentre dedans */
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);
*sens = DROITE;
supp_queue(pointeur, retard, compteur, acceleration, numsprite);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
if (touche == XK_Up) {
/* test de dépassement des limites du plateau de jeu */
if (tete[0] == 0) {
return 0;
}
else{
tete[0] = tete[0] - 1;
/* test si le serpent se rentre dedans */
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);
*sens = HAUT;
supp_queue(pointeur, retard, compteur, acceleration, numsprite);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
if (touche == XK_Down) {
/* test de dépassement des limites du plateau de jeu */
if (tete[0] == LIGNES - 1) {
return 0;
}
else{
tete[0] = tete[0] + 1;
/* test si le serpent se rentre dedans */
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);
*sens = BAS;
supp_queue(pointeur, retard, compteur, acceleration, numsprite);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
/* pour quiiter directement le jeu */
if ( touche == XK_Escape) {
return 0;
}
/* pour mette le jeu pause puis soit reprendere le jeu soit quiiter le jeu */
if (touche == XK_space) {
touche = Touche();
if ( touche == XK_space) {
return 1;
}
if ( touche == XK_Escape) {
return 0;
}
}
}
else {
if ( *sens == BAS) {
/* test de dépassement des limites du plateau de jeu */
if ( tete[0] == LIGNES - 1 ) {
return 0;
}
else {
tete[0] = tete[0] + 1;
/* test si le serpent se rentre dedans */
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, retard, compteur, acceleration, numsprite);
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;
}
else{
tete[0] = tete[0] - 1;
/* test si le serpent se rentre dedans */
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, retard, compteur, acceleration, numsprite);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
if ( *sens == DROITE) {
/* test de dépassement des limites du plateau de jeu */
if ( tete[1] == COLONNES - 1) {
return 0;
}
else{
tete[1] = tete[1] + 1;
/* test si le serpent se rentre dedans */
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, retard, compteur, acceleration, numsprite);
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;
}
else {
tete[1] = tete[1] - 1;
/* test si le serpent se rentre dedans */
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, retard, compteur, acceleration, numsprite);
plateau[tete[0]][tete[1]] = 1;
return 1;
}
}
}
}
}