Aller au contenu principal

🧪 TP3 – Super RPG Infini


🎯 Objectif du TP3

Bâtir, en console C#, un petit jeux en trois parties :

Partie 1 – Navigation dans un donjon

  • 🏰 Un donjon 3x3 représenté par une grille
  • 👣 Déplacement du joueur (Nord, Sud, Est, Ouest)
  • Suivi des salles visitées
  • 🎭 Affichage de la position du joueur et du donjon en console
  • 🔄 Boucle de navigation avec option Quitter
  • 🏆 Fin de partie

Partie 2 – Créer de nouveaux donjons

  • Détails à venir

Partie 3 – Évènements dans les salles du donjon

  • Détails à venir

🔹 Progression

Partie 1 – Donjon

  1. Définir les variables et le tableau du donjon
  2. Afficher le donjon avec la position du joueur
  3. Proposer des déplacements valides (N, S, E, O)
  4. Mettre à jour la position et marquer les salles visitées
  5. Créer un menu de navigation complet
  6. Fin de la partie

🏰 Partie 1 – Navigation dans un donjon


Étape 1 — Définir les variables et le tableau du donjon

🎯 Objectif

Mettre en place un donjon simple sous forme de grille (3x3) dans lequel le joueur pourra se déplacer.
Chaque salle est représentée par un emoji pour rendre l’affichage plus visuel.


1️⃣ Définir le donjon

On utilise un tableau à 2 dimensions (string[,]) pour représenter le donjon.
Chaque case contient un symbole qui représente une salle.

// Ajout d'un donjon (3x3)
static string[,] donjon = new string[3, 3]
{
{ "🗿", "💀", "💎" },
{ "👹", "🧙‍", "🗝" },
{ "🚪", "🧟", "👺" }
};

👉 Ici le donjon est une grille de 3 lignes × 3 colonnes.
Exemple visuel :

🗿   💀   💎
👹 🧙‍ 🗝
🚪 🧟 👺

2️⃣ Suivi des salles visitées

On doit savoir si une salle a déjà été visitée par le joueur ou non.
On crée donc un tableau parallèle de booléens (true ou false) :

// Pour savoir si une pièce a été visitée ou non
static bool[,] donjonVisite = new bool[3, 3];

👉 Au départ toutes les cases contiennent false (non visitées).
On mettra true lorsqu’un joueur entre dans une salle.


3️⃣ Position du joueur

On garde la position du joueur avec deux entiers :

// Position du joueur dans le donjon
static int positionLigne = 0, positionColonne = 0;
  • positionLigne → ligne (0 = première ligne, 1 = deuxième, etc.)
  • positionColonne → colonne (0 = première colonne, 1 = deuxième, etc.)

👉 Au départ le joueur est placé en haut à gauche (0,0).


✅ Test rapide

Ajoute un affichage temporaire dans Tests() :

Console.WriteLine("=== Donjon initial ===");
for (int ligne = 0; ligne < donjon.GetLength(0); ligne++)
{
for (int colonne = 0; colonne < donjon.GetLength(1); colonne++)
{
Console.Write(donjon[ligne, colonne] + " ");
}
Console.WriteLine();
}

Console.WriteLine($"Position du joueur : ({positionLigne},{positionColonne})");

🎬 Résultat attendu

=== Donjon initial ===
🗿 💀 💎
👹 🧙‍ 🗝
🚪 🧟 👺
Position du joueur : (0,0)

👉 Prochaine étape : afficher le donjon avec la position du joueur mise en évidence (par exemple avec "😃" à la place de la case).

Étape 2 — Afficher le donjon avec la position du joueur

🎯 Objectif

Mettre en place une fonction qui permet :

  • d’afficher le donjon (3x3) en console
  • de montrer la position du joueur avec un emoji distinct (ex. 😃)
  • de différencier les salles visitées et non visitées

1️⃣ Instructions

  1. Parcourir toutes les cases du donjon avec deux boucles imbriquées (une pour les lignes, une pour les colonnes).
  2. Pour chaque case :
    • Si la position du joueur correspond à la case (positionLigne, positionColonne) → afficher un emoji spécial pour représenter le joueur.
    • Sinon → afficher l’emoji de la salle.
  3. Modifier la couleur ou le style selon si la salle a déjà été visitée (donjonVisite[ligne, colonne] == true).
  4. N’oubliez pas de revenir à la ligne après chaque rangée pour bien afficher la grille 3x3.
  5. 💡 Astuce : vous pouvez aussi changer la couleur de fond avec Console.BackgroundColor pour encore mieux différencier les cases.

