Ein einfaches Python-Spiel schreiben

Heute erstellen wir ein bekanntes Spiel aus Stein, Schere, Papier. Die Python-Python-Bibliothek und die Tkinter-Bibliothek helfen uns dabei. Wenn Sie jedoch nicht wissen, was es ist, empfehle ich Ihnen, diesen Artikel zu lesen .




Das erste, was wir brauchen, ist eine anfängliche Struktur, ein Fenster, es wird für mich so aussehen:


from tkinter import * import random as rdm class Main(Frame): def __init__(self, root): super(Main, self).__init__(root) self.startUI() def startUI(self): pass if __name__ == '__main__': root = Tk() root.geometry("500x500+200+200") root.title(", , ") root.resizable(False, False) root["bg"] = "#FFF" app = Main(root) app.pack() root.mainloop() 

Hier erstellen wir ein unveränderliches Fenster von 500 mal 500 mit dem Titel "Stein, Schere, Papier" und einem weißen Hintergrund. In diesem Fenster fügen wir Schaltflächen, Zähler usw. hinzu.



Fügen Sie nun in unserer startUI- Methode die folgenden Zeilen hinzu:


 btn = Button(root, text="", font=("Times New Roman", 15)) btn = Button(root, text="", font=("Times New Roman", 15)) btn3 = Button(root, text="", font=("Times New Roman", 15)) btn.place(x=10, y=100, width=120, height=50) btn2.place(x=155, y=100, width=120, height=50) btn3.place(x=300, y=100, width=120, height=50) 

Diese 7 Zeilen fügen unserem Fenster 3 Buttons hinzu, die nichts bewirken. Wir werden das später beheben.



Der Benutzer trifft seine Wahl, indem er auf eine der 3 Schaltflächen klickt. Das ist cool, aber wir brauchen einen Gegner, dafür ist das Zufallsmodul gedacht.



Und jetzt werden wir eine Funktion hinzufügen, die die Auswahl handhabt, und eine Antwort geben, wer in dieser Runde gewonnen hat. Lass es uns so machen:


 btn = Button(root, text="", font=("Times New Roman", 15), command=lambda x=1: self.btn_click(x)) btn2 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=2: self.btn_click(x)) btn3 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=3: self.btn_click(x)) 

Was ist hier los?


Alles ist sehr einfach. Grob gesagt, wenn ein Spieler einen Stein drückt, geht 1, wenn es eine Schere gibt, dann 2 und wenn Papier, dann 3 und wird nicht nur gehen, sondern auch in der Konsole angezeigt.
Auf Kosten des Computers. Er trifft seine Wahl, aber seine Wahl geht nirgendwo hin.



Bevor wir die Logik ausführen, müssen wir das Ergebnis an den Spieler weitergeben, und dafür werden wir das Label verwenden . Fügen Sie die folgenden Zeilen zu startUI hinzu :


 self.lbl = Label(root, text=" !", bg="#FFF", font=("Times New Roman", 21, "bold")) self.lbl.place(x=120, y=25) self.lbl2 = Label(root, justify="left", font=("Times New Roman", 13), text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}", bg="#FFF") self.lbl2.place(x=5, y=5) 

Großartig. Jetzt haben wir eine Inschrift, in der wir das Ergebnis der Runde ausgeben und eine Inschrift mit Statistik.



Machen wir 3 Zähler:


1. Verluste
2. Siege
3. Nichts



Fügen Sie dazu die folgende Zeile derselben Startoberfläche hinzu :



 self.win = self.drow = self.lose = 0 

Erstellen Sie nun in der Hauptklasse die Methode btn_click und schreiben Sie die folgenden Zeilen hinein:



 def btn_click(self, choise): comp_choise = rdm.randint(1, 3) print(choise) 

Die Musik spielte nicht lange. Löschen Sie an derselben Stelle in btn_click

Drucken (Auswahl)
und schreibe diese Zeilen:



 if choise == comp_choise: self.drow += 1 self.lbl.configure(text="") elif choise == 1 and comp_choise == 2 \ or choise == 2 and comp_choise == 3 \ or choise == 3 and comp_choise == 1: self.win += 1 self.lbl.configure(text="") else: self.lose += 1 self.lbl.configure(text="") self.lbl2.configure(text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}") del comp_choise 

Eigentlich alles, das ist das Ende der Schöpfung. Alles funktioniert, du kannst spielen.



Vollständiger Code:


 from tkinter import * import random as rdm class Main(Frame): def __init__(self, root): super(Main, self).__init__(root) self.startUI() def startUI(self): btn = Button(root, text="", font=("Times New Roman", 15), command=lambda x=1: self.btn_click(x)) btn2 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=2: self.btn_click(x)) btn3 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=3: self.btn_click(x)) btn.place(x=10, y=100, width=120, height=50) btn2.place(x=155, y=100, width=120, height=50) btn3.place(x=300, y=100, width=120, height=50) self.lbl = Label(root, text=" !", bg="#FFF", font=("Times New Roman", 21, "bold")) self.lbl.place(x=150, y=25) self.win = self.drow = self.lose = 0 self.lbl2 = Label(root, justify="left", font=("Times New Roman", 13), text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}", bg="#FFF") self.lbl2.place(x=5, y=5) def btn_click(self, choise): comp_choise = rdm.randint(1, 3) if choise == comp_choise: self.drow += 1 self.lbl.configure(text="") elif choise == 1 and comp_choise == 2 \ or choise == 2 and comp_choise == 3 \ or choise == 3 and comp_choise == 1: self.win += 1 self.lbl.configure(text="") else: self.lose += 1 self.lbl.configure(text="") self.lbl2.configure(text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}") del comp_choise if __name__ == '__main__': root = Tk() root.geometry("430x160+200+200") root.title(", , ") root.resizable(False, False) root["bg"] = "#FFF" app = Main(root) app.pack() root.mainloop() 

Source: https://habr.com/ru/post/de480906/


All Articles