** * Veuillez lire cette page car le microphone ne peut pas être utilisé. Pardon! ** **
Pour la tâche finale, j'ai créé un jeu pour jouer à une poubelle contre un ordinateur en utilisant le code appris dans le jeu de devinettes. À partir de maintenant, je vais vous présenter la version la plus simple de ce jeu et celle qui a l'air bien.
Cela ressemble à ceci: Lorsque vous démarrez, l'écran affiché sur la photo de gauche apparaît et lorsque vous appuyez sur le bouton, la fenêtre contextuelle affichée sur la photo de droite vous informe du gain ou de la perte (ou du tirage au sort). Appuyer sur Ok ferme la fenêtre contextuelle mais garde la fenêtre de jeu ouverte.
Ensuite, je présenterai le code de ce jeu. Tout d'abord, utilisez le code ci-dessous.
import random
import tkinter as tk
import tkinter.messagebox as tmsg
** Signification du code: **
ʻImport random Laisser l'ordinateur choisir une valeur aléatoire ʻImporter tkinter comme tk
tkinter
ʻImporter tkinter.messagebox comme tmsg` Insérer une fenêtre contextuelle tkinter
Utilisez ensuite le code suivant.
root=tk.Tk()
root.geometry("600x400")
root.title("Rock Paper Scissors")
label=tk.Label(root,text="Pick One",font=("Helvetica",30))
label.place(x=200,y=20)
** Signification du code: **
root = tk.Tk ()
Nommez la fenêtre en tant que root
root.geometry("600x400") root.title ("Rock Paper Scissors")
Spécifiez la taille et le titre de la fenêtre
label=tk.Label(root,text="Pick One",font=("Helvetica",30)) label.place (x = 200, y = 20)
Spécifiez le caractère, la police et la position de la fenêtre
Utilisez ensuite le code suivant.
button0=tk.Button(root, text="rock", font=("Helvetica",20), command=ButtonClick0)
button0.place(x=100, y=60)
** Signification du code: **
** button0 = tk.Button
**(root, text = "rock", font = ("Helvetica", 20), command = ButtonClick0)
Faites que button0 tk.Button fonctionne comme un bouton
button0 = tk.Button
(root, text = "rock", font = ("Helvetica", 20), command = ButtonClick0)
Créer button0 dans la fenêtre, caractère, taille, commande Spécifiez (ButtonClick0)
Créez le code ci-dessus pour chaque bouton. La forme finale de cette pièce est la suivante.
button0=tk.Button(root, text="rock", font=("Helvetica",20), command=ButtonClick0)
button0.place(x=100, y=60)`
`button1=tk.Button(root, text="paper", font=("Helvetica",20), command=ButtonClick1)
button1.place(x=200, y=60)`
`button2=tk.Button(root, text="scissors", font=("Helvetica",20), command=ButtonClick2)
button2.place(x=300, y=60)
Enfin, créez une commande qui sera exécutée lorsque le bouton est enfoncé. Le code d'une commande est le suivant.
def ButtonClick0():
player_number = 0
comp = random.randint(0,2)
if player_number == comp:
tmsg.showinfo("Results", "tie")
elif player_number == 0 and comp == 1:
tmsg.showinfo("Results", "player chose rock, computer chose paper: computer wins")
elif player_number == 0 and comp == 2:
tmsg.showinfo("Results", "player chose rock, computer chose scissors: player wins")
** Signification du code: **
def ButtonClick0 ():
Spécifie le comportement de la commande ButtonClick0
player_number = 0
Définit la valeur du joueur sur 0 lorsque ce bouton est enfoncé
comp = random.randint (0,2)
Quand ce bouton est pressé, l'ordinateur choisit un nombre aléatoire entre 0-2
if player_number == comp:
elif player_number == 0 and comp == 1:
elif player_number == 0 and comp == 2:
Spécifiez la commande pour chaque condition (lorsque le numéro de joueur (0) est le même que celui de l'ordinateur, lorsque la valeur de l'ordinateur est 1 ou 2)
tmsg.showinfo("Results", "____")
Spécifiez le titre et le texte de la fenêtre contextuelle qui apparaît sous chaque condition
Écrivez le code ci-dessus pour toutes les valeurs que le joueur peut sélectionner.
Le code complété est le suivant.
Cela ressemble à ceci:
Tout d'abord, insérons une photo avec from PIL import ImageTk, Image
.
Puisque toutes les images à insérer sont dans le même fichier, créez la chaîne dir =" / Users / satokamimura / Desktop / school / uni / computer practice / newgame / "
. Cela vous permettra d'utiliser dir + filename.png
lors de l'insertion d'images.
Ensuite, remplacez le code de label
par le code suivant pour changer le caractère de la fenêtre.
title = ImageTk.PhotoImage(Image.open(dir+"text.png "))
titletext = tk.Label(root, image= title).place(x=100,y=20)
** Signification du code: **
title = ImageTk.PhotoImage
Spécifiez le nom de l'image comme titre
titletext = tk.Label
Nommez la prochaine étiquette titletext
(racine, image = titre) .place (x = 100, y = 20)
Afficher dans la fenêtre racine, définir l'image sur le titre spécifié précédemment et spécifier l'emplacement dans la fenêtre.
Ensuite, modifiez le code du bouton comme suit.
img = ImageTk.PhotoImage(Image.open(dir+"rock.png "))
button0=tk.Button(root, command=ButtonClick0, image = img).place(x=150, y=150)
** Signification du code: **
ʻImg = Image.Tk.PhotoImageSpécifiez le nom de l'image comme img
button0 = tk.ButtonSpécifiez le nom du bouton comme button0
(root, command = ButtonClick0, image = img) .place (x = 150, y = 150)` Afficher dans la fenêtre racine, spécifiez la commande lorsque vous cliquez sur ButtonClick0, spécifiez l'image comme img précédente, bouton Spécifiez l'emplacement de
Si vous faites de même pour les deux autres boutons, tous les boutons seront des images de leur Janken respectif.
Ensuite, créez une fenêtre pour afficher les résultats. Ici, spécifiez uniquement la partie du format de fenêtre qui ne change avec aucun résultat.
def popup():
global win
win=tk.Toplevel()
win.geometry("500x200")
win.title('Results')
tk.Button(win, text='Ok', command=win.destroy).place(x=190,y=172)
tk.Button(win, text='End Game', command=root.destroy).place(x=250,y=172)
** Signification du code: **
global win
Spécifiez une nouvelle fenêtre" win "globalement (en incluant ceci, vous pouvez utiliser" win "dans d'autres parties du code, ce qui est utile dans la partie du code qui décrit le résultat Devenir.)
Créez une nouvelle fenêtre nommée win = tk.Toplevel ()
win
win.geometry
, win.title
Spécifiez la taille et le titre de la fenêtre
tk.Button (win, text = 'Ok', command = win.destroy) .place (x = 190, y = 172)
Spécifie le bouton Ok et son emplacement pour fermer une nouvelle fenêtre lorsque vous appuyez sur
tk.Button (win, text = 'End Game', command = root.destroy) .place (x = 250, y = 172)
Lorsqu'il est pressé, la fenêtre de jeu se ferme également Spécifiez le bouton End Game et son emplacement
Modifiez ensuite la commande du bouton.
Spécifie le code qui suit if, elif pour toutes les commandes pour afficher la nouvelle fenêtre créée précédemment à partir de tmsg.showinfo
et une image montrant les résultats.
ex.:
def ButtonClick0():
player_number = 0
comp = random.randint(0,2)
popup()
** Signification du code: **
popup ()
Quel que soit le résultat, obtenez d'abord un pop-up pour afficher le résultat
Essayez ensuite d'afficher le résultat correct pour chaque motif possible. Le code est le même sauf pour le nom du motif et le nom de l'image, donc un seul exemple est donné ici.
if player_number == comp:
rocktie= ImageTk.PhotoImage(Image.open(dir+"rocktie.png "))
tk.Label(win, image=rocktie).place(x=0, y=0)
popup.pack()
** Signification du code: **
rocktie = ImageTk.PhotoImage
Spécifiez le nom de l'image comme rocktie
tk.Label (win, image = rocktie) .place (x = 0, y = 0)
Affichez l'image dans la fenêtre et spécifiez l'emplacement
popup.pack ()
Code nécessaire pour faire apparaître une fenêtre pop-up avec une image
Créez une image de tous les modèles résultants et spécifiez le code ci-dessus pour tous les modèles. Les images utilisées sont un total de 9 images pour tous les motifs.
Le code complété est le suivant.
import random
import tkinter as tk
from PIL import ImageTk, Image
dir = "/Users/satokamimura/Desktop/school/uni/Exercice informatique/newgame/"
root=tk.Tk()
root.geometry("600x400")
root.title("Rock Paper Scissors")
def popup():
global win
win=tk.Toplevel()
win.geometry("500x200")
win.title('Results')
tk.Button(win, text='Ok', command=win.destroy).place(x=190,y=172)
tk.Button(win, text='End Game', command=root.destroy).place(x=250,y=172)
def ButtonClick0():
player_number = 0
comp = random.randint(0,2)
popup()
if player_number == comp:
rocktie= ImageTk.PhotoImage(Image.open(dir+"rocktie.png "))
tk.Label(win, image=rocktie).place(x=0, y=0)
popup.pack()
elif player_number == 0 and comp == 1:
rocklose= ImageTk.PhotoImage(Image.open(dir+"rocklose.png "))
tk.Label(win, image=rocklose).place(x=0, y=0)
popup.pack()
elif player_number == 0 and comp == 2:
rockwin= ImageTk.PhotoImage(Image.open(dir+"rockwin.png "))
tk.Label(win, image=rockwin).place(x=0, y=0)
popup.pack()
def ButtonClick1():
player_number = 1
comp = random.randint(0,2)
popup()
if player_number == comp:
papertie= ImageTk.PhotoImage(Image.open(dir+"papertie.png "))
tk.Label(win, image=papertie).place(x=0,y=0)
popup.pack()
elif player_number == 1 and comp == 0:
paperwin= ImageTk.PhotoImage(Image.open(dir+"paperwin.png "))
tk.Label(win, image=paperwin).place(x=0,y=0)
popup.pack()
elif player_number == 1 and comp == 2:
paperlose= ImageTk.PhotoImage(Image.open(dir+"paperlose.png "))
tk.Label(win, image=paperlose).place(x=0,y=0)
popup.pack()
def ButtonClick2():
player_number = 2
comp = random.randint(0,2)
popup()
if player_number == comp:
scissorstie= ImageTk.PhotoImage(Image.open(dir+"scissorstie.png "))
tk.Label(win, image=scissorstie).place(x=0,y=0)
popup.pack()
elif player_number == 2 and comp == 0:
scissorslose= ImageTk.PhotoImage(Image.open(dir+"scissorslose.png "))
tk.Label(win, image=scissorslose).place(x=0,y=0)
popup.pack()
elif player_number == 2 and comp == 1:
scissorswin= ImageTk.PhotoImage(Image.open(dir+"scissorswin.png "))
tk.Label(win, image=scissorswin).place(x=0,y=0)
popup.pack()
title = ImageTk.PhotoImage(Image.open(dir+"text.png "))
tk.Label(root, image= title).place(x=100,y=20)
img = ImageTk.PhotoImage(Image.open(dir+"rock.png "))
button0=tk.Button(root, command=ButtonClick0, image = img).place(x=150, y=150)
img1 = ImageTk.PhotoImage(Image.open(dir+"paper.png "))
button1=tk.Button(root, command=ButtonClick1, image=img1).place(x=270, y=150)
img2 = ImageTk.PhotoImage(Image.open(dir+"scissors.png "))
button2=tk.Button(root, command=ButtonClick2, image=img2).place(x=390, y=150)
root.mainloop()
Je voulais changer l'apparence du pop-up résultant, mais showinfo de tkinter a des changements très limités, donc j'ai fini par créer une nouvelle fenêtre qui ressemble à un pop-up. À ce moment-là, je ne savais pas comment créer une nouvelle fenêtre, c'était donc la partie la plus difficile. De plus, l'insertion de l'image était un peu difficile au début. Quand j'ai créé ce jeu pour la première fois, j'ai spécifié une nouvelle fenêtre pour tous les modèles résultants, donc c'était un nombre énorme de lignes de code. J'ai résumé le code de base du pop-up pour l'omettre, mais au début c'était difficile car je ne pouvais pas coopérer avec le code d'affichage de l'image comme je m'y attendais.
https://stackoverflow.com/questions/45228664/tkinter-nameerror-name-toplevel-is-not-defined https://stackoverflow.com/questions/41574168/how-to-i-position-buttons-in-tkinter/41575504 https://stackoverflow.com/questions/10052410/tkinter-button-does-not-appear-on-toplevel https://stackoverflow.com/questions/16242782/change-words-on-tkinter-messagebox-buttons https://stackoverflow.com/questions/32060837/remove-border-of-tkinter-button-created-with-an-image https://www.geeksforgeeks.org/pyqt5-add-image-icon-on-a-push-button/?ref=rp https://stackoverflow.com/questions/25703446/whats-the-main-difference-between-if-and-else-if https://docs.python-guide.org/scenarios/imaging/