• Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

深圳 I/O

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索
NewVideoGameTopIcon.svg
萌娘百科诚邀您参与完善电子游戏相关条目☆Kira~
快打开WindowsNSPSXbox,一起进入电子游戏的世界吧!
欢迎正在阅读这个条目的您协助编辑本条目。编辑前请阅读Wiki入门条目编辑规范专题编辑指南,游戏条目中请参考条目格式规范封面上传指引,并查找相关资料。萌娘百科祝您在本站度过愉快的时光。
深圳 I/O
Zachtronics - ShenZhen IO.png
Steam 封面
原名 ShenZhen I/O
官方译名 深圳 I/O
类型 解谜、编程
平台 Windows, Linux, macOS
开发 Zachtronics
发行 Zachtronics
设计师 Zach Barth
音乐 Matthew S. Burns
模式 单人游戏
发行时间 2016-11-17
相关作品 TIS-100

《深圳 I/O》是一款解谜类电子游戏,同时也是一款编程游戏。它由 Zachtronics为运行Microsoft Windows、Linux和macOS操作系统的个人电脑开发。这款游戏最初于2016年9月在Steam发布了抢先体验游戏版本,2016年11月发行正式版。

基本介绍

BUILD CIRCUITS. WRITE CODE. RTFM.

正如游戏发布者的描述,游戏玩法的核心就是构建电路、编写代码和阅读手册

游戏的背景设定在中国深圳,玩家将会扮演一名来到深圳华强北的工程师,他在经人介绍[1]后,来到一家名为“深圳龙腾科技有限公司”的企业工作,从事产品的设计与开发工作。

游戏中使用与现实中的嵌入式硬件相似的元器件(比如可编程芯片、存储器、蜂鸣器、数码显示屏、指示灯具等),游戏中出现的代码需要在芯片中编写,用于驱动芯片工作。代码结构和Intel 8086的汇编语言类似,但是也融入了一些高级语言的特征,因此可算作一种类汇编语言。

开发/更新历史

日期 更新版本号 主要变化
2016-09-?? v1.0 推出游戏原型,并在Steam中以“抢先体验游戏”发布。
2016-10-17 v1.1 加入了蜂鸣器(FM Blaster)道具,允许玩家在早期的关卡中提前使用后期关卡才会用到的元器件,只是会在设计界面显示“不推荐使用”。
2016-10-25 v1.2 加入了拥有更多内存单元的内存部件、优化了液晶屏元件,同时为期加入了触屏机制。
2016-10-25 v1.3 引入了数学协处理器(能够计算四则运算、平方根、幂运算和求余运算等)、七段数码管以及一些受到用户启发的全新谜题。
2020-04-22 - 开发者为游戏内置的数据手册提供纸质版,作为一种商品在电商平台lulu中发售。

故事背景

I became an engineer because I wanted to make things.
But after I graduated, the reality of the world caught up with me.
That's not just something we do in this country. Not anymore.
It took me a while, but eventually I realized it was true:
I'd have to go somewhere else.
Nuvola apps important blue.svg
以下内容含有剧透成分,可能影响观赏作品兴趣,请酌情阅读
我在深圳有什么成就?
工程师的故事并不像电影那么精彩。

我没有找到真爱,或拯救世界,或任何其他的建树。
但我被带到了这里。
开始创造新事物。


也许是件好事,又或许是个灾难。
无论未来如何,我对一件事情深信不疑。
我总能相信一件事:我真是个好工程师。


游戏要素

概念Mail和概念CAD

游戏的主线,包括游戏的剧情而且还有(虚构的)广告和关卡。设计电路和编写代码的工作在概念CAD中完成。游戏最开始的电路非常简单,但是随着剧情的发展,需要用到的元器件会越来越多,代码和电路布线也会越来越复杂。在每个关卡中,面板上会有一个白色线条围成的封闭图形,代表这台设备的面板(或者说是设备的外壳)。玩家摆放的元器件不能超出这个边界,这也在一定程度上考验玩家对空间的利用与规划能力。

游戏的关卡会用橙色感叹号表示,通过关卡后变为一个对钩,解锁后续的关卡。关卡同样是伴随着剧情设计的,每个关卡内也会出现员工的交谈。关卡通过后,游戏会展示三组统计图表,展示了全体通过该关卡的玩家的电路设计在成本、耗电量和代码行数三个方面的分布情况以及玩家本人在其中的位置。

游戏的主线总共有31个关卡,对于Steam上的版本,全部通过后会得到一个“Employee of the month”(月度最佳员工)的成就(一个月恰好是31天)。

概念Mail中有一个特殊的剧情是“为新创意建模”,左侧的标志是一个橙色的齿轮,这部分剧情允许玩家自定义一个电路设备,相当于一个沙盒,这是很多其他游戏中都有的设定。

