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

    文章

    1015

    浏览量

    56651
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89581

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    建筑智能安系统:电容在电压波动中保障摄像头持续录像的 “电力锚”

    在现代建筑智能安系统,摄像头的持续稳定运行是保障安全监控的关键。然而,电力系统的电压波动常常成为影响摄像头工作的隐患。这时,电容器作为一种重要的电子元件,发挥着“电力锚”的作用,确保摄像头在电压
    的头像 发表于 08-22 10:47 614次阅读

    麦斯MST1602赋能工业物联网关5ns同步精度

    麦斯MST1602 MEMS振荡器以全硅架构实现耐60 kg冲击和70 g振动,2×1.6 mm小封装覆盖3.57-156.25 MHz共54频点,老化
    的头像 发表于 08-20 09:48 495次阅读
    麦斯<b class='flag-5'>塔</b>MST1602赋能工业物联网关5ns同步精度

    linux虚拟环境调用Linux 版matlab编译的python库时出错

    、readme.txt、 requiredMCRProducts.txt、init.py、CAO_python.ctf。 在linux环境按照以下步骤安装matlab runtime2018b: ① cd到MCR
    发表于 07-18 10:40

    基础篇3:掌握Python的条件语句与循环

    Python编程语言中,条件语句和循环是构成复杂逻辑和数据处理的基石。本篇基础教程将帮助您深入了解Python的条件语句和循环结构,让您能够更好地控制程序流程。 条件语句 条件语句允许程序根据
    发表于 07-03 16:13

    北斗智联助力长城汽车环拉力赛

    日前,历时13天的2025国环国际拉力赛(简称:环拉力赛)在新疆麦盖提县N39环大营落下帷幕。作为国内领先的“汽车智能网联+卫星通导”双引擎企业,北斗智联科技有限公司(简称“北
    的头像 发表于 06-07 17:01 1093次阅读

    栅极驱动IC原厂代理供应

    栅极驱动IC 矽的栅极驱动解决方案具有全系统化、性能高效稳定的产品特点,同时可为客户有效降低方案成本, 可用于60-900V 双NMOS栅极驱动,P+N MOS驱动和单NMOS驱动。我矽的栅极
    发表于 06-07 11:26

    CADENAS 在 2025 年金字公司联系博览会上取得圆满成功

    4 月 29 日,CADENAS GmbH 又一次参加了在奥格斯堡举办的金字企业联络展。我们与约 270 家公司一起,在奥格斯堡展厅向 3500 多名参观者展示了自己。 CADENAS 现场直播
    发表于 06-04 14:32

    栅极驱动IC原厂代理供应

    栅极驱动IC 矽的栅极驱动解决方案具有全系统化、性能高效稳定的产品特点,同时可为客户有效降低方案成本, 可用于60-900V 双NMOS栅极驱动,P+N MOS驱动和单NMOS驱动。我矽的栅极
    发表于 05-30 15:20

    零基础入门:如何在树莓派上编写和运行Python程序?

    在这篇文章,我将为你简要介绍Python程序是什么、Python程序可以用来做什么,以及如何在RaspberryPi上编写和运行一个简单的Python程序。什么是
    的头像 发表于 03-25 09:27 1524次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    Python在嵌入式系统的应用场景

    你想把你的职业生涯提升到一个新的水平?Python在嵌入式系统中正在成为一股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的库和快速的开发周期,这使得它在某些嵌入式场景中非常有用,以下是
    的头像 发表于 03-19 14:10 1190次阅读

    创建了用于OpenVINO™推理的自定义C++和Python代码,从C++代码获得的结果与Python代码不同是为什么?

    创建了用于OpenVINO™推理的自定义 C++ 和 Python* 代码。 在两个推理过程中使用相同的图像和模型。 从 C++ 代码获得的结果与 Python* 代码不同。
    发表于 03-06 06:22

    如何将python文件导入到ROS系统

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统
    的头像 发表于 02-11 11:08 1195次阅读
    如何将<b class='flag-5'>python</b>文件导入到ROS系统<b class='flag-5'>中</b>

    使用Python实现xgboost教程

    装: bash复制代码conda install -c conda-forge xgboost 2. 导入必要的库 在你的Python脚本或Jupyter Notebook,导入必要的库: python复制代码 import
    的头像 发表于 01-19 11:21 2214次阅读

    电子拟为小米、OPPO代工智能手机

    。 据悉,电子已经深刻认识到,要想在EMS生态系统跻身顶级参与者之列,必须专注于扩大生产规模。因此,该公司正积极寻求与全球知名的智能手机品牌合作,以提升自身的生产能力和市场份额。 值得注意的是,
    的头像 发表于 01-16 14:46 1189次阅读

    谈谈PCB工程师金字分级标准

    印刷电路板(PCB)工程师是电子行业至关重要的角色,他们的工作直接关系到电子产品的质量和性能。为了明确不同PCB工程师的技能水平和职责范围,行业内形成了金字分级标准。下面将谈谈这个金字的分级标准。
    的头像 发表于 12-25 10:02 1550次阅读