2️⃣ Pseudo-code

fonction AfficherDonjon()
pour ligne de 0 à 2
pour colonne de 0 à 2
si (ligne == positionLigne et colonne == positionColonne)
afficher "emoji joueur"
sinon si (donjonVisite[ligne, colonne] == vrai)
afficher "emoji de la salle en mode visité"
sinon
afficher "emoji de la salle en mode non visité"
fin pour
saut de ligne dans la console
fin pour
fin fonction

3️⃣ Test rapide

Dans votre fonction Tests() :

  • Marquez la salle de départ comme visitée (donjonVisite[positionLigne, positionColonne] = true).
  • Appelez AfficherDonjon().
  • Simulez la visite d’une autre salle en modifiant donjonVisite[ligne, colonne] et affichez de nouveau.

🎬 Résultat attendu

  • Le joueur apparaît avec un emoji distinct (😃 par exemple).
  • Les salles visitées apparaissent dans un style différent (ex. gris).
  • Les salles non visitées apparaissent normales (ex. cyan).
  • On peut aussi utiliser une couleur de fond différente pour mieux distinguer les cases.
  • La grille 3x3 du donjon est correctement affichée.

Étape 3 — Afficher les options de déplacement

🎯 Objectif

Permettre au joueur de voir dans quelles directions il peut se déplacer à partir de sa position actuelle dans le donjon.


1️⃣ Schéma du donjon (coordonnées)

    (0, 0) ──► colonne



ligne
  • positionLigne → position verticale (lignes)
  • positionColonne → position horizontale (colonnes)

2️⃣ Instructions

  1. Crée une fonction AfficherOptionsDeplacement().
  2. Vérifie la position actuelle du joueur avec positionLigne et positionColonne.
  3. Si un déplacement est possible, affiche la direction correspondante :
    • Nord (N) → positionLigne > 0
    • Sud (S) → positionLigne < donjon.GetLength(0) - 1
    • Ouest (O) → positionColonne > 0
    • Est (E) → positionColonne < donjon.GetLength(1) - 1
  4. Si une direction n’est pas possible (bord du donjon), ne rien afficher pour cette direction.

3️⃣ Pseudo-code

fonction AfficherOptionsDeplacement()
si positionLigne > 0
afficher "N → Une salle au nord"

si positionLigne < donjon.GetLength(0) - 1
afficher "S → Une salle au sud"

si positionColonne > 0
afficher "O → Une salle à l’ouest"

si positionColonne < donjon.GetLength(1) - 1
afficher "E → Une salle à l’est"
fin fonction

✅ Test rapide

Ajoute dans ta fonction Tests() :

AfficherOptionsDeplacement();

Déplace manuellement positionLigne et positionColonne pour vérifier que les directions affichées sont correctes selon la position.


🎬 Résultat attendu

  • Si le joueur est en haut à gauche (0,0) → seulement Est et Sud sont possibles.
  • Si le joueur est au centre (1,1) → toutes les directions sont possibles.
  • Si le joueur est en bas à droite (2,2) → seulement Nord et Ouest sont possibles.

Étape 4 — Menu de navigation

🎯 Objectif

Créer un menu interactif permettant au joueur de se déplacer dans le donjon jusqu’à ce qu’il choisisse de quitter.


1️⃣ Instructions

  1. Créer une fonction MenuNavigation().
  2. Marquer la case de départ comme visitée (donjonVisite[positionLigne, positionColonne] = true;).
  3. Dans une boucle infinie (for(;;) ou while(true)), faire :
    • Afficher le donjon (AfficherDonjon())
    • Afficher les options de déplacement (AfficherOptionsDeplacement())
    • Afficher l’option Q → Quitter
    • Lire le choix de l’utilisateur
    • Si choix = Q → sortir de la fonction
    • Sinon → appeler DeplacerJoueur(choix)
  4. Répéter tant que l’utilisateur n’a pas quitté.

2️⃣ Pseudo-code

fonction MenuNavigation()
marquer la case (positionLigne, positionColonne) comme visitée

répéter indéfiniment
afficher donjon
afficher options de déplacement
afficher "Q → Quitter"

lire le choix du joueur

si choix == "Q"
sortir de la boucle

sinon
DeplacerJoueur(choix)
fin fonction

3️⃣ Test rapide

Ajoute dans Main() :

MenuNavigation();

