Media

NSI Impostor

2023 - 2024
  • Dev de jeux vidéos
  • Python
  • Pygame
  • Projet perso

NSI Impostor est un jeu que j'ai développé en Python à l'aide de la librairie Pygame, en mettant en place de nombreux systèmes de jeu.

Avant tout, un aperçu du projet

Contexte et idée de départ

Lorsque j'étais au lycée en terminale, ayant comme spécialité NSI (Numériques et Sciences Informatiques), j'ai reçu comme consigne de créer un projet suffisamment important pour qu'il prenne plusieurs mois à réaliser. J'ai donc décidé de créer un jeu en Python (langage que nous étudiions à ce moment-là) que j'ai nommé NSI Impostor. J'ai donc mis en place des systèmes de jeu : affichage graphique, états de jeu, maps, gestion des animations, déplacements du personnage, collisions, dialogues, PNJs, interactions avec les PNJs et même des cinématiques !

NSI Impostor est un jeu en 2D en vue de dessus qui consiste à enquêter et à percer les secrets d'un mystère tout en ne se faisant pas remarquer par un groupe de malfaiteurs. Le personnage possède une barre de suspicion, visible en haut de l'écran. Si celle-ci est remplie, cela signifie que le joueur a été repéré par les malfaiteurs et qu'il a donc échoué son enquête, c'est la fin du jeu. Le jeu est divisé en 2 parties qui se répètent jusqu'à la fin du jeu, la phase de Classe et la phase de Vadrouille. Pendant la phase de classe, le joueur doit effectuer des tâches dans une salle de classe (répondre à des QCMs, faire des tâches sur ordinateur, etc.). S'il n'arrive pas à accomplir les tâches (exemple : trop de mauvaises réponses au QCM), sa barre de suspicion augmente d'un cran. La phase de Vadrouille permet au joueur de se balader librement dans le lycée afin d'enquêter. A chaque nouveau cycle, l'environnement du lycée change (nouveaux PNJs, nouvelles salles accessibles) permettant de nouvelles découvertes. Afin d'enquêter, le joueur peut se déplacer, interagir avec les PNJs, interagir avec des objets, etc. Des cinématiques peuvent également se déclencher dans certaines conditions et faire avancer l'histoire.

Réalisation du projet

Etats du jeu et boucle principale

Le jeu fonctionne grâce à un système d'états géré par une pile. La boucle de jeu principale qui se trouve dans le main, effectue principalement les actions suivantes :

  • Sélectionne l'état du jeu au sommet de la pile (exemple : le menu principal ou la phase de Vadrouille)
  • Mise à jour de celui-ci
  • Affichage de celui-ci

Systèmes de jeu

Pour réaliser le jeu, j'ai dû mettre en place de nombreux systèmes :

  • Entités et sprites
  • Système de collisions
  • Interface utilisateur comme des menus ou des overlays (barre de suspicion)
  • Interactions avec les PNJs et avec des éléments du décor
  • Dialogues avec les PNJs
  • Sauvegarde de la partie et possibilité de la charger

J'ai également mis en place une fonctionnalité dont je suis plutôt fier : un système de cinématique complètement customisable qu'il est possible de créer directement sur Tiled, en plaçant des points de passage de PNJs, des dialogues, etc.

Gestion des maps

Pour pouvoir créer des maps facilement, j'ai utilisé le logiciel Tiled, que j'ai combiné au module Pytmx afin de les importer. Les maps possèdent des "layers", ce qui permet de répliquer précisément leur apparence une fois dans le jeu (Affichage des éléments dans le bon ordre). Lors de la création des maps, mon workflow était donc le suivant :

  1. Créer le level dans Tiled, définir ses élements
  2. Charger la map dans le jeu avec Pytmx
  3. Récupérer ses éléments et créer les objets correspondants (ex: une chaise définit à une certaine position donnera comme résultat un sprite de chaise avec une collision).

Les éléments que j'ai définis sur Tiled sont les suivants :

  • Positions des PNJs et leur chemin (s'ils sont mobiles)
  • Zones de collisions (murs)
  • Zones d'interactions
  • Media
  • Media

Design du jeu et création des éléments visuels

J'ai moi-même designé et créé les sprites, leurs animations ainsi que les tilesets ! Pour ça, j'ai utilisé le site Piskel et la version Trial d'Aseprite. C'était une partie du projet plutôt intéressante et créative à faire.

  • Media
  • Media