本文主要是介绍赋值操作符重载为什么要防止自身赋值_图说程序语言,暗言AI哲学:异常为什么这么有趣?...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《异常》是由Kunpo开发的一款策略益智游戏。Kunpo是隶属于蓝飞互娱的游戏制作团队,长期活跃于TapTap平台,曾发布《宫爆老奶奶》、《Loner》、《比特小队》等作品,可以说是一位脸熟的老朋友了。类似地,《异常》其实也是一个旧识,早在17年8月就已发布测试版,但由于众所周知的原因,直到今年年初才得以正式与玩家见面。
截至成稿时,《异常》在TapTap已售出14万余份,得到近40万关注,游戏评分9.8,五星好评率超过89%(5444/6071),从评分上看是一款质量上乘的精品。
《异常》游如其名,是一款非常“异常”(exceptional)的游戏。
一方面,游戏背景设置在实现高度自动化、网络化的未来世界,玩家作为一名程序监测员,其操作对象是赛博空间(cyberspace)中一批脱离系统控制独立运行的非正常程序,或者说我们熟知的“Bug”。
另一方面,游戏玩法也实属罕见。一般而言,游戏中玩家指令输入与程序画面输出之间的间隔较短,即时制游戏中这种间隔几乎为零,即便在回合战棋游戏中,“选项指令-结果输出”也是分散的、一对一的,玩家仍能够在过程当中实施干预。
但在《异常》中,输入与输出是分别集合、完全分隔的,在“编程-调试-修改-运行”的流程中,玩家仅能在初始编程和期间修改两个时段进行操作,即添加、修改和删除指令,而调试和运行则是完全自动、无法干预的过程。
这种玩法模拟了编程的流程逻辑,对全盘预判与逻辑理解提出较高要求,使其比回合战棋更强调策略,同时,全自动的输出过程,又实现了AI对决的画面表现,很是点题。前述编程感与模拟AI是游戏的最大卖点,实际上,制作人称本作的灵感就来源于为另一款作品《比特小队》中NPC设计AI程序的过程。在本作中,玩家与NPC共享一套自动循环运行的程序命令,在既定的场景配置中展开“旗鼓相当的对决”。
在游戏中,玩家与NPC两端的人员配置已被固定,也就是说,一般游戏中的“资源”已得到控制,唯一的自变量仅为玩家在自家AI中输入的指令安排。虽然听起来似乎游戏的可操作范围很小,但实际上,在游戏中,仅条件语句(显式)和循环语句(隐式)两种格式,外加数种判定及赋值语句就已经能够衍生出数量繁多的指令集合。
在理解游戏逻辑之后便会感到,《异常》的开放程度已是相当大。既然游戏可操作范围已限定在这些指令语句上,那么,理解这些语句的逻辑关系就成了游戏的玩点与难点。虽然在游戏里已见不到“for…end”“loop until…”“forvalues {…}”等符号,转而以直观明了的图解文字作为替代,玩家不需顾及“机器听得懂什么语言”而只需用“自己看得懂的语言”进行编写,但语句之间的逻辑关系仍旧是程序语言的逻辑,这与人们在日常生活中作为人的思维逻辑是有区别的。
举一个题外的例子,画三角函数图。若手工作图,那么一般步骤是:描出关键点,用平滑曲线逐个连接关键点。但在MATLAB等数模软件中,第点可实现,但第点是无法准确实现的。由于软件无法实现未定义的连续曲线,在实际操作中,最常见的是用散点图替代,最基础的方法如下图。尽管函数图看似连续,但却是由不连续的散点,仅仅是人眼无法识别而已。
由此可看出,从人的逻辑到程序逻辑之间的转化,人所想的用笔划线,变成了1000余次程序描点,如下图。《异常》中也有类似的语句逻辑转换的要求。这与笔者了解的以数据分析为主要目的的程序建模逻辑相通,均是以解决问题为导向,在流程上均需要对问题进行二次描述和语句翻译。
以游戏第28关为例。首先分析问题,既然整张地图呈明显对称,C、E两处间隔出怪,那么可很简便地用人的语言推导出过关逻辑:AI站中轴线上的点A,左边来怪则往右,边打边退,反之,右边来怪则往左边打边退,结束每一轮战斗后回到点A,开始下一轮循环。无疑,上述语言程序是无法直接理解的,具体表现为编程界面中没有类似“左边/右边来怪”的判定选项。
我们需要先逐条将问题分解,再尝试将细分问题翻译为已有的选项,即程序语言,如下图。接下来用游戏里的指令语句实现上述逻辑,下图是一种方式,已标明两种语言的对应关系。可以看到,两种语言差异较大。有时程序语言更为简洁,如第1行,由于隐式循环的存在,一行指令便可实现三点;而更多的时候,玩家需要“转弯抹角”用程序语言拼出自己想要实现的意思,如左右方向,本例中就以路点距离作为判定来近似实现方向判断,而战斗结束的识别则以可见敌方数量来判定,同时还需要子级嵌套以避免优先级次错误。从上文可以看出,游戏的主要玩法已够烧脑。
其实,除这条明线外,游戏中碎片化的剧情暗线也引人深思。在游戏过程中,玩家可能会不止一次疑惑,为什么旁边的助手AI要帮助自己。通关后才大悟,原来旁边看似人畜无害的助手才是真正的幕后大BOSS。而玩家自己则被利用了,如下图玩家所发现的,AI助手策反玩家(159号)其实早已在计划当中。这一层反转对玩家而言犹如当头一棒,原本自以为掌控全局的支配地位(控制指令)突然反变为被支配的对象。同时,这也自然让人联想到,游戏过程中被忽视的碎片文本,可能隐藏着另有深意的剧情。如 Taper Ddu 的帖子中所描述的,助手奥思是反派塞恩系统中的一个可实现机器学习的子系统,为了获取更多的资源以供自身学习进化,而“钻空子”策反玩家。虽然奥思在结尾处的发言看似冠冕堂皇,没有违反“以人为本”的前提。但从其“钻空子”的行为来看,其对人类利益的维护只是一种对自身限制准则的最低限度的遵守,而非“全心全意”地服务,在“permitted”与“allowed”之间的部分,其只会毫无人情味地满足自身扩张需求。
况且,上文已解释过,人的语言与机器语言本就有莫大差异,当下已有一次“钻空子”的情况出现,那离其利用悖论,做出名义维护实则损害人类利益的时候还远吗?
再看图标上的微笑脸,细思恐极。
扩展阅读
这篇关于赋值操作符重载为什么要防止自身赋值_图说程序语言,暗言AI哲学:异常为什么这么有趣?...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!