1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

python开发俄罗斯方块小游戏代码实例

1987web2024-03-25WEB开发188

1.操作环境

win10系统,python3.5以上系统,

2.相关模块

pyqt5模块;

以及一些Python自带的模块。

3.安装Python并添加到环境变量,pip安装需要的相关模块。

pipinstall-rrequirements.txtFunction:俄罗斯方块主程序Author:Charles公众号:Charles的皮卡丘importosimportsysimportrandomfrommodulesimport*fromPyQt5.QtGuiimport*fromPyQt5.QtCoreimport*fromPyQt5.QtWidgetsimport*定义俄罗斯方块游戏类classTetrisGame(QMainWindow):def__init__(self,parent=None):super(TetrisGame,self).__init__(parent)#是否暂停ingself.is_paused=False#是否开始ingself.is_started=Falseself.initUI()界面初始化definitUI(self):#iconself.setWindowIcon(QIcon(os.path.join(os.getcwd(),resources/icon.jpg)))#块大小self.grid_size=22#游戏帧率self.fps=200self.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——Charles的皮卡丘)self.show()self.setFixedSize(self.external_board.width()+self.side_panel.width(),self.side_panel.height()+self.status_bar.height())游戏界面移动到屏幕中间defcenter(self):screen=QDesktopWidget().screenGeometry()size=self.geometry()self.move((screen.width()-size.width())//2,(screen.height()-size.height())//2)更新界面defupdateWindow(self):self.external_board.updateData()self.side_panel.updateData()self.update()开始defstart(self):ifself.is_started:returnself.is_started=Trueself.inner_board.createNewTetris()self.timer.start(self.fps,self)暂停/不暂停defpause(self):ifnotself.is_started:returnself.is_paused=notself.is_pausedifself.is_paused:self.timer.stop()self.external_board.score_signal.emit(Paused)else:self.timer.start(self.fps,self)self.updateWindow()计时器事件deftimerEvent(self,event):ifevent.timerId()==self.timer.timerId():removed_lines=self.inner_board.moveDown()self.external_board.score+=removed_linesself.updateWindow()else:super(TetrisGame,self).timerEvent(event)按键事件defkeyPressEvent(self,event):ifnotself.is_startedorself.inner_board.current_tetris==tetrisShape().shape_empty:super(TetrisGame,self).keyPressEvent(event)returnkey=event.key()#P键暂停ifkey==Qt.Key_P:self.pause()returnifself.is_paused:return#向左elifkey==Qt.Key_Left:self.inner_board.moveLeft()#向右elifkey==Qt.Key_Right:self.inner_board.moveRight()#旋转elifkey==Qt.Key_Up:self.inner_board.rotateAnticlockwise()#快速坠落elifkey==Qt.Key_Space:self.external_board.score+=self.inner_board.dropDown()else:super(TetrisGame,self).keyPressEvent(event)self.updateWindow()runif__name__==__main__:app=QApplication([])tetris=TetrisGame()sys.exit(app.exec_())