0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_9aVl32Dp 来源:Arm软件开发者 2023-01-08 09:49 次阅读

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

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

0dcb3a06-8e91-11ed-bfe3-dac502259ad0.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。

0ea14dbc-8e91-11ed-bfe3-dac502259ad0.png

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

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

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

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

0f412b52-8e91-11ed-bfe3-dac502259ad0.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)获得,我们在全球范围内提供。

0fd2343a-8e91-11ed-bfe3-dac502259ad0.jpg

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

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


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    934

    浏览量

    54745
  • python
    +关注

    关注

    55

    文章

    4777

    浏览量

    84420

原文标题:Python中的塔防墙建筑|Wireframe#70

文章出处:【微信号:Arm软件开发者,微信公众号:Arm软件开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    低压差分信号(LVDS)在LED灯的应用

    电子发烧友网站提供《低压差分信号(LVDS)在LED灯的应用.pdf》资料免费下载
    发表于 08-30 09:23 0次下载
    低压差分信号(LVDS)在LED灯<b class='flag-5'>墙</b><b class='flag-5'>中</b>的应用

    Python在AI的应用实例

    Python在人工智能(AI)领域的应用极为广泛且深入,从基础的数据处理、模型训练到高级的应用部署,Python都扮演着至关重要的角色。以下将详细探讨Python在AI的几个关键应用
    的头像 发表于 07-19 17:16 907次阅读

    阿维在车辆安全的以攻促实例 | 附PPT下载

    以下内容整理自谈思AutoSec 8周年年会。 分享嘉宾:苏牧辰 阿维科技数字安全-车辆安全负责人 本次的演讲主题为《阿维在车辆安全以攻促实例》,内容相较于此前在谈思平台上分享
    的头像 发表于 05-14 13:54 267次阅读
    阿维<b class='flag-5'>塔</b>在车辆安全<b class='flag-5'>中</b>的以攻促<b class='flag-5'>防</b>实例 | 附PPT下载

    雷达直击雷防护:侧击玻璃钢避雷针

    雷达直击雷防护:侧击玻璃钢避雷针
    的头像 发表于 05-07 19:35 378次阅读
    雷达<b class='flag-5'>塔</b>直击雷防护:<b class='flag-5'>防</b>侧击玻璃钢避雷针

    平板丨平板终端丨三平板电脑丨建筑工地应用

    随着建筑工程越来越复杂和规模越来越大,工地管理和协调变得越来越复杂。在这个过程,工业设备的作用越来越重要,而三平板作为一种实用的工业设备,在工地上的应用越来越广泛。本文将介绍三
    的头像 发表于 02-19 10:30 433次阅读
    三<b class='flag-5'>防</b>平板丨平板终端丨三<b class='flag-5'>防</b>平板电脑丨<b class='flag-5'>建筑</b>工地应用

    浅谈建筑工地应用三平板

    随着建筑工程越来越复杂和规模越来越大,工地管理和协调变得越来越复杂。在这个过程,工业设备的作用越来越重要,而三平板作为一种实用的工业设备,在工地上的应用越来越广泛。本文将介绍三
    的头像 发表于 02-19 10:20 354次阅读

    建筑工地机监测系统助力工地建设

    一、系统介绍 机信息化管理系统是基于传感器技术、嵌入式技术、数据采集技术、数据融合处理,无线传感网络与远程数据通信技术,高效率的实现了建筑机单机运行的群干涉作业
    的头像 发表于 02-01 17:37 288次阅读

    建筑电气火灾的控与管理

    我国古建筑多为砖木结构,当发生火灾事故时具有蔓延快、扑救难的特点,而火灾对古建筑的损害性很大,电气火灾事故在我国火灾事故中比重居高不下。本文通过对古建筑电气火灾成因进行分析,有针对性地提出了古
    的头像 发表于 01-30 17:03 513次阅读
    古<b class='flag-5'>建筑</b>电气火灾的<b class='flag-5'>防</b>控与管理

    机防碰撞安全在线监测系统在建筑行业的应用

    机防碰撞安全在线监测系统是集互联网技术、传感器技术、嵌入式技术、数据采集技术、数据融合处理、无线传感网络与远程数据通信等前沿应用技术于一体的产品。该产品能高精度、高效率地实现建筑机单机运行和群
    的头像 发表于 01-25 17:58 415次阅读

    split在python的用法

    split在python的用法 split()是Python中一个非常常用的字符串函数,它能够根据指定的分隔符将一个字符串分割成多个子字符串,并返回一个包含这些子字符串的列表。本文将详细介绍
    的头像 发表于 12-25 15:12 1960次阅读

    Python2与Python3的差异

    Python2,print语句是一个关键字,而在Python3,print函数被引入,必须使用括号。此外,Python3要求字符串必须使
    的头像 发表于 11-23 16:48 898次阅读

    pythontext的用法

    Python的text是一个常见的数据类型,它用于存储和处理文本数据。在Python,文本常常被表示为字符串(string),字符串是一系列Unicode字符的有序序列。 在
    的头像 发表于 11-23 15:46 3326次阅读

    pycharmpython interpreter怎么设置

    在PyCharm设置Python解释器非常简单,只需按照以下步骤操作: 打开PyCharm,并打开你的项目。 在菜单栏中选择"File"(文件),然后选择"Settings"(设置)。在
    的头像 发表于 11-22 11:08 2992次阅读

    pythonnumber代表什么

    Python,number(数字)是一种内置的数据类型,用于表示数值。Python提供了几种不同的number类型,分别是整数(int)、浮点数(float)、复数(complex)和布尔值
    的头像 发表于 11-22 09:50 1881次阅读

    pythontuple的用法

    Python的元组(tuple)是一种不可变的有序集合。与列表(list)类似,元组可以存储任意类型的数据,但是元组一旦创建就不能被修改。在Python,元组是使用圆括号进行表示,
    的头像 发表于 11-21 16:27 905次阅读