Bonjour,
Je suis sur un premier projet assez simple de collisions entre balles, qui entrent en collisions comme sur un billard.
L'utilisateur pourra :
- Avant le début du jeu : définir le nombre initial de balles, et définir leur vitesses initiales et leur diamètre
- faire un clic droit sur une balle, le jeu se met en pause (PauseState class) et la distance entre la souris et le centre de la balle définit le noveau diamètre de celle-ci et change sa masse.
- faire un clic gauche sur une balle permet de la déplacer pour lui donner un nouveau vecteur vitesse, ou de la supprimer en la déplaçant sur le bord
- cliquer sur le bouton RESET avec en sous menu un slider permettant de définir le nombre de balles (entre 2 et 150 par exemple, ça dépend du diamètre évidemment) et leur diamètre unique ou aléatoire (pour GUI vous me conseillez d'utiliser la librairier QT ?
- Afficher en temps réels le nombre de collisions
- Un Bouton "Gravity" permet d'activer la gravité ou la désactiver
Pourriez vous me conseiller svp pour l'architecture ?
Quelles classes pour le GUI ?
J'ai déjà ces classes-là :
- Game
- GameState
- PauseState , PlayState et MenuState (qui héritent de GameState).
- Ltexture qui permet de dessiner dans SDL_Renderer et SDL_Rect
- Button pour les boutons mais je préfèrerai faire une classe entière pour tout le GUI, qu'en pensez vous ?
- BallManager, qui stocke entre autre un vector de Ball instances
- Ball
Voici mon main.cpp (ce n'est pas la version fonctionnelle, c'est juste pour vous donner une idée et je sais que toutes ces déclarations de variables n'ont pas forcément grand chose à faire là) :
Dans game.Init() vous me conseillez de dessiner le SDL_window, le SDL_Render, les SDL_Rect des balles et le GUI ? Enfin tout quoi ?
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 #include "CONSTANTS.h" #include "Game.h" #include "MenuState.h" #include <iostream> char texte[15]; //utile pour convertir Balls::num_collisions en char, pour le rendu de texte dans le menu int rand_velocity_init_x, rand_velocity_init_y; //utilisé lors de la création d'instance de balles (vecteurs vitesse initiaux) int max_num_balls_per_row = (SCREEN_WIDTH/BALL_INIT_WIDTH)/2; int compteur_collisions = 0; int ball_image_init_width = BALL_INIT_IMAGE_WIDTH/2; //la largeur de balle propre à l'image initiale, avant changement de diamètre initial std::vector<Ball*> array_balls; std::vector<SDL_Rect> array_spriteBallsClips; Ball_manager* ball_manager1 = new Ball_manager(array_balls, array_spriteBallsClips, BALL_INIT_NUM, BALL_INIT_MIN_VELOCITY, BALL_INIT_MAX_VELOCITY); //Ball* balls[ball_manager1->m_num_balls] = {NULL}; Button* buttons[Button::s_num] = {NULL}; SDL_Event e; //Globally used font TTF_Font *gFont = NULL; LTexture gNumCollisionsTexteTexture, gButtonSpriteSheetTexture, gSubMenu0, gSpriteSheetBallsTexture, gBackground; SDL_Rect gSpriteButtonsClips[Button::s_num]; //Starts up SDL and creates window int main(int argc, char* argv[]) { Game game; game.Init("State Manager",SCREEN_WIDTH, SCREEN_HEIGHT, 32,false); //game.ChangeState(MenuState::Instance()); while(game.Running()) { game.HandleEvents(); game.Update(); game.Draw(); } // cleanup the engine game.Clean(); return 0; }
Et dans game.Draw() je dessinerai les balles frame par frame
Merci
Partager