麦斯科技 · 2023年01月07日 · 四川

Python中的塔防墙建筑|Wireframe#70

https://www.raspberrypi.com/news/tower-defence-wall-building-in-python-wireframe-70/

作者:Ryan Lambie 2023年1月5日

以Atari先锋Rampart的风格保护您的城堡。Mark在最新版本的Wireframe杂志中向您展示了如何操作。

上世纪80年代,一种新的战略流派应运而生。塔防游戏包括在你的城堡周围建造围墙或障碍物,以防止敌人摧毁它。Atari发行的《Rampart》是该类游戏中一个著名的早期作品。比赛分为两个阶段。在建造阶段,玩家在堡垒周围的墙壁上填洞,并放置大炮。在第二阶段,玩家的堡垒将被舰队从海上攻击,玩家可以用大炮还击。这个循环会一直持续下去,直到玩家无法再填补墙壁的空隙,或者他们摧毁了所有攻击船只。

Screenshot-2023-01-05-at-15.33.24-900x644.png

大炮准备好了,准备战斗!这是最初的Rampart,由Atari于1990年开发。

在我们的PygameZero示例中,我们将研究两种塔防机制:筑墙系统,然后检查要塞是否被墙包围。要开始编码,我们需要一个背景——在本例中,是一个海岸线部分。然后,我们需要定义一个不可见的网格,该网格将保存墙所在位置的详细信息。如果我们假设每个墙段是40×40像素,那么在800×600像素的窗口上,我们可以定义一个二维列表中20×15的网格。在这个列表中,我们将从所有设置为0的正方形开始,然后如果我们添加墙截面,将该正方形切换为1。为了定义我们可以构建和不能构建的地方,我们可以加载一个小黑白图像,并从中读取像素,将不可构建的正方形设置为3。

我们的堡垒将占据四个正方形,因此我们将堡垒位置的左上角正方形设为2,其他三个正方形设为3。这将阻止玩家在堡垒上筑墙。我们使用on_mouse_move()函数跟踪鼠标的移动,当我们获得鼠标x和y坐标时,我们在锁定到不可见网格的鼠标指针下绘制一段墙。当我们得到一个on_mouse_down()事件时,我们检查所经过的正方形是否为0,如果为0,我们将其转换为1。

GameScreen1-768x606.png

我们向塔防流派致敬。建造一系列的墙来安全地包围你的堡垒。

在draw()函数中,如果我们在网格中有1的地方绘制一个墙截面,我们将看到墙所在的平面正方形。然而,我们想要的是所有的墙都与外面的城垛连接起来。为此,我们需要检查每个墙件周围的正方形,并根据其与其他墙件的连接方式来更改我们使用的图像。我们查看上方、右侧、下方和左侧的正方形,如果没有墙,则创建一个带零的字符串,如果有墙,则生成一个带1的字符串。这意味着如果没有墙连接,我们将获得字符串“0000”,如果上方有墙,将获得字符串1000,如果当前墙的左侧和右侧有墙,示例:“wall0101”。

在示例的第二部分,我们将检测堡垒是否被墙包围。有多种方法可以做到这一点,但我们将使用“flood fill”例程来测试这一点。首先,我们制作一份网格列表的副本以进行测试。然后,从网格上的堡垒位置开始,我们递归地测试所有相邻的正方形。如果我们碰到了一堵墙,那么我们就关闭了回路的分支。这就产生了一系列向外延伸的测试,直到到达地图的一侧,或者因为所有的代码分支都碰到了墙,所以我们没有正方形来测试。如果到达地图的边缘,墙上就会有洞;否则,堡垒将被封闭。

这些是我们的筑墙和测试程序。为了完成塔防风格的游戏,你需要添加一些大炮和舰船来战斗,但我们会把这部分留给你来实现。

sc70-code-900x920.png

这是Mark的塔防游戏开始代码。要在系统上运行它,首先需要安装PygameZero。完整说明可在此处(http://wfmag.cc/pgzero)找到。有关完整代码,请访问我们的github(http://wfmag.cc/wfmag70)。

获取Wireframe#70

您可以在Wireframe第70期中阅读更多类似的功能(https://www.raspberrypi.com/news/tag/wireframe/),可直接从Raspberry Pi Press(http://wfmag.cc/issues)获得,我们在全球范围内提供。

001_WF70_COVER-500x657.jpg

大结局:Wireframe#70,现已上市。

如果你喜欢数字形式的杂志,你也可以下载Wireframe第70期的免费PDF!(http://wfmag.cc/70

推荐阅读
关注数
5748
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息