Python写文本冒险游戏的要点

2019年伊始,游戏开发者Andrew Gillett在《Wireframe》杂志上介绍了如何用Python开发文本冒险游戏,以及在此过程中应该避免哪些陷阱。

最后他还给了一段示例代码,让人看完之后忍不住跃跃欲试。

文本游戏的形态

用BASIC语言编写游戏的经历

Andrew Gillett 写的第一款游戏叫做“Pooh”。

1982年9月,他4岁,ZX Spectrum 家用电脑刚刚发布,可以接到电视上玩游戏,这已经够不可思议的了,但它还内置了一种叫做 BASIC 的语言,以及一本讲解如何编程的手册。于是这便开启了他的创作生涯。

这个 BASIC 写成的游戏非常简单,玩家的任务是带一个婴儿去上厕所,没有障碍,也没有敌人,如果你试图走出屏幕(边界),该游戏进程将停止并弹出一条错误消息。婴儿和厕所都是用文本符号表示的。Andrew Gillett 当时不知道如何创建一个比 Pooh 更复杂的图形游戏。他甚至不知道如何在屏幕上显示有图形的角色。

文本冒险游戏

于是,Andrew Gillett 开始专注于编写文本冒险,即游戏用文字向玩家描述场景。

比如“你在一个舒适的隧道般的大厅中,你可以看到一扇门。”(这里在用1982年的《霍比特人》举例)

1982年的游戏《霍比特人》

玩家输入诸如“穿过门”或“用剑杀死妖精”等命令来推进游戏。

“虽然这款游戏相对来说比较容易编写,但我却以最糟糕的方式实现了它。这个游戏的代码本质上是一个巨大的IF语句列表。每个房间都有自己专门的一组代码,它们会打印出房间的描述,然后检查玩家输入了什么。这种‘硬编码’导致代码比实际需要的长得多,并且难于维护。” Andrew Gillett 说道。

正确的方法应该是将代码和数据分开。

每个房间有几组与之相关的数据,比如一个ID号码,空间的描述(你是在一个小山洞),一组可以在空间中找到的对象,以及一组空间的号码,这些号码表明如果玩家试图朝某个特定方向移动,他们将会到达哪里。

例如,如果玩家进入“北面” ,第一个号码可以显示玩家去具体哪个地方了。然后主程序会跟踪玩家当前所在的空间,并查找该空间对应的数据。有了这些数据,主程序就可以根据玩家输入的命令采取适当的行动。

来练个手

下面链接中的代码展示了如何在 Python 中实现文本冒险(入门)。

https://github.com/IoToutpost/Python_game

(注:以下内容基于上述链接的“text-adventure_original.py”)

用来演示的 Demo 中没使用数字 ID 和数组,而是使用了字符串 ID和字典数据结构。其中每一段数据都与一个ID或“键”相关联。

这是一个在 Spectrum BASIC 中没有提供的方便选项。

我们首先创建一个玩家可能移动的方向列表。然后创建指定每个位置的属性类 Location。我们存储名称、描述和字典数据结构,该结构存储当前位置,并链接到的其他位置。例如,如果你从树林向北走,你就会到达湖边。

该类包含一个名为 addLink 的方法,该方法在检查指定的方向和目的地存在后将条目添加到链接位置字典中。 

在类定义之后,我们创建一个名为 locations 的字典。它有两个条目,键是 woods 和 lake,值是 Location 类的实例。

接下来,我们在刚刚创建的每个位置上调用 addLink 方法,这样玩家就可以在它们之间行走。设置阶段的最后一步是创建变量 currentLocation,指定玩家从哪里开始游戏。

然后我们到达主游戏循环,它将无限重复。我们首先显示当前位置的描述,以及玩家移动的可用方向。然后我们等待玩家输入命令。

在这个版本的代码中,唯一有效的命令是方向。例如,在开始的位置键入“north”就可以来到湖边。当输入一个方向时,我们检查以确保它是当前位置的有效方向,然后将 currentLocation 更新到新位置。当主循环重新开始时,将显示新位置的描述。

写在最后

由于 Andrew Gillett 的原始版本比较抽象,为了帮助大家理解,IoT前哨站的 Medivh 和 Winter 在这个基础上写了中文版的 《回村》,大家可以拿回去自行拓展。

《回村》0.1版本

两个版本都放在 Github 上了,欢迎提建议。如果 Fork 了更有意思的版本,记得通知我们。

原文:Building a text adventure

来自:Wireframe 第6期

编译:王文文

转载请注明出处。

有了这个,树莓派可以做成 VR/AR 摄影机

作者:长空无名

谈到 VR/AR 摄影机什么的,人们大多会觉得高大上。不但售价不菲,而且厂商一般不会让开发者在里面运行自己的代码。

那我要是不想破解商用闭源设备,又想定制开发自己的 VR/AR 摄影机怎么办?

来看一个叫做 StereoPi 的设备。

它是一款基于树莓派的开源立体摄影机。可以捕捉、保存、直播和处理实时的立体视频和图像。在机器人、VR/AR、计算机视觉、无人机、全景视频等领域提供了可能性。

核心配件是 StereoPi板卡、树莓派计算模块、还有两个摄像头,有效组合后是一个很棒的立体拍摄、360º监控、虚拟现实平台构建工具。

超薄版和标准版 StereoPi 板卡

该板卡可附带 树莓派计算模块 的任何版本,包括最新发布的CM3+,你可以把它当普通树莓派一样开发,通过 Python 模块 picamera 对其进行控制。

这款配件的众筹价是69美元(不带树莓模块,没有以太网RJ45接口、GPIO报头和双USB Type-A 的超薄版)。

链接:https://www.crowdsupply.com/virt2real/stereopi

这里再给大家看一眼新款的树莓派计算模块长什么样:

