Bonjour, je développe en ce moment un logiciel avec le langage de programmation C et la librairie SDL. Voilà un screen qui va vous imager mon programme (j'ai pris ce screen hier avant l'implémentation de la gestion de collisions) :
http://www.zimagez.com/zimage/life1.php
En fait, chaque carré représente un être humain. J'ai pour le moment, pour objectif personnel (j'ai que 15 ans) de faire déplacer ces carrés. Lors d'un contact entre deux carres, il y a naissance d'un nouveau carré ayant pour couleur, un mix entre les couleurs du père et de la mère ainsi, on pourra voir la couleur dominante à l'écran.
Voilà où j'en suis pour le moment :
J'ai implémenté la gestion de collision qui ne fonctionne pasTout les carres sont au même endroit
Voilà une image du programme en cours : (avec la gestion de collisions foireuse)
http://www.zimagez.com/zimage/life3.php
Voilà le code de main.c :
life.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 /* Author : Samy Hocine (samyhocine_at_hotmail_dot_fr) Date : November 2007 Licence : GNU/GPL */ #include <stdlib.h> #include <stdio.h> #include "const.h" #include "life.h" #include <SDL/SDL.h> void pause(); int main(void) { SDL_Init(SDL_INIT_VIDEO); SDL_Surface *screen = NULL; screen = SDL_SetVideoMode(L_WINDOW, H_WINDOW, 32, SDL_HWSURFACE); SDL_WM_SetCaption("Life", NULL); // Coloration de la surface ecran en bleu-vert SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 100, 100, 100)); SDL_Flip(screen); /* Mise à jour de l'écran avec sa nouvelle couleur */ if(createLife(screen)!=1) { fprintf(stdout, "\nErreur lors de la creation des humains\n"); } else { fprintf(stdout, "\nCreation des humains re'ussie\n"); } fflush(stdout); pause(); SDL_Quit(); return EXIT_SUCCESS; } void pause() { int end = 0; SDL_Event event; while (end!=1) { SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT: end = 1; } } }
life.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 #include <stdio.h> #include <stdlib.h> #include <time.h> #include "const.h" #include "life.h" struct pos { int x; int y; }; struct col { int r; int g; int b; }; struct life { struct pos position; struct col color; }; int createLife(SDL_Surface* screen) { int x = 0, y = 0, l = 254, m = 400; int r = 0, g = 0, b = 0, people = LIFES; int map[L_H_CASE][L_H_CASE] = {}; int i, j; SDL_Surface *perso[LIFES] = {NULL}; SDL_Rect position; srand((int)time(NULL)); while(people > 0) { fprintf(stdout, "\nCreation de l'humain : %i\n", people); perso[people] = SDL_CreateRGBSurface(SDL_HWSURFACE, L_H_CASE, L_H_CASE, 32, 0, 0, 0, 0); x = rand() % (m+1); r = rand() % (l+1); g = rand() % (l+1); b = rand() % (l+1); y = rand() % (m+1); for (i = 0 ; i < L_H_CASE ; i++) { for (j = 0 ; j < L_H_CASE ; j++) { if (map[i][j] == HUMAN) { position.x = i; position.y = j; map[i][j] = NOTHING; } } } SDL_FillRect(perso[people], NULL, SDL_MapRGB(screen->format, r, g, b)); SDL_BlitSurface(perso[people], NULL, screen, &position); SDL_Flip(screen); boucle(); people--; } return 1; } void boucle() { int a = 1, b = 10, c = 100, d = 0, i = 100; while(i > 0) { i--; d = a+b+c; } }
Ce que je pense pour le moment c'est que c'est au niveau de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #ifndef LIFE_H_ #define LIFE_H_ #include <SDL/SDL.h> struct pos; struct col; struct life; void boucle(); int createLife(SDL_Surface* screen); #endif /* LIFE_H_ */
q
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 for (i = 0 ; i < L_H_CASE ; i++) { for (j = 0 ; j < L_H_CASE ; j++) { if (map[i][j] == VOID) { position.x = i; position.y = j; map[i][j] = HUMAN; } } }
Que ca cloche, si vous pouviez m'aider
Merci d'avance
PS: const.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #ifndef CONST_H_ #define CONST_H_ #define L_H_CASE 8 #define L_WINDOW 640 #define H_WINDOW 480 #define LIFES 20 enum {UP, DOWN, LEFT, WRITE}; enum {VOID, HUMAN}; #endif /* CONST_H_ */
Partager