PyQt5 - Проєкт "Камінь-ножиці-папір"
Створимо гру "Камінь-ножиці-папір". Для цього потрібно передбачити 3 кнопки для вибору фігури користувачем, і ще одна фігура - обирається випадковим чином комп'ютером. Залежно від того, яка утворюється комбінація фігур - виводиться рішення: Нічия, Виграв комп'ютер чи Виграли Ви.

Завдання проекту: Розробити гру "Камінь-ножиці-папір".
У конструкторі Designer потрібно створити компоненти: 2 написи Label та 3 кнопки PushButton:

Зверніть увагу: кнопкам надано квадратної форми, вилучено напис (властивість text) і встановлено розмір значків кнопок 50 х 50 пікселів.

Для зручності подальшої обробки, встановіть назву першої кнопки в pushButton_1 (зверніть увагу на назви компонентів в Інспекторі об'єктів):

Скористаємось початковою заготовкою:
from PyQt5 import QtWidgets, uic
import sys
from PyQt5.QtGui import *
import random
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('ttt.ui', self)
self.show()
app = QtWidgets.QApplication(sys.argv)
window = Ui()
app.exec_()
До цієї програми потрібно додати опис компонентів форми
self.pushButton_1 = self.findChild(QtWidgets.QPushButton, 'pushButton_1')
self.pushButton_2 = self.findChild(QtWidgets.QPushButton, 'pushButton_2')
self.pushButton_3 = self.findChild(QtWidgets.QPushButton, 'pushButton_3')
self.label = self.findChild(QtWidgets.QLabel, 'label')
self.label_2 = self.findChild(QtWidgets.QLabel, 'label_2')
Додаємо метод check для обробки клацань усіх трьох кнопок. Зверніть увагу, для всіх трьох кнопок ми призначаємо один і той же метод!
self.pushButton_1.clicked.connect(self.check)
self.pushButton_2.clicked.connect(self.check)
self.pushButton_3.clicked.connect(self.check)
Також потрібно розмістити на кнопках відповідні зображення (можна скачати файли: камінь, ножиці, папір):
self.pushButton_1.setIcon(QIcon(QPixmap("1.bmp")))
self.pushButton_2.setIcon(QIcon(QPixmap("2.bmp")))
self.pushButton_3.setIcon(QIcon(QPixmap("3.bmp")))
Метод обробки для клацання кнопок полягає у тому, щоб виконати такі дії:
1) Створюється випадкове зображення і показується у текстовому написі. Для цього створюємо список gra, у якому буде три елементи (три зображення). Обираємо випадкове число від 0 до 2, і записуємо зображення з цим номером в текстовий напис label. При цьому дозволяємо масштабування вмісту, щоб зображення займало всю площу напису
def check(self):
gra=["1.bmp","2.bmp","3.bmp"]
k=random.randint(0,2)
pic = QPixmap(gra[k])
self.label.setScaledContents(True)
self.label.setPixmap(pic)
2) Визначаємо, яку саме кнопку клацнули (адже у нас всі три кнопки мають один і той же метод обробки. Для цього використаємо self.sender().objectName() - це назва об'єкту, який запустив обробку: pushButton_1, pushButton_2 чи pushButton_3. Якщо взяти [-1] символ цієї назви - отримаємо символи 1, 2 та 3. Можна їх перевести у числа (int) для того, щоб можна було порівняти з числами з попереднього пункту.
n=int(self.sender().objectName()[-1])
3) Оскільки випадкове число k мало варіанти 0,1,2, а число n має варіанти 1,2,3, потрібно або до k додати 1, або від n - відняти 1.
n=n-1
4) Залишається виконати перевірку. Якщо і гравець, і комп'ютер обрали однакові фігури, то нічия. Якщо гравець вибрав, наприклад, камінь, а комп'ютер - ножиці, то виграв гравець. Якщо гравець вибрав камінь, а комп'ютер - папір, то виграв комп'ютер.
if n==k:
self.label_2.setText("Нічия")
if n==0 and k==1:
self.label_2.setText("Ви виграли")
if n==0 and k==2:
self.label_2.setText("Виграв комп'ютер")
Самостійно напишіть решту перевірок для повноцінної гри.