这条博客用来记录一下课程最后的作业……
写的挺扯淡就是了……
严肃游戏设计——《机器人对决》
〇、目录
- 游戏设计思路
- 游戏受众与学习目标分析
- 游戏背景与基础设定
- 游戏模式
- 游戏机制
- 游戏流程模拟
- 参考资料与相关链接
一、游戏设计思路
这是一款融入了计算思维以及计算机知识的游戏,我的设计灵感来源于一些既有的游戏或平台。
在这一部分,我将分析三个真实的游戏或网页的部分特点与机制,进而呈现我设计《机器人对决》的思路。
【1】编程解谜游戏:《Human Resource Machine》1
这是一款益智解谜游戏,其核心的玩法是通过拖动指令块,操纵小人的行为,把输入部分的数字或字母的盒子进行处理,最后把盒子按照要求放置到输出区域。
可以从游戏界面看出,玩家拖动的指令块的功能设计来自于计算机底层的指令集。
游戏内置数十个关卡,在一个个解谜的关卡中,玩家会逐渐掌握用指令实现一些计算操作,进而学习到一些计算思维与算法。
这样一款游戏的优点在于:很好的将计算机知识与算法融入到了解谜过程中,拖动方块以及可视化的程序运行过程对玩家来说十分友好。但同时,还存在一些缺陷:游戏内容较为有限,游戏挑战性过高,一旦陷入困境,玩家缺少指导,极其容易失去兴趣。
【2】算法竞赛学习平台:CodeForeces2

