/* 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; } } } } }