Générer un personnage D&D - v1

Dans ce projet, vous allez utiliser Python pour créer un générateur de personnages pour le jeu de rôle Donjons et Dragons. Vous allez demander à l'utilisateur d'entrer des informations sur le personnage, générer des statistiques de personnage au hasard, calculer des modificateurs et des points de vie, et effectuer des tests de caractéristiques. À la fin du programme, vous devez afficher toutes les caractéristiques du personnage : nom, race, classe, caractéristiques avec modificateur, points d'XP, niveau...

Consignes

  • Nom du fichier : python_dnd_2024_[prenom].py
  • Une fois votre programme terminé, faites-le tourner 2 fois avec des scénarios différents et copiez-collez le contenu complet de la console dans des fichiers nommés python_dnd_2024_[prenom]_x.txt (où x vaut 1, 2).
  • Utilisez Thonny IDE pour réaliser votre projet. Vous pouvez utiliser Visual Studio Code s'il est configuré pour Python.
  • Utilisez des bons noms de variables.
  • Commentez votre code (ce qu'il fait, pourquoi vous avez écrit telle ligne de telle manière...).
  • Le code doit fonctionner au démarrage du programme. C'est-à-dire qu'il ne peut pas y avoir d'erreur de syntaxe au moment où on l'exécute. Pénalité : 20% des points en moins avant même de corriger la suite de l'exercice.
  • Déposez vos fichiers sur le site https://fichiers.ttrinfo.be dans le dossier v1.

Aides

  • Pour quitter un programme Python, utilisez la fonction exit().
  • Pour vérifier si une chaîne de caractères ne contient que des chiffres, utilisez la méthode isdigit(). Ex. : "1234".isdigit()True ou ma_variable.isdigit().

Étape 1 : Demander un nom, une race et une classe

1A. Nom

Demandez à l'utilisateur d'entrer un pseudo pour le personnage. Si le nom est vide, générez un pseudo en sélectionnant un animal et un adjectif au hasard parmi ces deux listes :

animaux = ["Souris", "Lapin", "Licorne", "Dragon", "Raton", "Biquette", "Cheval"]
adjectifs = ["Intrépide", "Sauvage", "Magique", "Badass", "Boloss", "Baltringue"]

Exemples :

  Choisissez un pseudo : `Soupe Herman`
  Vous avez choisi Soupe Herman.
  Choisissez un pseudo : (vide)
  J’ai choisi votre pseudo : Licorne Badass

1B. Choix de la race

Ensuite, affichez une liste de races possibles. Les races incluent : Humain, Elfe, Nain et Halfelin. L'utilisateur doit choisir parmi cette liste en tapant un numéro correspondant à l'option. Si l’utilisateur tape autre chose que des chiffres, quittez le programme. On suppose que l’utilisateur entre une valeur valide.

L'affichage à l'écran doit correspondre à ceci :

╔══════════════════════╗
║ Choisissez une race: ║
╚══════════════════════╝

1. Humain
2. Elfe
3. Nain
4. Halfelin

Veuillez entrer votre choix** : 2
Vous avez choisi Elfe.

1C. Choix de la classe

Demandez à l'utilisateur d'effectuer son choix de classe. Enregistrez son choix. Les classes incluent : Guerrier, Roublard, Sorcier, Magicien, Clerc, Barbare. Ajoutez une ligne "Au hasard" (manuellement) au menu. On suppose que l’utilisateur entre une valeur correcte. Si l’utilisateur tape autre chose que des chiffres, quittez le programme. On suppose que l’utilisateur entre une valeur valide.

L'affichage à l'écran doit correspondre à ceci :

╔════════════════════════╗
║ Choisissez une classe: ║
╚════════════════════════╝

1. Guerrier
2. Roublard
3. Sorcier
4. Magicien
5. Clerc
6. Barbare
7. Au hasard

Veuillez entrer votre choix : 3
Vous avez choisi la classe Sorcier.

Si la classe est connue/correcte, affichez le message : Vous avez choisi la classe [nom_de_classe]

Si l’utilisateur choisit l’option "Au hasard", affichez le message : J’ai choisi la classe [nom_de_classe] au hasard pour vous.

Exemple d’affichage :

╔════════════════════════╗
║ Choisissez une classe: ║
╚════════════════════════╝

1. Guerrier
2. Roublard
3. Sorcier
4. Magicien
5. Clerc
6. Barbare
7. Au hasard

Veuillez entrer votre choix: 7
J’ai choisi la classe Magicien pour vous.

Étape 2 : Générer les 6 caractéristiques au hasard

Les caractéristiques de base d'un personnage de Donjons et Dragons sont :

  • FOR : Force
  • DEX : Dextérité
  • CON : Constitution
  • INT : Intelligence
  • SAG : Sagesse
  • CHA : Charisme

Vous pouvez stocker ces caractéristiques dans 6 variables. Pour chaque caractéristique, générez un nombre entier aléatoire entre 1 et 20. Votre personnage a droit à un bonus de caractéristique en fonction de sa race :

  • Humain → +2 points à sa dextérité.
  • Nain → +2 points à sa force.
  • Elfe → +2 points à son charisme.
  • Halfelin → +2 points à sa constitution.

Incrémentez la caractéristique correspondante et affichez un message qui indique ce bonus.

Exemples :

  Votre Humain reçoit un bonus de 2 DEX._
  Avant : `DEX = 12`, après `DEX = 14`
  Votre Nain reçoit un bonus de 2 FOR._
  Avant : `FOR = 13`, après `FOR = 15`

Étape 3 : Calculer le modificateur de constitution

Le modificateur de constitution est calculé de la manière suivante :

  • Soustraire 10 de la caractéristique.
  • Diviser le résultat par 2.
  • Arrondir vers le bas.

Exemples :

  • Constitution = 14 → Modificateur = 2
  • Constitution = 8 → Modificateur = -1

Le modificateur ne change pas la valeur de la variable. Enregistrez la valeur du modificateur de constitution pour plus tard.

Affichez le modificateur:

Modificateur de constitution : 2

Étape 4 : Déterminer les points d'XP de votre personnage

Votre personnage possède un nombre de points d'expérience généré au hasard. Ces points doivent être un multiple de 200 compris entre 0 et 3400 inclus.

Si vous n'arrivez pas à générer ce nombre comme demandé, vous n'aurez pas les points pour l'exercice, mais vous pouvez générer n'importe quel nombre au hasard entre 200 et 3400 pour résoudre la question suivante.

Affichez l’XP de votre personnage :

XP : 2200

Étape 5 : Déterminer le niveau de votre personnage

Le niveau de votre personnage est fonction de son nombre de points d'expérience :

╔═════════╦════════╗
║   Pts   ║ Niveau ║
╠═════════╬════════╣
║  < 300  ║   1    ║
║  < 900  ║   2    ║
║ < 2700  ║   3    ║
║ < 6500  ║   4    ║
║ >= 6500 ║   5    ║
╚═════════╩════════╝

Affichez le niveau de votre personnage.

Exemple avec 1800 XP :

Niveau de votre personnage : 3

Étape 6 : Points de vie

Les points de vie de votre personnage sont calculés en additionnant ces valeurs :

  • Niveau * 8
  • Modificateur de constitution
  • Un nombre au hasard compris entre [1,4] (inclus) (équivaut à 1d4)

Affichez les points de vie : Points de vie : 17


Étape 7 : Objet magique

Votre personnage peut recevoir un objet magique en fonction du tableau suivant : (Vous ne devez pas afficher ce tableau)

╔════════════╦═══════════╦═════════════════════╗
║   Race     ║ Dextérité ║ Objet Magique       ║
╠════════════╬═══════════╬═════════════════════╣
║ Humain     ║    > 15   ║ Excalibur           ║
║ Elfe       ║    > 12   ║ Baguette de Sureau  ║
║ Nain       ║    > 13   ║ Hache Ipar Mentier  ║
║ Halfelin   ║    > 14   ║ Sabre Laz Air       ║
╚════════════╩═══════════╩═════════════════════╝

Dans tous les autres cas, l’objet sera « Haricots ».

Vous devez afficher si votre personnage reçoit un objet magique :

Votre Guerrier a reçu : Grande épée

Si votre personnage ne reçoit pas d'objet magique, ne rien afficher.

Enregistrez cette valeur pour plus tard.


Étape 8 : Affichage de votre personnage

À la fin du programme, affichez votre personnage selon le modèle ci-dessous.

╔═══════════════════╗
║ Votre personnage: ║
╚═══════════════════╝

- Nom : Prof
- Race : Elfe
- Classe : Guerrier
- Points d'XP : 600
- Niveau : 2
- Objet Magique : Excalibur

╔═══════════════════╗
║ Caractéristiques: ║
╚═══════════════════╝

- Force : 10
- Dextérité : 18
- Constitution : 17
  - BONUS : +3
- Intelligence : 6
- Sagesse : 19
- Charisme : 13
- Points de vie : 13

Affichage de la constitution

  • S'il est = 0, ne rien écrire.
  • Si le modificateur de constitution est négatif, écrire "MALUS -2".
  • S'il est positif écrire "BONUS +3" (il faut afficher le signe "+").

Exemple d'exécution complète

Nom du personnage : Prof

-------------------------------------------------------
Choisissez une race:
1. Humain
2. Elfe
3. Nain
4. Halfelin

Veuillez entrer votre choix: 2
Vous avez choisi Elfe.
-------------------------------------------------------
Choisissez une classe:
1. Guerrier
2. Roublard
3. Sorcier
4. Magicien
5. Clerc
6. Barbare

Veuillez entrer votre choix: 3
Vous avez choisi la classe Sorcier.
-------------------------------------------------------

Votre Humain reçoit un bonus de 2 DEX.
-------------------------------------------------------

Modificateur de constitution : 2
XP: 2220
Niveau de votre personnage: 3
Points de vie: 17
Votre Guerrier a reçu: Grande épée
╔═══════════════════╗
║ Votre personnage: ║
╚═══════════════════╝

- Nom : Prof
- Race : Humain
- Classe : Guerrier
- Points d'XP : 450
- Niveau : 2
- Objet Magique : Excalibur

╔═══════════════════╗
║ Caractéristiques: ║
╚═══════════════════╝

- Force : 10
- Dextérité : 18
- Constitution : 17
  - BONUS : +3
- Intelligence : 6
- Sagesse : 19
- Charisme : 13
- Points de vie : 13

Bonus 1 : Titres encadrés

Créez une fonction encadre qui affiche les titres encadrés.

Exemple :

╔════════════════════════╗
║ Choisissez une classe: ║
╚════════════════════════╝

Cette fonction reçoit le texte à afficher en paramètre :

def encadre(texte):
    # Votre code ici

# Appel de la fonction
encadre("Choisissez une classe")

Astuces :

  • La taille du cadre dépend de la taille du texte.
  • En Python, "-" * 10 écrit "----------".

Bonus 2 : Comment écrire les caractères spéciaux pour les tableaux

Il faut utiliser la touche alt + un nombre tapé au pavé numérique.

Voici les combinaisons dont vous aurez besoin :

┌───┬─────────┐
│ ╔ │ alt-201 │
│   │         │
│ ═ │ alt-205 │
│   │         │
│ ║ │ alt-186 │
│   │         │
│ ╗ │ alt-187 │
│   │         │
│ ╚ │ alt-200 │
│   │         │
│ ╝ │ alt-188 │
└───┴─────────┘

Cela devrait fournir une conversion fidèle de votre document en Markdown, tout en maintenant la structure et la lisibilité du contenu.

Pour aller plus loin