Tetris

Форк
0
/
interface.py 
155 строк · 5.2 Кб
1
from PyQt5 import QtCore, QtWidgets
2
from PyQt5.QtWidgets import QWidget, QAction
3
from PyQt5.QtCore import QBasicTimer
4

5
from dialogWindows import *
6
from windowTetris import Ui_MainWindow
7

8

9
class MyWindow(QtWidgets.QMainWindow):
10
    def __init__(self):
11
        super(MyWindow, self).__init__()
12
        self.setWindowTitle('Tetris')
13
        self.setWindowIcon(QtGui.QIcon('Photo/TIcon.jpg'))
14

15
        self.ui = Ui_MainWindow()
16
        self.ui.setupUi(self)
17

18
        self.ex = ChangeSize()
19
        self.ex.SizeSignal.connect(self.updateFrame)
20

21
        self.setChildrenFocusPolicy(QtCore.Qt.NoFocus)
22

23
        self.timer = QBasicTimer()
24
        self.curSpeed = 1000
25
        self.timer.start(self.curSpeed, self)
26

27
        self.timerLevel = QBasicTimer()
28
        self.timerLevel.start(20000, self)
29

30
        self.ui.pushButton.clicked.connect(self.updateFrame)
31

32
        self.ui.frame.curshape.shape = self.ui.widget.curshape.futureShape
33
        self.ui.frame.update()
34

35
        # Верхняя панель
36
        settings = QAction(QtGui.QIcon('Photo/Settings.jpg'), 'Size', self)
37
        settings.setShortcut('Ctrl+S')
38
        settings.triggered.connect(self.showDialogSize)
39
        settings.setStatusTip('Change size')
40
        fileMenu = self.ui.menubar.addMenu('&Settings')
41
        fileMenu.addAction(settings)
42

43
        self.ui.widget.msg2Statusbar[str].connect(self.ui.statusbar.showMessage)
44

45
        self.loadStyleSheets()
46

47
    def loadStyleSheets(self):
48
        style = "static/style.css"
49
        with open(style, "r") as f:
50
            self.setStyleSheet(f.read())
51

52
    def showDialogSize(self):
53
        self.ui.widget.pause = True
54
        self.ui.widget.msg2Statusbar.emit(' Pause')
55
        self.stopTime()
56
        self.ex.show()
57

58
    def startTimeAgain(self):
59
        self.timer.start(self.curSpeed, self)
60
        self.timerLevel.start(20000, self)
61

62
    def stopTime(self):
63
        self.timer.stop()
64
        self.timerLevel.stop()
65

66
    def updateFrame(self):
67
        self.stopTime()
68

69
        self.curSpeed = 1000
70
        self.ui.widget.fail = False
71
        self.ui.widget.pause = False
72
        self.ui.widget.clearBoard()
73
        self.ui.widget.newFigure()
74
        self.ui.widget.update()
75
        self.ui.frame.curshape.shape = self.ui.widget.curshape.futureShape
76
        self.ui.frame.update()
77
        self.ui.widget.count = 0
78
        self.ui.widget.curLevel = 1
79

80
        self.startTimeAgain()
81

82
    def keyPressEvent(self, event):
83
        key = event.key()
84
        if self.ui.widget.fail or self.ui.widget.pause:
85
            pass
86
        if not self.ui.widget.fail and not self.ui.widget.pause:
87
            if key == QtCore.Qt.Key_Space:
88
                self.ui.widget.drop()
89

90
            if key == QtCore.Qt.Key_Right:
91
                self.ui.widget.tryMoveX(1)
92

93
            if key == QtCore.Qt.Key_Left:
94
                self.ui.widget.tryMoveX(-1)
95

96
            if key == QtCore.Qt.Key_Down:
97
                self.ui.widget.curshape.coords = self.ui.widget.curshape.rotateShape(1, self.ui.widget.curshape,
98
                                                                                     self.ui.widget.board)
99
                self.ui.widget.update()
100
            if key == QtCore.Qt.Key_Up:
101
                self.ui.widget.curshape.coords = self.ui.widget.curshape.rotateShape(-1, self.ui.widget.curshape,
102
                                                                                     self.ui.widget.board)
103
                self.ui.widget.update()
104

105
        if key == QtCore.Qt.Key_P:
106
            self.ui.widget.pause = not self.ui.widget.pause
107
            if self.ui.widget.pause:
108
                self.stopTime()
109
                self.ui.widget.msg2Statusbar.emit(' Pause')
110
            elif not self.ui.widget.fail:
111
                self.startTimeAgain()
112

113
        if key == QtCore.Qt.Key_Escape:
114
            self.ex.close()
115
            self.close()
116

117
    def timerEvent(self, event):
118
        if event.timerId() == self.timerLevel.timerId():
119
            self.curSpeed = self.curSpeed // 1.2
120
            self.ui.widget.curLevel += 1
121
            self.startTimeAgain()
122

123
        if event.timerId() == self.timer.timerId():
124

125
            if self.ui.widget.fail:
126
                self.ui.widget.msg2Statusbar.emit('Try Again')
127
                self.stopTime()
128
                self.ui.lineEdit.setText('FAIL: All count - ' + str(self.ui.widget.count))
129
                self.ui.pushButton.setText('Return?')
130
            else:
131
                self.ui.widget.msg2Statusbar.emit('Game Start!')
132
                self.ui.widget.gravity()
133
                self.setTextLine()
134
                self.ui.frame.curshape.shape = self.ui.widget.curshape.futureShape
135
                self.ui.widget.update()
136
                self.ui.frame.update()
137

138
    def setTextLine(self):
139
        text = 'Count - '
140
        text += str(self.ui.widget.count)
141

142
        level = 'Level: '
143
        level += str(self.ui.widget.curLevel)
144

145
        self.ui.lineEdit_1.setText(level)
146
        self.ui.lineEdit.setText(text)
147
        self.ui.pushButton.setText('GO')
148

149
    def setChildrenFocusPolicy(self, policy):
150
        def recursiveSetChildFocusPolicy(parentQWidget):
151
            for childQWidget in parentQWidget.findChildren(QWidget):
152
                childQWidget.setFocusPolicy(policy)
153
                recursiveSetChildFocusPolicy(childQWidget)
154

155
        recursiveSetChildFocusPolicy(self)
156

157

158

159

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.