CodeForces简称CF。CF是一个用于举办程序设计竞赛的网络平台,同时也是世界级的算法竞赛交流社区。在这个平台上,用户们可以参加程序设计比赛,交流算法的学习。基于此特点,可以将该平台归结为完全的学习平台。
尽管CF是一个学习平台,但其也尝试添加了许多机制,增强其趣味性。
- Rating及称号机制:每一位用户都有一个分值,称为Rating。每当用户参加完一场比赛之后,系统会根据用户当前的分值以及在比赛中的表现对其Rating进行增加或者减少。并且每一段Rating会对应用户的荣誉称号,如:
pupil
(1200~1400)、specialist
(1400~1600)、expert
(1600~1900)、master
(2100~2300) 等。Rating一定程度上可以对应用户的程序设计水平,这样的机制能给予玩家荣誉的获得感。 - 比赛中的玩家对抗机制:CF的比赛,形式上是给出程序设计题目以及基本的测试数据,让参与者编写程序来解决题目,并且通过测试数据。如果参与者发现其他用户的参赛程序存在bug,那么他可以自己制作一组特殊的测试数据,诱发其他用户的bug,让其他用户不能通过该测试数据,也就不能通过该道题目。这样的进攻行为称为hack,在比赛中成功hack将会获得加分。这样的机制不但能提升测试数据的强度,同时更增加了比赛的趣味性,增加了参与者的操作空间。
此外,作为一个学习平台,CF有着庞大的用户社区,可以较好的帮助遇到困难的学习者解决困难,而不是束手无策。然而参与CF平台的学习有着较大的门槛,参与者必须掌握一门程序设计语言。事实上,CF是专门面向编程学习者开放的,对于外行人,根本不会认识页不会尝试这个平台。
【3】多人联机竞技游戏:以《王者荣耀》为例
作为热门的多人竞技游戏,《王者荣耀》有着日均一亿的活跃用户。该游戏娱乐化程度高,一定程度上缺少教育意义,这里仅对其部分游戏机制略做分析。
《王者荣耀》的以下机制,在一定程度上对玩家具有吸引力。
- 角色扮演: 在每一场竞技中,玩家可以选择自己的英雄并且扮演该英雄。不同的英雄具有不同的技能,在竞技中具有独特的价值。
- 即时反馈: 在每一场游戏中,玩家将与对手对抗,而玩家所做的操作都是能立刻得到反馈的。即时的反馈增强了游戏体验和操作感。
- 团队协作:《王者荣耀》主要的玩法是5V5团队协作对战,团队的沟通与配合在游戏中至关重要。与队友的交流,能在一定程度上满足玩家的社交需求。
《机器人对决》设计思路
我将设计的游戏暂时命名为《机器人对决》。
我希望结合上述的游戏、平台的部分优势,设计一款学习计算思维与算法,门槛较低,并且能够以单人练习配合多人竞技的形式呈现的游戏。我希望这款游戏能够吸引编程爱好者或是喜欢思考的玩家,希望他们能在游戏中体验到竞技的快感,同时训练自己的思维语团队协作能力。
《机器人对决》将会拥有类似于《Human Resource Machine》的基本游戏形式,同时将会拥有类似于CodeForces的社区。社区成员将会提供源源不断的关卡保持该游戏的活力。此外该游戏还将拥有类似于《王者荣耀》的竞技形式,以吸引玩家。
二、游戏受众与学习目标分析
游戏类型
解谜,角色扮演,多人竞技
游戏受众
游戏的主要受众是15岁以上的学生,对编程感兴趣或是喜欢思考问题。
事实上,该游戏本身具有对玩家能力进行评估分类的机制,对于不同水平的玩家,游戏的复杂性与难度都会不同。
学习目标
学习游戏中接近于计算机底层的各种指令,学习使用指令来完成游戏中的任务,学习使用指令实现一些基础算法,在多人竞技中强化运用所学知识。增强学习者的思维能力。
三、游戏背景与基础设定
游戏背景:
人类社会进入到了一个机器人时代,世界上许许多多的工作都将由机器人取代。但是,世界上有两大机器人集团,他们势均力敌。为了促使机器人的任务完成水平不断提高,两大集团将会不断的举行任务挑战赛,相互切磋,相互竞争。游戏的玩家作为一个普通人,需要学习如何用指令操纵机器人完成任务,提高自己的水平,并且在一些比赛中加入到两大集团中的一方,通过比赛来获取赏金和荣誉。
基础设定:
关卡界面
游戏的主要关卡界面由三个区域组成:输入区、输出区、堆砌区。
游戏中每一个数字都是32位带符号整型,每一个数字都是一个盒子。盒子上会显示一个整数来表示数字。
输入区大小有限(不妨设置为10个位置),每个位置可以放置一个数字。输入区整体代表的是任务的输入数据。
输出区大小不加限制(但不能超过一个较大的值),在关卡开始时,该区域是空的。玩家用指令操作机器人,将一些数字放置在输出区。
对于每组输入数据,有一组对应的标准输出数据(也就是答案)。通过比对玩家的机器人构造的输出数据和标准的输出数据,就可以判断玩家是否通过该任务。
堆砌区因关卡而异,具有一定的大小,机器人可以将数字暂时堆砌在该区域的某个位置,还可以通过指令对数字进行复制、粘贴、运算等操作。
用指令操作机器人
游戏中机器人的行为是由指令控制的。玩家需要做的,是从自己可以选择的指令集中,拖动指令,组成一条从上到下的指令序列。机器人将按照从上到下的顺序执行指令。此外,通过jump
指令,玩家可以让机器人执行的下一条指令跳转到序列中的任何一个位置,这样可以构成指令的循环。
但是玩家并不具有无限的创作空间。所有机器人都具有两项基本属性:“脑容量”和“续航力”,他们都以数值的形式呈现。“脑容量”表示机器人能够储存的指令的条数,也就是玩家编写的一段指令序列的长度最大值。“续航力”表示机器人在一个任务或一场比赛中,能够执行的总指令的最大数量,当机器人执行了该数量的指令之后,就会自动停止,这避免了死循环的出现。
此外,机器人还具有属性“携带量”。“携带量”表示机器人自身可以携带的数字的数量。机器人可以对自身携带的数字做运算操作,或是用堆砌区的数字更新自己携带的数字,又或是将携带的数字放置到输出区域等等。为了增加挑战度,携带量一般情况下为1.
下面介绍游戏中机器人基本指令集中的指令:
- 【input x y】:机器人到达输入区第x个位置,用这个位置上的数字,替换自己携带的第y个数字。
- 【output x y】:机器人到达输出区的第x个位置,将自己携带的第y个数字,放置在输出区的这个位置。
- 【copyto x y】:机器人到达堆砌区的第x个位置,将自己携带的第y个数字,拷贝到堆砌区的这个位置。
- 【copyfrom x y】:机器人到达堆砌区的第x个位置,用这个位置上的数字,替换自己携带的第y个数字。
- 【add x y】:机器人到达堆砌区的第x个位置,将其上面的数字与自己携带的第y个数字相加,并把结果存在自己携带的第y个数字。
- 【sub x y】:与上面类似,换做减法。
- 【jump x】:机器人查找指令序列的第x条指令,将不再执行该指令之后的指令,而是把第x条指令当作下一条指令执行。
- 【jumpifzero x y】:机器人查找指令序列的第x条指令,如果机器人携带的第y个数字是0,那么机器人将不再执行该指令之后的指令,而是把第x条指令当作下一条指令执行。
上面的指令称为基础指令,使用基础指令,已经可以解决很多简单的问题。但是对于高阶的玩家,还会解锁一些额外的指令。比如对运算指令进行拓展,加入xor,and,or等位运算。玩家也可以将自己编辑的一段指令序列打包、命名,以提高指令的复用性。
此外,在竞技模式中,玩家可以选择不同的机器人作为自己本场参赛机器人,不同的机器人有各自的特点,也会有一些独特的指令。
四、游戏模式
游戏主要设计三种模式,其中有完成单人任务的【试炼之路】模式,有多人同时进行的【任务挑战赛】模式,还有较为激烈的5V5对抗的【针锋对决】模式。
【试炼之路】
简要介绍
这是单人游戏模式,并且该模式作为游戏的一系列教程。在试炼之路中,有数十个关卡,每个关卡都设置了任务,要求玩家拖动指令块构造指令序列,操纵机器人完成任务。随着关卡的推进,任务难度会逐步提升,帮助玩家逐步掌握指令的基本用法。
每一个关卡都会设置讨论区,玩家们可以在讨论区分享心得与方法。
关卡实例
这里给出一些设想的关卡实例。
【输入与输出】编写指令,让机器人将输入区的数字原封不动的搬运到输出区。只使用input
和output
指令即可。
【输入与倒序输出】编写指令,让机器人将输入区的数字以倒序搬运到输出区。可以借用堆砌区实现,需要用到copyto
和copyfrom
指令。
【输出相反数】编写指令,让机器人将输入区的数字的相反数搬运到输出区。需要用到计算指令sub
来求相反数。
……
【任务挑战赛】
简要介绍
这个模式类似于单人游戏模式,但是参赛的玩家将会同时进行单人挑战,并根据挑战的情况给出排名。这个模式的灵感来自于CodeForces举办比赛的方式。官方或者高阶玩家每星期将会创建一场比赛,设计一系列具有难度梯度的关卡。玩家参加挑战赛将会获得奖励。每场挑战赛会将参赛玩家完成比赛关卡的表现做统计并且排名,然后计算出玩家的得分(可能是负数)。玩家的总积分将会用于划分玩家段位。
在比赛中,玩家在自己完成关卡之后,可以查看其他玩家指令序列,如果发现其他玩家的方法存在bug,那么他可以自己构造一组输入输出数据,来“攻击”其他玩家。这样有利于增强关卡的测试数据。
每一场比赛都会设置讨论区,在比赛结束后,玩家们可以在讨论区分享心得与方法。
这样一种比赛方式将会不断更新关卡,让游戏保持活力。
比赛实例
这里给出一场设想的比赛实例。可以看到,关卡难度是逐渐递增的,具有梯度,能区分玩家水平,锻炼玩家思维。
【RC Contest Round 5】
本场比赛由高阶玩家George_Plover
设计关卡。
比赛时间:2021.01.15 20:00~21:00
比赛关卡:
【1.数字交换】编写指令控制机器人,将输入区的两个数字进行交换,分别放置到输出区。
【2.最大数字】编写指令控制机器人,将输入区最大的数字搬运到输出区。
【3.中位数】编写指令控制机器人,将输入区的输入序列的中位数放置到输出区。
【争锋对决】
简要介绍
这是最刺激的模式,10名水平接近的玩家在一局游戏匹配到一起,分为两个队伍,进行5V5对决。
在一局游戏中玩家需要选择各自出战的机器人,类似于《王者荣耀》中玩家选择自己的英雄。不同的机器人具有不同的属性和自己的专属指令。
在一局5V5游戏中,将不会有输入区。在游戏场景中央,会有一个很大的堆砌区,上面已经堆上了一些数字。对于双方玩家,各自会有一个输出区。双方玩家需要在公用的堆砌区获取数字,进行运算等操作,完成团队任务,最后将结果放置到己方的输出区。最后比较双方完成任务的结果,评定出获胜方。由于堆砌区是公用的,双方玩家在执行任务中将会遇到冲突,这时候游戏就具有对抗性了。
一局5V5游戏分为三个阶段。
第一阶段,各方的前两位队员,同时构造自己机器人的指令序列,同队的玩家可以相互看到队友正在构造的序列。第一阶段结束后,游戏场景会播放第一阶段双方共四个机器人并行的执行结果,这四个机器人的指令序列已经固定,不可修改。这时候双方都可以看到对手在第一阶段的布局和策略。
第二阶段,又是各方的两位队员,同时构造自己机器人的指令序列。和第一阶段类似。当这阶段结束后,游戏场景会播放第一、二阶段双方共八个机器人并行的执行结果。由于相比于第一阶段,加入了四个机器人的并行执行,所以执行结果会发生变化。
第三阶段,各方的最后一位队员,同时构造自己机器人的指令序列。这时候他们的操作将影响最终的结局,当这阶段结束后,游戏场景会播放第一、二、三阶段双方共十个机器人并行的执行结果,根据结果决出胜者。
机器人属性介绍
机器人的属性设计十分重要,需要让机器人具有自己的特性,在团队赛中发挥出自己的特长,强调团队配合的重要性。
【脑容量】一个整数值,代表一局游戏中,该机器人的指令序列的最大长度。
【续航力】一个整数值,代表一局游戏中,该机器人执行指令的最大数量,执行完该数量的指令后,机器人自动停止。
【携带量】一个整数值,代表一局游戏中,该机器人自身能携带的数字的个数。一般为0~2。
【权限度】一个整数值,用于解决对抗并行中的冲突问题。例如两个机器人同时修改一个堆砌区的数字,那么权限度高的机器人能够成功修改。如果两者权限相同,则都不能成功修改。
【专属指令】每个机器人的专属指令,像是一个专属的技能,可以让机器人在任务中体现自己的优势。
机器人实例
这里给出三个设计好的机器人实例,来显示不同机器人的特性。
属性 | Robot A | Robot B | Robot C |
---|---|---|---|
脑容量 | 50 | 70 | 100 |
续航力 | 300 | 200 | 500 |
携带量 | 1 | 2 | 0 |
权限度 | 20 | 15 | 22 |
专属指令1 | add v :v是一个自定义的在-128~127的数字,执行该指令可以让自己携带的数字加上v。 | addload :将自己携带的两个数字相加,替换掉自己携带的第一个数字。 | change x v :将堆砌区第x个数字修改为自定义的数字v |
专属指令2 | 无 | subload :将自己携带的两个数字相减,替换掉自己携带的第一个数字。 | cpartner x v :将队友机器人x携带的第一个数字修改为自定义的数字v |
可以看到,在三个机器人相比之下,Robot A具有较为全面综合的性能,Robot B 具有较大的携带量,能够对自己携带的两个数字进行运算,具有突出的数子处理和搬运能力,Robot C没有携带量,不能携带数字,这是一大劣势,但是它具有较高的修改权限,并且拥有修改队友携带数字或者堆砌区数字的能力,可以增强与队友之间的配合,而且他较大的脑容量和续航力也是一大优势。
在此基础上,还可以设计更多具有特色的机器人,让玩家进行多种配合,不断探索。
比赛任务实例
这里给出一局游戏中可能的一个任务实例。
【输出最大值】在这个任务中,双方要充分利用堆砌区已经存在的数字,对他们进行运算,处理,最后放置到己方的输出区。由于堆砌区是公用的,双方可以相互干扰对抗。最后输出数字最大的一方获胜。(注:所有数字是32位带符号整型,小心溢出!)
那么在这样一个可能的任务中,双方要合理设计自己的战术,充分利用前两个阶段试探对方的战术,可以去干扰对方,也要时刻提防对方的干扰。同时还需要评估自己机器人的属性,设计出适合的指令序列。这充分训练了玩家的思维能力和战术沟通能力,加强了玩家对指令的熟悉程度和应用能力。
五、游戏机制
为了让游戏更耐玩,让玩家在游戏中学到知识,提升能力,游戏中会添加一些系统机制。
【等级、金币与商店】
玩家账号具有等级,每局游戏结束后都会获得经验,当经验满后,会升至下一级,并获得升级奖励。升级奖励可以是金币、商店物品、物品体验卡。玩家在游戏后也会获得金币,金币可以用于购买商店商品。
商店商品包含不同属性的机器人、机器人的装饰、玩家形象的装饰品等等。
【比赛积分机制】
任何一场多人赛都会根据比赛结果,调整玩家的积分。这用来划分玩家的段位和称号。同时这也是玩家匹配的根据和任务难度调整的依据。对于高阶玩家,游戏中的任务会更具有挑战性,或是更具有对抗性,对于初级玩家,任务和比赛会相对友好。合理的难度设定能让玩家感觉到适中的挑战性,保持对游戏的兴趣。
【每日任务】
每天会从以往的比赛任务中推送一个符合玩家水平的任务,玩家完成后会获得奖励。
【社区】
游戏自带社区功能,玩家可以添加自己的好友,与好友一同游戏。也可以在社区上查找单人游戏的攻略,学习通关方法。这能够提高玩家的水平,促进玩家交流与平台发展,满足玩家的社交需求。
【融入算法知识】
指令只是游戏的基础,但是指令能够表达、实现许许多多的算法。那么,只要在关卡设计中融入算法,设计一些经典算法的问题(例如二分查找、冒泡排序),就能够让玩家在游戏中学到算法。
【包装指令】
可以发现,在多人对抗模式中,现场编写大量的指令会比较繁琐。因此,游戏添加了自定义包装指令的功能。在游戏之外,玩家可以在客户端内编辑自己的自定义指令。自定义指令是由一条的指令序列构成,在游戏中拖动一条自定义指令,等价于把指令替换成对应的序列。这样,玩家可以在游戏外预先设计一些指令块,在游戏时可以直接拖动这些块,加快设计效率,这体现出了函数的思想。
【更多机制】
游戏还具有添加其他机制的空间,不再赘述。
六、游戏流程模拟
玩家加入了游戏,注册了自己的第一个账号,开始了解游戏背景,接受新手教程。
这时玩家拥有一个1级账号,只能玩单人模式,增加经验,提升等级,在玩单人游戏的过程中,玩家了解到了基础指令,并逐渐学会使用它们操控机器人解决一些基本问题。在这过程中,玩家遇到了一些困难,但通过在社区上寻求帮助,玩家度过了难关。
当玩家到达5级之后,玩家可以加入任务挑战赛,每一场比赛都会计算玩家积分。在任务挑战赛中玩家能学到一些算法的思维模式。
当玩家到达10级之后,将会解锁5V5对抗的基础模式,玩家在对抗中的任务都比较简单,允许使用的机器人类型也有限。在这里玩家体验到了竞技的乐趣,也能够熟练运用基本指令了。到达15级,将会解锁5V5的正常模式,游戏中的任务也会变得复杂,并且开放所有的机器人类型,玩家可以尝试多种整容搭配。
当玩家的积分、等级达到非常高时,已经成为了高阶玩家,若想要对游戏进行一些贡献,可以加入到设计任务挑战赛题目的队伍中。