Dans un jeu vidéo (genre mario), les éléments qui bougent ou qui interagissent sont des sprites (où un groupe de sprite) que l'on représente souvent comme des rectangles (c'est plus simple).
Sur l'image du Mario on voit différents sprites différents :
Tous ses sprites ont des choses en commun, ils ont une position et une taille et des choses qui les différencient (le mouvement par exemple). La programmation objet offre une notion d’héritage qui permet de prendre en compte ses points communs et ses différences (c'est hors programme mais on va en faire un peu au pire on peut faire du copier collé).
On commence par définir une classe rectangle (qui servira de parent aux sprites), on se place dans le repère de la carte et pour uniformiser les choses on choisit pour attributs :
Par rapport à un rectangle, Le mur est un sprite : il va devoir être affiché dans la fenêtre graphique, grâce au mécanisme d’héritage on n'a pas besoin de refaire les méthodes les autres méthodes (vérifie_colision...) sont les mêmes.
Par rapport à un Mur, les briques vont être détruite avec un contact avec une balle. On va donc le faire hériter de Mur et lui donner une vie.
Le palet est un mur qui se déplace et qui réagit avec l'utilisateur, on va lui rajouter comme attributs sa vitesse (en pixel pour chaque étape de l'animation), ses limites de déplacement l1 et l2 (si vous ne voulez pas qu'il sorte de l'écran), son sens de déplacement (0 : horizontale, 1 : verticale), les touches de ses déplacements (par exemple "up" et "down" ) et un attribut déplacement (qui ne sera pas dans le constructeur) qui vaut soit 0, soit -vitesse, soit + vitesse. On va aussi lui donner comme méthode une fonction update(self) qui va changer sa position et une fonction action(self,evenement) qui va recevoir un événement EZ et modifier eventuellement l’attribut déplacement.
La balle hérite aussi de la classe Rectangle (c'est un choix, on peut aussi la faire heriter de Mur et surcharger la fonction dessin), elle ne sera pas ronde mais rectangulaire (seulement comme on va la dessiner ronde, l'illusion se fera). La balle est en mouvement, elle aura deux paramètres v_x et v_y (déplacement verticale et horizontale). Pour les rebonds, on fait le choix suivant, si on deplace la balle de v_x et si elle touche un objet alors v_x change de signe, on fait la même chose pour v_y. (Les rebonds sont donc moins bien géré que l'an dernier mais en réalité on ne voit pas la différence).
Il ne reste plus qu'a tout initialiser et lancer la boucle de jeu.
Améliorations possiblesComme vous le savez le repère d'EZ à les ordonnées orientées vers le bas et l'origine est sur le coin haut et gauche. Nous utiliserons cependant un autre repère (repère de la carte).
Pour passer des coordonnées du repère de la carte aux coordonnées à utiliser dans EZ, il faut utiliser les fonctions suivantes :
Une version améliorée du casse brique, allant plus loin dans la programmation orientée objet (plus de classe, utilisation de pygame à la place de EZ) faite par M. Picouleau Mathéo en 2021.