Сегодня мы создадим всем известную игру камень, ножницы, бумага. В этом нам поможет ЯП python и библиотека tkinter, но если вы не знаете что это такое, советую почитать данную статью.
Первое, что нам нужно, это начальная структура, окошко, у меня оно будет выглядеть так:
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()
Здесь мы создаём не изменяемое окно 500 на 500 с заголовком «Камень, ножницы, бумага» и белым фоном. Именно в это окошко мы будем добавлять кнопочки, счетчики и т.д.
Теперь в наш метод startUI добавим такие строчки:
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)
Эти 7 строчек добавят в наше окно 3 кнопки которые нечего не делают. Мы исправим это позже.
Пользователь делает свой выбор, нажимая на одну из 3 кнопок, это круто, но нам нужен оппонент, именно для этого нужен модуль random.
А вот теперь мы добавим функцию, которая будет обрабатывать выбор, и выдавать ответ, кто же выиграл в этом раунде. Сделаем это вот таким образом:
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))
Что тут происходит?
Всё очень просто. Грубо говоря, если игрок нажмет камень, отправится 1, если ножницы, то 2, а если бумага, то 3, причем не только отправится, но и выведется в консоль.
На счет компьютера. Он свой выбор делает, но его выбор никуда не идёт.
Перед тем, как делать логику, нам нужно передать игроку результат, и для этого мы будем использовать Label. Добавим в 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)
Отлично. Теперь у нас есть надпись, в которую мы будем выводить результат раунда и надпись с статистикой.
Сделаем 3 счетчика:
1. Поражений
2. Побед
3. Ничей
Для этого все в тот же startUI добавим такую строку:
self.win = self.drow = self.lose = 0
Теперь в классе main создаем метод btn_click, и пишем в него следующие строки:
def btn_click(self, choise): comp_choise = rdm.randint(1, 3) print(choise)
Недолго музыка играла. Там же, в btn_click, удаляем
print(choise)
и пишем вот эти строки:
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
Собственно всё, на этом создание закончилось. Всё работает, можно играть.
Полный код:
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()
ссылка на оригинал статьи https://habr.com/ru/post/480906/
Добавить комментарий