Architecture du Code Source (Python)

Le code source du jeu PFE-Roguelike est structuré en plusieurs modules distincts pour garantir la maintenabilité et la clarté. Chaque module a une responsabilité unique au sein de l'application. Vous pouvez explorer le code complet sur notre dépôt GitHub.

Outils et Technologies

Python TensorFlow PostgreSQL MongoDB GitHub Git VSCode

Module engine

Le cœur du jeu. Il gère la boucle principale, l'état du jeu, la génération de la carte et le moteur d'apprentissage par renforcement.

# Exemple simplifié de la boucle de jeu dans engine/game.py
class Game:
    def __init__(self):
        self.player = Player(...)
        self.map = Map()
        self.is_running = True

    def run(self):
        while self.is_running:
            self.handle_input()
            self.update_game_state()
            self.render()

Module entities

Définit les objets du jeu, comme le joueur, les monstres et autres PNJ. Contient leur logique de comportement et leurs attributs.

# Exemple de la classe Player dans entities/players.py
class Player:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.health = 100
        self.inventory = []

    def move(self, dx, dy):
        # Logique de mouvement et de collision
        self.x += dx
        self.y += dy

Module database

Gère toutes les interactions avec les bases de données. Sépare la logique de connexion pour PostgreSQL (données du jeu) et MongoDB (logs).

# Exemple de connexion dans database/db_sql.py
import psycopg2

def get_player_data(player_id):
    conn = psycopg2.connect(...)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM players WHERE id = %s", (player_id,))
    player_data = cursor.fetchone()
    cursor.close()
    conn.close()
    return player_data

Module items

Contient la définition de tous les objets que le joueur peut trouver et utiliser, comme les armes, les potions, et les équipements.

# Exemple de la classe Weapon dans items/weapon.py
from .item import Item

class Weapon(Item):
    def __init__(self, name, damage):
        super().__init__(name)
        self.damage = damage

    def use(self, target):
        target.take_damage(self.damage)

Module system

Gère la journalisation (logging), la configuration et d'autres fonctionnalités transversales qui soutiennent l'ensemble du système.

# Exemple de configuration du logger dans system/logging_setup.py
import logging

def setup_logger():
    logger = logging.getLogger('roguelike_logger')
    logger.setLevel(logging.INFO)
    handler = logging.FileHandler('game.log')
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    return logger