Tetris
/
interface.py
155 строк · 5.2 Кб
1from PyQt5 import QtCore, QtWidgets
2from PyQt5.QtWidgets import QWidget, QAction
3from PyQt5.QtCore import QBasicTimer
4
5from dialogWindows import *
6from windowTetris import Ui_MainWindow
7
8
9class MyWindow(QtWidgets.QMainWindow):
10def __init__(self):
11super(MyWindow, self).__init__()
12self.setWindowTitle('Tetris')
13self.setWindowIcon(QtGui.QIcon('Photo/TIcon.jpg'))
14
15self.ui = Ui_MainWindow()
16self.ui.setupUi(self)
17
18self.ex = ChangeSize()
19self.ex.SizeSignal.connect(self.updateFrame)
20
21self.setChildrenFocusPolicy(QtCore.Qt.NoFocus)
22
23self.timer = QBasicTimer()
24self.curSpeed = 1000
25self.timer.start(self.curSpeed, self)
26
27self.timerLevel = QBasicTimer()
28self.timerLevel.start(20000, self)
29
30self.ui.pushButton.clicked.connect(self.updateFrame)
31
32self.ui.frame.curshape.shape = self.ui.widget.curshape.futureShape
33self.ui.frame.update()
34
35# Верхняя панель
36settings = QAction(QtGui.QIcon('Photo/Settings.jpg'), 'Size', self)
37settings.setShortcut('Ctrl+S')
38settings.triggered.connect(self.showDialogSize)
39settings.setStatusTip('Change size')
40fileMenu = self.ui.menubar.addMenu('&Settings')
41fileMenu.addAction(settings)
42
43self.ui.widget.msg2Statusbar[str].connect(self.ui.statusbar.showMessage)
44
45self.loadStyleSheets()
46
47def loadStyleSheets(self):
48style = "static/style.css"
49with open(style, "r") as f:
50self.setStyleSheet(f.read())
51
52def showDialogSize(self):
53self.ui.widget.pause = True
54self.ui.widget.msg2Statusbar.emit(' Pause')
55self.stopTime()
56self.ex.show()
57
58def startTimeAgain(self):
59self.timer.start(self.curSpeed, self)
60self.timerLevel.start(20000, self)
61
62def stopTime(self):
63self.timer.stop()
64self.timerLevel.stop()
65
66def updateFrame(self):
67self.stopTime()
68
69self.curSpeed = 1000
70self.ui.widget.fail = False
71self.ui.widget.pause = False
72self.ui.widget.clearBoard()
73self.ui.widget.newFigure()
74self.ui.widget.update()
75self.ui.frame.curshape.shape = self.ui.widget.curshape.futureShape
76self.ui.frame.update()
77self.ui.widget.count = 0
78self.ui.widget.curLevel = 1
79
80self.startTimeAgain()
81
82def keyPressEvent(self, event):
83key = event.key()
84if self.ui.widget.fail or self.ui.widget.pause:
85pass
86if not self.ui.widget.fail and not self.ui.widget.pause:
87if key == QtCore.Qt.Key_Space:
88self.ui.widget.drop()
89
90if key == QtCore.Qt.Key_Right:
91self.ui.widget.tryMoveX(1)
92
93if key == QtCore.Qt.Key_Left:
94self.ui.widget.tryMoveX(-1)
95
96if key == QtCore.Qt.Key_Down:
97self.ui.widget.curshape.coords = self.ui.widget.curshape.rotateShape(1, self.ui.widget.curshape,
98self.ui.widget.board)
99self.ui.widget.update()
100if key == QtCore.Qt.Key_Up:
101self.ui.widget.curshape.coords = self.ui.widget.curshape.rotateShape(-1, self.ui.widget.curshape,
102self.ui.widget.board)
103self.ui.widget.update()
104
105if key == QtCore.Qt.Key_P:
106self.ui.widget.pause = not self.ui.widget.pause
107if self.ui.widget.pause:
108self.stopTime()
109self.ui.widget.msg2Statusbar.emit(' Pause')
110elif not self.ui.widget.fail:
111self.startTimeAgain()
112
113if key == QtCore.Qt.Key_Escape:
114self.ex.close()
115self.close()
116
117def timerEvent(self, event):
118if event.timerId() == self.timerLevel.timerId():
119self.curSpeed = self.curSpeed // 1.2
120self.ui.widget.curLevel += 1
121self.startTimeAgain()
122
123if event.timerId() == self.timer.timerId():
124
125if self.ui.widget.fail:
126self.ui.widget.msg2Statusbar.emit('Try Again')
127self.stopTime()
128self.ui.lineEdit.setText('FAIL: All count - ' + str(self.ui.widget.count))
129self.ui.pushButton.setText('Return?')
130else:
131self.ui.widget.msg2Statusbar.emit('Game Start!')
132self.ui.widget.gravity()
133self.setTextLine()
134self.ui.frame.curshape.shape = self.ui.widget.curshape.futureShape
135self.ui.widget.update()
136self.ui.frame.update()
137
138def setTextLine(self):
139text = 'Count - '
140text += str(self.ui.widget.count)
141
142level = 'Level: '
143level += str(self.ui.widget.curLevel)
144
145self.ui.lineEdit_1.setText(level)
146self.ui.lineEdit.setText(text)
147self.ui.pushButton.setText('GO')
148
149def setChildrenFocusPolicy(self, policy):
150def recursiveSetChildFocusPolicy(parentQWidget):
151for childQWidget in parentQWidget.findChildren(QWidget):
152childQWidget.setFocusPolicy(policy)
153recursiveSetChildFocusPolicy(childQWidget)
154
155recursiveSetChildFocusPolicy(self)
156
157
158
159