Commit 750af9c2370d6ad4a3a96b839a0eecef0e65d54e

Authored by mahmoudrabia
1 parent b0fe841f

rapport intermediaire

Showing 1 changed file with 124 additions and 215 deletions   Show diff stats
@@ -2,239 +2,148 @@ @@ -2,239 +2,148 @@
2 #include<SDL/SDL_ttf.h> 2 #include<SDL/SDL_ttf.h>
3 #include"Graphique/libgraph.h" 3 #include"Graphique/libgraph.h"
4 #include<stdbool.h> 4 #include<stdbool.h>
5 -#include "main.h" 5 +#include "test2.h"
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 -  
9 -static SDL_Surface *surface;  
10 -  
11 -int vaisseauID = -1;  
12 -int envahisseurID = -1;  
13 -int missileID = -1;  
14 -int bombeID = -1;  
15 -  
16 -  
17 -void initListe(listeEntites* liste) {  
18 - liste->tete = NULL;  
19 -}  
20 -  
21 -  
22 -void ajouterEntite(listeEntites* liste, int x, int y, int type, int etat) {  
23 - entite* nouvelleEntite = (entite*)malloc(sizeof(entite));  
24 - if (!nouvelleEntite) {  
25 - fprintf(stderr, "Erreur : impossible d'allouer la mémoire pour une nouvelle entité.\n");  
26 - exit(EXIT_FAILURE);  
27 - }  
28 - nouvelleEntite->x = x;  
29 - nouvelleEntite->y = y;  
30 - nouvelleEntite->type = type;  
31 - nouvelleEntite->etat = etat;  
32 - nouvelleEntite->suivante = liste->tete;  
33 - liste->tete = nouvelleEntite;  
34 - printf("Ajouté entité de type %d à (%d, %d)\n", type, x, y);  
35 -}  
36 -  
37 -  
38 -void initEnvahisseurs(listeEntites* liste, int nbEnvahisseurs, int y) {  
39 - for (int i = 0; i < nbEnvahisseurs; i++) {  
40 - ajouterEntite(liste, i * 40, y, 1, 1); // Type 1 pour envahisseur  
41 - }  
42 - printf("Initialisé %d envahisseurs à la position y = %d\n", nbEnvahisseurs, y);  
43 -}  
44 -  
45 -  
46 -void initVaisseau(entite* vaisseau, int x, int y) {  
47 - vaisseau->x = x;  
48 - vaisseau->y = y;  
49 - vaisseau->type = 0;  
50 - vaisseau->etat = 1;  
51 - vaisseau->suivante = NULL;  
52 - printf("Initialisé vaisseau à (%d, %d)\n", x, y);  
53 -}  
54 -  
55 -  
56 -void deplacerEnvahisseurs(listeEntites* envahisseurs, int largeurEcran, int* direction, bool* bordAtteint) {  
57 - entite* courant = envahisseurs->tete;  
58 - while (courant != NULL) {  
59 - courant->x += *direction * 10;  
60 -  
61 -  
62 - if (courant->x <= 0 || courant->x >= largeurEcran - 40) {  
63 - *bordAtteint = true;  
64 - }  
65 -  
66 - courant = courant->suivante;  
67 - }  
68 -  
69 -  
70 - if (*bordAtteint) {  
71 - *direction = -*direction;  
72 - courant = envahisseurs->tete;  
73 - while (courant != NULL) {  
74 - courant->y += 10;  
75 - courant = courant->suivante;  
76 - }  
77 - *bordAtteint = false;  
78 - printf("Les envahisseurs ont changé de direction\n");  
79 - }  
80 -}  
81 -  
82 -  
83 -void gererEntrees(entite* vaisseau, listeEntites* missiles) {  
84 - const Uint8* etatClavier = SDL_GetKeyState(NULL);  
85 -  
86 - if (etatClavier[SDLK_LEFT]) {  
87 - vaisseau->x -= 10;  
88 - }  
89 - if (etatClavier[SDLK_RIGHT]) {  
90 - vaisseau->x += 10;  
91 - }  
92 - if (etatClavier[SDLK_SPACE]) {  
93 -  
94 - ajouterEntite(missiles, vaisseau->x + 20, vaisseau->y - 10, 2, 1);  
95 - printf("Missile tiré à (%d, %d)\n", vaisseau->x + 20, vaisseau->y - 10);  
96 - }  
97 -}  
98 -  
99 -  
100 -bool collision(entite* a, entite* b) {  
101 - return (a->x < b->x + 40 &&  
102 - a->x + 40 > b->x &&  
103 - a->y < b->y + 40 &&  
104 - a->y + 40 > b->y); 8 +#define TAILLE_X 700
  9 +#define TAILLE_DESC 40
  10 +#define LARGEUR_MONS 30
  11 +#define HAUTEUR_MONS 30
  12 +#define LARGEUR_VAIS 35
  13 +#define SPEED 1
  14 +#define MISS_SPEED 5
  15 +#define LARGEUR_MISS 5
  16 +#define HAUTEUR_MISS 10
  17 +
  18 +
  19 +
  20 +
  21 +l_entite* create_l_entite(int x,int y,int speed,int image)
  22 +{
  23 + l_entite* monster_1 =(l_entite*)malloc(sizeof(l_entite));
  24 + (monster_1->ent).image=image;
  25 + (monster_1->ent).x =x;
  26 + (monster_1->ent).y =y;
  27 + (monster_1->ent).speed=speed;
  28 + monster_1->next = NULL;
  29 + return monster_1;
105 } 30 }
106 31
107 -entite* collisionAvecListe(entite* ent, listeEntites* liste) {  
108 - entite* courant = liste->tete;  
109 - while (courant != NULL) {  
110 - if (collision(ent, courant)) {  
111 - return courant;  
112 - }  
113 - courant = courant->suivante;  
114 - }  
115 - return NULL; 32 +entite create_entite(entite ent,int x,int y, int speed, int image)
  33 +{
  34 + (ent).image=image;
  35 + (ent).x =x;
  36 + (ent).y =y;
  37 + (ent).speed=speed;
  38 + return ent;
116 } 39 }
117 40
118 41
119 -int chargerSprites() {  
120 - vaisseauID = chargerLutin("invader_canon.bmp", 0);  
121 - envahisseurID = chargerLutin("invader_monstre1_1.bmp", 1);  
122 - missileID = chargerLutin("invader_missile.bmp", 2);  
123 - bombeID = chargerLutin("invader_bombe.bmp", 3);  
124 -  
125 - if (vaisseauID < 0) {  
126 - fprintf(stderr, "Erreur : échec du chargement du lutin vaisseau.\n");  
127 - return 0;  
128 - }  
129 - if (envahisseurID < 0) {  
130 - fprintf(stderr, "Erreur : échec du chargement du lutin envahisseur.\n");  
131 - return 0;  
132 - }  
133 - if (missileID < 0) {  
134 - fprintf(stderr, "Erreur : échec du chargement du lutin missile.\n");  
135 - return 0;  
136 - }  
137 - if (bombeID < 0) {  
138 - fprintf(stderr, "Erreur : échec du chargement du lutin bombe.\n");  
139 - return 0; 42 +
  43 +void add_entite (l_entite** head,int x,int y,int speed,int image)
  44 +{
  45 +
  46 + l_entite* new_monster = create_l_entite( x, y,speed,image);
  47 + if (head==NULL)
  48 + {
  49 + *head=new_monster;
  50 + }
  51 + else
  52 + {
  53 + l_entite* current =*head;
  54 + while (current->next != NULL)
  55 + { current=current->next;
  56 + }
  57 + current->next=new_monster;
140 } 58 }
141 - printf("Sprites chargés avec succès\n");  
142 - return 1;  
143 } 59 }
144 60
145 61
146 -void afficherEntite(entite* ent) {  
147 - int lutinID;  
148 - switch (ent->type) {  
149 - case 0: lutinID = vaisseauID; break;  
150 - case 1: lutinID = envahisseurID; break;  
151 - case 2: lutinID = missileID; break;  
152 - case 3: lutinID = bombeID; break;  
153 - default:  
154 - fprintf(stderr, "Erreur : type de lutin inconnu %d.\n", ent->type);  
155 - return; 62 +void display_l_entite(l_entite* mons)
  63 +{
  64 + l_entite* ptr= mons;
  65 + while(ptr != NULL)
  66 + {
  67 + afficherLutin((ptr->ent).image,(ptr->ent).x,(ptr->ent).y);
  68 + ptr=ptr->next;
156 } 69 }
157 - afficherLutin(lutinID, ent->x, ent->y);  
158 - printf("Affichage de l'entité de type %d à (%d, %d)\n", ent->type, ent->x, ent->y);  
159 } 70 }
160 71
  72 +void display_entite(entite ent)
  73 + {
  74 + afficherLutin((ent).image,(ent).x,(ent).y);
  75 + }
