← Retour aux projets

Jeu RPG 2D en Python

Projet de Terminale NSI - 2026

À propos du projet

Ce projet est un jeu RPG 2D développé en Python en groupe de 3 pour le cours de Numérique et Sciences Informatiques (NSI) de terminale. Le jeu combine des mécaniques classiques de RPG avec une base de données SQL pour la gestion des données des joueurs et du monde du jeu. Nous avions une limite d'un mois et demi pour le concevoir, le coder et préparer une présentation de 10 minutes évaluée qui comporte: un cahier des charges du projet, une analyse fonctionnelle et une présentation sur Canva.

Visuels et Fonctionnalités

Arcade Python

Gameplay

Monde 2D avec système de combat au tour par tour, Amélioration des statistiques du personnage et difficulté progressive

SQL

Base de Données

Utilisation de SQL pour stocker les données des joueurs, des monstres, des armes et de la progression avec un identifiant unique par joueur.

GitHub

Collaboration

Travail en équipe via GitHub avec gestion de versions et organisation des tâches

📊

Statistiques

Système complet de progression avec niveaux, expérience et amélioration de statistiques

Extraits de Code

Gestion de la Base de Données

class checkDB :

import mysql.connector
import os

def createDB():
    """
    Supprime la base de données si elle existe, puis la recrée avec les tables.
    """
    mydb = mysql.connector.connect(
      host="localhost",
      user="root",
    )

    mycursor = mydb.cursor()

    mycursor.execute("SHOW DATABASES")


    dbPresent = False
    for base in mycursor:
        if base[0] == "testosterone":
            dbPresent = True


    if dbPresent:
        mycursor.execute("DROP DATABASE testosterone")
        print("Base de données supprimée.")
    
    
    mycursor.execute("CREATE DATABASE testosterone")
    print("Base de données créée.")
    mydb = mysql.connector.connect(
      host="localhost",
      user="root",
      database="testosterone"
    )
    mycursor = mydb.cursor()

    with open(os.path.join(os.path.dirname(__file__), 'testosterone.sql'), 'r', encoding='utf-8') as f:
        sql = f.read()
        try:
            # Diviser les requêtes par point-virgule et les exécuter une par une
            for query in sql.split(';'):
                query = query.strip()
                if query:
                    mycursor.execute(query)
            print("Tables créées avec succès.")
        except mysql.connector.Error as e:
            print(f"Erreur lors de l'exécution du script SQL : {e}")
            return False
    
    mydb.commit()
    return False

if __name__ == '__main__':
    result = createDB()
    print("Terminé.")

Apparition des ennemis

class FightScene :
           for i in range(self.nbEnemies):
            if self.AllEnemy.GetAllEnnemies()[i][0] == "Singe":
                self.ennemies[i] = [self.AllEnemy.ennemies[i],
                                    arcade.Sprite(os.path.join(os.path.dirname(__file__), "..", "Images", "banana.png"), scale=0.5),
                                    False]
            elif self.AllEnemy.GetAllEnnemies()[i][0] == "Araignee":
                self.ennemies[i] = [self.AllEnemy.ennemies[i],
                                    arcade.Sprite(os.path.join(os.path.dirname(__file__), "..", "Images", "spider.png"), scale=0.06),
                                    False]
            elif self.AllEnemy.GetAllEnnemies()[i][0] == "Gorille":
                self.ennemies[i] = [self.AllEnemy.ennemies[i],
                                    arcade.Sprite(os.path.join(os.path.dirname(__file__), "..", "Images", "gorilla.png"), scale=0.4),
                                    False]
            elif self.AllEnemy.GetAllEnnemies()[i][0] == "Oazo":
                self.ennemies[i] = [self.AllEnemy.ennemies[i],
                                    arcade.Sprite(os.path.join(os.path.dirname(__file__), "..", "Images", "ouaso.png"), scale=0.4),
                                    False]
            elif self.AllEnemy.GetAllEnnemies()[i][0] == "Gro-oazo":
                self.ennemies[i] = [self.AllEnemy.ennemies[i],
                                    arcade.Sprite(os.path.join(os.path.dirname(__file__), "..", "Images", "groazo.png"), scale=0.6),
                                    False]
            elif self.AllEnemy.GetAllEnnemies()[i][0] == "Ours":
                self.ennemies[i] = [self.AllEnemy.ennemies[i],
                                    arcade.Sprite(os.path.join(os.path.dirname(__file__), "..", "Images", "ours.png"), scale=0.4),
                                    False]

Télécharger le Projet

Vous pouvez accéder au code source du projet sur notre dépôt GitHub.

Prérequis

  • Python 3.8 ou supérieur
  • Bibliothèque Python Arcade (pour l'affichage graphique)
  • MySQL (pour la gestion de la base de données)

Installation dans l'invite de commandes :

pip install arcade
pip install mysql.connector 

Pour lancer le jeu :

Exécutez le script check_db.py pour initialiser 
la base de données
Lancez Main.py pour démarrer le jeu.

Apprentissages Clés