使用 Python 的 PyGame 库写一个俄罗斯方块游戏的逐步指南
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789
在这篇教程中,我们会用 Python 的 PyGame 库写一个简单的俄罗斯方块游戏。里面的算法很简单,但对新手可能有一点挑战性。我们不会太关注 PyGame 的内部原理,而更关注游戏的逻辑。如果你懒得阅读整篇文章,你可以简单地复制粘贴文末的代码。
准备工作
- Python 3。这可以从 官方网站 下载。
- PyGame。根据你正在使用的操作系统,打开命令提示符或者终端,输入
pip install pygame
或pip3 install pygame
。 - Python 的基本知识。如果有需要,可以看看我的其他博文。
你在安装 Python 或者 PyGame 的时候可能会遇到一些问题,但这超出了本文的范围。请参考 StackOverflow :)
我个人在 Mac 上遇到了没办法在屏幕上显示任何东西的问题,安装某些特定版本的 PyGame 可以解决这个问题: pip install pygame==2.0.0.dev4
。
Figure 类
让我们从 Figure 类开始。我们的目标是储存图形的各种类型和它们的旋转结果。我们当然可以通过矩阵旋转来实现,但是这会让问题变得太复杂了。
所以,我们简单地用这样的列表表示图形:
class Figure: figures = [ [[1, 5, 9, 13], [4, 5, 6, 7]], [[1, 2, 5, 9], [0, 4, 5, 6], [1, 5, 9, 8], [4, 5, 6, 10]], [[1, 2, 6, 10], [5, 6, 7, 9], [2, 6, 10, 11], [3, 5, 6, 7]], [[1, 4, 5, 6], [1, 4, 5, 9], [4, 5, 6, 9], [1, 5, 6, 9]], [[1, 2, 5, 6]], ] 复制代码
其中,列表第一维度存储图形的类型,第二维度存储它们的旋转结果。每个元素中的数字代表了在 4 × 4 矩阵中填充为实心的位置。例如,[1,5,9,13] 表示一条竖线。为了更好地理解,请参考上面的图片。
作为练习,试着添加一些这里没有的图形,比如 Z 字形。
__init__
函数如下所示:
class Figure: ... def __init__(self, x, y): self.x = x self.y = y self.type = random.randint(0, len(self.figures) - 1) self.color = random.randint(1, len(colors) - 1) self.rotation = 0 复制代码
在这里,我们随机选择一个形状和颜色。
并且,我们需要能够快速地旋转图形并获得当前的旋转结果,为此我们给出这两个简单的方法:
class Figure: ... def image(self): return self.figures[self.type][self.rotation] def rotate(self): self.rotation = (self.rotation + 1) % len(self.figures[self.type]) 复制代码
Tetris 类
我们先用一些变量初始化游戏:
class Tetris: level = 2 score = 0 state = "start"