🎬 Résultat attendu

  • Le joueur voit le donjon et sa position (😃).
  • Les salles visitées changent de couleur (ou état).
  • Les options de déplacement disponibles s’affichent selon la position.
  • Entrer une direction valide → déplace le joueur.
  • Entrer Q → quitte la navigation.

Étape 5 — Déplacer le joueur

🎯 Objectif

Mettre à jour la position du joueur dans le donjon en fonction du choix de direction, et marquer la nouvelle salle comme visitée.


1️⃣ Instructions

  1. Créer une fonction DeplacerJoueur(string choix).
  2. Vérifier la direction choisie (N, S, O, E).
  3. Mettre à jour positionLigne ou positionColonne seulement si le déplacement est possible (ne pas sortir du donjon).
  4. Si le choix est invalide → afficher "Choix invalide.".
  5. Marquer la nouvelle position comme visitée dans donjonVisite.

2️⃣ Pseudo-code

fonction DeplacerJoueur(choix)
si choix == "N" et positionLigne > 0
positionLigne--
sinon si choix == "S" et positionLigne < donjon.GetLength(0) - 1
positionLigne++
sinon si choix == "O" et positionColonne > 0
positionColonne--
sinon si choix == "E" et positionColonne < donjon.GetLength(1) - 1
positionColonne++
sinon
afficher "Choix invalide"

donjonVisite[positionLigne, positionColonne] = vrai
fin fonction

3️⃣ Test rapide

Ajoute dans ta fonction Tests() :

positionLigne = 1; positionColonne = 1; // départ au centre
AfficherDonjon();

DeplacerJoueur("N"); // vers le nord
AfficherDonjon();

DeplacerJoueur("O"); // vers l’ouest
AfficherDonjon();

DeplacerJoueur("X"); // choix invalide

🎬 Résultat attendu

  • Le joueur (😃) se déplace dans le donjon selon les directions valides.
  • Si une case est revisitée → elle reste marquée comme visitée (donjonVisite[ligne, colonne] = true).
  • Un choix invalide affiche "Choix invalide." et ne déplace pas le joueur.

Étape 6 — Fin de la partie

🎯 Objectif

Valider que le joueur la position du jouer et regarder s'il a récupérer la clé.


1️⃣ Instructions

  1. Ajouter une variable globale pour savoir le joueur possede la clé
// Devient true lorsqu'on est sur "🗝"
static bool possedeCle = false;

👉 Lorsque l'on se déplace dans la salle contenant "🗝", la variable possedeCle devient égale à true 2. Créer une fonction FinDePartie(). 3. Vérifier si le joueur est sur la porte de sortie "🚪". 4. Vérifier si le joueur a récupérer la clé pour débarrer la porte "🗝". 5. Si le joueur est sur la porte, mais il n'est pas en possession de la clé, afficher "La porte est verrouillée. Vous avez besoin de la clé.". 6. Si le joueur est sur la porte et qu'il possede la clé, afficher un message de victoire " 🎉 Victoire! 🥳 " et retourne la valeur true.


2️⃣ Pseudo-code

fonction FinDePartie()
si donjon[positionLigne, positionColonne] != "🚪"
retourne faux

si !possedeCle
afficher "La porte est verrouillée. Vous avez besoin de la clé."
retourne faux
sinon
afficher " 🎉 Victoire! 🥳 "
retourne vrai
fin fonction

3️⃣ Test rapide

Ajoute dans ta fonction Tests() :

possedeCle = false;
positionLigne = 2; positionColonne = 0; // départ sur la porte
FinDePartie(); // On a besoin de la clé

positionLigne = 0; positionColonne = 0; // une position différente de la porte
FinDePartie(); // On n'est pas sur la porte, la fonction n'affiche rien

possedeCle = true;
positionLigne = 2; positionColonne = 0; // départ sur la porte
FinDePartie(); // Victoire!

🎬 Résultat attendu

  • Lorsque le joueur est sur une casse différente de "🚪", la fonction n'affiche rien et elle retourne false.
  • Lorsque le joueur est sur une casse différente de "🚪", mais qu'il ne possède pas la "🗝", la fonction affiche que la porte est barrée et elle retourne false.
  • Lorsque le joueur est sur la casse "🚪" et qu'il possèede la "🗝", la fonction affiche un message de victoire, elle retourne true et le jeu se termine (on quitte la boucle du menu de navigation).
Attention!

Tu devras placer la fonction FinDePartie() au bon endroit dans ta boucle du menu de navigation pour être capable de quitter le seul lors de la victoire