Created
June 30, 2020 19:52
-
-
Save ynonp/47cd0322dc9087d295ef2d4a22dc8e05 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PyQt5.QtCore import * | |
from PyQt5.QtWidgets import * | |
from ui_mainwindow import Ui_MainWindow | |
from functools import partial | |
import sys | |
class MainWindow(QMainWindow): | |
def __init__(self): | |
super().__init__() | |
self.player = "X" | |
self.ui = Ui_MainWindow() | |
self.ui.setupUi(self) | |
self.buttons = self.centralWidget().findChildren(QPushButton) | |
self.ui.actionNew_Game.triggered.connect(self.new_game) | |
for btn in self.buttons: | |
btn.clicked.connect(self.clicked) | |
def new_game(self): | |
self.player = "X" | |
for btn in self.buttons: | |
btn.setText("") | |
btn.setStyleSheet("") | |
def next_player(self): | |
self.player = "O" if self.player == "X" else "X" | |
def clicked(self): | |
sender = self.sender() | |
if sender.text() == "": | |
sender.setText(self.player) | |
if winner := self.check_winner(self.player): | |
print(f"{self.player} won") | |
for button_index in winner: | |
self.buttons[button_index].setStyleSheet("background: red") | |
else: | |
self.next_player() | |
def check_winner(self, sign): | |
texts = [btn.text() for btn in self.buttons] | |
for i in range(3): | |
# Row | |
if texts[3 * i] == texts[3 * i + 1] == texts[3 * i + 2] == sign: | |
return [3 * i, 3 * i + 1, 3 * i + 2] | |
# Column | |
if texts[i] == texts[i + 3] == texts[i + 6] == sign: | |
return [i, i + 3, i + 6] | |
# Diagonal 1 | |
if texts[0] == texts[4] == texts[8] == sign: | |
return [0, 4, 8] | |
# Diagonal 2 | |
if texts[2] == texts[4] == texts[6] == sign: | |
return [2, 4, 6] | |
app = QApplication(sys.argv) | |
w = MainWindow() | |
w.show() | |
app.exec_() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# Form implementation generated from reading ui file 'game.ui' | |
# | |
# Created by: PyQt5 UI code generator 5.11.3 | |
# | |
# WARNING! All changes made in this file will be lost! | |
from PyQt5 import QtCore, QtGui, QtWidgets | |
class Ui_MainWindow(object): | |
def setupUi(self, MainWindow): | |
MainWindow.setObjectName("MainWindow") | |
MainWindow.resize(800, 600) | |
self.centralwidget = QtWidgets.QWidget(MainWindow) | |
self.centralwidget.setObjectName("centralwidget") | |
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) | |
self.gridLayout.setObjectName("gridLayout") | |
self.pushButton = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth()) | |
self.pushButton.setSizePolicy(sizePolicy) | |
self.pushButton.setText("") | |
self.pushButton.setObjectName("pushButton") | |
self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1) | |
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth()) | |
self.pushButton_2.setSizePolicy(sizePolicy) | |
self.pushButton_2.setText("") | |
self.pushButton_2.setObjectName("pushButton_2") | |
self.gridLayout.addWidget(self.pushButton_2, 0, 1, 1, 1) | |
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth()) | |
self.pushButton_3.setSizePolicy(sizePolicy) | |
self.pushButton_3.setText("") | |
self.pushButton_3.setObjectName("pushButton_3") | |
self.gridLayout.addWidget(self.pushButton_3, 0, 2, 1, 1) | |
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_4.sizePolicy().hasHeightForWidth()) | |
self.pushButton_4.setSizePolicy(sizePolicy) | |
self.pushButton_4.setText("") | |
self.pushButton_4.setObjectName("pushButton_4") | |
self.gridLayout.addWidget(self.pushButton_4, 1, 0, 1, 1) | |
self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_5.sizePolicy().hasHeightForWidth()) | |
self.pushButton_5.setSizePolicy(sizePolicy) | |
self.pushButton_5.setText("") | |
self.pushButton_5.setObjectName("pushButton_5") | |
self.gridLayout.addWidget(self.pushButton_5, 1, 1, 1, 1) | |
self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_6.sizePolicy().hasHeightForWidth()) | |
self.pushButton_6.setSizePolicy(sizePolicy) | |
self.pushButton_6.setText("") | |
self.pushButton_6.setObjectName("pushButton_6") | |
self.gridLayout.addWidget(self.pushButton_6, 1, 2, 1, 1) | |
self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_7.sizePolicy().hasHeightForWidth()) | |
self.pushButton_7.setSizePolicy(sizePolicy) | |
self.pushButton_7.setText("") | |
self.pushButton_7.setObjectName("pushButton_7") | |
self.gridLayout.addWidget(self.pushButton_7, 2, 0, 1, 1) | |
self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_8.sizePolicy().hasHeightForWidth()) | |
self.pushButton_8.setSizePolicy(sizePolicy) | |
self.pushButton_8.setText("") | |
self.pushButton_8.setObjectName("pushButton_8") | |
self.gridLayout.addWidget(self.pushButton_8, 2, 1, 1, 1) | |
self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget) | |
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) | |
sizePolicy.setHorizontalStretch(0) | |
sizePolicy.setVerticalStretch(0) | |
sizePolicy.setHeightForWidth(self.pushButton_9.sizePolicy().hasHeightForWidth()) | |
self.pushButton_9.setSizePolicy(sizePolicy) | |
self.pushButton_9.setText("") | |
self.pushButton_9.setObjectName("pushButton_9") | |
self.gridLayout.addWidget(self.pushButton_9, 2, 2, 1, 1) | |
MainWindow.setCentralWidget(self.centralwidget) | |
self.menubar = QtWidgets.QMenuBar(MainWindow) | |
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) | |
self.menubar.setObjectName("menubar") | |
self.menuFile = QtWidgets.QMenu(self.menubar) | |
self.menuFile.setObjectName("menuFile") | |
MainWindow.setMenuBar(self.menubar) | |
self.statusbar = QtWidgets.QStatusBar(MainWindow) | |
self.statusbar.setObjectName("statusbar") | |
MainWindow.setStatusBar(self.statusbar) | |
self.actionNew_Game = QtWidgets.QAction(MainWindow) | |
self.actionNew_Game.setObjectName("actionNew_Game") | |
self.menuFile.addAction(self.actionNew_Game) | |
self.menubar.addAction(self.menuFile.menuAction()) | |
self.retranslateUi(MainWindow) | |
QtCore.QMetaObject.connectSlotsByName(MainWindow) | |
def retranslateUi(self, MainWindow): | |
_translate = QtCore.QCoreApplication.translate | |
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) | |
self.menuFile.setTitle(_translate("MainWindow", "File")) | |
self.actionNew_Game.setText(_translate("MainWindow", "New Game")) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment