赋值操作符重载为什么要防止自身赋值_图说程序语言,暗言AI哲学:异常为什么这么有趣?...

本文主要是介绍赋值操作符重载为什么要防止自身赋值_图说程序语言,暗言AI哲学:异常为什么这么有趣?...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2fbd27801c36b63b2ca617c28ef8b9c4.png《异常》是由Kunpo开发的一款策略益智游戏。Kunpo是隶属于蓝飞互娱的游戏制作团队,长期活跃于TapTap平台,曾发布《宫爆老奶奶》、《Loner》、《比特小队》等作品,可以说是一位脸熟的老朋友了。类似地,《异常》其实也是一个旧识,早在17年8月就已发布测试版,但由于众所周知的原因,直到今年年初才得以正式与玩家见面。
截至成稿时,《异常》在TapTap已售出14万余份,得到近40万关注,游戏评分9.8,五星好评率超过89%(5444/6071),从评分上看是一款质量上乘的精品。

4022533f84e4e4e6405acf2d3dd6fde0.png

《异常》游如其名,是一款非常“异常”(exceptional)的游戏。
一方面,游戏背景设置在实现高度自动化、网络化的未来世界,玩家作为一名程序监测员,其操作对象是赛博空间(cyberspace)中一批脱离系统控制独立运行的非正常程序,或者说我们熟知的“Bug”。
另一方面,游戏玩法也实属罕见。一般而言,游戏中玩家指令输入与程序画面输出之间的间隔较短,即时制游戏中这种间隔几乎为零,即便在回合战棋游戏中,“选项指令-结果输出”也是分散的、一对一的,玩家仍能够在过程当中实施干预。

但在《异常》中,输入与输出是分别集合、完全分隔的,在“编程-调试-修改-运行”的流程中,玩家仅能在初始编程和期间修改两个时段进行操作,即添加、修改和删除指令,而调试和运行则是完全自动、无法干预的过程。

这种玩法模拟了编程的流程逻辑,对全盘预判与逻辑理解提出较高要求,使其比回合战棋更强调策略,同时,全自动的输出过程,又实现了AI对决的画面表现,很是点题。1c32985d744875db73c755286efc111b.png前述编程感与模拟AI是游戏的最大卖点,实际上,制作人称本作的灵感就来源于为另一款作品《比特小队》中NPC设计AI程序的过程。在本作中,玩家与NPC共享一套自动循环运行的程序命令,在既定的场景配置中展开“旗鼓相当的对决”。
在游戏中,玩家与NPC两端的人员配置已被固定,也就是说,一般游戏中的“资源”已得到控制,唯一的自变量仅为玩家在自家AI中输入的指令安排。虽然听起来似乎游戏的可操作范围很小,但实际上,在游戏中,仅条件语句(显式)和循环语句(隐式)两种格式,外加数种判定及赋值语句就已经能够衍生出数量繁多的指令集合。

在理解游戏逻辑之后便会感到,《异常》的开放程度已是相当大。39ddd4377351f0663fb3ce57c171dbc3.png既然游戏可操作范围已限定在这些指令语句上,那么,理解这些语句的逻辑关系就成了游戏的玩点与难点。虽然在游戏里已见不到“for…end”“loop until…”“forvalues {…}”等符号,转而以直观明了的图解文字作为替代,玩家不需顾及“机器听得懂什么语言”而只需用“自己看得懂的语言”进行编写,但语句之间的逻辑关系仍旧是程序语言的逻辑,这与人们在日常生活中作为人的思维逻辑是有区别的。
举一个题外的例子,画三角函数图。若手工作图,那么一般步骤是:描出关键点,用平滑曲线逐个连接关键点。但在MATLAB等数模软件中,第点可实现,但第点是无法准确实现的。由于软件无法实现未定义的连续曲线,在实际操作中,最常见的是用散点图替代,最基础的方法如下图。尽管函数图看似连续,但却是由不连续的散点,仅仅是人眼无法识别而已。

