Tu ajoutes trois nouvelles fonctionnalités à ton générateur de superhéros : des couleurs dans la console avec Rich, un bonus de caractéristique lancé au dé, et un combat final contre un boss.
Ces étapes complÚtent ton programme de superhéros. Tu pars du code que tu as
déjà écrit (origine, caractéristiques force, agilite, intelligence,
enduranceâŠ) et tu lui ajoutes de la couleur, un bonus et un combat.
for et d'une condition.On veut colorier certains textes dans la console pour rendre le programme plus lisible â sans changer la structure du code.
Rich n'est pas installé par défaut. Dans Thonny :
rich dans la barre de rechercheAjoute cette ligne tout en haut du fichier, avec les autres imports :
from rich import print
đĄ Cette seule ligne remplace silencieusement le
print()de Python par celui de Rich. Ton code existant ne change pas du tout. La différence : tu peux maintenant ajouter des balises de couleur dans tes textes.
On entoure le texte Ă colorier avec des balises entre crochets :
print("[bold green]Victoire ![/bold green]")
print("[bold red]Défaite...[/bold red]")
print(f"Score : [yellow]{score}[/yellow]")
print("[dim]Texte discret[/dim]")
Les couleurs : red green yellow cyan magenta blue white
Les styles : bold (gras) · italic · dim (atténué)
â ïž RĂšgle de lisibilitĂ© : colorie uniquement les valeurs importantes (rĂ©sultats, erreurs, succĂšs). Garde le texte descriptif en blanc normal. Trop de couleurs = aucune couleur.
Ton origine t'accorde un bonus sur une caractéristique. On lance un dé à 6 faces (d6) et on ajoute le résultat à la stat correspondante.
Chaque origine booste une stat différente :
| Origine | Stat boostée |
|---|---|
| Mutation génétique | Force |
| Technologie | Agilité |
| Magie ancienne | Intelligence |
| Radioactivité | Endurance |
On a besoin du nom de la stat boostĂ©e pour l'afficher â liste parallĂšle.
On a besoin de modifier la variable â if/elif (comme Ă l'Ă©tape 5).
đĄ Les deux listes
originesetboost_nomsdoivent ĂȘtre dĂ©finies au mĂȘme endroit que les autres, tout en haut du programme.
# Ă ajouter en haut, avec les autres listes
boost_noms = ["Force", "Agilité", "Intelligence", "Endurance"]
# --- Ătape 5.5 ---
# On récupÚre le nom de la stat boostée grùce à l'index du choix
stat_boostee = boost_noms[choix]
# On lance un d6
bonus = random.randint(1, 6)
# On applique le bonus Ă la bonne variable
if choix == 0:
force += bonus
elif choix == 1:
agilite += bonus
elif choix == 2:
intelligence += bonus
elif choix == 3:
endurance += bonus
print(f"[bold yellow]⥠Bonus d6 : +{bonus} en {stat_boostee}[/bold yellow]")
print(f"[dim]{stat_boostee} passe Ă {intelligence}[/dim]")
đĄ
force += bonusest une écriture courte pourforce = force + bonus.
⥠Bonus d6 : +4 en Intelligence â en jaune gras
Intelligence passe Ă 22 â en gris discret
Ton héros affronte un boss. Le combat se résout en deux étapes :
force + intelligenceOn rĂ©pĂšte le mĂȘme lancer un certain nombre de fois.
âĄïž Le nombre de rĂ©pĂ©titions est connu Ă l'avance â boucle for.
Pour la victoire ou la dĂ©faite â rĂ©sultat diffĂ©rent selon une condition â if/else.
Le boss doit ĂȘtre difficile mais pas impossible Ă battre. La formule choisie garantit environ 50 % de chances de victoire :
boss_pv = nb_coups * 3 + random.randint(0, nb_coups)
đ§ Pourquoi ça marche ?
Chaque d6 donne en moyenne 3.5. Donc la somme des lancers tourne autour de
nb_coups Ă 3.5. Le boss a entrenb_coups Ă 3etnb_coups Ă 4PV â ce qui le place juste autour de cette moyenne. RĂ©sultat : une chance sur deux de gagner, quelle que soit la valeur denb_coups.
nb_coups = force + intelligence
boss_pv = nb_coups * 3 + random.randint(0, nb_coups)
print(f"\n[bold red]đč Boss â Points de vie : {boss_pv}[/bold red]")
print(f"Tu lances [white]{nb_coups}[/white] dés (force {force} + intelligence {intelligence})")
# Lancer nb_coups dés et additionner les résultats
total_degats = 0
for i in range(nb_coups):
total_degats += random.randint(1, 6)
print(f"Dégùts infligés : [bold white]{total_degats}[/bold white]")
# Résultat du combat
if total_degats > boss_pv:
print(f"[bold green]â Combat GAGNĂ ! ({total_degats} > {boss_pv})[/bold green]")
else:
print(f"[bold red]â Combat PERDU. ({total_degats} †{boss_pv})[/bold red]")
đč Boss â Points de vie : 78 â en rouge gras
Tu lances 24 dés (force 9 + intelligence 15)
Dégùts infligés : 83
â Combat GAGNĂ ! (83 > 78) â en vert gras
Au lieu d'un seul combat, ton héros dispute 3 combats contre des boss différents. On compte ses victoires.
NB_COMBATS = 3
victoires = 0
for combat in range(NB_COMBATS):
# Chaque boss a ses propres PV
pv_boss = nb_coups * 3 + random.randint(0, nb_coups)
degats = sum(random.randint(1, 6) for _ in range(nb_coups))
if degats > pv_boss:
victoires += 1
print(f" Combat {combat + 1} : [green]Victoire[/green] ({degats} vs {pv_boss})")
else:
print(f" Combat {combat + 1} : [red]Défaite[/red] ({degats} vs {pv_boss})")
print(f"\n[bold]Résultat final : {victoires}/{NB_COMBATS} victoires[/bold]")
đĄ
sum(... for _ in range(n))est une façon compacte de lancerndĂ©s et d'additionner les rĂ©sultats d'un coup. C'est Ă©quivalent Ă la boucleforci-dessus â Ă toi de choisir celle que tu prĂ©fĂšres.
Combat 1 : Victoire (88 vs 81) â Victoire en vert
Combat 2 : DĂ©faite (71 vs 79) â DĂ©faite en rouge
Combat 3 : Victoire (92 vs 85) â Victoire en vert
Résultat final : 2/3 victoires
boost_noms) sert à retrouver un texte à partir d'un index.+= est un raccourci pour ajouter une valeur à une variable existante.for répÚte un lancer un nombre de fois connu à l'avance.if/else choisit entre deux issues (victoire / défaite).