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 pas Tout 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