[PYTHON] Letzte Aufgabe

Janken gegen Computer

** * Bitte lesen Sie diese Seite, da das Mikrofon nicht verwendet werden kann. Es tut uns leid! ** ** **

Die letzte Aufgabe bestand darin, ein Spiel zu erstellen, um Junk gegen einen Computer zu spielen, wobei der im Zahlenschätzspiel erlernte Code verwendet wurde. Von nun an werde ich die einfachste Version dieses Spiels vorstellen und die, die gut aussieht.

Einfache Version

Es sieht aus wie das: basicresult.jpg Wenn Sie beginnen, wird der auf dem linken Foto gezeigte Bildschirm angezeigt. Wenn Sie die Taste drücken, werden Sie über das auf dem rechten Foto gezeigte Popup über den Gewinn oder Verlust (oder die Auslosung) informiert. Durch Drücken von OK wird das Popup geschlossen, das Spielfenster bleibt jedoch geöffnet.

Als nächstes werde ich den Code dieses Spiels vorstellen. Verwenden Sie zunächst den folgenden Code.

import random
import tkinter as tk
import tkinter.messagebox as tmsg 

** Code Bedeutung: ** import random Lassen Sie den Computer einen zufälligen Wert auswählen Fügen Sie import tkinter as tk tkinter ein tkinter.messagebox als tmsg importieren tkinter popup einfügen

Ein Fenster erstellen

Verwenden Sie dann den folgenden Code.

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)

** Code Bedeutung: ** root = tk.Tk () Benennen Sie das Fenster als root root.geometry("600x400") root.title ("Rock Paper Scissors") Geben Sie die Fenstergröße und den Titel an label=tk.Label(root,text="Pick One",font=("Helvetica",30)) label.place (x = 200, y = 20) Geben Sie das Zeichen, die Schriftart und die Position des Fensters an

Eine Schaltfläche erstellen

Verwenden Sie dann den folgenden Code.

button0=tk.Button(root, text="rock", font=("Helvetica",20), command=ButtonClick0)
button0.place(x=100, y=60)

** Code Bedeutung: ** ** button0 = tk.Button **(root, text = "rock", font = ("Helvetica", 20), command = ButtonClick0)Make button0 tk.Button soll als Button funktionieren button0 = tk.Button (root, text = "rock", font = ("Helvetica", 20), command = ButtonClick0) Erstellen Sie button0 im Fenster, Zeichen, Größe, Befehl Geben Sie an (ButtonClick0)

Erstellen Sie den obigen Code für jede Schaltfläche. Die endgültige Form dieses Teils ist wie folgt.

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)

Erstellen Sie abschließend einen Befehl, der ausgeführt wird, wenn die Taste gedrückt wird. Der Code für einen Befehl lautet wie folgt.

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")

** Code Bedeutung: ** def ButtonClick0 (): Gibt das Verhalten des Befehls ButtonClick0 an player_number = 0 Setzen Sie den Player-Wert auf 0, wenn diese Taste gedrückt wird comp = random.randint (0,2) Wenn diese Taste gedrückt wird, wählt der Computer eine Zufallszahl zwischen 0-2 if player_number == comp: elif player_number == 0 and comp == 1: elif player_number == 0 and comp == 2: Geben Sie den Befehl für jede Bedingung an (wenn die Spielernummer (0) mit der des Computers übereinstimmt und der Computerwert 1 oder 2 beträgt). tmsg.showinfo("Results", "____") Geben Sie den Titel und den Text des Popups an, das unter den einzelnen Bedingungen angezeigt wird Schreiben Sie den obigen Code für alle Werte, die der Spieler auswählen kann.

Fertiges Produkt

Der vollständige Code lautet wie folgt. Screen Shot 2020-07-05 at 9.12.18 PM.png

Eine gut aussehende Version

Es sieht aus wie das: fancyresult.jpg

Codeänderungen

Fügen wir zunächst ein Foto mit from PIL import ImageTk, Image ein. Da sich alle einzufügenden Bilder in derselben Datei befinden, erstellen Sie die Zeichenfolge dir =" / Users / satokamimura / Desktop / school / uni / Computerübung / newgame / ". Auf diese Weise können Sie beim Einfügen von Bildern "dir + filename.png " verwenden.

Ändern Sie als Nächstes den Code von label in den folgenden Code, um das Zeichen des Fensters zu ändern.

title = ImageTk.PhotoImage(Image.open(dir+"text.png "))
titletext = tk.Label(root, image= title).place(x=100,y=20)

** Code Bedeutung: ** title = ImageTk.PhotoImage Geben Sie den Bildnamen als Titel an titletext = tk.Label Benennen Sie den nächsten Label-Titletext (root, image = title) .place (x = 100, y = 20) Im Root-Fenster anzeigen, das Bild auf den zuvor angegebenen Titel setzen und die Position im Fenster angeben.

