Jeu en Python Tkinter morpion
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Bonjour
Je suis en classe de NSI et le professeur nous demande de compléter le programme suivant. Il faut que je fasse la fonction machineJoue et verifiePlateau pour rendre la machine intelligente.
from tkinter import * from tkinter.messagebox import showinfo from random import randrange coteCanevas = 600 # Côté du canevas en pixels marge = 20 # Marge entre le bord du canevas et le plateau de jeu areteCase = (coteCanevas - 2*marge)/3 # Arête de chaque case etatJeu = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] nombreCoups = 0 humainCommence = True humainJoue = True partieFinie = False def initJeu(): global nombreCoups """ Initialisation du jeu. Structures de données propres au jeu """ for i in range(3): for j in range(3): etatJeu[i][j] = 0 nombreCoups = 0 def nouvellePartie(): global humainCommence, humainJoue, partieFinie print("nouvelle partie") partieFinie = False initJeu() if randrange(2) == 1: humainCommence = True humainJoue = True else: humainCommence = False humainJoue = False can.delete("all") dessinePlateau() if not(humainJoue): machineJoue() return() def about(): """ Affiche la fenêtre "A propos" """ showinfo( "A propos\n\n", "*** Programme écrit par ***\n" " Albert Einstein - Kilian Mbappe \n" "1ère NSI - Lycée Louis Armand - Mulhouse \n" ) return() def reglesJeu(): """ Affiche les règles du jeu dans une boîte d'information """ showinfo( "Règles du jeu\n\n", "Premièrement : \n" "Deuxièmement : \n" ) return() def dessinePlateau(): """ Dessin du plateau de jeu """ # Exemple avec un plateau de Tic Tac Toe areteCase = (coteCanevas - 2*marge)/3 x = 0 y = 0 for i in range(4): # Tracé des lignes horizontales can.create_line(marge, y + marge, coteCanevas - marge, y + marge, width=4, fill="black") y += areteCase x = 0 y = 0 for i in range(4): # Tracé des lignes verticales can.create_line(x + marge, marge, x + marge, coteCanevas - marge, width=4, fill="black") x += areteCase def convertitClick(x,y): i = int((y - marge)//areteCase) j = int((x - marge)//areteCase) return (i,j) def dessineCroix(i,j): delta = 15 x1 = j*areteCase + marge + delta y1 = i*areteCase + marge + delta x2 = x1 + areteCase - 2*delta y2 = y1 + areteCase - 2*delta can.create_line(x1,y1,x2,y2,width=5,fill='DeepSkyBlue2') can.create_line(x2,y1,x1,y2,width=5,fill='DeepSkyBlue2') def dessineCercle(i,j): return def machineJoue(): return def verifiePlateau(): return def clickSouris(event): """ Fonction appelée lors d'un click du bouton gauche de la souris/trackpad """ global nombreCoups print("Clic au point", (event.x, event.y)) if not(partieFinie): (i,j) = convertitClick(event.x, event.y) print(i,j) if (i,j) != (-1,-1): if etatJeu[i][j] == 0: # Case libre ??? if humainCommence: dessineCroix(i,j) etatJeu[i][j] = 1 else: dessineCercle(i,j) etatJeu[i][j] = -1 nombreCoups += 1 verifiePlateau() if not(partieFinie): humainJoue = False machineJoue() # Main fen = Tk() fen.title("Jeu de ...") fen.config(bg = "bisque") # Couleur du fond de la fenêtre fen.resizable(width=False, height=False) # Interdit le redimensionnement de la fenêtre can = Canvas(fen, width=coteCanevas, height=coteCanevas, bg = "snow2") can.pack(side=LEFT, padx=25, pady=25) bouton0 = Button(fen, text="A propos", command = about) bouton0.pack(side=TOP, padx=20, pady=50) bouton1 = Button(fen, text="Règles du jeu", command = reglesJeu) bouton1.pack(side=TOP, padx=20, pady=50) bouton2 = Button(fen, text="Nouvelle partie", command = nouvellePartie) bouton2.pack(side=TOP, padx=20, pady=50) can.bind("<Button-1>", clickSouris) # Gestion des clicks dessinePlateau() # Gestionnaire d'évènements fen.mainloop()
S'il vous plaît, aidez-moi je n'y arrive pas.
- Morpion tkinter
- Jeu de morpion google - Guide
- Tkinter focus_set ✓ - Forum Python
- Combobox tkinter - Forum Python
- Tkinter tableau - Forum Python
- Probleme tkinter injustifier - Forum Python
2 réponses
bonjour,
qu'as-tu essayé, as-tu une question?
Bonjour,
Bizarre verifiePlateau()
Pourquoi tirer au hasard humainCommence et humainJoue ?
A quoi ça sert tout ça ?
L'humain commence, il clique et dessine une croix comme tu le fais dans clickSouris()
En fin de clickSouris(), tu mets bien humainJoue à False et tu appelles bien machineJoue()
(par contre il faut y enlever dessineCercle, ce n'est pas ici que la machine joue)
Donc dans machineJoue(), il faut dessiner un cercle, non pas au hasard, mais dans une case
qui bloquera la croix que l'humain vient de faire, et mettre humainJoue à True
Et là, l'humain peut cliquer à nouveau
oui je n'arrive pas à faire jouer la machine toute seule
J'imagine que le prof veut évaluer ta capacité à faire cet exercice. Cette évaluation sera faussée si nous le faisons à ta place.
j'ai réussi à faire ça
de même pour moi je rencontre le même problème.
Bonjour,
Regarde ma réponse du 12 octobre à 13h45 ci-dessous ...