int DirectionSerpent(int direction,int* etatJeu, int* etatPartie) // Permet de determiner dans quelle direction l'utilisateur veut faire diriger le serpent { int touche = 0; if(ToucheEnAttente()) // Si le joueur a presser une touche { touche = Touche(); if(touche== XK_Up && direction != DOWN) { direction = UP; } if(touche == XK_Down && direction != UP) { direction = DOWN; } if(touche == XK_Left && direction != RIGHT) { direction = LEFT; } if(touche == XK_Right && direction != LEFT) { direction = RIGHT; } if(touche == XK_space) { MettrePause(etatJeu,etatPartie); } if(touche == XK_Escape) // Pour quitter le jeu { QuitterPartie(etatJeu,etatPartie); } } // Dans le cas où le joueur n'a rien pressé, on renvoit la même valeur que celle donnée en argument return direction; }
void GestionTouche(int snake[TAILLE_SNAKE][2],int direction[2]){ unsigned int touchePress; /*Deplacement à droite*/ if (ToucheEnAttente()==1){ touchePress=Touche(); if(touchePress==XK_Right){ direction[0]=1; direction[1]=0; } /*Deplacement à gauche*/ if (touchePress==XK_Left){ direction[0]=-1; direction[1]=0; } /*Deplacement en haut*/ if(touchePress==XK_Up){ direction[0]=0; direction[1]=-1; } /*Deplacement en bas*/ if(touchePress==XK_Down){ direction[0]=0; direction[1]=1; } } }
void GestionTouche(int snake[TAILLE_SNAKE][2],int direction[2], int* done){ unsigned int touchePress; /*Deplacement à droite*/ if (ToucheEnAttente()==1){ touchePress=Touche(); if(touchePress==XK_Escape){ FermerGraphique(); *done=1; }else if(touchePress==XK_space){ while(Touche()!=XK_space); } /******UPDATE DIRECTION********/ if(touchePress==XK_Right && direction[0]==0){ direction[0]=1; direction[1]=0; }else /*Deplacement à gauche*/ if (touchePress==XK_Left && direction[0]==0){ direction[0]=-1; direction[1]=0; }else /*Deplacement en haut*/ if(touchePress==XK_Up && direction[1]==0){ direction[0]=0; direction[1]=-1; }else /*Deplacement en bas*/ if(touchePress==XK_Down && direction[1]==0){ direction[0]=0; direction[1]=1; } } }
int MettrePause(){ int touche = 0; while(ToucheEnAttente() != 1 && touche != XK_space) { touche = Touche(); } }
int MettrePause(int* etatJeu, int* etatPartie){ int touche = 0; while(ToucheEnAttente() != 1 && touche != XK_space) { touche = Touche(); if(touche == XK_Escape) // Pour quitter le jeu { QuitterPartie(etatJeu,etatPartie); break; } } }
int pressanykey (void) { KeySym k; int nb=0; while(ToucheEnAttente()) { nb++; k=Touche(); if(k==XK_Escape) return QUITTER_AFFICHAGE; } return nb; }
int main(int argc, char *argv[]) { int **grille; int column; int line; int nbrCells = 0; int dir=2; grille = setArray(); setWindow(grille, &dir); for (line = 0; line < 42; line++) { for (column = 0; column < 62; column++) { if (grille[line][column] == 1) { printf("Snake %d => grille[%d][%d]\n", column - 25, line, column); } else if (grille[line][column] == 3) { printf("Cell %d => grille[%d][%d]\n", nbrCells, line, column); nbrCells++; } } } unsigned long suivant=Microsecondes()+33333; unsigned long move=Microsecondes()+250000; double head=21.35; double tail=21.26; int fin=0; while(fin==0) { if ((Microsecondes()>move) || (ToucheEnAttente()==1)) { fin=moveSnake(grille,&dir,&head, &tail); move=Microsecondes()+250000; } if (Microsecondes()>suivant) { refresh(grille, &dir); suivant=Microsecondes()+33333; } } return EXIT_SUCCESS; }
int actions_sur_pression_touche_combat (void) { KeySym k; int actions_realisees=0; while(ToucheEnAttente()) { actions_realisees++; k=Touche(); switch (k) { case XK_Left: action (BTN_G); buff_changemode(); buff_waitingtime(); // Changement de mode peux impliquer un changement d'affichage du temps de pause flip(); break; case XK_Right: action (BTN_D); buff_changemode(); buff_waitingtime(); // Changement de mode peux impliquer un changement d'affichage du temps de pause flip(); break; case XK_Up: action (BTN_H); buff_waitingtime(); break; case XK_Down: action (BTN_B); buff_waitingtime(); break; case XK_Escape: return QUITTER_AFFICHAGE; } // printf("touche %d\n",k); } return actions_realisees; }
int main(void) { srand((unsigned int)time(NULL)); int snake[TAILLE_SNAKE][2], len_snake=10, pommes[TAILLE_POMME][2], len_pommes=5, direction[2]={0,-1}; int* score; *score=0; const unsigned long int tempsDepart=Microsecondes(); unsigned long int prochainAffichage=0,prochainDeplacement=0; initSnake(snake,len_snake); initPommes(pommes,len_pommes); InitialiserGraphique(); CreerFenetre(BORD,BORD,60*TAILLE_CASE+2*BORD,40*TAILLE_CASE+BORD+40); ChoisirEcran(1); /*EffacerEcran(CouleurParNom("black")); */ while(1){ if(Microsecondes()>prochainAffichage){ printScreen(snake, len_snake, pommes, len_pommes, tempsDepart, &score); prochainAffichage=Microsecondes()+CYCLE; } GestionTouche(snake,direction); if(Microsecondes()>prochainDeplacement){ DeplacementSnake(snake,len_snake,direction); CheckCollisionBord(snake); CheckCollisionPomme(len_pommes,pommes,snake,score); prochainDeplacement=Microsecondes()+100000; } if(ToucheEnAttente()==1 && Touche()==XK_Escape){ FermerGraphique(); return EXIT_SUCCESS; } } }
int QuitterSnake(){ if(ToucheEnAttente()==1 && Touche()==XK_Escape){ FermerGraphique(); return EXIT_SUCCESS; } }
int main() // Fonction principale { int carre = NB_PIXEL_X_JEU/60; unsigned long suivant; suivant= Microsecondes()+delta; int i = 0; int etatJeu = 1; int score = 0; int direction = 0; int seconde = 0; int minute = 0; int tailleSerpent = 10; Coordonnees serpent[20]; serpent[0].x = CENTRE_X_GRILLE; serpent[0].y = CENTRE_Y_GRILLE; Coordonnees queue; Pomme tabPomme[NB_POMME] = {}; Obstacles tabObstacle[NB_OBSTACLE] = {}; Coordonnees tete; InitialiserGraphique(); CreerFenetre(10,10,NB_PIXEL_X_FENETRE,NB_PIXEL_Y_FENETRE); while(etatJeu){ InitialiserVariable(&score,&direction,&tailleSerpent,&seconde,&minute,serpent); for (i = 0 ; i < NB_POMME; i++) // Initialisation du serpent { tabPomme[i].x = -1; tabPomme[i].y = -1; tabPomme[i].flagP = 0; } for (i = 1 ; i < TAILLE_MAX_SNAKE; i++) // Initialisation du serpent { serpent[i].x = -1; serpent[i].y = -1; } NettoyerEcran(); RemplirRectangle(0,NB_PIXEL_Y_JEU,1080,carre*3); // Bande noir en bas for(i = 0; i < tailleSerpent; i++) { ChoisirCouleurDessin(CouleurParComposante(27,94,32)); RemplirRectangle(serpent[i].x*carre,serpent[i].y*carre,carre,carre); } AfficherScore(score); AfficherTemps(seconde,minute,carre,&score); CreerObstacles(carre,tabObstacle); while(ToucheEnAttente() != 1) { } while(1)//Boucle principale { // DessinerGrille(carre); direction = DirectionSerpent(direction); if (Microsecondes()>suivant) // Si une seconde est passé { suivant=Microsecondes()+delta; seconde++; if(seconde == 60){ seconde = 0; minute++; } AfficherTemps(seconde,minute,carre,&score); } queue = DeplacerSerpent(carre,direction,serpent,tailleSerpent); tete = serpent[0]; tailleSerpent = VerifieManger(&score,tete,tabPomme,tailleSerpent); CreerPomme(carre,tabPomme,tabObstacle,tailleSerpent,serpent); if(VerifieCollisionSerpent(tete,serpent,tailleSerpent,tabObstacle)){// Touche un mur => GAME OVER break; } AfficherSerpent(serpent,tailleSerpent,carre,queue); } while(ToucheEnAttente() != 1) { ChoisirCouleurDessin(CouleurParNom("red")); EcrireTexte(340,260,"Vous avez perdu !",2); EcrireTexte(120,290,"Appuyez sur n'importe quelle touche pour recommencer",2); EcrireTexte(260,320,"Appuyez sur Echap pour quitter",2); } if(Touche() == XK_Escape) { break; } } FermerGraphique(); return EXIT_SUCCESS; }