Hoje vamos criar um jogo bem conhecido de pedra, tesoura, papel. A biblioteca Python python e tkinter nos ajudará com isso, mas se você não souber o que é, aconselho a ler este artigo.
A primeira coisa que precisamos é de uma estrutura inicial, uma janela, será assim para mim:
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()
Aqui, criamos uma janela imutável de 500 por 500 com o título "Pedra, tesoura, papel" e um fundo branco. É nesta janela que adicionaremos botões, contadores, etc.
Agora, no nosso método startUI , adicione as seguintes linhas:
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)
Essas 7 linhas adicionam 3 botões à nossa janela que não fazem nada. Nós vamos corrigir isso mais tarde.
O usuário faz sua escolha clicando em um dos 3 botões, isso é legal, mas precisamos de um oponente, é para isso que serve o módulo aleatório.
E agora adicionaremos uma função que manipulará a seleção e responderemos quem venceu nesta rodada. Vamos fazer assim:
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))
O que está acontecendo aqui?
Tudo é muito simples. Grosso modo, se um jogador pressiona uma pedra, 1 irá, se houver tesoura, depois 2, e se papel, 3 e não apenas irá, mas também será exibido no console.
À custa do computador. Ele faz sua escolha, mas sua escolha não vai a lugar nenhum.
Antes de fazer a lógica, precisamos passar o resultado para o jogador e, para isso, usaremos o Label . Adicione as seguintes linhas ao 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)
Ótimo. Agora temos uma inscrição na qual produziremos o resultado da rodada e uma inscrição com estatísticas.
Vamos fazer 3 contadores:
1. Perdas
2. Vitórias
3. nada
Para fazer isso, adicione a seguinte linha à mesma startUI :
self.win = self.drow = self.lose = 0
Agora, na classe principal , crie o método btn_click e escreva as seguintes linhas nele:
def btn_click(self, choise): comp_choise = rdm.randint(1, 3) print(choise)
A música não tocou muito. No mesmo local, em btn_click , exclua
impressão (escolha)
e escreva estas linhas:
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
Na verdade tudo, este é o fim da criação. Tudo funciona, você pode jogar.
Código completo:
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()