1. Introduction

Mon objectif était de créer un jeu comprennent de la simulation physique. Je souhaitais simuler du mouvement et des collisions à partir de zéro, sans moteur physique. J'ai donc utilisé le moteur graphique Pygame ( de façon assez sommaire; en affichant uniquement des disques et des droites et pour lire les inputs du clavier) et ai volontairement ignoré les outils physiques de détection de collision qu'il proposait.

2. Matériel et méthodes

2.1 Matériel

-Le module Pygame

-L'éditeur Vi

2.2 Méthode

Pour ce projet, j'ai énormément utilisé les outils de géométrie vectorielle vus lors de mes cours de maths. Les fonctions de collision et de rebond utilisent des concepts comme les équations cartésiennes de droites ou encore la formule distance point-droite, chaque raisonnement géométrique est expliqué en détails dans le projet.

Ce choix m'a paru peu pratique au début, pour faire des collisions simples, entre une balle et une droite verticale ou horizontale, la géométrie vectorielle n'est pas du tout requise. Mais dès qu'il m'a fallu simuler des collisions avec des droites de nimporte quelle pente, la méthode s'est révélée assez utile. Cette méthode à un autre avantage, elle marche dans n'importe quelle dimention, les principes de géométrie vectorielle en 3D sont presque identiques à ceux de la 2D ce qui signifie que je pourrai réutiliser mes fonctions si je souhaitas créer un projet similaire en 3D. Il existait sans doute des méthodes plus simples pour s'occuper des collisions, mais pour ces deux raisons et (aussi car je trouvais cette méthode très intéressante) j'ai décidé d'utiliser la géométrie vectorielle.

3. Résultats

Le flipper est fonctionnel, les rebonds fonctionnent parfaitement toutefois j'ai des très nombreux regrets; étant donné la situation, je n'ai pas pû porter autant d'attention que j'aurais voulu à mon projet et il reste donc un grand nombre de problèmes que j'aurais dû résoudre:

- Lorsque la balle est à l'arret sur une plateforme, elle "vibre" car je la déplace de quelques pixels à chaque frame pour éviter qu'elle ne "clippe" dans la plateforme, ce problème aurait pû être résolu si je demandais à la balle de se déplacer non pas de quelques pixels mais de la distance exacte nécéssaire pour qu'elle ne soit en contact avec la plateforme qu'en 1 point.

-Un gros problème: je n'ai pas instauré de framerate fixe: ce qui veut dire que le programme s'exécute "aussi vite qu'il le peut" et la vitesse du jeu dépend de la puissance de l'ordinateur utilisé. Si vous vous retrouvez avec un ordinateur trop puissant et que le jeu est illisible, vous êtes libre de modifier ces trois variables : g (var globale), flipper speed et flipper fallSpeed (les deux dans la classe Object)

-J'ai commencé à incorporer des bumpers mais je n'ai pas eu le temps de les terminer. Je prévoyais d'ajouter un argument "power" à la fonction rebond: j'utiliserais la valeur 1 pour les rebonds classiques contre les murs mais j'aurai une variable propre à chaque bumper qui serait utilisée pour cet argument lors des rebonds contre les bumpers: dans la fonction rebond je multiplierai la vitesse finale donnée à la balle par cette variable, ainsi les bumpers pourraient propulser la balle avec de différentes forces.

-Au départ je prévoyais d'avoir des flipper semblant à des triangles avec une pointe arrondie, comme un flipper normal, mais je n'ai pas en le temps de mettre cela en place. Toutefois, cela ne demanderait pas de nouvelle fonction de collision: je devrais juste assembler différentes droites et cercles pour former les flippers.

-Je regrette également de ne pas avoir crée de menu, ni de début de partie un minimum développé ou le joueur pourrait lancer la balle lui même donnant une situation de départ différente à chaque session.

-La fonction "push", qui transmet la vitesse d'un flipper à la balle quand il la touche avec une vitesse, est plus ou moins fonctionnelle. Toutefois je regrette d'avoir utilisé la méthode que j'ai utilisée, j'aurais voulu utiliser les forces ou n'importe quel autre outil qui m'aurait permis de gérer un cas général d'une droite en mouvement qui propulse une balle. J'ai préféré opter pour la simplicité et m'en tenir à mon cas particulier d'un segment tournant autour d'un point, avec une vitesse constante et une balle sans masse qui "recoit" juste la vitesse du flipper pour se déplacer avec quand ce dernier la pousse.

-Je n'ai même pas pû m'essayer à ce que je pensais comme le grand défi de ce projet; la rotation de la balle.

4. Discussion

5. Conclusion

Le projet est fonctionnel mais il à encore trop de problèmes / fonctionnalités manquantes pour que je le considère comme terminé. Je pense continuer à travailler dessus pour résoudre certains de ces problèmes.

Références