Oubli les threads, ca t'est complétement inutile.
Tu veux faire bouger un carré, tu dessines ton carré ailleurs, c'est tout ^^
Oubli les threads, ca t'est complétement inutile.
Tu veux faire bouger un carré, tu dessines ton carré ailleurs, c'est tout ^^
Ca je le sais Mais comme je veux bouger 5 carres en même temps Je ne sais pas comment faire sans utiliser les thread. En gros, pouvez vous me donner une technique permettant de faire bouger 5 carres en même temps car chaque carre représente une entité dans la carte.
Merci d'avance
PS: Les carres bougents sans l'intervention de l'utilisateur.
Tu les fais bouger les 5 à la suite. Car pour le faire bouger ça prend au pire quelques ms, et de toute façon tu ne rafraichis l'image que lorsque tu as fait bouger tout ce que tu voulais faire bouger, donc ça te donnera l'impression qu'ils bougent en même temps.
En effet, je pensais encore qu'il fallait faire un rafraîchissement dès qu'un carre bouge donc c'est parfait je vais tester en les faisant bouger un par un et en rafraîchissant d'un coup
Merci
PS: Je ne poste pas encore résolu, j'aurais encore quelques questions de conceptions. Sinon je suis désolé pour tout à l'heure j'étais dans mes thread car je viens des logiciels, je n'avais jamais encore programmé de "jeux" (même si celui là n'en est pas vraiment un )
Voilà, j'ai un nouveau petit problème. Je n'arrive pas à visualiser comment gérer la gestion de collisions, sachant que :
-les carres se déplacent seuls
-l'utilisateur n'agit pas
-la carte fait au max : 640*480
-taille d'un carre : 8*8
-la collision ne se fait qu'entre carre
Voilà mon code pour le moment et j'arrive pas à continuer. Ce que je pense faire c'est vérifier la position x et y de chaque carre et de placer le nouveau carre dans un emplacement différent de x et y de chacun des autres carres.
Code :
Merci d'avance
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 #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; SDL_Surface *perso[LIFES] = {NULL}; SDL_Rect position; struct life humans[LIFES]; 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); humans[people].position.x = x; humans[people].position.x = y; 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 moveHuman() { } void boucle() { int a = 1, b = 10, c = 100, d = 0, i = 100; while(i > 0) { i--; d = a+b+c; } }
Entendu Et pour mon problème de gestion de collisions, vous avez une petite idée ?
Tu peux utiliser une matrice qui représentera ta carte, cela résoud le problème
Ouai j'ai pensé à cela Mais si je fais dans life.c :
Ca :
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 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] = {}; /* map */ SDL_Surface *perso[LIFES] = {NULL}; SDL_Rect position; struct life humans[LIFES]; 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); humans[people].position.x = x; humans[people].position.x = y; 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; }
Les carres ne sont plus que sur le coté haut gauche de l'écran. En gros on ne voit qu'un unique carré
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int map[L_H_CASE][L_H_CASE] = {}; /* map */
Merci d'avance
PS: Si vous avez le temps pour un petit pseudo code, ce serait super sympa
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
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
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] == VOID) { position.x = i; position.y = j; map[i][j] = HUMAN; } } } 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; } }
Que ca cloche, si vous pouviez m'aider
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; } } }
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_ */
Je poste résolu car je sais ce que je vais faire. Je vais poster un nouveau sujet
pour mon problème.
Merci pour tout
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager