Как сделать небольшую паузу между ходом бота и ходом игрока?
Пишу крестики-нолики на PyQt5. Решил написать бота, который будет ходить на рандомную позицию.
Столкнулся с проблемой: Когда ходит игрок, то бот ходит мгновенно с игроком.
Пытался создать тайминг между ходами путем time.sleep(), а при ходе игрока принудительно вызвать self.show(), но почему-то главное окно не обновляется.
Помогите сделать паузу между ходом бота и игрока.
import sys
from PyQt5.QtWidgets import (QPushButton,QWidget, QHBoxLayout, QLabel, QApplication, QFileDialog)
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5 import QtCore, Qt
import random, time
class Example (QWidget):
def __init__(self):
self.count = 0
self.first_team, self.second_team = 0, 0
self.array = [[0,0,0],[0,0,0],[0,0,0]]
self.reset = False
self.enable = False
self.last_numbers = [1,2,3,4,5,6,7,8,9]
super ().__init__()
self.initUI ()
def initUI(self):
self.button00 = QPushButton(self)
self.button00.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button00.setGeometry(90,90,140,140)
self.button01 = QPushButton(self)
self.button01.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button01.setGeometry(230, 90, 140, 140)
self.button02 = QPushButton(self)
self.button02.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button02.setGeometry(370, 90, 140, 140)
self.button10 = QPushButton(self)
self.button10.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button10.setGeometry(90, 230, 140, 140)
self.button11 = QPushButton(self)
self.button11.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button11.setGeometry(230, 230, 140, 140)
self.button12 = QPushButton(self)
self.button12.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button12.setGeometry(370, 230, 140, 140)
self.button20 = QPushButton(self)
self.button20.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button20.setGeometry(90, 370, 140, 140)
self.button21 = QPushButton(self)
self.button21.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button21.setGeometry(230, 370, 140, 140)
self.button22 = QPushButton(self)
self.button22.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button22.setGeometry(370, 370, 140, 140)
self.label00 = QLabel(self)
self.label01 = QLabel(self)
self.label02 = QLabel(self)
self.label10 = QLabel(self)
self.label11 = QLabel(self)
self.label12 = QLabel(self)
self.label20 = QLabel(self)
self.label21 = QLabel(self)
self.label22 = QLabel(self)
self.prev_label00 = QLabel(self)
self.prev_label00.setGeometry(515, 5, 20,20)
self.prev_label01 = QLabel(self)
self.prev_label01.setGeometry(535, 5, 20, 20)
self.prev_label02 = QLabel(self)
self.prev_label02.setGeometry(555, 5, 20, 20)
self.prev_label10 = QLabel(self)
self.prev_label10.setGeometry(515, 25, 20, 20)
self.prev_label11 = QLabel(self)
self.prev_label11.setGeometry(535, 25, 20, 20)
self.prev_label12 = QLabel(self)
self.prev_label12.setGeometry(555, 25, 20, 20)
self.prev_label20 = QLabel(self)
self.prev_label20.setGeometry(515, 45, 20, 20)
self.prev_label21 = QLabel(self)
self.prev_label21.setGeometry(535, 45, 20, 20)
self.prev_label22 = QLabel(self)
self.prev_label22.setGeometry(555, 45, 20, 20)
self.result = QLabel(self)
self.result.setText(f"{self.first_team} : {self.second_team}")
self.result.setGeometry(10,10,72,40)
self.result.setStyleSheet("background-color: rgb(255, 0, 0); \n"
"font: 18pt \"OCR A Extended\";")
self.resetButton = QPushButton(self)
self.resetButton.setText("Сбросить счет")
self.resetButton.setGeometry(120, 10, 200, 40)
self.resetButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
"font: 18pt \"OCR A Extended\";")
self.botButton = QPushButton(self)
self.botButton.setText("AI")
self.botButton.setGeometry(350,10,140,40)
self.botButton.setStyleSheet("background-color: rgb(255, 0, 0);\n"
"font: 18pt \"OCR A Extended\";")
self.setWindowIcon(QIcon("Tic_tac_toe.ico"))
self.resize(600,600)
self.move (300, 200)
self.setStyleSheet("background-color: rgb(0, 85, 127);")
self.setWindowTitle ('Tic-Tac-Toe')
self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)
self.setFixedSize(self.size())
self.show ()
def action(self):
self.button00.clicked.connect(lambda: self.turn(self.button00.geometry()))
self.button01.clicked.connect(lambda: self.turn(self.button01.geometry()))
self.button02.clicked.connect(lambda: self.turn(self.button02.geometry()))
self.button10.clicked.connect(lambda: self.turn(self.button10.geometry()))
self.button11.clicked.connect(lambda: self.turn(self.button11.geometry()))
self.button12.clicked.connect(lambda: self.turn(self.button12.geometry()))
self.button20.clicked.connect(lambda: self.turn(self.button20.geometry()))
self.button21.clicked.connect(lambda: self.turn(self.button21.geometry()))
self.button22.clicked.connect(lambda: self.turn(self.button22.geometry()))
self.resetButton.clicked.connect(self.res)
self.botButton.clicked.connect(self.startBot)
def startBot(self):
if self.enable == False:
self.res()
self.botButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
"font: 18pt \"OCR A Extended\";")
self.enable = True
else:
self.res()
self.botButton.setStyleSheet("background-color: rgb(255, 0, 0); \n"
"font: 18pt \"OCR A Extended\";")
self.enable = False
def turn(self, button_geometry):
self.count+=1
if self.enable == False:
if self.count%2 == 1:
if button_geometry == self.button00.geometry():
self.label00.setGeometry(button_geometry)
self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][0] = 1
if button_geometry == self.button01.geometry():
self.label01.setGeometry(button_geometry)
self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][1] = 1
if button_geometry == self.button02.geometry():
self.label02.setGeometry(button_geometry)
self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][2] = 1
if button_geometry == self.button10.geometry():
self.label10.setGeometry(button_geometry)
self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][0] = 1
if button_geometry == self.button11.geometry():
self.label11.setGeometry(button_geometry)
self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][1] = 1
if button_geometry == self.button12.geometry():
self.label12.setGeometry(button_geometry)
self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][2] = 1
if button_geometry == self.button20.geometry():
self.label20.setGeometry(button_geometry)
self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][0] = 1
if button_geometry == self.button21.geometry():
self.label21.setGeometry(button_geometry)
self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][1] = 1
if button_geometry == self.button22.geometry():
self.label22.setGeometry(button_geometry)
self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][2] = 1
if self.count%2 == 0:
if button_geometry == self.button00.geometry():
self.label00.setGeometry(button_geometry)
self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][0] = 2
if button_geometry == self.button01.geometry():
self.label01.setGeometry(button_geometry)
self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][1] = 2
if button_geometry == self.button02.geometry():
self.label02.setGeometry(button_geometry)
self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][2] = 2
if button_geometry == self.button10.geometry():
self.label10.setGeometry(button_geometry)
self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][0] = 2
if button_geometry == self.button11.geometry():
self.label11.setGeometry(button_geometry)
self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][1] = 2
if button_geometry == self.button12.geometry():
self.label12.setGeometry(button_geometry)
self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][2] = 2
if button_geometry == self.button20.geometry():
self.label20.setGeometry(button_geometry)
self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][0] = 2
if button_geometry == self.button21.geometry():
self.label21.setGeometry(button_geometry)
self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][1] = 2
if button_geometry == self.button22.geometry():
self.label22.setGeometry(button_geometry)
self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][2] = 2
if self.enable == True:
if self.count % 2 == 1:
if button_geometry == self.button00.geometry():
self.label00.setGeometry(button_geometry)
self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][0] = 1
self.last_numbers[0] = 10
if button_geometry == self.button01.geometry():
self.label01.setGeometry(button_geometry)
self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][1] = 1
self.last_numbers[1] = 10
if button_geometry == self.button02.geometry():
self.label02.setGeometry(button_geometry)
self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][2] = 1
self.last_numbers[2] = 10
if button_geometry == self.button10.geometry():
self.label10.setGeometry(button_geometry)
self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][0] = 1
self.last_numbers[3] = 10
if button_geometry == self.button11.geometry():
self.label11.setGeometry(button_geometry)
self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][1] = 1
self.last_numbers[4] = 10
if button_geometry == self.button12.geometry():
self.label12.setGeometry(button_geometry)
self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][2] = 1
self.last_numbers[5] = 10
if button_geometry == self.button20.geometry():
self.label20.setGeometry(button_geometry)
self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][0] = 1
self.last_numbers[6] = 10
if button_geometry == self.button21.geometry():
self.label21.setGeometry(button_geometry)
self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][1] = 1
self.last_numbers[7] = 10
if button_geometry == self.button22.geometry():
self.label22.setGeometry(button_geometry)
self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][2] = 1
self.last_numbers[8] = 10
self.new_games()
self.count+=1
if self.count % 2 == 0:
while True:
random_turn = random.randint(0,len(self.last_numbers)-1)
x = self.last_numbers[random_turn]
if x < 10:
if x == 1:
self.label00.setGeometry(90,90,140,140)
self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][0] = 2
self.last_numbers[0] = 10
if x == 2:
self.label01.setGeometry(230, 90, 140, 140)
self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][1] = 2
self.last_numbers[1] = 10
if x == 3:
self.label02.setGeometry(370, 90, 140, 140)
self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][2] = 2
self.last_numbers[2] = 10
if x == 4:
self.label10.setGeometry(90, 230, 140, 140)
self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][0] = 2
self.last_numbers[3] = 10
if x == 5:
self.label11.setGeometry(230, 230, 140, 140)
self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][1] = 2
self.last_numbers[4] = 10
if x == 6:
self.label12.setGeometry(370, 230, 140, 140)
self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][2] = 2
self.last_numbers[5] = 10
if x == 7:
self.label20.setGeometry(90, 370, 140, 140)
self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][0] = 2
self.last_numbers[6] = 10
if x == 8:
self.label21.setGeometry(230, 370, 140, 140)
self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][1] = 2
self.last_numbers[7] = 10
if x == 9:
self.label22.setGeometry(370, 370, 140, 140)
self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][2] = 2
self.last_numbers[8] = 10
break
if self.count == 1:
self.count = 0
self.new_games()
def new_games(self):
if (self.array[0][0] == 1 and self.array[1][1] == 1 and self.array[2][2] == 1) or (self.array[0][0] == 1 and \
self.array[0][1] == 1 and self.array[0][2] == 1) or (self.array[0][0] == 1 and self.array[1][0] == 1 \
and self.array[2][0] == 1) or (self.array[2][0] == 1 and self.array[2][1] == 1 and self.array[2][2] == 1) \
or (self.array[0][2] == 1 and self.array[1][2] == 1 and self.array[2][2] == 1) or (self.array[2][0] == 1 \
and self.array[1][1] == 1 and self.array[0][2] == 1) or (self.array[0][1] == 1 and self.array[1][1] == 1 \
and self.array[2][1] == 1) or (self.array[1][0] == 1 and self.array[1][1] == 1 and self.array[1][2] == 1):
self.first_team+=1; self.reset = True
if (self.array[0][0] == 2 and self.array[1][1] == 2 and self.array[2][2] == 2) or (self.array[0][0] == 2 and \
self.array[0][1] == 2 and self.array[0][2] == 2) or (self.array[0][0] == 2 and self.array[1][0] == 2 \
and self.array[2][0] == 2) or (self.array[2][0] == 2 and self.array[2][1] == 2 and self.array[2][2] == 2) \
or (self.array[0][2] == 2 and self.array[1][2] == 2 and self.array[2][2] == 2) or (self.array[2][0] == 2 \
and self.array[1][1] == 2 and self.array[0][2] == 2) or (self.array[0][1] == 2 and self.array[1][1] == 2 \
and self.array[2][1] == 2) or (self.array[1][0] == 2 and self.array[1][1] == 2 and self.array[1][2] == 2):
self.second_team+=1; self.reset = True
if self.second_team > 9 or self.first_team > 9:
self.res()
self.reset = False
if self.count == 9:
self.reset = True
if self.reset == True:
self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label00.setStyleSheet(self.label00.styleSheet())
self.prev_label01.setStyleSheet(self.label01.styleSheet())
self.prev_label02.setStyleSheet(self.label02.styleSheet())
self.prev_label10.setStyleSheet(self.label10.styleSheet())
self.prev_label11.setStyleSheet(self.label11.styleSheet())
self.prev_label12.setStyleSheet(self.label12.styleSheet())
self.prev_label20.setStyleSheet(self.label20.styleSheet())
self.prev_label21.setStyleSheet(self.label21.styleSheet())
self.prev_label22.setStyleSheet(self.label22.styleSheet())
self.result.setText(f"{self.first_team} : {self.second_team}")
self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
self.count = 0
self.label00.setGeometry(0,0,0,0)
self.label00.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label01.setGeometry(0,0,0,0)
self.label01.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label02.setGeometry(0,0,0,0)
self.label02.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label10.setGeometry(0, 0, 0, 0)
self.label10.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label11.setGeometry(0, 0, 0, 0)
self.label11.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label12.setGeometry(0, 0, 0, 0)
self.label12.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label20.setGeometry(0, 0, 0, 0)
self.label20.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label21.setGeometry(0, 0, 0, 0)
self.label21.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label22.setGeometry(0, 0, 0, 0)
self.label22.setStyleSheet("background-color: rgb(0, 85, 127);")
self.reset = False
def res(self):
self.first_team = 0
self.second_team = 0
self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
self.count = 0
self.label00.setGeometry(0, 0, 0, 0)
self.label01.setGeometry(0, 0, 0, 0)
self.label02.setGeometry(0, 0, 0, 0)
self.label10.setGeometry(0, 0, 0, 0)
self.label11.setGeometry(0, 0, 0, 0)
self.label12.setGeometry(0, 0, 0, 0)
self.label20.setGeometry(0, 0, 0, 0)
self.label21.setGeometry(0, 0, 0, 0)
self.label22.setGeometry(0, 0, 0, 0)
self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")
self.result.setText(f"{self.first_team} : {self.second_team}")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example ()
ex.action()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
void QTest::qWait(int ms)
Ожидает миллисекунды ms. Во время ожидания события будут обрабатываться, и ваш тест будет реагировать на события пользовательского интерфейса или сетевое взаимодействие.
...
from PyQt5.QtTest import * # +++
...
...
QTest.qWait(2000) # +++ миллисекунд
...
import sys
import random, time
from PyQt5.QtWidgets import (QPushButton,QWidget, QHBoxLayout, QLabel, QApplication, QFileDialog)
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5 import QtCore, Qt
from PyQt5.QtTest import * # +++
class Example (QWidget):
def __init__(self):
self.count = 0
self.first_team, self.second_team = 0, 0
self.array = [[0,0,0],[0,0,0],[0,0,0]]
self.reset = False
self.enable = False
self.last_numbers = [1,2,3,4,5,6,7,8,9]
super ().__init__()
self.initUI ()
def initUI(self):
self.button00 = QPushButton(self)
self.button00.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button00.setGeometry(90,90,140,140)
self.button01 = QPushButton(self)
self.button01.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button01.setGeometry(230, 90, 140, 140)
self.button02 = QPushButton(self)
self.button02.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button02.setGeometry(370, 90, 140, 140)
self.button10 = QPushButton(self)
self.button10.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button10.setGeometry(90, 230, 140, 140)
self.button11 = QPushButton(self)
self.button11.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button11.setGeometry(230, 230, 140, 140)
self.button12 = QPushButton(self)
self.button12.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button12.setGeometry(370, 230, 140, 140)
self.button20 = QPushButton(self)
self.button20.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button20.setGeometry(90, 370, 140, 140)
self.button21 = QPushButton(self)
self.button21.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button21.setGeometry(230, 370, 140, 140)
self.button22 = QPushButton(self)
self.button22.setStyleSheet("background-color: rgb(255, 255, 255);")
self.button22.setGeometry(370, 370, 140, 140)
self.label00 = QLabel(self)
self.label01 = QLabel(self)
self.label02 = QLabel(self)
self.label10 = QLabel(self)
self.label11 = QLabel(self)
self.label12 = QLabel(self)
self.label20 = QLabel(self)
self.label21 = QLabel(self)
self.label22 = QLabel(self)
self.prev_label00 = QLabel(self)
self.prev_label00.setGeometry(515, 5, 20,20)
self.prev_label01 = QLabel(self)
self.prev_label01.setGeometry(535, 5, 20, 20)
self.prev_label02 = QLabel(self)
self.prev_label02.setGeometry(555, 5, 20, 20)
self.prev_label10 = QLabel(self)
self.prev_label10.setGeometry(515, 25, 20, 20)
self.prev_label11 = QLabel(self)
self.prev_label11.setGeometry(535, 25, 20, 20)
self.prev_label12 = QLabel(self)
self.prev_label12.setGeometry(555, 25, 20, 20)
self.prev_label20 = QLabel(self)
self.prev_label20.setGeometry(515, 45, 20, 20)
self.prev_label21 = QLabel(self)
self.prev_label21.setGeometry(535, 45, 20, 20)
self.prev_label22 = QLabel(self)
self.prev_label22.setGeometry(555, 45, 20, 20)
self.result = QLabel(self)
self.result.setText(f"{self.first_team} : {self.second_team}")
self.result.setGeometry(10,10,72,40)
self.result.setStyleSheet("background-color: rgb(255, 0, 0); \n"
"font: 18pt \"OCR A Extended\";")
self.resetButton = QPushButton(self)
self.resetButton.setText("Сбросить счет")
self.resetButton.setGeometry(120, 10, 200, 40)
self.resetButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
"font: 18pt \"OCR A Extended\";")
self.botButton = QPushButton(self)
self.botButton.setText("AI")
self.botButton.setGeometry(350,10,140,40)
self.botButton.setStyleSheet("background-color: rgb(255, 0, 0);\n"
"font: 18pt \"OCR A Extended\";")
self.setWindowIcon(QIcon("Tic_tac_toe.ico"))
self.resize(600,600)
self.move (300, 200)
self.setStyleSheet("background-color: rgb(0, 85, 127);")
self.setWindowTitle ('Tic-Tac-Toe')
self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)
self.setFixedSize(self.size())
self.show ()
def action(self):
self.button00.clicked.connect(lambda: self.turn(self.button00.geometry()))
self.button01.clicked.connect(lambda: self.turn(self.button01.geometry()))
self.button02.clicked.connect(lambda: self.turn(self.button02.geometry()))
self.button10.clicked.connect(lambda: self.turn(self.button10.geometry()))
self.button11.clicked.connect(lambda: self.turn(self.button11.geometry()))
self.button12.clicked.connect(lambda: self.turn(self.button12.geometry()))
self.button20.clicked.connect(lambda: self.turn(self.button20.geometry()))
self.button21.clicked.connect(lambda: self.turn(self.button21.geometry()))
self.button22.clicked.connect(lambda: self.turn(self.button22.geometry()))
self.resetButton.clicked.connect(self.res)
self.botButton.clicked.connect(self.startBot)
def startBot(self):
if self.enable == False:
self.res()
self.botButton.setStyleSheet("background-color: rgb(0, 85, 0);\n"
"font: 18pt \"OCR A Extended\";")
self.enable = True
else:
self.res()
self.botButton.setStyleSheet("background-color: rgb(255, 0, 0); \n"
"font: 18pt \"OCR A Extended\";")
self.enable = False
def turn(self, button_geometry):
self.count += 1
if self.enable == False:
if self.count%2 == 1:
if button_geometry == self.button00.geometry():
self.label00.setGeometry(button_geometry)
self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][0] = 1
if button_geometry == self.button01.geometry():
self.label01.setGeometry(button_geometry)
self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][1] = 1
if button_geometry == self.button02.geometry():
self.label02.setGeometry(button_geometry)
self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][2] = 1
if button_geometry == self.button10.geometry():
self.label10.setGeometry(button_geometry)
self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][0] = 1
if button_geometry == self.button11.geometry():
self.label11.setGeometry(button_geometry)
self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][1] = 1
if button_geometry == self.button12.geometry():
self.label12.setGeometry(button_geometry)
self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][2] = 1
if button_geometry == self.button20.geometry():
self.label20.setGeometry(button_geometry)
self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][0] = 1
if button_geometry == self.button21.geometry():
self.label21.setGeometry(button_geometry)
self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][1] = 1
if button_geometry == self.button22.geometry():
self.label22.setGeometry(button_geometry)
self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][2] = 1
if self.count%2 == 0:
if button_geometry == self.button00.geometry():
self.label00.setGeometry(button_geometry)
self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][0] = 2
if button_geometry == self.button01.geometry():
self.label01.setGeometry(button_geometry)
self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][1] = 2
if button_geometry == self.button02.geometry():
self.label02.setGeometry(button_geometry)
self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][2] = 2
if button_geometry == self.button10.geometry():
self.label10.setGeometry(button_geometry)
self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][0] = 2
if button_geometry == self.button11.geometry():
self.label11.setGeometry(button_geometry)
self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][1] = 2
if button_geometry == self.button12.geometry():
self.label12.setGeometry(button_geometry)
self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][2] = 2
if button_geometry == self.button20.geometry():
self.label20.setGeometry(button_geometry)
self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][0] = 2
if button_geometry == self.button21.geometry():
self.label21.setGeometry(button_geometry)
self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][1] = 2
if button_geometry == self.button22.geometry():
self.label22.setGeometry(button_geometry)
self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][2] = 2
if self.enable == True:
if self.count % 2 == 1:
if button_geometry == self.button00.geometry():
self.label00.setGeometry(button_geometry)
self.label00.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][0] = 1
self.last_numbers[0] = 10
if button_geometry == self.button01.geometry():
self.label01.setGeometry(button_geometry)
self.label01.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][1] = 1
self.last_numbers[1] = 10
if button_geometry == self.button02.geometry():
self.label02.setGeometry(button_geometry)
self.label02.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[0][2] = 1
self.last_numbers[2] = 10
if button_geometry == self.button10.geometry():
self.label10.setGeometry(button_geometry)
self.label10.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][0] = 1
self.last_numbers[3] = 10
if button_geometry == self.button11.geometry():
self.label11.setGeometry(button_geometry)
self.label11.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][1] = 1
self.last_numbers[4] = 10
if button_geometry == self.button12.geometry():
self.label12.setGeometry(button_geometry)
self.label12.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[1][2] = 1
self.last_numbers[5] = 10
if button_geometry == self.button20.geometry():
self.label20.setGeometry(button_geometry)
self.label20.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][0] = 1
self.last_numbers[6] = 10
if button_geometry == self.button21.geometry():
self.label21.setGeometry(button_geometry)
self.label21.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][1] = 1
self.last_numbers[7] = 10
if button_geometry == self.button22.geometry():
self.label22.setGeometry(button_geometry)
self.label22.setStyleSheet("background-color: rgb(0, 85, 0);")
self.array[2][2] = 1
self.last_numbers[8] = 10
self.new_games()
self.count += 1
# !!!
#QApplication.processEvents()
QTest.qWait(2000) # +++ миллисекунд
if self.count % 2 == 0:
while True:
random_turn = random.randint(0,len(self.last_numbers)-1)
x = self.last_numbers[random_turn]
if x < 10:
if x == 1:
self.label00.setGeometry(90,90,140,140)
self.label00.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][0] = 2
self.last_numbers[0] = 10
if x == 2:
self.label01.setGeometry(230, 90, 140, 140)
self.label01.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][1] = 2
self.last_numbers[1] = 10
if x == 3:
self.label02.setGeometry(370, 90, 140, 140)
self.label02.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[0][2] = 2
self.last_numbers[2] = 10
if x == 4:
self.label10.setGeometry(90, 230, 140, 140)
self.label10.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][0] = 2
self.last_numbers[3] = 10
if x == 5:
self.label11.setGeometry(230, 230, 140, 140)
self.label11.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][1] = 2
self.last_numbers[4] = 10
if x == 6:
self.label12.setGeometry(370, 230, 140, 140)
self.label12.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[1][2] = 2
self.last_numbers[5] = 10
if x == 7:
self.label20.setGeometry(90, 370, 140, 140)
self.label20.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][0] = 2
self.last_numbers[6] = 10
if x == 8:
self.label21.setGeometry(230, 370, 140, 140)
self.label21.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][1] = 2
self.last_numbers[7] = 10
if x == 9:
self.label22.setGeometry(370, 370, 140, 140)
self.label22.setStyleSheet("background-color: rgb(255, 0, 0);")
self.array[2][2] = 2
self.last_numbers[8] = 10
break
if self.count == 1:
self.count = 0
self.new_games()
def new_games(self):
if (self.array[0][0] == 1 and self.array[1][1] == 1 and self.array[2][2] == 1) or (self.array[0][0] == 1 and \
self.array[0][1] == 1 and self.array[0][2] == 1) or (self.array[0][0] == 1 and self.array[1][0] == 1 \
and self.array[2][0] == 1) or (self.array[2][0] == 1 and self.array[2][1] == 1 and self.array[2][2] == 1) \
or (self.array[0][2] == 1 and self.array[1][2] == 1 and self.array[2][2] == 1) or (self.array[2][0] == 1 \
and self.array[1][1] == 1 and self.array[0][2] == 1) or (self.array[0][1] == 1 and self.array[1][1] == 1 \
and self.array[2][1] == 1) or (self.array[1][0] == 1 and self.array[1][1] == 1 and self.array[1][2] == 1):
self.first_team+=1; self.reset = True
if (self.array[0][0] == 2 and self.array[1][1] == 2 and self.array[2][2] == 2) or (self.array[0][0] == 2 and \
self.array[0][1] == 2 and self.array[0][2] == 2) or (self.array[0][0] == 2 and self.array[1][0] == 2 \
and self.array[2][0] == 2) or (self.array[2][0] == 2 and self.array[2][1] == 2 and self.array[2][2] == 2) \
or (self.array[0][2] == 2 and self.array[1][2] == 2 and self.array[2][2] == 2) or (self.array[2][0] == 2 \
and self.array[1][1] == 2 and self.array[0][2] == 2) or (self.array[0][1] == 2 and self.array[1][1] == 2 \
and self.array[2][1] == 2) or (self.array[1][0] == 2 and self.array[1][1] == 2 and self.array[1][2] == 2):
self.second_team+=1; self.reset = True
if self.second_team > 9 or self.first_team > 9:
self.res()
self.reset = False
if self.count == 9:
self.reset = True
if self.reset == True:
self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label00.setStyleSheet(self.label00.styleSheet())
self.prev_label01.setStyleSheet(self.label01.styleSheet())
self.prev_label02.setStyleSheet(self.label02.styleSheet())
self.prev_label10.setStyleSheet(self.label10.styleSheet())
self.prev_label11.setStyleSheet(self.label11.styleSheet())
self.prev_label12.setStyleSheet(self.label12.styleSheet())
self.prev_label20.setStyleSheet(self.label20.styleSheet())
self.prev_label21.setStyleSheet(self.label21.styleSheet())
self.prev_label22.setStyleSheet(self.label22.styleSheet())
self.result.setText(f"{self.first_team} : {self.second_team}")
self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
self.count = 0
self.label00.setGeometry(0,0,0,0)
self.label00.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label01.setGeometry(0,0,0,0)
self.label01.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label02.setGeometry(0,0,0,0)
self.label02.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label10.setGeometry(0, 0, 0, 0)
self.label10.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label11.setGeometry(0, 0, 0, 0)
self.label11.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label12.setGeometry(0, 0, 0, 0)
self.label12.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label20.setGeometry(0, 0, 0, 0)
self.label20.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label21.setGeometry(0, 0, 0, 0)
self.label21.setStyleSheet("background-color: rgb(0, 85, 127);")
self.label22.setGeometry(0, 0, 0, 0)
self.label22.setStyleSheet("background-color: rgb(0, 85, 127);")
self.reset = False
def res(self):
self.first_team = 0
self.second_team = 0
self.array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
self.last_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
self.count = 0
self.label00.setGeometry(0, 0, 0, 0)
self.label01.setGeometry(0, 0, 0, 0)
self.label02.setGeometry(0, 0, 0, 0)
self.label10.setGeometry(0, 0, 0, 0)
self.label11.setGeometry(0, 0, 0, 0)
self.label12.setGeometry(0, 0, 0, 0)
self.label20.setGeometry(0, 0, 0, 0)
self.label21.setGeometry(0, 0, 0, 0)
self.label22.setGeometry(0, 0, 0, 0)
self.prev_label00.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label01.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label02.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label10.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label11.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label12.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label20.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label21.setStyleSheet("background-color: rgb(0, 85, 127);")
self.prev_label22.setStyleSheet("background-color: rgb(0, 85, 127);")
self.result.setText(f"{self.first_team} : {self.second_team}")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example ()
ex.action()
sys.exit(app.exec_())