输入输出端口

游戏里的输入输出端口分为简单I/O端口(芯片中用p0,p1表示)和XBus端口(芯片中用x0,x1,x2,x3表示)。前者用于传输0~100范围内的整数电平信号,后者传输的是一系列不连续的数据包,每个数据包的范围是±999范围内的整数。

逻辑运算

游戏中存在和数字电路类似的逻辑运算机制以及相应的逻辑门元件,这些元件的工作机制和现实中的数字电路类似。逻辑门使用简单I/O端口进行输入输出,数值大于或等于50的信号被视为逻辑真,否则视为逻辑假。

元器件

游戏中提供的元器件种类上与现实中的嵌入式设备设计类似,其中某些元件仅可在沙盒模式中放置,不会再概念Spec或者概念Mail中出现。每一个元器件的宽度和高度都是按照游戏界面划定好的网格设定的,元器件的摆放也必须按照游戏面板上划定的网格摆放,除笔记以外,其他的元器件不能叠加放置。

名称 占用宽度(格) 占用高度(格) 功能 价格 备注
笔记 3 2 可以放置在游戏面板中,用于编写注释增加电路图或代码的可读性 0 唯一一个允许超出白色边界,或者叠放在其他元器件上面的物件。
桥接器 1 3 当两根布线需要交叉但是不想让它们导通时,就需要切断竖向的布线连接在桥接器的两端,跨过横向的布线,桥接器也因此得名。 0[2] 占用3格高度,中间的一格可以有布线经过,但是这个位置不能放置高度1格的元件。
MC4000 3 2 经典的可编程芯片,可通过在芯片中编写代码控制芯片的工作与输入输出。拥有两个简单I/O接口p0,p1、两个XBus接口x0,x1以及一个acc寄存器。该芯片最多只能容纳9行代码,任何数学运算操作都会直接作用在acc上从而改变acc的值。 3 -
MC4000X 3 2 和MC4000类似,但是所有的四个接口全为XBus接口,用x0~x3表示。 3 -
MC6000 3 3 相较于MC4000,增加了两个XBus引脚以及一个额外的dat寄存器,这对于需要循环的场合很有帮助。最多容纳14行代码,任何数学运算操作都会直接作用在acc上从而改变acc的值。 5 -
DX300 2 3 游戏中称作“数字I/O拓展器”,拥有3个XBus接口。可将通过XBus接口传入的数字按照三位十进制数上的每一位转化为三个高电平(100)或者低电平(100)的简单I/O信号。 1 -
100P-14 3 2 随机存取存储器(RAM),拥有14个内存单元,每个单元可以存放一个±999范围的整数。可以通过元件上 XBus 接口 a0 和 a1 地址引脚读取和写入内存指针。指针指向的内存值可以通过 XBus 的 d0 和 d1 数据引脚读取和写入。从数据引脚读取或写入数值后,对应的内存指针值将自动增长为下一个内存位置的对应值。 2 -
100P-33 3 3 和100P-14类似,是拥有33个内存单元的RAM,端口和使用方式和100P-14相同,但是额外多了两个弃用(没有标记,不会提供输出信号)的引脚。 4 不会在概念Spec和概念Mail的谜题中出现,只能在沙盒中使用。
200P-14 3 2 只读存储器(ROM),规格和100P-14类似,相较于100P-14的唯一区别是只能进行读取操作,不能进行写入操作。 2 -
200P-33 3 3 规格和100P-33类似,同样只能进行读取不可进行写入。 4 不能在概念Spec和概念Mail的谜题中出现,只能在沙盒中使用。
LC70G04 2 1 逻辑电路的非门 1
LC70G08 2 2 逻辑电路的与门 1 拥有一个正常输出和反向输出。
LC70G32 2 2 逻辑电路的或门 1 拥有一个正常输出和反向输出。
LC70G86 2 2 逻辑电路的异或门 1 拥有一个正常输出和反向输出。
PGA33X6 3 3 (待补充) 5 (待补充)
MC4010 2 2 数学协处理器,能够计算四则运算、求余运算、平方根运算(会四舍五入到整数)等。 5
?????? 2 2 游戏中没有说明,从功能上看是一个随机数生成器,会生成0~100的随机整数。 2 不能在概念Spec和概念Mail的谜题中自行放置(某些关卡中会在面板中预置,预置的器件不会计入成本,不可将其移出),只能在沙盒中使用。
LX700 7 5 经典的七段数码管显示器,拥有两个XBus接口在左右两侧。显示范围是±199范围内的整数。 4 不能在概念Spec和概念Mail的谜题中自行放置(某些关卡中会在面板中预置,预置的器件不会计入成本,不可将其移出),只能在沙盒中使用。
LX910C 7 8 液晶显示器,显示的内容和样式可以由玩家自行定制。 8 不会在概念Spec和概念Mail的谜题中出现,只能在沙盒中使用。