161 76
162 -int main() {  
163 - if (!creerSurface(800, 600, "Space Invaders")) {  
164 - fprintf(stderr, "Erreur lors de la création de la surface graphique.\n");  
165 - return EXIT_FAILURE;  
166 - }  
167 -  
168 - if (!chargerSprites()) {  
169 - fprintf(stderr, "Erreur lors du chargement des sprites.\n");  
170 - fermerSurface();  
171 - return EXIT_FAILURE;  
172 - }  
173 -  
174 - listeEntites envahisseurs;  
175 - listeEntites missiles;  
176 - initListe(&envahisseurs);  
177 - initListe(&missiles);  
178 -  
179 - entite vaisseau;  
180 - initVaisseau(&vaisseau, 380, 550);  
181 -  
182 - initEnvahisseurs(&envahisseurs, 10, 50);  
183 -  
184 - int direction = 1;  
185 - bool bordAtteint = false;  
186 77
187 78
188 -  
189 -while(!getchar()) 79 +void moveMonster(l_entite* monstre)
190 { 80 {
191 - deplacerEnvahisseurs(&envahisseurs, 800, &direction, &bordAtteint);  
192 - entite* missile = missiles.tete;  
193 - while (missile != NULL) {  
194 - entite* cible = collisionAvecListe(missile, &envahisseurs);  
195 - if (cible != NULL) {  
196 - missile->etat = 0;  
197 - cible->etat = 0;  
198 - printf("Collision détectée entre missile et envahisseur\n");  
199 - }  
200 - missile = missile->suivante;  
201 - }  
202 -  
203 -  
204 -  
205 -  
206 -  
207 -  
208 - entite* courant = envahisseurs.tete;  
209 - while (courant != NULL) {  
210 - if (courant->etat == 1) {  
211 - afficherEntite(courant);  
212 - }  
213 - courant = courant->suivante;  
214 - }  
215 -  
216 - if (vaisseau.etat == 1) {  
217 - afficherEntite(&vaisseau);  
218 - }  
219 -  
220 - missile = missiles.tete;  
221 - while (missile != NULL) {  
222 - if (missile->etat == 1) {  
223 - afficherEntite(missile);  
224 - }  
225 - missile = missile->suivante;  
226 - }  
227 -  
228 - SDL_Flip(surface); 81 + int max = TAILLE_X - LARGEUR_MONS;
  82 + l_entite* currentMonster = monstre;
  83 + while (currentMonster != NULL)
  84 + {
  85 + (currentMonster->ent).x += (currentMonster->ent).speed;
  86 +
  87 + if ( (currentMonster->ent).x < 0 || (currentMonster->ent).x > max)
  88 + {
  89 + (currentMonster->ent).speed = -(currentMonster->ent).speed;
  90 + (currentMonster->ent).y += TAILLE_DESC ;
  91 + }
  92 +
  93 + currentMonster = currentMonster->next;
229 } 94 }
230 -  
231 - fermerSurface();  
232 - return 0;  
233 -  
234 -  
235 } 95 }
236 -// calcul de collision entre l'ensemble des missiles et la liste d'entité  
237 -  
238 -  
239 - 96 +int main()
  97 +{
240 98
  99 + l_entite* W_monster = NULL;
  100 + l_entite* B_monster = NULL;
  101 + l_entite* l_missile = NULL;
  102 + entite vaisseau;
  103 + entite missile;
  104 + entite missile_ref;
  105 + creerSurface(TAILLE_X,TAILLE_Y,"Space Invaders");
  106 +
  107 +
  108 +
  109 + int ZB=lutinTexte("Space invaders", COULEUR_BLEU);
  110 + int M1=chargerLutin("Graphique/invader_monstre1_2.bmp", COULEUR_BLEU);
  111 + int M2=chargerLutin("Graphique/invader_monstre2_1.bmp", COULEUR_BLEU);
  112 + int V =chargerLutin("Graphique/invader_canon.bmp", COULEUR_BLEU);
  113 + int MI =chargerLutin("Graphique/invader_missile.bmp", COULEUR_BLEU);
  114 +
  115 +
  116 +
  117 + W_monster =create_l_entite(0,0,1,M1);
  118 + B_monster =create_l_entite(0,100,1,M2);
  119 + vaisseau =create_entite(vaisseau,0.5*TAILLE_X,0.95*TAILLE_Y,1,V);
  120 + missile_ref =create_entite(missile_ref,vaisseau.x + (LARGEUR_VAIS/2),400,1,MI);
  121 + l_missile =create_l_entite( vaisseau.x + (LARGEUR_VAIS/2),(vaisseau).y,1,MI);
  122 +
  123 + int i=0;int a =60;
  124 + for (i=0;i<4;i++)
  125 + {
  126 + add_entite(&W_monster,((W_monster->ent).x)+a,(W_monster->ent).y,1,M1);
  127 + add_entite(&B_monster,((B_monster->ent).x)+a,(B_monster->ent).y,1,M2);
  128 + a+=60;
  129 + }
  130 +
  131 +
  132 +
  133 + while(1)
  134 + {
  135 + evenement ev;
  136 + char touche;
  137 + l_missile = NULL;
  138 + lireEvenement(&ev,&touche,NULL);
  139 + if(ev==quitter)
  140 + {break;
  141 + }
  142 + rectanglePlein (0,0,TAILLE_X,TAILLE_Y,COULEUR_NOIR);
  143 + display_l_entite(W_monster);
  144 + display_l_entite(B_monster);
  145 + display_entite(vaisseau);
  146 + moveMonster( W_monster);
  147 + moveMonster( B_monster);
  148 + }
  149 + }
241 \ No newline at end of file 150 \ No newline at end of file