Ändern Sie als Nächstes den Code der Schaltfläche wie folgt.

img = ImageTk.PhotoImage(Image.open(dir+"rock.png "))
button0=tk.Button(root, command=ButtonClick0, image = img).place(x=150, y=150)

** Code Bedeutung: ** img = Image.Tk.PhotoImage Geben Sie den Bildnamen als img an button0 = tk.Button Geben Sie den Namen der Schaltfläche als button0 an (root, command = ButtonClick0, image = img) .place (x = 150, y = 150) Im Root-Fenster anzeigen, den Befehl angeben, wenn auf ButtonClick0 geklickt wird, das Bild als vorherige img-Schaltfläche angeben Geben Sie den Speicherort von an

Wenn Sie dasselbe für die beiden anderen Schaltflächen tun, sind alle Schaltflächen Bilder der jeweiligen Janken.

Erstellen Sie als Nächstes ein Fenster, in dem die Ergebnisse angezeigt werden. Geben Sie hier nur den Teil des Fensterformats an, der sich mit keinem Ergebnis ändert.

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)

** Code Bedeutung: ** global win Geben Sie ein neues Fenster 'win'globally an (indem Sie dieses einschließen, können Sie' win 'in anderen Teilen des Codes verwenden, was in dem Teil des Codes nützlich ist, der das Ergebnis beschreibt. Werden.) Erstellen Sie ein neues Fenster mit dem Namen "win = tk.Toplevel ()" win win.geometry, win.title Geben Sie die Fenstergröße und den Titel an tk.Button (win, text = 'Ok', command = win.destroy) .place (x = 190, y = 172) Gibt die OK-Schaltfläche und ihre Position an, um ein neues Fenster zu schließen, wenn gedrückt wird tk.Button (win, text = 'End Game', command = root.destroy) .place (x = 250, y = 172) Wenn diese Taste gedrückt wird, wird auch das Spielfenster geschlossen. Geben Sie die Schaltfläche End Game und deren Position an

Ändern Sie dann den Schaltflächenbefehl. Gibt den folgenden Code an: if, elif für alle Befehle, um das zuvor aus tmsg.showinfo erstellte neue Fenster anzuzeigen, und ein Bild mit den Ergebnissen. ex.:

def ButtonClick0():
  player_number = 0
  comp = random.randint(0,2)
  popup()

** Code Bedeutung: ** popup () Unabhängig vom Ergebnis erhalten Sie zuerst ein Popup, um das Ergebnis anzuzeigen

Versuchen Sie dann, für jedes mögliche Muster das richtige Ergebnis anzuzeigen. Der Code ist bis auf den Musternamen und den Bildnamen alle gleich, daher wird hier nur ein Beispiel angegeben.

if player_number == comp:
      rocktie= ImageTk.PhotoImage(Image.open(dir+"rocktie.png "))
      tk.Label(win, image=rocktie).place(x=0, y=0)
      popup.pack()

** Code Bedeutung: ** rocktie = ImageTk.PhotoImage Geben Sie den Namen des Bildes als rocktie an tk.Label (win, image = rocktie) .place (x = 0, y = 0) Zeigen Sie das Bild im Fenster an und geben Sie den Ort an popup.pack () Code, der benötigt wird, damit ein Popup-Fenster mit einem Bild angezeigt wird

Erstellen Sie ein Bild aller resultierenden Muster und geben Sie den obigen Code für alle Muster an. Die verwendeten Bilder sind insgesamt 9 Bilder für alle Muster. Screen Shot 2020-07-07 at 3.42.27 AM.png

Der vollständige Code lautet wie folgt.

import random
import tkinter as tk
from PIL import ImageTk, Image

dir = "/Users/satokamimura/Desktop/school/uni/Computerübung/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()

Schwieriger Teil

Ich wollte das Aussehen des resultierenden Popups ändern, aber die Showinfo von tkinter hat nur sehr begrenzte Änderungen, sodass ich ein neues Fenster erstellt habe, das wie ein Popup aussieht. Zu dieser Zeit wusste ich nicht, wie man ein neues Fenster erstellt, also war das der schwierigste Teil. Auch das Einfügen des Bildes war zunächst etwas schwierig. Als ich dieses Spiel zum ersten Mal gemacht habe, habe ich ein neues Fenster für alle resultierenden Muster angegeben, also war es eine enorme Anzahl von Codezeilen. Ich habe den Basiscode des Popups zusammengefasst, um ihn wegzulassen, aber zuerst war es schwierig, weil ich nicht wie erwartet mit dem Code für die Anzeige des Bildes zusammenarbeiten konnte.

Punkte, die ich gerne verwendet habe

Verweise

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/

Recommended Posts

Letzte Aufgabe
Endprodukt
AHC-Aufgabe (2) anhängen