Python实现简单的俄罗斯方块游戏
作者:红目香薰 时间:2022-11-17 16:56:58
本文实例为大家分享了Python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下
玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速的。
源码分享:
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 = 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_())
来源:https://laoshifu.blog.csdn.net/article/details/120425285
标签:Python,俄罗斯方块
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
解决django框架model中外键不落实到数据库问题
2024-01-13 20:36:12
![](https://img.aspxhome.com/file/2023/3/99123_0s.jpg)
ASP XML制作菜单管理程序
2011-04-04 11:15:00
python基础之函数的返回值
2022-10-23 23:17:06
![](https://img.aspxhome.com/file/2023/4/105394_0s.jpg)
Vue ElementUI之Form表单验证遇到的问题
2023-07-02 16:56:54
![](https://img.aspxhome.com/file/2023/1/139841_0s.png)
Python二分法搜索算法实例分析
2023-11-01 13:13:15
可以自动轮换的页签 tabs
2008-02-21 12:25:00
如何使用Python实现名片管理系统
2022-11-24 03:13:09
Python中遇到的小问题及解决方法汇总
2023-10-14 04:58:35
![](https://img.aspxhome.com/file/2023/1/78681_0s.png)
laravel中短信发送验证码的实现方法
2023-11-15 08:05:16
![](https://img.aspxhome.com/file/2023/0/91210_0s.jpg)
Python多进程编程multiprocessing代码实例
2022-11-20 20:25:51
使用Python制作一个简易的远控终端
2022-03-29 21:04:12
![](https://img.aspxhome.com/file/2023/2/118002_0s.png)
mysql中如何查看表空间
2024-01-27 00:25:25
![](https://img.aspxhome.com/file/2023/2/112312_0s.png)
使用pyecharts生成Echarts网页的实例
2023-02-22 10:19:42
关于 Python json中load和loads区别
2021-04-24 20:30:51
SQL Server密码管理的六个危险判断
2008-10-23 13:57:00
Python实现注册登录功能
2023-09-07 22:24:50
sqlserver/mysql按天、按小时、按分钟统计连续时间段数据【推荐】
2024-01-27 14:23:20
python filecmp.dircmp实现递归比对两个目录的方法
2021-10-11 10:22:29
![](https://img.aspxhome.com/file/2023/7/109997_0s.png)
python学习之matplotlib绘制散点图实例
2021-02-22 21:28:22
![](https://img.aspxhome.com/file/2023/6/128716_0s.png)
SQL语句练习实例之七 剔除不需要的记录行
2011-11-03 16:50:51