Un peu de Tkinter¶
Jusqu’ici, votre jeu fonctionne entièrement en console :
- des
print - des
input - une boucle de jeu bien linéaire
Et même si c'est fonctionnel, c'est pas forcément ce qu'il y a de plus agréable à utiliser.
On va donc voir comment donner à ce même jeu une interface graphique.
Point très important (à lire)¶
Cette partie est :
- optionnelle
- un bonus
- non bloquante
Si votre jeu fonctionne en console, vous avez quand même réussi le boss final.
Mais pour la satisfaction personnelle, c'est quand même mieux d'avoir un programme stylé en récompense de tous vos efforts.
Le principe général¶
Au lieu d’utiliser directement :
print("Un zombie attaque !")
choix = input("Votre choix : ")
On va utiliser une interface fournie, qui se comporte comme un terminal graphique.
Par exemple :
ui.print("Un zombie attaque !")
choix = ui.input("Votre choix : ")
Même logique. Même raisonnement. Mais avec une interface graphique.
Le framework Tkinter fourni¶
Une interface graphique vous est fournie au lien suivant (et oui c'est encore une classe). Vous n’avez pas à la modifier. Et ça vous évite à avoir à apprendre le module Tkinter pour l'instant.
Elle contient :
- une console centrale (journal du jeu)
- une zone de saisie (équivalent de
input()) - une zone de stats du joueur
- une zone de stats de l’ennemi
Visuellement, ça ressemble à ça :
Comment utiliser l’interface¶
Créer l’interface¶
ui = GameUI()
Afficher du texte dans la console¶
ui.print("Un zombie apparaît !")
Équivalent graphique de print().
Demander une entrée utilisateur¶
choix = ui.input("Que voulez-vous faire ?")
Équivalent graphique de input().
Le programme attend que l’utilisateur valide sa saisie.
Mettre à jour les stats du joueur¶
ui.set_player_stats(
"Guerrier\nPV : 20\nATK : 5"
)
Le texte est libre : vous affichez ce que vous voulez, comme vous voulez.
Mettre à jour les stats de l’ennemi¶
ui.set_enemy_stats(
"Zombie\nPV : 10\nATK : 2"
)
Exemple minimal complet¶
ui = GameUI()
ui.set_player_stats("Guerrier\nPV : 20\nATK : 5")
ui.set_enemy_stats("Zombie\nPV : 10\nATK : 2")
ui.print("Un zombie apparaît !")
choix = ui.input("1 : Attaquer\n2 : Fuite\nVotre choix : ")
ui.print(f"Vous avez choisi : {choix}")
ui.mainloop()
Règle d’or à respecter¶
Votre logique de jeu ne doit pas dépendre de Tkinter.
Concrètement :
- pas de
tk.Button - pas de callbacks
- pas de gestion d’événements
- pas de code Tkinter dans vos classes (
Entity,Player, etc.)
Toute l’interface passe par :
ui.printui.inputui.set_player_statsui.set_enemy_stats
En résumé¶
- Tkinter est un bonus, pas une obligation
- l’interface est fournie clé en main
- vous l’utilisez comme un terminal graphique
- votre logique reste simple et linéaire
- vous apprenez une vraie bonne pratique de conception
Dans les pages suivantes, on va maintenant enrichir le jeu :
- nouvelles classes de personnage
- armes
- sorts
- mana
- bonus façon rogue-like
Bienvenue dans la dernière ligne droite.