Un hommage à la célèbre franchise Zelda, recréé entièrement en Python avec des graphismes ASCII et des séquences d'échappement ANSI pour une expérience rétro authentique dans votre terminal.
Ce projet est une recréation du jeu classique "Zelda 2: The Adventure of Link" développé entièrement en Python. Le jeu utilise le terminal comme interface, avec des graphismes ASCII colorés et des animations en temps réel.
Système de combat, exploration de carte, rencontres aléatoires, NPCs interactifs et boss à affronter.
Explorez différents biomes : plaines, forêts, déserts, grottes, temples et palais.
Leveling, stats (vie, mana, attaque), objets à collecter et quêtes à accomplir.
Graphismes ASCII détaillés avec couleurs ANSI pour une expérience visuelle rétro.
Différents types d'ennemis avec des comportements d'IA uniques.
Dialogues, quêtes secondaires et système de récompenses.
Commandes : ZQSD pour se déplacer sur la carte | QD + Espace pour les combats | M pour attaquer | C pour s'accroupir | Entrée pour interagir avec les NPCs
import os
import sys
class Player: pass
def create(Name):
player = Player()
player.name = Name
player.level = {"Player_xp": 0, "Xp_for_new_level": 50}
player.stats = {"Life": 5, "Mana": 5, "Attack": 5}
player.items = {"Candle": 0, "O": 0, "Village1_statue": 0}
player.life = 20 * player.stats["Life"]
player.active_life = player.life
player.attack = 2 * player.stats["Attack"]
player.pos = [26, 27]
player.in_fight = False
return player
def run(data):
# Boucle de simulation principale
while 1:
interact(data) # Gestion des entrées clavier
show(data) # Affichage du jeu
live(data) # Logique du jeu (IA, physics, etc.)
time.sleep(data['timeStep'])
def interact(data):
if is_data():
KeyEnter = sys.stdin.read(1)
if KeyEnter == 'q':
new_pos = (pos[0], pos[1] - 1)
elif KeyEnter == 'd':
new_pos = (pos[0], pos[1] + 1)
elif KeyEnter == 'm':
Player.set_attack_cd(data['player'], 5)
# Détection des rencontres aléatoires dans les plaines
if cara_on_new_pos == '7':
Encounter = random.randint(0, 100)
if Encounter > 100 - data['Encounter_Chance']:
# Création des monstres
Mons1 = Monster.create("Blob", "W", 20, [10, 14], 30, 25, 1)
Mons2 = Monster.create("Humanoid", "T", 20, [10, 28], 40, 30, 2)
data['monster_list'] = [Mons1, Mons2]
Player.set_fight(data['player'], True)
Projet IPI 2024/
├── main.py # Point d'entrée et boucle de jeu principale
├── Player.py # Gestion du joueur (stats, inventaire, mouvement)
├── Monster.py # Système de monstres et IA ennemie
├── PNJ.py # NPCs et système de dialogue
├── Background.py # Gestion des cartes et affichage
├── Map.txt # Carte du monde principal
├── Temple.txt # Carte du temple de départ
├── Forest.txt # Arène de combat en forêt
├── Desert.txt # Arène de combat dans le désert
├── Cave*.txt # Différentes grottes avec objets
├── Town1.txt / Town2.txt # Villages avec NPCs
├── Palace*.txt # Palais final avec boss
└── Readme.txt # Instructions du jeu
Lecture des touches en temps réel avec termios et tty pour une expérience fluide.
Utilisation des séquences d'échappement ANSI pour les couleurs et le positionnement du curseur.
IA simple pour les monstres qui poursuivent le joueur et gèrent les collisions.
Structure de données complète pour gérer l'état du jeu, les stats et l'inventaire.
Système modulaire de chargement de cartes depuis des fichiers texte.
Commandes de débogage pour tester rapidement différentes parties du jeu.
# Cloner le repository
git clone https://github.com/MateoBourdin/ZeldaProject.git
# Naviguer dans le dossier du projet
cd ZeldaProject/"Projet IPI 2024"
# Lancer le jeu
python3 main.py
# Installer WSL
wsl --install
# Une fois dans WSL
cd /mnt/p/S1/Zelda/"Projet IPI 2024"
python3 main.py
Gestion de l'affichage avec les séquences d'échappement ANSI pour positionner le curseur et afficher des graphismes colorés dans le terminal sans bibliothèque externe.
Utilisation de termios et select pour lire les entrées clavier sans bloquer la boucle de jeu, permettant une réactivité en temps réel.
Implémentation d'un système de gravité, de sauts et de collisions pour les combats en side-scrolling.
Transition fluide entre la carte du monde et les scènes de combat, avec sauvegarde de position et gestion des différents biomes.
Le projet complet est disponible sur GitHub avec tout le code source, les assets et la documentation.
Explorer le Repository GitHub