(待补充)

概念Spec

Create and share your own puzzles!

玩家可在概念Spec中将创建的原型电路上传至Steam工坊,创建自定义的谜题,也可以查看其他玩家上传的UGC。是供玩家相互交流和分享创造力的场所。盗版的游戏没有这个要素。

数据手册

不同于绝大多数的编程游戏,《深圳I/O》的开发者并没有在游戏中包含玩家引导,而是选择了在游戏中内置一本丰富且有帮助的PDF版用户手册,用户手册有中英文版本。

绝大多数有关元器件规格或者如何编写代码的问题均可通过查阅手册解决。

纸牌游戏

在剧情“玩一下游戏吧”中解锁,通常称为深圳纸牌[3]

游戏的玩法类似于Windows操作系统的《空当接龙》游戏类似,是一副40张牌的纸牌,分别包含麻将的饼条万的1~9点,称为数字牌;4张红中、4张发财和4张白板,称为特殊牌;还有一个花牌。

游戏的移牌操作与《空当接龙》类似,饼条万三种牌必须按照点数顺序接龙,且相邻两张牌需要花色不同;但是红中、发财和白板不能参与接龙,只能移动到空位。在四个相同的花牌都没有被其他牌压着,且左上方的存牌区域存在空位的情况下可以将特殊牌回收,尽早回收特殊牌有助于玩家赢得纸牌游戏。将特殊牌回收,三种数字牌按照1~9的顺序堆叠在上方的回收区,并将花牌放在上方的用于放置花牌的空位即可赢得游戏,游戏界面左下角会记录玩家累计赢得游戏的次数。纸牌游戏没有撤销功能,这也在一定程度上增加了难度。

再后来,开发者将纸牌游戏单独抽出来作为一个独立的游戏《深圳纸牌》(Shenzhen Solitaire)在游戏中发售。在Steam的介绍页还贴心的提示玩家如果已经购买了《深圳 I/O》,只需通过前几个谜题就能在游戏内解锁纸牌游戏,没必要再去购买《深圳纸牌》。

谜题档案

相当于其他游戏中的隐藏关卡

可通过主界面的控制面板选项打开,打开控制面板在“谜题档案”依次点击“0451”解锁,该谜题的名称是“深圳I/O宣传片”,可算做游戏的一个彩蛋。通过该谜题可在Steam中解锁一个“Secret Puzzle”成就。

获奖

该作在2018年的独立游戏节获得了“精彩设计”奖项提名。

游戏音乐

主题曲

《深圳 I/O》的主题曲是由 Matthew S. Burns 创作的一首长度接近 7 分钟的 Electro House。该曲是本作宣传片使用的 BGM,也是游戏里的第一个关卡(模拟安全摄像头)编辑界面的 BGM。

BPM=109 4/4 1=G

原声带

QQ音乐提供了该游戏的原声带:

QQ音乐原声带

杂谈

Library moe 2.png
萌娘百科不是严肃的学术网站
萌娘百科条目中涉及专业术语和知识的内容仅供参考,不保证准确性和严谨性。萌娘百科对条目内可能错误的信息不承担任何责任。如对条目内容有疑问,请到讨论页发起讨论。

游戏里的代码/电路 vs. 真实的嵌入式/汇编

