3. Projet Tkinter : le jeu de morpion

...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 :

3.1. Plateau de jeu

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

3.2. Placement des symboles

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 :

Lier un gestionnaire d'évènements à un widget

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 d'évènements

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.

3.3. Y a-t-il un gagnant ?

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...

Oui, le jour 2 débute...

3.4. Une IA élémentaire...

>