Raspberry Pi CM3+


StereoPi 两个摄像头间距是人眼之间的平均距离,大约在65毫米,如果你要自己制作外壳的时候需要注意此项。

两个摄像头中心的推荐间距

如果你是普通用户,建议使用 StereoPi 的标准版。因为超薄版主要是给那些打算将 StereoPi 集成到(不需要自带接口的)另一个设备中的高级用户设计的。具体来说,超薄版没有USB Type-A接口、RJ45以太网接口或GPIO头。当然,这些PCB板上的接线点仍然可用,以备你想焊接它们或安装自己的接口。

还有一个可选配件是Waveshare“G”广角摄像头(160°),它的体验很好,当然价格会有点贵,StereoPi 的豪华版套件里有提供。

Waveshare “G” wide-angle (160°)

你可以用 StereoPi 在 Youtube 上做3D视频的直播,也可以将它和 Oculus Go 连线感受不一样的视觉体验,开发新款的游戏。亦或是结合 OpenCV 做一些AI上的应用;创建一个空间感知机器人……对于相关领域的开发者来说,这诱惑难以抗拒。

目前该项目由俄罗斯一个名为 virt2real 的极客团队在推动,众筹时间将在2019年3月10日结束,但现在所筹到的金额早已超出目标所需要的35000美元。

PS: 之前有不少新人问IoT前哨站“树莓派计算模块”是干吗用的,相信看过这篇文章后,会有点概念了吧?

相关视频演示:

http://v.qq.com/x/page/d0839zc5l85.html

本文为“IoT前哨站”原创,转载请注明原文作者和出处。

树莓派官方推出 Raspberry Pi 线下体验店

春节期间, Raspberry Pi 基金会在英国推出了一个线下体验店。标志着树莓派这项原本小众的电子教育产品,开始近距离面向大众。

Raspberry Pi 创始人 Eben Upton 表示,这家实体店会让大家认识到学习STEM技能的重要性。他避免将其描述为商店,而是将其描述为“陈列室”。

Raspberry Pi体验店并不打算做传统零售,更像是一个创客空间。

该店出售树莓派以及各种配件、杂志、书籍。顾客还可以在货架上找到树莓派周边商品,如马克杯和服装。但重点还是放在为顾客提供学习电子设备和编程的机会。

即使它没有收支平衡,该仍然有价值,Raspberry Pi 基金会将其作为与新客户互动的实验室,允许它为更广泛的人群定制其产品。

很多人好奇为什么 Raspberry Pi 基金会决定在人口不到125,000的剑桥开设体验店,答案也很明显,剑桥不但因其世界领先的大学而闻名,而且它还是一个富裕的中产阶级城市,英国科技产业的核心,也是 ARM Holdings、微软(英国)等公司的所在地。

这家体验店的具体位置在剑桥市中心的大拱廊一楼。在英国的朋友如果有兴趣可以去看一看。营业时间是周一到周日,推荐造访时间是上午11点到下午17点之间。

相关视频链接:http://v.qq.com/x/page/c08371z7nna.html

怕智能音箱泄漏隐私?给它种个“小蘑菇”

作者:长空无名

自从亚马逊Echo大热之后,喜欢智能音箱的人渐渐多了起来。

包括国内的天猫精灵和小米小爱,用的人也不少。

但随之而来的隐私泄露问题又来了,音箱总是在收听状态,一不小心把私人谈话传播出去怎么办?

2018年5月,西雅图当地媒体KIRO7称,在美国俄勒冈州波特兰市的一个家庭中,放置在室内的 亚马逊 Echo 记录了用户在家中的谈话,并将此对话发给了该用户电话簿中的某联系人。

尽管亚马逊和谷歌始终强调他们的智能音箱并不会收集用户对话,只是为了监听特定的唤醒词以便于随时待命,但谁也不能保证一个全天候开机的麦克风不会误录隐私信息。

于是各大厂商又纷纷给音箱加上硬件开关,但这来回开关总有忘记的时候。且不说洗衣服做饭如厕的时候,物理接触也不方便。

还有更好的办法吗?

让我们来看看 “ Project Alias ”。

这个项目的宗旨就是在不用物理接触的情况下,给智能音箱加个“声音开关”。

原理:通过扬声器不断播放“白噪音”阻止麦克风的聆听功能,直到用户说出唤醒词,Project Alias才会中止这种持续的噪音,让用户和智能音箱进行真正的交互。

目前Project Alias仅适用于Google Home和亚马逊Echo两款智能音箱,但该项目团队已经把相关设计文件和代码都公布了,世界各地的创客可以根据这些来给其他品牌的智能音箱量身定做类似的“小蘑菇”。

相关设计文件下载地址:https://www.instructables.com/id/Project-Alias/

相关代码(欢迎参与和维护该项目):

https://github.com/bjoernkarmann/project_alias

硬件清单:

1、树莓派3A+
2、ReSpeaker双麦克风扩展卡
3、 两个16毫米小型扬声器
4、 JST 2.0连接器或老的Jack接头
5、 4个螺丝
6、 一些电线
7、“蘑菇”外壳

制作流程:

1、首先你要有个树莓派,安装好Raspbian系统后,启用SSH并联网。

2、安装ReSpeaker麦克风驱动、TensorFlow、Keras以及其他依赖的软件Flask、Flask-SocketIO、python_speech_features等。

3、搭建好一切软件环境并部署程序后,用手机浏览器打开树莓派的5050端口,对它喊4-6次名字训练它,这个“小蘑菇”就能识别出你的声音了。

Project Alias曾被创建者描述为“寄生虫”(parasite),但我倒是觉得它更像一个“保镖”,为我们的智能生活增添了一份安全感。

相关视频链接:http://v.qq.com/x/page/d0832qrsj5x.html