# 基于 Python 制作俄罗斯方块小游戏
## 导语
上课的时候无聊写了个俄罗斯方块的小游戏(带 AI 的,用 pyqt5 写的),过来分享一波吧,因为最近没什么时间弄公众号,所以本着细水长流的原则,这里先分享游戏制作,过两天再分享利用简单的 AI 算法自动玩俄罗斯方块~
让我们愉快地开始吧~
#### 开发工具
Python 版本:3.6.4
**相关模块:**
pyqt5 模块;
以及一些 Python 自带的模块。
##### 环境搭建
安装 Python 并添加到环境变量,pip 安装需要的相关模块即可。
##### 先睹为快
在 cmd 窗口运行"**Game11.py**"文件即可。
**效果如下:**
![](https://www.writebug.com/myres/static/uploads/2022/5/16/2f49f81db7b85d944f3a9bad9c8991c5.writebug)
## 原理介绍
**游戏规则:**
由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。(**摘自百度百科**)
**控制方式:**
←→ 键控制位置,↑ 键控制方向,空格键使板块快速下落到底部,P 键暂停游戏。
**逐步实现:**
**Step1:定义一个俄罗斯方块**
首先,我们来定义一个俄罗斯方块类,其具体作用为利用小方块组成不同形状的板块:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/56a3e2e9cde34181357e433593b80e0f.writebug)
为了便于获取某个俄罗斯方块内各个小方块的位置信息,我们再来定义一些获取其位置信息的类内方法,如下图所示:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/2478936f1c26d1aa1184535a3c9c0d2f.writebug)
**Step2:制作游戏主界面**
我们将游戏进行中的数据记录与数据处理部分定义在内部板块类中,将游戏数据可视化定义在外部板块类中,具体实现如下。
(1)定义一个内部板块类:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/1d3ff25722417d933233aa398a285b05.writebug)
我们可以在内部板块中操作当前可控制的俄罗斯方块向左/向右/向下(向下运动由系统自动操作)移动和快速坠落:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/949dfac4985f622bd1b6cd2d2a33664c.writebug)
当然移动的时候要实时地判断当前可控制的俄罗斯方块是否已经“着陆”:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/aa3bfc4f7a926cd2341aaf173c6803d4.writebug)
“着陆”后将当前可控制的俄罗斯方块并入到最下方那些不可再控制的俄罗斯方块中,并移除整行都有小方块的那些行(即完整的横条):
![](https://www.writebug.com/myres/static/uploads/2022/5/16/d88059c45a37fd3d7138102b0cd272fa.writebug)
然后创建新的俄罗斯方块:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/55477e7295dca06c9402a7ca792578c2.writebug)
循环往复。
(2)定义一个外部板块类
![](https://www.writebug.com/myres/static/uploads/2022/5/16/778f54e8c1040d0c8223d9b7344d5fbc.writebug)
其作用就是将内部板块类的实时数据信息用 pyqt5 模块实时地显示出来。
**Step3:画个游戏侧面板**
我们在游戏主界面右侧画个侧面板来实时地显示下一个俄罗斯方块的形状:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/811b8677e702b64f9041ddd94e5a79c3.writebug)
**Step4:实现游戏主循环**
定义俄罗斯方块游戏类并初始化:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/87fe9539f3c76025b7e0a66a5102b341.writebug)
其中游戏开始和游戏暂停的定义如下:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/ada6fa5969b95db851f9372a01f8b545.writebug)
按键监听定义如下:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/6e9c168bd907ea8752c1bb6a5df9bf87.writebug)
然后调用执行它就 OK 啦:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/e290a08a4e6bfd901946ee799e0384b1.writebug)
**All Done!完整源代码详见相关文件。**
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
俄罗斯方块的小游戏(带 AI 的,用 pyqt5 写的) 由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。(摘自百度百科)
资源推荐
资源详情
资源评论
收起资源包目录
100011856-基于 Python 制作俄罗斯方块小游戏.zip (9个子文件)
aircraft
__init__.py 47B
resources
icon.jpg 7KB
LICENSE 1KB
modules
__init__.py 108B
misc.py 784B
gameboard.py 8KB
shapes.py 3KB
tetris.py 4KB
README.md 4KB
共 9 条
- 1
资源评论
神仙别闹
- 粉丝: 2687
- 资源: 7642
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript的诊所管理系统设计源码
- 人工智能在电子信息管理系统中的应用与效率优化研究
- 详解protobuf-c之在C语言中如何使用repeated生成数组和字符串(包含配置pb-callback-t)
- Python 程序语言设计模式思路-并发模式:消费者模式:协调生产者和消费者之间的数据交换
- pythonA*算法(A-star algorithm),寻路算法
- guitest.zip
- udp_echo.v
- udp_echo_server.v
- python双向广度优先搜索算法(Bidirectional Breadth-First Search, BBFS),寻路算法
- python迭代加深算法(Iterative Deepening Depth-First Search, IDDFS),寻路算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功