#include <graph.h> #include <time.h> #include <stdlib.h> #include "main.h" 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; } PIXELS gen_pastille(PIXELS *serpent,PIXELS *pastilles,PIXELS *obstacle,unsigned long longueur_serpent,unsigned long longueur_obstacle) /* nb_pastille = int nombre de pastille voulue , p_pastilles est un pointeur d'un tableau de pixels qui sont des pastilles*/ /*-Elles se génèrent à des endroits qui peuvent être les mêmes ou gêner le snake*/ { int x_pastille,y_pastille; unsigned long i; int ok = 0; PIXELS pastille; do{ ok = 0; x_pastille= ArrondirPixel(rand()%W_GAME); y_pastille = ArrondirPixel(rand()%H_GAME); if(x_pastille < DECALEMENT) { x_pastille =+ DECALEMENT; } if(y_pastille < DECALEMENT) { y_pastille =+ DECALEMENT; } for(i=0;i<=longueur_serpent;i++) { if(x_pastille == serpent[i].x && y_pastille == serpent[i].y) { ok = 1; /* Check si la pastille se genère sur une coordonné du serpent */ } if(x_pastille == pastilles[i].x && y_pastille == pastilles[i].y) { ok = 1; } } for(i=0;i<=longueur_obstacle;i++) { if(x_pastille == obstacle[i].x && y_pastille == obstacle[i].y) { ok = 1; /* Check si la pastille se genère sur une coordonné du serpent */ } if(x_pastille == pastilles[i].x && y_pastille == pastilles[i].y) { ok = 1; } } }while(ok); pastille.x = x_pastille ; pastille.y = y_pastille ; return pastille; } PIXELS gen_obstacle(PIXELS *serpent,PIXELS *pastilles,PIXELS *obstacle,unsigned long longueur_serpent,unsigned long longueur_pastilles) /* nb_pastille = int nombre de pastille voulue , p_pastilles est un pointeur d'un tableau de pixels qui sont des pastilles*/ /*-Elles se génèrent à des endroits qui peuvent être les mêmes ou gêner le snake*/ { int x_obstacles,y_obstacles; unsigned long i; int ok = 0; PIXELS obstacles; do{ ok = 0; x_obstacles= ArrondirPixel(rand()%W_GAME); y_obstacles = ArrondirPixel(rand()%H_GAME); if(x_obstacles < DECALEMENT) { x_obstacles =+ DECALEMENT; } if(y_obstacles < DECALEMENT) { y_obstacles =+ DECALEMENT; } for(i=0;i<=longueur_serpent;i++) { if(x_obstacles == serpent[i].x && y_obstacles == serpent[i].y) { ok = 1; /* Check si la pastille se genère sur une coordonné du serpent */ } if(x_obstacles == obstacle[i].x && y_obstacles == obstacle[i].y) { ok = 1; } } for(i=0;i<=longueur_pastilles;i++) { if(x_obstacles == pastilles[i].x && y_obstacles == pastilles[i].y) { ok = 1; /* Check si la pastille se genère sur une coordonné du serpent */ } if(x_obstacles == obstacle[i].x && y_obstacles == obstacle[i].y) { ok = 1; } } }while(ok); obstacles.x = x_obstacles ; obstacles.y = y_obstacles ; return obstacles; } void InitialisationDuSerpent(PIXELS *p_serpent) /* L'initialisation du serpent */ { int x_millieu = 0, y_millieu = 0 , compteur = 0; x_millieu = T_PIXEL*30; /* 30 = 60 colonnes divisé par 2*/ y_millieu = T_PIXEL*20; /* 20 = 40 colonnes divisé par 2*/ ChoisirEcran(2); ChargerImage("./images/SnakePart.png",x_millieu,y_millieu,0,0,T_PIXEL,T_PIXEL); p_serpent[0].x = x_millieu; p_serpent[0].y = y_millieu; for(compteur=0;compteur<9;compteur++) /*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+1].x = p_serpent[compteur].x+T_PIXEL; p_serpent[compteur+1].y = p_serpent[compteur].y; ChargerImage("./images/SnakePart.png",p_serpent[compteur+1].x,p_serpent[compteur+1].y,0,0,T_PIXEL,T_PIXEL); } } void InitialiserPastilles(PIXELS *pastilles, PIXELS *serpent,PIXELS *obstacle, unsigned long longueur_serpent,unsigned long longueur_obstacle) { int i; srand(time(NULL)); for (i = 0; i < PASTILLES; i++) { pastilles[i] = gen_pastille(serpent,pastilles,obstacle,longueur_serpent,longueur_obstacle); ChargerImage("./images/PommePastille.png",pastilles[i].x,pastilles[i].y,0,0,T_PIXEL,T_PIXEL); } } void InitialiserObstacle(PIXELS *pastilles, PIXELS *serpent,PIXELS *obstacle, unsigned long longueur_serpent,unsigned long longueur_pastilles) { int i; srand(time(NULL)); for (i = 0; i < OBSTACLE; i++) { obstacle[i] = gen_obstacle(serpent,pastilles,obstacle,longueur_serpent,longueur_pastilles); ChargerImage("./images/Danger.png",obstacle[i].x,obstacle[i].y,0,0,T_PIXEL,T_PIXEL); } } void DessinerScene(PIXELS *pastilles, PIXELS *serpent,PIXELS *obstacle, unsigned long longueur_serpent,unsigned long longueur_pastilles,unsigned long longueur_obstacle) /* Dessine la scène */ { couleur bg; couleur border; ChoisirEcran(2); border=CouleurParComposante(78, 93, 47); bg=CouleurParComposante(171, 204, 104); ChoisirCouleurDessin(border); RemplirRectangle(0,0,930,630); ChoisirCouleurDessin(bg); RemplirRectangle(0,630,930,650); ChoisirCouleurDessin(border); RemplirRectangle(0,650,930,15); ChoisirCouleurDessin(bg); RemplirRectangle(T_PIXEL,T_PIXEL,W_GAME,H_GAME); InitialisationDuSerpent(serpent); InitialiserPastilles(pastilles,serpent,obstacle,longueur_serpent,longueur_obstacle); InitialiserObstacle(pastilles,serpent,obstacle,longueur_serpent,longueur_pastilles); }