...que vous connaissez bien sûr tout très bien...
L'objectif est donc de créer en Python et à l'aide de Tkinter, un jeu de morpion, jouable à deux joueurs ou contre l'ordinateur; une ébauche "d'intelligence artificielle" devra donc être développée pour ça !
Mais vous procéderez bien entendu par étapes :
Le plateau de jeu est constitué de 2 lignes verticales et 2 horizontale, tracées sur un canevas dans une fenêtre Tkinter.
Écrire le script qui crée ce plateau de jeu.
Pour créer un canevas ( zone de dessin ) dans une fenêtre :
nom_du_canevas = Canvas(fenêtre_parente, width = largeur, height = hauteur)
Pour tracer une ligne sur un canevas, utiliser la méthode create_line()
:
can.create_line(xorigine , yorigine , xfin , yfin , fill = 'couleur', width = épaisseur)
Attention, l'origine du repère pour les coordonnées dans un canevas Tkinter est en haut à gauche du canevas
Le script doit maintenant gérer le placement des symboles, à savoir une croix ou un rond alternativement selon le joueur 1 ou 2.
Votre script doit donc "intercepter" les clics souris et pouvoir déterminer la position du curseur de la souris au moment du clic : on parle pour cela d'évènements souris. Il existe de même
des évènements clavier ( non abordés ici ).
Deux choses sont nécessaires :
Un gestionnaire d'évènement est l'ensemble des instructions qui seront exécutées lorsqu'un évènement particulier se produit; pour que cela fonctionne, il faut que le script puisse être en mesure de détecter quand cet évènement se produit; pour cela, on doit lier le gestionnaire d'évènement à un des widgets de l'interface.
On utilise la syntaxe suivante après avoir créé le widget :
nom_du widget.bind('<évènement>' , gestionnaire_d_évènement)
Les évènements utilisables avec la souris sont par exemple : '<Button-1>'
pour la détection du clic gauche, '<Button-2>'
pour le clic droit, etc...
Exemple : pour lier à un canevas nommé can
un gestionnaire d'évènement nommé gestion_clic
pour détecter le clic-gauche de la souris, on écrira :
can.bind('<Button-1>' , gestion_clic)
Le gestionnaire en lui-même est une fonction qui sera automatiquement appelée lorsque l'évènement se produit; cette fonction ne peut recevoir qu'un seul argument, l'évènement en lui-même stockée dans une "variable"
nommée evt
.
Par exemple, on écrira :
def gestion_clic(evt): ...... ......
Pour récupérer ensuite par exemple les coordonnées du curseur de souris :
curseur_X = evt.x # abscisse du curseur dans le canevas curseur_Y = evt.y # ordonnée du curseur
Pour tracer un cercle sur un canevas, utiliser la méthode create_oval()
:
can.create_oval(xorigine , yorigine , xfin , yfin , outline = 'couleur', width = épaisseur)
...où les coordonnées x,y correspondent ici à celles des coins du carré dans lequel le cercle est inscrit.
Il ne vous reste plus qu'à écrire les instructions qui permettront, à chaque tour de jeu, de déterminer si un des joueurs a gagné.
Pour cela, il faut pouvoir tester les possibilités ( il y en a 8 en tout ) pour un joueur d'avoir aligné 3 symboles identiques...