Aller au contenu

Lasero

Ce projet propose d'implanter un jeu vidéo relativement simple à l'aide de la bibliothèque Pygame. Il permet d'explorer les grands principes de base de la programmation de jeux vidéos en temps réel.

Difficile

Ce projet est relativement difficile. Attendez-vous donc à devoir y passer du temps et à galérer un peu si vous voulez le mener à bout. N'hésitez pas à poser des questions si besoin.

Il reste très intéressant de faire le début du projet, voir même de lire le sujet sans faire le projet, puisque ce projet explique les grands principes de fonctionnement d'un jeu vidéo en temps réel.

Présentation du jeu

Le principe du jeu est un bullet hell : le joueur doit survivre le plus longtemps possible en évitant des projectiles qui fusent à travers l'écran.

Voici un aperçu du jeu :

TODO prof insérer une capture d'écran

De nombreuses extensions sont possibles. Des idées avec des pistes d'implémentation sont données dans la partie extension. TODO prof lien vers la partie extension.

Déroulement

TODO prof AMELIORER cette section ?

On va progresser dans le projet de manière incrémentale, c'est à dire que l'on va procéder par étapes.

La première étape part de zéro et implémente un logiciel minimaliste, fonctionnant mais ne ressemblant pas du tout au jeu vidéo final.

Puis, à chaque étape successive, on va partir d'une version fonctionnelle du jeu, et lui apporter quelques améliorations pour créer une nouvelle version fonctionnelle un peu améliorée, jusqu'à arriver à la version finale.

L'avantage, c'est que peu importe à quelle étape on s'arrête, on aura toujours un jeu fonctionnel, même si ce n'est pas la version finale.

  1. Pygame est installé sur l'ordinateur. On affiche un cercle de couleur sur fond noir dans une fenêtre.
  2. Présentation des grands principes de fonctionnement d'un jeu vidéo. Utilisation de classes et d'objets.
  3. Acquisition des entrées clavier du joueur sous forme d'une commande de déplacement.
  4. Simulation des déplacement du personnage en réponse aux commande du joueur, sans affichage
  5. Affichage du personnage sous forme d'un cercle de couleur. Limitation des mouvements du personnage à l'écran.
  6. Affichage de projectiles immobiles à l'écran.
  7. Detection des collisions avec les projectiles. Une collision stoppe la partie.
  8. Appuyer sur R recommence la partie à partir de zéro.
  9. Déplacement des projectiles.
  10. Le joueur ne peut pas quitter l'écran.
  11. Les projectiles rebondissent contre les bords de l'écran.
  12. Un compte à rebours tourne durant la partie. Si il arrive à zéro, le joueur a gagné. La simulation est arrêtée et un message est écrit dans la console. Un message est également écrit si le joueur a perdu.
  13. Le compte a rebours est affiché en arrière plan en haut à gauche de l'écran, en secondes.
  14. Si le joueur gagne, VICTOIRE apparaît à l'écran, en arrière plan au centre de l'écran. Si il perds, un cercle est dessiné autour de la collision, et DEFAITE apparaît en arrière plan au centre de l'écran
  15. La partie démarre quand le joueur commence à déplacer le personnage.
  16. L'execution d'un niveau se fait sous forme d'un appel de fonction `jouer_niveau`, qui rends paramètrable l'état inital d'un niveau.
  17. Les projectiles peuvent avoir différentes tailles et vitesses.
  18. Le niveau joué est chargé à partir d'un fichier qui contient la position du joueur, le temps de survie attendu, et l'état initial de chaque projectile.
  19. Le jeu comporte un menu qui permet de selectionner un niveau parmi plusieurs fichiers.
  20. Dans le menu, le niveau sélectionné est affiché en arrière plan.

<!-- TODO une extension pourrait etre un mode multi ecran partagé, soit en coop (avec assistance/res par les alliés ?), soit en Versus, celui qui fait le plus haut score (et ptet que seules les cercles de la meme couleur ou couleur adverse font perdre en collision)?>