关于python:为了上班摸鱼我用Python制作了俄罗斯方块

5次阅读

共计 2633 个字符,预计需要花费 7 分钟才能阅读完成。

import os
import sys
import random
from modules import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
”’ 定义俄罗斯方块游戏类 ”’
class TetrisGame(QMainWindow):

def __init__(self, parent=None):
    super(TetrisGame, self).__init__(parent)
    # 是否暂停 ing
    self.is_paused = False
    # 是否开始 ing
    self.is_started = False
    self.initUI()
'''界面初始化'''
def initUI(self):
    # icon
    self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'resources/icon.jpg')))
    # 块大小
    self.grid_size = 22
    # 游戏帧率
    self.fps = 200
    self.timer = QBasicTimer()
    # 焦点
    self.setFocusPolicy(Qt.StrongFocus)
    # 程度布局
    layout_horizontal = QHBoxLayout()
    self.inner_board = InnerBoard()
    self.external_board = ExternalBoard(self, self.grid_size, self.inner_board)
    layout_horizontal.addWidget(self.external_board)
    self.side_panel = SidePanel(self, self.grid_size, self.inner_board)
    layout_horizontal.addWidget(self.side_panel)
    self.status_bar = self.statusBar()        self.external_board.score_signal[str].connect(self.status_bar.showMessage)
    self.start()
    self.center()
    self.setWindowTitle('Tetris —— 九歌')
    self.show()
    self.setFixedSize(self.external_board.width() + self.side_panel.width(), self.side_panel.height() + self.status_bar.height())
'''游戏界面挪动到屏幕两头'''
def center(self):
    screen =[利率期货](https://www.gendan5.com/ff/if.html) QDesktopWidget().screenGeometry()
    size = self.geometry()
    self.move((screen.width() - size.width()) // 2, (screen.height() - size.height()) // 2)
'''更新界面'''
def updateWindow(self):
    self.external_board.updateData()
    self.side_panel.updateData()
    self.update()
'''开始'''
def start(self):
    if self.is_started:
        return
    self.is_started = True
    self.inner_board.createNewTetris()
    self.timer.start(self.fps, self)
'''暂停 / 不暂停'''
def pause(self):
    if not self.is_started:
        return
    self.is_paused = not self.is_paused
    if self.is_paused:
        self.timer.stop()
        self.external_board.score_signal.emit('Paused')
    else:
        self.timer.start(self.fps, self)
    self.updateWindow()
'''计时器事件'''
def timerEvent(self, event):
    if event.timerId() == self.timer.timerId():
        removed_lines = self.inner_board.moveDown()
        self.external_board.score += removed_lines
        self.updateWindow()
    else:
        super(TetrisGame, self).timerEvent(event)
'''按键事件'''
def keyPressEvent(self, event):
    if not self.is_started or self.inner_board.current_tetris == tetrisShape().shape_empty:
        super(TetrisGame, self).keyPressEvent(event)
        return
    key = event.key()
    # P 键暂停
    if key == Qt.Key_P:
        self.pause()
        return
    if self.is_paused:
        return
    # 向左
    elif key == Qt.Key_Left:
        self.inner_board.moveLeft()
    # 向右
    elif key == Qt.Key_Right:
        self.inner_board.moveRight()
    # 旋转
    elif key == Qt.Key_Up:
        self.inner_board.rotateAnticlockwise()
    # 疾速坠落
    elif key == Qt.Key_Space:
        self.external_board.score += self.inner_board.dropDown()
    else:
        super(TetrisGame, self).keyPressEvent(event)
    self.updateWindow()

”’run”’
if name == ‘__main__’:

app = QApplication([])
tetris = TetrisGame()
sys.exit(app.exec_())
正文完
 0