#include #include #include #include #define W_WINDOW 930 /* Largeur de la fenêtre*/ #define H_WINDOW 630 /* Hauteur de la fenêtre*/ #define W_GAME 900 #define H_GAME 600 #define T_PIXEL 15 /* Taille d'un pixel*/ #define DECALEMENT 30 #define delta 10000L int ArrondirPixel(int nombre) /* Calcule un arrondi du pixel pour pouvoir respecter la norme des 40 lignes et 60 colonnes */ { /* Calcul du reste de la division par 15 */ int reste = nombre % 15; /* Calcul de l'arrondi au multiple de 15 le plus proche */ int arrondi = (reste <= 7) ? nombre - reste : nombre + (15 - reste); return arrondi; } void gen_pastille(int nb_pastille, int *p_pastilles) /* Ajout des pointeurs pour le futur tableau de pastilles */ /* nb_pastille = int nombre de pastille voulue , p_pastilles est un pointeur d'un tableau de pixels qui sont des pastilles*/ /*Générer une pastille dans la grid*/ /*Seulement le code n'est pas complet*/ /*-Elles se génèrent à des endroits qui peuvent être les mêmes ou gêner le snake*/ { couleur r; int x_pastille,y_pastille,i; r=CouleurParNom("red"); srand(time(NULL)); for(i=0;iW_GAME-DECALEMENT) { x_pastille - DECALEMENT; } if(y_pastille < DECALEMENT) { y_pastille =+ DECALEMENT; } else if(y_pastille > H_GAME-DECALEMENT) { y_pastille - DECALEMENT; } p_pastilles[i] = x_pastille ; p_pastilles[i+1] = y_pastille ; printf("x : %d ; y : %d\n",p_pastilles[i],p_pastilles[i+1]); ChoisirCouleurDessin(r); RemplirRectangle(x_pastille,y_pastille,T_PIXEL,T_PIXEL); } } void DessinerScene(int* pastilles) /* Dessine la scène */ { couleur c; c=CouleurParNom("lightgreen"); ChoisirCouleurDessin(c); RemplirRectangle(T_PIXEL,T_PIXEL,W_GAME,H_GAME); gen_pastille(5,pastilles); } void InitialisationDuSerpent(int *p_serpent) /* L'initialisation du serpent */ { int x_millieu = 0, y_millieu = 0 , compteur = 0; couleur j; j=CouleurParNom("yellow"); ChoisirCouleurDessin(j); x_millieu = T_PIXEL*30; /* 30 = 60 colonnes divisé par 2*/ y_millieu = T_PIXEL*20; /* 20 = 40 colonnes divisé par 2*/ RemplirRectangle(x_millieu,y_millieu,T_PIXEL,T_PIXEL); /* printf("x_millieu : %d | y_millieu : %d\n",x_millieu,y_millieu); DEBUG*/ p_serpent[0] = x_millieu; p_serpent[1] = y_millieu; for(compteur=0;compteur<=18;compteur+=2) /* Commence par 1 car p_serpent index 0 initialisées pour la tête et 2 + 2x9 = 10 couples de coordonnées 2D */ { p_serpent[compteur+2] = p_serpent[compteur]+T_PIXEL; p_serpent[compteur+3] = p_serpent[compteur+1]; /*printf("x_millieu : %d | y_millieu : %d\n",p_serpent[compteur+2],p_serpent[compteur+3]); DEBUG*/ RemplirRectangle(p_serpent[compteur+2],p_serpent[compteur+3],T_PIXEL,T_PIXEL); } } int main() { unsigned long suivant; int go_on=1; int n; int x_pastille,y_pastille; int p_serpent[100]; /* A faire en tableau dynamique*/ int pastilles[5]; /* A faire en tableau dynamique */ InitialiserGraphique(); CreerFenetre(10,10,W_WINDOW,H_WINDOW); /* Peut être changer cette ligne avec la fonction Maxx et Maxy fournie dans graph.h ??*/ ChoisirTitreFenetre("SNAKE SAE11 IN C"); DessinerScene(pastilles); InitialisationDuSerpent(p_serpent); while(go_on) /* Lancement du cycle pour les Inputs et le Jeu*/ { if (ToucheEnAttente() == 1) { switch (Touche()) { case XK_Up: printf("Touche haut\n"); break; case XK_Down: printf("Touche bas\n"); break; case XK_Left: printf("Touche gauche\n"); break; case XK_Right: printf("Touche droite\n"); break; default: printf("Autre touche\n"); break; } } else { if (Microsecondes()>suivant) { n++; suivant=Microsecondes()+delta; } } } FermerGraphique(); return EXIT_SUCCESS; }