Écrire un jeu de python simple

Aujourd'hui, nous allons créer un jeu bien connu de pierre, de ciseaux, de papier. La bibliothèque Python python et tkinter nous aidera avec cela, mais si vous ne savez pas ce que c'est, je vous conseille de lire cet article.




La première chose dont nous avons besoin est une structure initiale, une fenêtre, ça ressemblera à ça pour moi:


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

Ici, nous créons une fenêtre immuable de 500 par 500 avec le titre "Pierre, ciseaux, papier" et un fond blanc. C'est dans cette fenêtre que nous ajouterons des boutons, des compteurs, etc.



Maintenant, dans notre méthode startUI , ajoutez les lignes suivantes :


 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) 

Ces 7 lignes ajouteront 3 boutons à notre fenêtre qui ne font rien. Nous corrigerons cela plus tard.



L'utilisateur fait son choix en cliquant sur l'un des 3 boutons, c'est cool, mais on a besoin d'un adversaire, c'est à ça que sert le module aléatoire.



Et maintenant, nous allons ajouter une fonction qui gérera la sélection, et donner une réponse qui a gagné dans ce tour. Faisons comme ça:


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

Que se passe-t-il ici?


Tout est très simple. En gros, si un joueur appuie sur une pierre, 1 ira, s'il y a des ciseaux, puis 2, et si du papier, alors 3, et non seulement iront, mais seront également affichés dans la console.
Au détriment de l'ordinateur. Il fait son choix, mais son choix ne va nulle part.



Avant de faire la logique, nous devons transmettre le résultat au joueur, et pour cela nous utiliserons le Label . Ajoutez les lignes suivantes à startUI :


 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) 

Super. Nous avons maintenant une inscription dans laquelle nous afficherons le résultat du tour et une inscription avec des statistiques.



Faisons 3 jetons:


1. Pertes
2. Victoires
3. Rien



Pour ce faire, ajoutez la ligne suivante à la même startUI :



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

Maintenant, dans la classe principale , créez la méthode btn_click et écrivez-y les lignes suivantes:



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

La musique n'a pas joué longtemps. Au même endroit, dans btn_click , supprimez

impression (choix)
et écrivez ces lignes:



 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 

En fait tout, c'est la fin de la création. Tout fonctionne, vous pouvez jouer.



Code complet:


 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/fr480906/


All Articles