Aller au contenu

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 :

interface rpg
Interface RPG

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.print
  • ui.input
  • ui.set_player_stats
  • ui.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.