- Mon dépôt Github.com va passer en mode privé
- [ ] Qui n’a pas reçu mon invitation?
- Envoyées 52/55, certains comptes fournis sont incorrects!
- [ ] Qui n’a pas reçu mon invitation?
- Groupe A: Exemple de classe
- On pensera d’abord aux aspects logiques pour la gestion du jeu, on fera les aspect graphiques ensuite
-> Raisonner comme en HTML/CSS: on sépare le fond et la forme!
- Conseils:
- Le serpent évolue dans une grille avec un pas de déplacement égal à 1
- Cette grille “logique” est indépendante du rendu graphique et de la taille des pixels!
- Le code n’en sera que plus simple et lisible
- Le serpent évolue dans une grille avec un pas de déplacement égal à 1
- La fenêtre principale est de type
MainSDLWindow
(cf. exercice 1), créée avec la SDL2- Elle contient un
SDL_Renderer
dans lequel on dessine les éléments du jeu
- Elle contient un
- Le
SDL_Renderer
contient les zones suivants:- Score: zone de score simple, affiche le nombre de fruits mangés par le serpent depuis le début de la partie
- Playground: zone où le serpent évolue + fruit à manger
- Le playground est la zone du jeu dans laquelle se déplace le serpent
- Il y a toujours un serpent et un fruit dans le playground
- Attention: le “playground” utilisé pour la logique du jeu et son rendu graphique sont deux choses différentes!
- Le serpent est composé de 1 ou plusieurs segments
- Au départ, le serpent est composé d’un seul segment, sa tête ”
head
” - Le serpent a toujours le segment =head= au minimum
- Au départ, le serpent est composé d’un seul segment, sa tête ”
- Le serpent avance tout seul selon sa direction de déplacement
- On peut changer la direction de déplacement du serpent avec le clavier (flèches ← → ↑ ↓) (Il ne peut pas aller dans la direction opposée à sa direction de déplacement courante)
- Le serpent s’allonge d’un segment quand il mange un fruit
- Le serpent se déplace d’une case à la fois et ses segments se suivent les uns après les autres
- Le serpent peut entrer en collision avec:
- Les limites du playground (les murs)
- Lui-même
- Les fruits apparaissent de manière aléatoire
- Utiliser un générateur de nombres aléatoires (initialisé avec le temps courant)
- Plusieurs approches possibles, à vous d’y réfléchir
- ATTENTION: un fruit ne pourra pas apparaître à l’endroit d’un segment du serpent!
Le code pourra être organisé ainsi:
- La classe de plus haut niveau:
class Application
Regroupe les aspects “graphique” et “logique”:
- Partie “graphique”: effectue le rendu graphique de la partie logique
class MainSDLWindow
SDL_Window *
SDL_Renderer *
- Utilise
SDL_Rect
, etc. pour dessiner à l’écran
- Partie “logique” du jeu (peut et doit être indépendante de la SDL!):
class Playground
class Snake
class Segment
class Fruit
- Partie boucle du jeu: (peut aussi être dans le
main()
)- Possibilité de quitter le jeu
- Récupère les évènements du clavier
- Gère le Frame Rate
- Partie “graphique”: effectue le rendu graphique de la partie logique
- Le point d’entrée du programme:
main.cpp
:int main(void)
: créé une instance (objet) de la classe =Application
- Le serpent est composé de 1 à N segments:
- Comment gérer le déplacement des segments du serpent?
- Comment gérer l’information de direction:
- Du clavier vers un/des valeurs
- Des valeurs vers des changements de position des segments
- Le serpent doit manger des fruits:
- Comment rallonger le serpent avec un nouveau segment?
- Collisions du serpent,
head
ne doit pas percuter:- Les limites du playground
- Les autres segments
- Classe
Snake
: gestion logique du serpentMembres:
Segment *head;
: la tête du serpent
Méthodes:
Snake::Move(int dir)
: pour les déplacements du serpent selon la direction souhaitéeSnake::Eat()
: pour faire grandir le serpent quand il mange un fruit
- Classe
Segment
: pour la gestion des segments qui composent le serpentMembres:
Segment *next;
: pointeur vers l’objetSegment
suivant
Méthodes:
- À vous de réfléchir au déplacement des segments sous la forme d’une liste chaînée
- La fenêtre
MainSDLWindow
utilise unSDL_Renderer
- Le
SDL_Renderer
permet de dessiner:- La zone de score
- La zone de jeu dans laquelle:
- On dessine le serpent
- On dessine le fruit
- On utilise le type
SDL_Rect
pour dessiner des rectangles
- Le
- Apparence:
- Serpent et du fruit:
- Commencez avec des choses simples: on dessinera des carrés de N×N pixels de large
- Score: Utiliser l’affichage de texte inclut dans la SDL2
- Serpent et du fruit:
- Évitez de nommer vos fonctions
SDL_XXXXX()
- Essayez d’écrire le code le plus simple possible
- Déboguez votre serpent en mode textuel?
- Ex: avec
Snake::Print()
qui affiche les coordonnées et infos des segments de votre serpent:Head:(9,6):(8,6):(7,6):(7,5):(7,4) Direction: 8
- Ex: avec