以下内容含有大量干货,非计算机/嵌入式专业者谨慎阅读
  • 游戏中使用的芯片是基于10进制的,可以使用dgt指令直接设置某一位的值(0~9),而在真实的嵌入式芯片中,这种操作是使用位运算来实现的。
    • 在二进制下,若要像游戏里一样表示±999范围的整数,至少需要11位(10个数值位+1个符号位)。
  • 游戏里使用的指令系统虽然参考了x86汇编语言,但是存在一些高级语言的要素,这也在一定程度上降低了游戏难度。
    • 例如使用+-能够起到类似于if-else的功能,使用多个+-也能达到类似于复合语句的效果。
    • 前面带有@的指令在程序运行期间只会执行一次。如果重新跳转到这条指令以前,检测到已经执行过这条指令,便会将其忽略不再执行。[4]
      • 然而绝大多数汇编语言(x86ARM64)并不支持定义这种执行且仅执行一次的语句,实现这样的功能需要借助一个标志位表明是否已经执行过,这也会增加代码的复杂性。
  • 游戏里的芯片对于溢出的处理与现实中的芯片存在区别,可能是为了简化游戏机制,而这也在一定程度上限制了玩家的创造力。
    • 真实的芯片在工作期间会有一系列状态位用来描述运算结果是否为负、是否发生溢出、是否发生进位、是否出现除以零之类的问题,而这些设定在游戏中并没有体现;
    • 真实的芯片工作时若出现溢出,通常会遵循“保留低位,高位丢弃”的原则,同时会产生一个进位信号。用另一个芯片捕获这个进位信号并进行一些处理可以实现位扩展(即:串联多个芯片使得设备能够处理更大范围的数学运算操作)。
    • 而游戏中的芯片存在±999范围的封顶封底机制,并且对于溢出之类的情况会“自己消化”而不是抛出;同时运算结果发生上溢和下溢会得到999和-999而不是运算结果后三位的值,这使得这种位扩展操作难以在游戏里实现。
  • 游戏有自己的时间单位,能够使用slp指令进行等待,而所有指令执行的用时相较于1个时间单位皆可忽略不计。而在真实的芯片中,每种指令执行的时间不尽相同[5]。在实际的嵌入式开发中,指令执行的时间和开销通常并不能忽略不计。
    • 在真实的汇编语言中,实现这样的等待操作需要使用系统调用或者硬件定时器,代码的实现会比游戏里单纯一条slp指令复杂得多
  • 游戏里提供了一种丹佛计时器道具,能够稳定的提供时钟信号,将一天划分为96刻(一刻是15分钟),用0~95的索引值表示,每过15分钟索引值增加1,到达95后回到0。这种设定很可能参考了中国古代的百刻制。
    • 百刻制最早出现在黄帝时代,并在清朝初期基本确定。这种计时方法是将一天分为100刻,每刻约14.4分钟。这种划分基于日晷和水钟的测量。然而随着明末欧洲天文学知识传入,百刻制被调整为96刻制。
  • 游戏里的的电路布线不能锐角转弯,只能直角转弯(而且直角看上去像是两个连续的135°钝角转弯)。这种机制和真实的印刷电路板布线是完全吻合的。
    • 在三次元的世界里,印刷电路板的制作中,锐角转弯和直角转弯会导致信号反射和阻抗不连续,并且会产生寄生电容。对于电信号通讯而言,信号在锐角和直角处容易产生反射,影响信号的传输质量。
    • 市面上见到的绝大多数的印刷电路板中的布线如果需要转弯,几乎都是采用135°转弯。这一标准不仅美观(斜着的总是和斜着的平行,横平竖直的布线也是要么互相平行要么互相垂直),而且能够避免锐角转弯的弊病,因此绝大多数EDA都采用这一标准。

(待补充)

剧情与现实

  • 在游戏手册中包含一页《中华人民共和国签证申请表》看上去一本正经
    • 其中的“中国广东省深圳市罗湖区东环路44A号”是真实存在,且可在搜索引擎中查阅到的地点,而且给出的结果就是“深圳龙腾科技有限公司”;
    • 里面的“出生日期”一栏的2026年9月28日恰好呼应了游戏第一版的发布日期是2016年9月28日,相隔不多不少刚好10年。
  • 游戏的剧情虽然是虚构的,但是游戏主界面显示的天气与气温信息和真实的,能够在天气网站中查阅到的深圳华强北当地天气是吻合的,这也是游戏的一大亮点。
  • 游戏主界面中显示的“上细下粗”的建筑物在深圳华强北真实存在,这也是华强北最具代表性的建筑。这栋建筑是赛格大厦,也被称作赛格电子市场[6]
  • 游戏中有一个剧情(关卡)是“三明治制作机”——需要玩家设计电路组成一台三明治制作机,制作完毕后需要弹出一面美国国旗(在游戏中通过电路的高电平信号控制)表示制作完毕。这种“美国国旗从中国制机器中弹出”的设定被认为是在一定程度上是在讽刺美国制造业空心化的问题。
    • 这种现象在2015年左右初现雏形,2015-2016年,美国制造业空心化的问题逐渐显现,许多传统制造业岗位流失到海外,尤其是中国(玩家初次打开游戏时,主角的独白也和这种现状吻合)。这种现象引发了美国国内的广泛讨论和担忧。
    • 2024年,时任美国总统拜登签署了法案要求联邦政府只能采购完全在美国制造的美国国旗;此前美国使用的星条旗多为中国制造[7],而这也让游戏的剧情变得极具讽刺性。


(待补充)

外部链接

Wikipedia-logo-v2.svg
维基百科
提示您

注释

  1. 数据手册的开头部分以电子邮件的形式介绍了他来到深圳求职的历程。
  2. 在某次更新中,桥接器的价格从1下调到0。
  3. 在Steam的版本中有3个成就都和纸牌游戏有关,需要玩家分别赢得1/10/100局纸牌游戏才能获得。
  4. 这一机制是在游戏的剧情里引入的,并没有在手册里提及。
  5. 通常位运算和加减运算最快,乘法指令次之,除法指令和求余运算较慢,平方根运算更慢。
  6. 2024年资料。
  7. 参考:http://news.china.com.cn/2024-08/02/content_117346555.shtml