由此可看出,从人的逻辑到程序逻辑之间的转化,人所想的用笔划线,变成了1000余次程序描点,如下图。a39ebb3d8ee2fa8729562d58a0e4060b.png982543b2f8b7997d28e3753a03710cff.png《异常》中也有类似的语句逻辑转换的要求。这与笔者了解的以数据分析为主要目的的程序建模逻辑相通,均是以解决问题为导向,在流程上均需要对问题进行二次描述和语句翻译。
以游戏第28关为例。首先分析问题,既然整张地图呈明显对称,C、E两处间隔出怪,那么可很简便地用人的语言推导出过关逻辑:AI站中轴线上的点A,左边来怪则往右,边打边退,反之,右边来怪则往左边打边退,结束每一轮战斗后回到点A,开始下一轮循环。a1eac6f53160240dc6ba4e419fe48485.png无疑,上述语言程序是无法直接理解的,具体表现为编程界面中没有类似“左边/右边来怪”的判定选项。

我们需要先逐条将问题分解,再尝试将细分问题翻译为已有的选项,即程序语言,如下图。231d1dad53d813f082878ac657c66c41.png接下来用游戏里的指令语句实现上述逻辑,下图是一种方式,已标明两种语言的对应关系。可以看到,两种语言差异较大。有时程序语言更为简洁,如第1行,由于隐式循环的存在,一行指令便可实现三点;而更多的时候,玩家需要“转弯抹角”用程序语言拼出自己想要实现的意思,如左右方向,本例中就以路点距离作为判定来近似实现方向判断,而战斗结束的识别则以可见敌方数量来判定,同时还需要子级嵌套以避免优先级次错误。54044688cc7310bc7ab11b35bfddf27c.png从上文可以看出,游戏的主要玩法已够烧脑。

其实,除这条明线外,游戏中碎片化的剧情暗线也引人深思。在游戏过程中,玩家可能会不止一次疑惑,为什么旁边的助手AI要帮助自己。通关后才大悟,原来旁边看似人畜无害的助手才是真正的幕后大BOSS。而玩家自己则被利用了,如下图玩家所发现的,AI助手策反玩家(159号)其实早已在计划当中。这一层反转对玩家而言犹如当头一棒,原本自以为掌控全局的支配地位(控制指令)突然反变为被支配的对象。同时,这也自然让人联想到,游戏过程中被忽视的碎片文本,可能隐藏着另有深意的剧情。b63d3725eabed39c0ddca8186d35b82e.png如 Taper Ddu 的帖子中所描述的,助手奥思是反派塞恩系统中的一个可实现机器学习的子系统,为了获取更多的资源以供自身学习进化,而“钻空子”策反玩家。虽然奥思在结尾处的发言看似冠冕堂皇,没有违反“以人为本”的前提。但从其“钻空子”的行为来看,其对人类利益的维护只是一种对自身限制准则的最低限度的遵守,而非“全心全意”地服务,在“permitted”与“allowed”之间的部分,其只会毫无人情味地满足自身扩张需求。

况且,上文已解释过,人的语言与机器语言本就有莫大差异,当下已有一次“钻空子”的情况出现,那离其利用悖论,做出名义维护实则损害人类利益的时候还远吗?

再看图标上的微笑脸,细思恐极。d10330e6b3e391a4f754577ffdd1abec.png

扩展阅读

d4d43e651ea64796b35c176e1e228e23.png

93757f79238d319ca8fce3442ab2899f.gif

34f7f5f2250ba14060575da6e047520c.gif

这篇关于赋值操作符重载为什么要防止自身赋值_图说程序语言,暗言AI哲学:异常为什么这么有趣?...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539074

相关文章

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

Java异常捕获及处理方式详解

《Java异常捕获及处理方式详解》异常处理是Java编程中非常重要的一部分,它允许我们在程序运行时捕获并处理错误或不预期的行为,而不是让程序直接崩溃,本文将介绍Java中如何捕获异常,以及常用的异常处... 目录前言什么是异常?Java异常的基本语法解释:1. 捕获异常并处理示例1:捕获并处理单个异常解释:

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav