电脑突然出现在不输入的情况下按wasd键 会出现小数?

一:abs() 函数返回数字的绝对值。
正如字面上的意思,可以返回一个绝对值
 
complex() 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。
如果第一个参数为字符串,则不需要指定第二个参数。。
# 注意:这个地方在"+"号两边不能有空格,也就是不能写成"1 + 2j",应该是"1+2j",否则会报错
 
complie()  将字符串编译成python能识别或可以执行的代码,也可以将文字读成字符串再编译
2 将source编译为代码或者AST对象。代码对象能过通过exec语句来执行或者eval()进行求值。
4 参数filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
 





b=set('') #重复的元素被删除 元素唯一 可以用来去重

  迷雾侦探已于今天下午3点解锁,相信很多玩家都还在被里面一环又一环的谜题折磨的有些大脑发懵,下面为大家带来迷雾侦探全解谜通关攻略,带你顺利通关!

全剧情流程及解谜攻略:

  时间:2140年10月?日,星期?,???

  随着镜头中闪现出无数的影子,主角趴在地上出场。“我是谁?我在哪?头要炸开了!”主角发出一系列疑问之后,游戏正式开始。首先要进行基础操作,键盘的WASD,方向键都可以移动,按下Shift加速;鼠标的话则点击目标地点移动,双击加速;手柄为左摇杆和十字键移动,R1加速。

  了解了基本的移动操作之后,会有一个拿着镰刀的死神追我们,我们需要一直向前跑,跑到红圈标注的蓝箱位置,连续按E(手柄为A,鼠标为左键,下文所有互动均为此操作,以后不再提示按键)拉下闸门。

  继续向前跑,拉开下图红色蒸汽扳手。

  继续向前跑,跑到尽头,就无路可逃了,进入剧情杀,我们会跳下水道。

  下来之后,我们的手腕和脚踝都除了问题,我们要做的就是先拿回帽子。

  首先分别打开下图红圈标注的两个扳手,【左、右两个,调整为上,上】,帽子会被继续往前吹。

  接着,下图四个扳手,【从左到右,调整为下,上,左,上】。

  接着,下图三个红圈标注的扳手,【从左到右,调整为下,右,上】。

  最后拧开圆阀门,帽子就被吹下来了。

  拾取帽子之后,进入绿色的门内。

  进门后,向左走,会触发剧情,小黑猫威廉出现。

  剧情结束后,调查下面3个器械。1、需要3个蓄电囊;2、需要电线;3、需要手腕元件和脚踝元件。

  首先向左走,走到头,打开箱子,获得万用螺丝刀。

  使用刚刚的螺丝刀拆解右侧的机器人,获得脚踝元件。

  右侧黄箱子获得残破的日记,绿箱子获得电工剪。

  从刚刚进来的门出去,会看到威廉抓机械老鼠,获得赛博格老鼠笔记,得知机械老鼠体内的蓄电囊可以代替电源。

  一直向左走,在下图位置,使用上文得到的螺丝刀,拆解,获得手腕元件。

  到了下水道口,主角会派威廉去帮我们抓老鼠获得3个蓄电囊。

  时间:2140年10月?日,星期?,???

  接下来要操作威廉,我们抓老鼠一定要在老鼠背对我们的时候抓,如果正面过去,会把老鼠吓跑。

  首先向左走,从下图红圈处的圆洞进去。

  上来之后,向右走,踩下去这个下图的球,然后进右边的洞,回到初始位置。

  接着向左走,进圆洞,上去。

  这次上来之后,向左走,进入方块的洞。

  出来之后,再进洞里,会出现在上面一层。一直向右走,抓到第一只老鼠。

  接着进入这个回来进入梯形门。

  来到下图位置后,一直向左,抓住第二只老鼠。

  抓了第二只老鼠之后,向左边跳过来,进入方块洞口。

  上来后一直向右走,推走右边我们刚才踩下来的圆球。

  把球推下去后,我们进入菱形洞口。

  从洞口另一侧出来后,向左走,进入圆形洞口。

  接着,进入左边的隧道口,吓走上面的老鼠。

  吓走之后,向右走,跳到对面,往下走。

  看到最后一只老鼠,抓到最后一只,完成。

  威廉回来后,我们使用主角继续向左走,使用上文获取的电工剪获取电缆线。

  回到绿门房屋内,把手腕和脚踝元件放在3号位置,电缆线放在2号位置,蓄电囊放在1号位置。

  操作1号位置的供电装置,会进入解谜环节,这个方法按大小顺序从左到右排序,如果顺序正确,相连的线会亮蓝光,如果错误就不会亮。

  启动供电装置后,开始自我修复,序章完成。

  时间:2140年10月20日,星期四,中午

  一觉醒来,长相与《机器人瓦力》极其相像的BB-X机器人将我们叫醒。并且要对我们身体的机械部分进行检查。经过检查后发现我们身体的机械部分全部处于崩溃的边缘。而主角告诉BB-X是它坏了,需要修理。

  BB-X走后,我们来到最左边的柜子里获得档案【警用电子义体申请表E50141】。

  来到最后侧的桌子上,获得新档案【市长竞选人——奥古斯都的简述】。

  从房门出去,来到3楼,BB-X告诉我们这里停电了,并且右侧的盔甲有异样。

  我们拿到下图黄色的钥匙,靠近调查一下盔甲之后下楼。

  到了楼下,直接在左边的配电箱使用钥匙,开始解谜。这个谜题就是让两根链接在一起,我给每个按钮标记了数字,解谜顺序【4一次,3一次,4一次】,完成解谜。

  通电完成后,来到3楼,调查盔甲,发现里面有一只猫卡住了,BB-X告诉我们这个盔甲属于一名英勇的武士,他死后灵魂一直寄宿在盔甲中,如果丢失了武器,就会让寄宿的灵魂愤怒,使穿戴者陷入诅咒,此时我们需要去寻找双手剑。

  回到2楼,进入房间,找到洗手间。

  进入洗手间后,就可以看到插在地上的双手剑了,拾取之后,返回三楼。

  将武器交还给盔甲,盔甲的灵魂钻入主角体内,盔甲内的猫也就是我们序章遇到的威廉也就得救了。

  与机器人对话,准备修理。操作机器检测BB-X,检测结果需要处理器和译码器。

  来到3楼左侧地上获取档案【人机三年战争】。

  来到三楼门口的右侧,拾取密码对照表,可以切换到背面看到一个和《游戏王》“千年锥”很像的图案,而旁边保险箱目前不知道密码打不开。

  在盔甲处获得档案【无名骑士铠甲资料】。

  来到1楼,进屋,在右侧看到密码纸背面的图案,调查。

  密码就藏在图案中,如下图所示,得到密码【7322】。

  左边的火炉上面获得档案【“甜甜圈杯”大赛优胜】。

  来到最左侧的架子上获得档案【基因科技与基因疾病】,调查架子顶部,发现处理器在上面,但是我们够不到。

  来到沙发的威廉旁边,与威廉对话,让他帮我们拿一下,选择选项【带你出去遛弯】,他就会帮我们拿下来。

  获得处理器之后,到3楼,使用根据对照表(对照表按Tab键可以找到),输入密码锁的密码7322。获得电子拆解器。

  来到一楼,进入厨房。

  拆掉最右侧的烘干机,获得74555N译码器。

  将处理器和译码器装入BB-X机器人中,操作旁边的机器开始修复。

  接下来又是解谜缓解,需要调节频率,让波形与预设波形相同。下面的4个按钮,分别代表不同的含义:第一个按钮:选择上面三个波形调整哪一个;第二个按钮:调整波形速度(建议最后调整);第三个按钮:调整波形高度;第四个按钮:调整波形宽度。

  先调整好宽度和高度,让形状先相同,然后再调速度,只要绿色就可以了。调好一个再动第一个按钮去调下一个,全部调好操作完成。

  操作结束后,BB-X炸了,我们只能去修理店买点材料修理了。

  来到一楼,离开事务所。出来之后,一只小白猫把威廉叫走了,此时我们也不用跟上去,而是向右走,寻找修理店。

  向右走的过程中,在下图红圈位置获取档案【反机器人宣传】。

  下面牌子的位置,就是修理店,进去就好。

  在维修店内的右侧获得档案【镇爆型机器人资料】,在柜台和老板对话,发现这里的零件很贵,我们并不想买,离开商店就可以了。

  刚出了商店,威廉来找我们,并给予我们一块带血的破布,我们跟着他一直往左走。

  路过纹身店的时候,记得取得档案【星光市市长竞选】。

  到巷子口,与威廉对话,进入朝花巷。

  时间:2140年10月20日,星期四,中午

  来到朝花巷,遇到小白猫伊丽莎白和威廉,伊丽莎白身上有血迹,而她却没有受伤,接着他们跑向垃圾堆,我们向前去调查。

  此时发现佩里夫人的尸体,在报警之后,我们需要调查寻找证据。进入线索与推理阶段,这也是本作中比较核心的玩法,通过调查每一个细节,获取关键线索,最后完成按键的推理。

  首先要在普通模式中调查下图4个位置。

  再使用侦探视野模式,调查下图6处位置。

  调查完成后,全部合成,得到初步尸检分析。推测死者死亡大约为20多个小时前。尸体放置约4小时候发生过激烈的撞击,并被拖拽至此,首饰的盗窃也在此时发生的。

  分析完之后,站在下图箱子右侧,往右边拉箱子,获得线索【地面的摩擦痕迹】。

  走到楼里口发现现做【拖痕与脚印】。

  之后和趴在垃圾桶上的胖猫对话,他在睡觉,叫不醒他。我们需要拿左边的猫粮。

  把猫粮给了猫之后,调查垃圾箱上面,获得线索【垃圾箱上的凹痕】。

  接下来进入案件重组阶段,只需要把所有齿轮放在轮盘上,并且让他转动起来就可以了。如下图所示,为正确解法。

  案件重组之后,进入剧情,佩里夫人,被人从楼上丢了下来,砸坏了垃圾箱,接着被人拿走首饰,拖拽到了垃圾堆,藏了起来。而根据我们的判断佩里夫人被丢下楼之前已经死亡,这时,我们需要去调查槐花公寓了。

  此时警方也到达了现场,经过一番交谈,我们和警长罗伊德决定上楼调查公寓,在楼下遇到小女孩,了解到佩里夫人住在303室。

  进入公寓,在电梯口获得档案【市长竞选人——肖洛霍夫的简述】。

  通过电梯来到3楼,可以跟301和302的房客对话,了解一些信息。

  来到303门口,又一次进入解谜阶段,首先转动外圈,到下图位置,将光点移动到外圈。

  旋转内圈到下图位置,将光点移动到内圈。

  再旋转内圈到下图位置,按照红色箭头移动光点。

  旋转外圈到下图位置,将光点移到外圈上。

  再将内圈旋转到下图位置,将光点移到内圈。

  此时不要动外圈,旋转内圈到下图样子,沿着红色箭头移动光点。

  旋转外圈和内圈到下图样子,将光点移动到内圈。

  最后旋转内圈到下图样子,移动内圈到终点的红点,完成解谜。

  时间:2140年10月20日,星期四,下午

  进入303公寓内,发现一个管家机器人,警长让我们上前调查。

  又一次进入线索与推理阶段,首先在普通视野下,调查机器人的下图4处红圈位置。

  接着在侦探视野模式中,调查图中3个红圈位置。全部合成获取第一个线索【机器人嫌犯】,经过分析,机器人身上有佩里夫人的血迹和毛发,那么它一定参与了这次案件,但是原因不明。

  调查警长旁边的有血渍的沙发获得线索【沙发上的血迹】。

  调查茶几上的杯具,得到线索【昨日午间的来访者】。

  调查右边的烛台,进入观察模式,首先在普通视野下调查下图3个红圈位置。

  在侦探视野模式下,调查握把处。调查完成,获得线索【消失的烛台】。经过推理得知,另一支烛台就是凶器。

  调查完这件屋子后,警长听说已经抓到嫌犯了,他让我们继续在屋内调查,他先去处理,我们不要急着进入屋内,先记下风铃的颜色。

  进入屋内,调查冰箱上的日程表,发现需要输入密码。此时我们还不知道密码是什么,我们先调查墙上的四副画。

  这是一个解谜内容,从左到右的颜色分别是绿色,红色,黄色,紫色。我们要按照屋外风铃的顺序依次点亮,也就是4→1→3→2。

  全部画点亮之后,会出现暗格,在里面取得给珍妮的礼物和小钥匙。

  回到刚才的屋子,在最右侧的书架上取得佩里夫人的日记,并且用刚刚获取的小钥匙打开。

  查看日记的内容,记下来左上角的日期:04月21日。

  回到刚刚冰箱的密码锁旁边,输入密码0421,打开备忘录,选择10月19日的备忘录,得知珍妮在昨天来访,获得线索【珍妮?】。

  进入案件重组阶段,按照下图样子摆放齿轮,完成案件重组。

  佩里夫人在客厅用水果茶招待了小珍妮,而两人发生口角,珍妮使用另一个烛台砸向佩里夫人,之后佩里夫人在沙发上死亡,被机器人管家丢下楼。

  经过我们的推理,初步断定嫌疑人是珍妮了,我们离开303公寓,刚出屋,就遇到被卡尔抓住的流浪汉,我们告诉警官流浪汉只是夺取佩里夫人财物的人,而不是杀死佩里夫人的人,真正的嫌疑人是一个名为珍妮的女孩,并请求警察将珍妮带来公寓。

  他们去寻找珍妮的时候,我们回到303屋子,调查机器人。第一阶段只要按下4个按钮,就可以打开机器人的盖子。

  第二阶段解谜,来按照下图标注的顺序依次抽开模块。

  第三阶段解谜,按照下图红色箭头路线(黄色为光点移动到的位置)移动光点即可。

  解谜完成后,拾取植入设备,获得新档案【电子脑改造日记】,随之我们看到机器人的回忆,然后头疼无比。

  被罗伊德叫醒之后,他领来了珍妮,我们与珍妮当面对质,但是没有找到凶器。

  正在此时,小黑猫威廉出现,并且叼来了另一个烛台,也就是凶器,上面不出意外是有珍妮的指纹和佩里夫人的血迹的。

  再这种情况下,我们将【送给珍妮的礼物】交给珍妮,珍妮看到之后泣不成声,追悔莫及。

  我们离开公寓,主角还是觉得机器人有些问题,并委托警长弄到植入设备的照片。

  向右走,遇到威廉,询问他怎么获得的烛台,他为我们讲述了来龙去脉……

凶器追查!威廉的破案之旅

  时间:2140年10月20日(2小时前),星期四,下午

  时间来到两小时前,威廉和伊丽莎白对话,伊丽莎白把凶器烛台叼走,但是遭到了生化猫的袭击,无法找回,需要威廉帮助。此时我们操作威廉进行游戏。

  可以操作威廉后,向右走,通过管道上去,向右走。

  继续使用管道上去,向左走与黄猫马丁对话,得知他们的对手是【费切尔家族】的生化猫。

  进入发红光的窗户。与窗户左边的猫对话,得知汤姆一天到晚都在强调自己是【艺术家】。

  记下右边这幅画的头发颜色,从左到右分别为红、黄、绿。

  与火炉旁的猫对话得知,先生语录【一种猫只有一种命运】。

  接下来和带着帽子的蓝猫汤姆对话,需要回答他的问题。答案分别是上文的线索【艺术家】、【一种猫只有一种命运】、【费切尔家族】。全部答对后,获得他身后的控制杆。

  原路返回,使用管道下去,把操作杆按在机器上,操作机器降下踏板,跳到橘黄色窗户处,推下鱼缸。

  接下来就可以去房顶了,按照红色路线走。

  到了踏板上,对面的猫会让我们把霓虹灯的颜色变得和安娜小姐一样,记得我们上文说的画吗?就是按照那个颜色调整霓虹灯。调整完成后,他就可以把我们渡到对面。

  进入发红光的屋子,我们要取得通行证,但是他需要我们帮助他找到我们之间的卧底生化猫,我们只得答应。

  对话结束后,与钢琴上方的猫对话。

  进入一个小游戏,我们只要跟着她的节奏弹琴就好,下面为大家标注了顺序。第一阶段输入顺序如下图。

  第二阶段输入顺序如下图。

  完成之后,她会给予我们毛球,之后会用得上。

  离开屋子,使用右边的升降梯,下来,与马丁对话,得知我们的目标嫌疑猫有三个,分别是喜欢吃烤制猫薄荷的泰西奥、喜欢伪装和隐藏自己的泡利以及家族最高执行者布拉西。并且询问他如何判别生化猫,他告诉我们需要获得图书馆的照片。

  得到相关信息后,我们进入马丁旁边的窗户,一直向右走,走到头,从窗户出去。

  来到下面的场景后,直接进入管道下去。不要拉左边的操作杆,一直跑到下图位置,再辣红圈处的两个操作杆(即两个都拉下)。

  接着按照下图路线,来到图书馆。

  图书馆最右侧获得猫薄荷。在书架第二层,获得判别生化猫的方法(使用锡纸看猫的反应)。获得后,从上方通风口离开。

  出来后,使用管道上到最上层,也就是我们刚来的地方。

  上来之后,不要操作拉杆,直接按照红箭头路线拿到锡纸做的独角兽。

  回到刚刚操作杆的位置,把操作杆拉下,下来。

  让下图的两个操作杆都向上扳,按照红箭头路线,来到红色方框位置,调查。

  发现波利,并且使用锡纸测试他,发现并无异常。按照红箭头路线返回上一个场景。

  回来之后,不要急着找泰西奥对话,而是来到火炉旁边,把之前学钢琴获得的毛球交给橘猫。

  他离开火炉之后,我们跳到他的位置,使用火炉烤在图书馆获得的猫薄荷,获得烤制的猫薄荷。

  将烤制的猫薄荷给予右侧保险箱里的泰西奥,把他骗出来之后,进行测试,发现也没有异常反应。

  来到顶楼的房间,最后测试一下布拉西,发现布拉西没什么问题,但是教父却有了反应。

  回到马丁处告诉马丁测试结果,马丁说让我们不要声张此事,并且给予了我们通行权。

  进入刚刚玩升降机的场景,向右走,进入管道,去寻找烛台。

  先向右走靠近烛台,结果被生化猫赶走。我们只能按照下图路线爬上去,弄断绳子。

  狗能跳过来之后,去追生化猫了,我们也就拿到了凶器,烛台。这就是威廉获得烛台的经历。

  时间:2140年10月20日,星期四,晚上

  镜头回到现在,主角决定先维修店问一下关于植入设备的事,再打车去酒吧。

  首先来到维修店门口,发现已经关门。

  在紫色灯牌出,可以叫出租车,前往酒吧。

  来到酒吧后,可以在右边的游戏机玩游戏,但是目前没有发现有什么用。

  来到酒吧最左侧,与百晓生对话,他会告诉我们一些情报,但是我们需要打牌赢了他。

  这的打牌规则是21点,会玩的玩家就不介绍了,不会玩的简单介绍一下规则。

  21点规则(此游戏,并非正规21点):目标是使手中的牌的点数之和不超过21点且尽量大。10以下的牌按牌面点数,JQK算10点,A算11点。如:4/6/9=19点(正常结算,19点),8/Q/A=29点(大于21点,算输)。J/A=21点(又称Black Jack,为最大)。

  点数不够可以要牌,建议在16以下可以要,16以上就不建议要牌,容易超分。战胜他之后,获得档案【“革命者”暴乱事件】。

  来到吧台与警长对话,开始喝酒,并且我们的老朋友迅也来了,三人家长里短的聊了起来,酒过三巡,主角要去一趟厕所。

  进入厕所之后,从厕所出来,遇到机器人,他请求我们帮忙,我们答应他帮他找人。

  在水池洗手之后,在门口最左边有一个躺着的喝醉的女人,我们走过去,调查可以帮助她。

  帮助之后,回到吧台,继续喝酒,结束今天的行程。第一章完结。

  时间:2140年10月21日,星期五,中午

  第二天,主角从床上醒来,头疼不已,明显是昨天晚上喝太多了,想要叫BB-X帮忙,但是BB-X却已经坏掉,我们只能自己去寻找醒酒药。

  可以行动后,来到最左边的柜子里获得档案【曾经的荣誉】。

  接着,来到厕所旁边的小冰箱里寻找解酒药,但是解酒药已经用完了,只能自己调配,而配方就在楼道里。

  进入洗手间,在最右侧获得档案【“他”的警徽】。

  离开二楼,在楼道前往一楼的地方,可以获得醒酒药配方。

  接下来就需要收集醒酒药的材料了,首先来到2楼房间,进门右手边的柜子上,获得药粉E。

  来到3楼,最右侧调查获得档案【特勤组行动简报】。

  最左侧书架下面获得档案【尘封的医疗报告】。并且可以在工作台调制药剂,但是现在我们的材料还不全,无法调制。

  来到1楼,发现小猫们在家中开party,走到厨房门口,调查枯萎的忘忧草,发现已经无法使用了,书架上获得【中央警校2122届毕业合照】。

  继续调查下图红圈的箱子,进入解谜阶段。

  这个谜题很简单,如果玩过手机游戏《浅塘》,那么这个解谜就很容易,下面为大家带来解谜方法。

  最后一步,完成解谜,获得溶剂M。

  获得溶剂M之后,进入厨房,在右侧窗户,看到胖猫偷走的忘忧草,并且睡着了压着,我们只能想点办法把他引开。

  来到厨房左侧的窗户边,在柜子里获得生理盐水。

  回到客厅,在火炉右边,可以获得猫粮。

  把猫粮给予刚刚的胖猫,获得忘忧草,至此解酒药的材料都已经拿全了。

  回到3楼,开始调制解酒药。首先在药罐里放入忘忧草,开始研磨,研磨过程就是保持绿标在深紫色位置,不停的按E保持住就可以了。

  研磨好的忘忧草粉末和生理盐水,放入中间的容器内,摇晃的操作方法相同。摇晃完成后,把药粉E和溶剂M放在中间的容器继续摇晃。

  最后把中间容器获得的忘忧草溶剂和EX混合物放入最右侧的容器中,处理完成后,获得解酒药。

  主角喝下解酒药之后,收到罗伊德的电话,嘘寒问暖之后,他短信传送给我们了植入设备的照片,我们打开手机,会看到两条信息,一条是罗伊德给我们的植入设备照片,一个是在昨天酒吧厕所机器人的短信。

  查看了信息之后,主角决定到修理店询问与植入设备相关的信息,我们离开事务所。

  进入修理店,和店长摩拉克斯对话,他告诉我们需要去桥下区,寻找查尔斯,他可能了解这些东西。

  离开修理店,在下图公交站坐公交前往桥下区,进入一个新的小游戏。

  公交卡的剩余交通次数都不多了,需要规划线路,不换乘其他交通工具的情况下,连续乘坐同一种交通工具不会扣除次数,在最上方是交通工具使用次数,地铁1次,公交2次,步行3次。按照下图红色路线走,即可到达城下区。

[NextPag第二章-桥下区!线索汇集之地]

  时间:2140年10月21日,星期五,下午

  来到桥下区,一名拾荒者,被凶恶的改造人扯下胳膊丢弃,待改造人走后,我们询问拾荒者,他请求我们帮他找回手臂。

  从左边的梯子下去,前往垃圾场。

  下来之后,就能发现,机械臂挂在上面,但是够不着,此时不要着急,直接向右走,走到头。

  利用绳网爬上台子,获得弹簧,最上层可以获得档案【镇暴型机器人Ⅱ型资料】,接着就可以从左边跳下去,来到中间的控制处调查。

  首先要把锁杆全部抽出来,顺序如下图所示。

  操作机器之后,机器会把一块垃圾放在下图位置,并且 垃圾场管理员会跑过来。我们通过刚刚扔下垃圾块的位置,上去获得红圈中的磁铁,再到左边的架子上拿到手电筒,使用发光的桌子进行改造。

  首先使用弹簧和磁铁组合成电磁喷头,再用电磁喷头和大型手电合成磁力枪。

  回到刚刚拿磁铁的台子上,使用磁力枪吸下来机械臂。

  把手臂送还给拾荒者斯温,他会给予我们通行证,接下来我们就能继续前进了。

  在安检口,出示通行证,通过安检。

  再向前走,会看到歌姬在为桔梗屋打广告,我们正前去查看的时候,被旁边的一个小孩偷走了钱包和通行证。

  我们乘坐电梯去追小男孩。

  时间:2140年10月21日,星期五,下午

  一直跟着小男孩向前跑,他会跑进一个巷子里,主角因为不熟悉巷子情况,没有选择继续追赶,此时店门口出现一个老人和一个小孩,我们告诉他情况之后,得知老人就是摩拉克斯让我们寻找的查尔斯,他说他会帮我们搞定钱包,接下来让他看了一下植入设备,他想起来有一个叫布兰克的机器人脑中也有这个装置,我们可以去找一找布兰克。布兰克是奇妙街的全息导游花音的维护技师,她是知道的,于是我们一直向右走前往奇妙街。

  好巧不巧,在我们前往奇妙街的时候,黑帮守卫堵住了路,原来是供水设备出现了故障,所以禁止通行,主角告诉黑帮守卫可以尝试进行维修。接下来调查供水设备,发现缺少分离器,只能回到刚刚的工坊寻找查尔斯的帮助了。

  来到工坊发现查尔斯不在,只能自己动手了,先调查发蓝光的全自动组装台,发现可以用这个机器制作分离器,目前这个机器还能制作神之一手,灵魂分离器,百变比利,作用分别是修复机器人的核心部件,可能能修好BB-X;供水装置需要的分离器;激光枪。

  来到最左侧红圈获得撬杆,红圈处桌子上获得改造中的漩涡引擎,中间红圈处获得激光枪火控器右侧红圈处获取蓄电器。

  出屋之后,在右边的红圈位置,使用撬杆获得金属板,这个金属板目前需要切割,我们向右走。

  与电工奥利马对话,请求他帮我们电镀一下,他同意之后,需要我们帮他给花夜下町的秀吉一封信,我们答应之后,他就会帮助我们电镀金属板。

  接着来到架子上获得安全绳网。

  回到工坊,在工坊左边,发现一个断掉的梯子,使用刚刚拿的绳网,进入下层。

  获得马桶左边的箱子上的迷你吸尘器。

  把在工坊拿的蓄电器放在汽车的上。

  来到汽车的右前轮处,使用撬杆,取得轮毂。

  将轮毂放在马桶上,返回工坊。

  在工坊使用全自动组装台在百变比利蓝图中,吸取管放入迷你吸尘器,激光枪火控放入激光枪火控器,合成百变比利激光枪,此时还没有什么威力。

  来到刚刚那安全绳网的地方,对着雕像的红宝石使用激光枪,获得宝石。

  来到刚刚的破车位置,把激光枪放在丢掉的车灯位置,激光枪会把轮毂切成两半,拿走一半回到工坊。

  开始制作灵魂分离器,在分离结构出放入改造中的涡轮引擎,在半弧形液体调节器放入半弧形金属,在电镀防涡板出放入电镀金属板。合成灵魂分离器。

  拿着分离器,前往供水装置,将分离器安装好,进入解谜环节。9号阀门转动1次,1号阀门转动1次,7号阀门转动1次,1号阀门转动2次,8号阀门转动1次,7号阀门转动3次,4号阀门转动2次,解谜成功。

  修好供水装置后,就可以前往奇妙街了。

  时间:2140年10月21日,星期五,下午

  来到奇妙街和下图戴着斗篷的女人对话,用塔罗牌占卜一下,并且获得牺牲牌。

  一直向右走,在桥上会遇到全息影像导游花音,就是我们要找的,但是她非常模糊,需要我们进行修理。

  在桥头左边,有一个电箱,打开进行解谜,就是一个连线题,相同颜色连在一起,就可以了,这里就不介绍解法了。

  线路接好后,威廉在上面帮助我们修好了导游,我们去询问导游布兰克的住处。但是结果并不令人满意,花音也不知道,正在这时,旁边的小机器人南柯告诉我们他知道,但是需要我们帮他忙才能告诉我们,这个忙就是去帮右边的彩虹俱乐部寻找舞女。

  来到右边的彩虹俱乐部,与门前的弗朗西斯卡对话,她告诉我们有3名舞娘不知道去哪了,需要我们把他们找回来彩排,同时获得白色通行证,就可以进入白色区域了。

  对话介乎后,下楼,在红圈垃圾箱处获得头坏掉的按摩棒。

  再下一层,与第一个舞女阿俄伊德对话,他正在和屏幕的人对话,我们如果想要让他回去跳舞,那一定要关掉屏幕。直接来到左边的电箱,准备断掉电源。

  电箱的锁需要一点一点打开,按W往上一点一点推,要有耐心,如果推块了就要全部重来。

  取下电箱里的高能蓄电池,屏幕断电,我们继续向前去找舞女交谈,舞女说需要一个便携式的音乐盒,找到她才回去,我们只得答应。

  对话结束后,一直向左走,在下图位置获得学习型芯片。与左边三个人对话获得档案【花夜下町通行卡制度】。

  回到下图位置,进入电梯。

  从电梯出来后,直接向右走,来到这个进入游戏厅。

  这里的游戏机已经不能用了,所以拾取旁边的八音盒就可以走了。(这个台子下面是游戏机的电箱,可以修理好,修好之后游戏机就能用了,但是目前对流程推进没有什么作用)

  离开游戏厅,在两个红圈处分别拾取散掉的木桶和美容热熔枪头。拾取后进入旁边的电梯,前往C3。

  来到C3之后,记住左边玩VR吃豆人的胖子,在右侧拾取一个HW20手机。拾取之后,进入上方的F3的门里。

  进入之后,可以在左侧获取档案【错中复杂的下水道资料】,然后进入F2的门内。

  进入F2之后,在右侧的垃圾堆上拾取光棱器。返回F2门内。

  此时从F1出去,就会来到刚刚的游戏厅上方,出去之后跳下台阶,一直向左走。

  在从上面下来的电梯左侧有个工作台,可以在这里制作工具。

  首先用HW20手机和古旧的八音盒合成月光宝盒,这个就是上面舞女要的便携式音乐设备,这里虽然获得了,但是还不要急着给他,还有其他事要做。

  接着用头坏掉的按摩棒和美容热熔枪头合成缺电的切割器。

  最后使用缺电的切割器和高能蓄电池合成切割器。

  合成结束后,通过旁边的梯子下来,对着始终旁的电箱使用切割器。

  切割过程很简单,不听的按E调整火焰,让光标保持在红色发光区域,然后使用方向键移动切割器,到头不会切割超出,按住方向键,不停调整火焰就可以切开了。

  打开电箱之后,又进入解谜阶段。首先9号旋转3次,4号旋转2次,5号旋转2次,4号旋转1次,3号旋转3次,2号旋转1次,6号旋转2次,3号旋转3次。

  破解之后,点击月亮,把时钟调整为休息状态。

  来到刚刚工作台的左边,见到另一个舞女,她正在打游戏,如果想让她回到彩虹俱乐部,就需要找到他打游戏的朋友,具体位置就在上文我们看到打VR吃豆人的那个玩家,去C-3找到他就可以了。

  来到最右侧的电梯,进入C2,会遇到最后一个舞女。她想知道莱特的病情,但是莱特却支支吾吾不想说,没办法,只有好帮舞女去医院寻找信息了。

  还是做这个电梯,来到最下面的医院。进入医院后,询问医生莱特的病情,医生告诉我们是隐私,无可奉告,我们只得想办法支开医生。

  从刚刚的电梯回到C1,看到在电梯口左侧打扫的机器人布鲁忽然瘫痪了。调查之后返回医院。

  来到医院告诉医生情况,医生前往C1救人,眼看我们可以查病历了,但是医生却叫来护士守着。

  我们在医院红圈处,分别获得档案【基因实验——编号1179】和高纬度记忆体。

  接着按下,护士就会过来,我们趁机去电脑处调查莱特的病情。

  进入检索系统后,人名不多,可以很轻松的查到,如果要用检索的话,就检索男性就可以了。经过检查后发现,原来莱特是得了痔疮,怪不得不告诉小姐姐(同时,这里还有布兰克的病情,想了解的玩家可以看一看),得知实情后,返回C2告诉舞女,让她返回俱乐部。

  舞女刚走,两个男人就因为这个事打起来了,而且旁边掉落了钥匙,我们拾取之后,就可以控制操作台了。

  在控制台,将三个板子调成至下图的样子,就可以离开了。

  离开之后,和刚刚打游戏的舞女对话,让她也返回俱乐部。

  我们也返回俱乐部,在路上将月光宝盒交给阿俄伊德。3个舞女都返回之后,我们要在下图红圈处使用切割器把绳子隔断。找彩虹俱乐部老板对话,她又让我们把灯光调成彩虹的。

  来到下方控制台,把所有操作,让每个窗户的灯光变成下图所示的颜色,就可以了,完成后和老板娘交差,我们就可以去大钟附近询问南珂问题,去大钟之前记得拾取刚刚割下来的电缆。

  大钟就是我们刚刚让时钟停止的大钟,来到之后就会遇到南珂,告知他委托完成后,他会告诉我们布兰克住在A-2区的H-7房间,并且交给我们一张绿卡,就可以去往有绿卡的权限了。但是去布兰克家需要橙卡,只能我们自己想办法。

  前往最左边的电梯,去之前使用工作台把电缆和木板合成软梯。

  使用电梯来到A-3区域,到达A-3区域后,向右走,和台子上的NPC对话,得知他就是秀吉,是个女装大佬,我们把之前奥利马的信交给他。并询问他布兰克的事情,他告诉我们需要橙色通行证才能去,正在愁眉不展之时,拥有橙色通行证的戴里克出现了,秀吉告诉我们可以帮我们拿到橙色通行证,但是需要我们弄点动静吓唬他一下。

  我们绕一大圈,前往拿光棱器的地方,向左走,来到红圈位置。

  使用切割器,开个口子,切割方法和上文切割大钟的电路板方法一样。

  来到下方控制台,对控制台进行破解。

  具体路径如下图所示。

  破解之后,调整传送带,先调整左边到下图样子。

  再调整右侧,到下图样子,拉动拉杆,完成。

  被吓走之后,我们去找秀吉,获得橙卡,技能前往A-2的桔梗屋了。

  来到桔梗屋之后,找到H-7房间,进入。

  门锁破解缓解,和之前的解谜很像,先把光点移动到下图位置。

  调整内圈到下图样子,然后让光点沿着箭头移动过来。

  再调整内圈,到下图样子,移动光点。

  同时调整外圈和内圈到下图样子,移动光点。

  转动内圈,到下图样子,移动光点。

  再同时调整内外圈,到下图样子,移动光标。

  只转动内圈,到下图位置,移动光点,完成破解。

  进屋之后,看到一只虚弱的狗子,我们需要为他找点吃的。在们左边的壁挂柜里获取狗粮,并将狗粮交给狗。给了狗之后,调查柜子下的地板,会发现脚印。

  继续调查屋内,在最左侧获得档案【第一觉醒者——机器人“先知”】,照片是布兰克和狗的合影,然后就需要进行解谜了。

  这个解谜是让菱形放在菱形内,方形放入方形内,圆形放入圆形内。

  操作方法:7→5→8→9→5→8→9→6→3→1→2→4→5→8→9→10。

  进入系统后,可以查询各种内容,所有的选项都看一遍,然后取出补充液。

  取得补充液之后,狗会对我们叫,应该是有情况,我们跟着狗出去就好。

  一直跟着狗走,来到下图位置,使用刚刚制作的软梯,下去。

  进来之后,取得气泵式阀门把手。调查右侧的门之后,打开中间的Exit门,进去。

  进来之后,从F3口出去。

  出来后,踩着刚刚我们降下来的台子,到阀门处,转动阀门。

  返回刚刚的隧道,进入隧道。

破绽or陷阱?未遮掩的痕迹

  时间:2140年10月21日,星期五,晚上

  进入之后,直接从E-1口进去。

  进来之后,一直向左走,走到头触发剧情,剧情结束后,就可以原路返回隧道里了。

  接下来进入A-1门,扳动下图红圈处把手,把手变为On之后,前往B-1门。

  B-1们进去,会从B-2出现,我们进入E-3的隧道。

  从E-3出来后,一直向左走,进屋。

  在屋内获得绝缘手套、高压镍氢电池、地图和水车操作手册。

  离开屋子,向左走,跳过来之后,就无法原路返回了。

  接着沿着箭头来到下图红位置(在上层有一根胶管记得拿上,这里忘记截图),把刚刚从屋子里拿的电池装进去。

  又是破解机关,路线如图所示。

  破解之后,坐升降机到下一层,推动NEW POWER的红箱子到升降机上。

  把油桶运上来,推倒B-02的位置,使用控制台,将路线调成下图样子,拉下拉杆,把箱子通过传送带发射到刚才的屋子门口,发射之后,把电池拿走,不要再放这里了。

  我们到下层,进入W-1的管道,进来之后,进入C-1门。

  上来之后,拉扳手,打开开关,进入E-3的门。

  出来后,就还是我们刚刚来的地方,我们使用胶管,连上机器和刚刚扔过来的红桶,并打开开关,红圈的线要按下图方式连接。

  连接好之后,通过E-3隧道,返回刚开始我们进来的E-1位置,从E-1隧道进去。

  进来之后,直接向上爬,去控制台。

  来到控制台之后,将3个架子如下图的样子放好,回E-3隧道。把红圈处的两个开关都打开。

  同时,把红桶旁边的线,移动到下方,如下图所示。

  回到E-1隧道入口,把红圈处的线改动一下。

  刚才那个连接正下方的盒子,调整为下图形状。

  再往左边走,左边的盒子,调成下图样子,就可以按右边的红色按钮了,抬起升降梯后,返回E-1隧道里。

  来到一开始A-2右侧的管道里,穿过刚刚升上去的台子。

  进入两个雕像中间的门。

  这里先打开右边的阀门放水,等下面的垃圾被冲走之后,关掉阀门,趴下楼梯调查尸体,获得钥匙。

  回到A-2位置,使用钥匙打开控制间。

  进入房间之后,左边有个箱子,开锁方法之前用过,容错率低了一点,没什么技巧,就是耐心,打开箱子获得档案【死者的日记】。

  接下来吧右边的排水阀门打开,回到E-1口。

  到这里,要调整3个路线,在红圈处标注了。

  从左到右,第一个改为:

  改好之后,通过【E-1】→【B-1】→【B-2】→【C-1】→【W-1】来到左边。

  爬下楼梯,操作控制台,把桥放下,接下来就不用向之前那样一圈一圈绕了。

  接下来下图红圈的三个线,需要调整。

  从左到右,第一个:

  调整好,就可以上去了,上来之后,一直往左走,在仓库门口,把电池放进去,之后操作右边的工作台。

  选择取第一个货物。

  接下来的谜题是4阶汉诺塔。具体步骤下面图片。

  拿到二极管之后,取下电池,回到右边水车下方,只改动下图的红圈出的线路。

  把二极管放入下方的机器,水下的暗门就会出现。

  这里可以把上面的桥也放下,拿去水车上的电池,具体操作方法就不赘述了,因为对剧情没有影响。

  把两个电池,放在A-1门内的雕像(就是尸体房间门口)处可以触发暗门,里面有一把剑,并没有其他内容,暂时还不知道有什么用,也没有道具、档案等内容。

  出来之后,一直向左走,会遇到威廉,感觉背后有暗门,在红圈处调查,触发暗门机关。

  这里要让机关有点要调整下面3个线路。

  从左到右,第一个:

  调查控制台,需要激活才能开门,点亮下图红圈标注的5个灯即可开门。

  进入屋内后,就出不去了,我们来到最右侧,获得飞镖。

  调查飞镖盘右边的图纸,获取信息63。

  接下来,调查飞镖,需要让分数达到63分,不懂飞镖规则的玩家建议百度一下规则,这里只告诉大家我们需要24分,把飞镖打到12分的双倍区,就是下图位置,完成解谜,获得私酿白葡萄酒。

  把葡萄酒放入门口右侧的洞内,获得钥匙,而此时我们头上会闪现出3个数字,11、04、09。

  先拿钥匙开起飞镖右边暑假下的抽屉,获得扑克牌信息,分别是A、2、9、5。

  接下来就要操作门口右边的钟表了,钟表的顺序没有先后,先输入,11、4、9,获取一瓶酒,再输入12、9、5获得第二瓶酒。

  将两瓶酒放在左边的酒架上,放置位置参考酒架上的数字和酒瓶描述的生产年份,放好之后,下面一排的3、5、7位置的酒会消失,我们回到钟表输入3、5、7,获得一瓶酒,把这瓶酒放入酒架,获得空酒瓶。

  拿着酒瓶,来到最右侧酒桶接取酒。

  把最后一个酒瓶放入酒架,酒瓶会被打乱,我们需要把酒瓶复原。顺序如下图。

  完成之后,门没有打开,而是下面出现一个通道,离开密室就好。

  在进入暗门时,我们被凶恶的改造人扔了出去。

  调查无果后活到维修屋,与查尔斯对话,他给了我们材料,让我们恢复BB-X,小男孩也把钱包还给了我们,至此今天的旅程结束。

  镜头来到事务所,我们将会使用威廉继续游戏。

  来到三楼,会遇到在修理BB-X的主角,他修好了BB-X。

  在一楼最左边的书架,可以得到游戏机卡带,这样就能在床边玩游戏了。

  最后回到刚开始的床边,主角已经睡去,我们也可以结束今天的旅程,第二章完结。

回忆涌现,十三年的夙愿!

  时间:2140年10月22日,星期六,上午

  一觉醒来,已经修好的BB-X叫醒主角,并且去制作了早饭,接下来我们就要控制小黑猫威廉行动了。

  一直向右走,就会看到在吃早饭的主角,并且有新闻播报,在桥下区发现一个由人类和机器人肢体搭建的雕塑出现,这件肢解杀人案,这一幕引起了主角的回忆。

  镜头一转来到多年之前,还是警察的主角在调查一个连环杀人案。他来到NOA实验室进行调查,但是在过程中触发警报遭遇情况……或许这就是他为什么不在当警察的原因。

  回到事务所三楼,沉浸在回忆中的主角被BB-X叫醒,正在此时,我们的手机响起,是警长罗伊德打来的电话,我们接到电话后,不出意外是关于凶杀案的事情。可以行动后,我们调查白板,获得档案【“雕塑”连环杀人案件罪犯Noa概要】。

  接下来向左走,在墙上拿到武器“小老弟”,接下来就不只是简简单单的破案,而是可能有战斗环节了。

  拿到武器后,我们做出租车来到桥下区,警方已经在门口等待,但是黑帮并不让警方进入。正在这时,我们打算进入,黑帮首领却同意只让我们自己进入,命令我们24小时内破案,但是不能有其他警察跟随,接下来就要进入调查阶段。

  时间:2140年10月22日,星期六,中午

  来到现场,前往雕像前,进行调查。很快主角认出了雕像上的布兰克,果然遇害了,我们调查布兰克的头颅,果然发现了之前在佩里夫人家机器人的植入设备,调查之后,进入黑白画面。

  我们跟随死神一直向右走就可以了,忽然我们惊醒。

  醒来之后获得线索【幻视?植入记忆?】

  接下来要调查雕塑,普通视角调查下图红圈位置。

  侦探视角调查下图位置。全部合成后,得到线索【尸体处理手法不同】。

  调查完雕像之后,向左走,调查左边的地面,看到物体被拖拽的痕迹。

  用刚刚下来的电梯上去,调查右边的操作台。发现操作台后面有定时装置,并且看到一块布,不出意外是凶手把布盖上,等到了时间,布移开,让“雕像”公之于众。

  向左边走,调查完箱子之后,调查控制台,这里需要进行破解,查询物流信息。

  破解方法,第一步:

  最后一步,破解之后,就可以看到物流信息了,获得线索【尸体运输时间&作案时间】。

  回到雕像右侧地面,调查蜡烛,首先在普通视角模式调查下图红圈位置。

  侦探视野模式调查下面区域,合成线索【凶手的行为特点】。

  至此现场的情况已经掌握了,但是缺少一些核心线索,现场有不少凝结液很急,需要找查尔斯询问情况。我们向左走,就会来到查尔斯的工坊。

  进入工坊后,查尔斯不在家,接待我们的是三个小朋友,我们进入里屋,看到查尔斯当时非常慌张,我们需要打开上锁的电脑,但是需要查尔斯的指纹,没办法,我们只能收集信息制作一个查尔斯的手模。

  首先调查打翻的杯子,收集指纹方法是按E让左边的竖条保持在一定高度,杯子上就会出现油渍,出现之后可以继续调整竖条高度,使所有油渍全部显现,接下来使用侦探视野调查就可以采集指纹了。水杯上的指纹位置如下图。

  来到床边,调查枕头,会看到查尔斯装手枪的盒子里,手枪已经被拿走了,我们只能调查盒子上的指纹,位置如下图。

  在电脑旁的铁架子上获得3D仿肤材料。

  离开里屋,在外屋的最右侧获得生物凝胶。

  调查进入里屋的门口,采集密码锁上的指纹,位置如下图。

  最左侧的工作台上,调查最后一批指纹。

  回到里屋,在电脑右侧,开始还原指纹。

  按照下图所示依次填入各个位置即可,采集完成后获得查尔斯的掌纹。

  来到外屋工作台,进行合成,获得手模。

  把手模带回电脑,就可以进入系统了,获得最后一条线索【意图控制机器人】。

  进入最后的线索与推理阶段,我们又要按齿轮了,完成图如下,各位按照下图样子安装即可。

  众多证据反映了凶手的犯案过程,虽然还原了当时的犯案手法,但是有很多破绽,基本可以断定不是同一人所为。

  还原现场之后,三个小朋友帮我们支开黑帮守卫,掩护我们前往物流站继续调查案件。

  物流站就是我们上一章被抓住的地方,再次回来之后,此处已经有了敌人巡逻。

  时间:2140年10月22日,星期六,下午

  此时虽然我们有枪,但是被机器人发现是无法还手的,直接死亡,所以我们要躲避机器人的激光,来到下层,调查下图的传送带控制台。

  破解方法如下图,第一步:

  第二步如下图,破解后,获得信息,我们需要继续向下追查。

  得到信息后一路向下走,所有巡逻的机器人都跑不过我们,但是下楼梯的时候一定要注意,在楼梯上我们是最容易被击中的。

  向前走,会遇到我们之前进酒窖的门。进去之后来到下层,下来之后,向右走,进入我们昨天被抓的门内。

  进来之后,沿着下图路线走,到红圈处的操作台。

  在操作台这里按↓键,看下面的传送带,当有一个箱子到下图位置,拉下操作台摇杆,并且跳到左边的红色按钮处,按下红色按钮。

  升上红箱子之后,沿着下图路线,绕到下图位置,拉闸。

  接着,坐右边的升降梯,回到左边的红色按钮处,放下红箱子。

  从红箱子出下去,到下图闸门位置,在右侧红圈出现下图的两个箱子,拉闸,跳过去。

  向左走,到了下一个场景后,会遇到敌人的追杀,还好威廉出手相助,帮我们把机器人打坏。

  时间:2140年10月22日,星期六,下午

  解救之后,我们向右走,刚跳过来,就回不去了,一直向右走,拉下供电设备。

  按照下图的路线布局,按红色按钮。

  等威廉跳上台子之后,再按按钮。

  接下来威廉的聚堆会让中间的电池过载,等机器再次飞到电池这里,按红色按钮,毁坏机器。

  机器爆炸之后,我们把路线调整为下图的样子。然后上梯子去拾取电死机器人的电池。

  拿了电池之后,坐右边的升降梯下去。在下层,把电池放入运输装置,继续调查货物去向。

  解谜方法,第一步:

  第六步,完成后,会听到滴滴的声音。

  在旁边的垃圾堆发现一个炸弹,我们需要进行拆解,笔者进行过多次游戏,每次顺序不同,所以不提供答案,只提供解谜思路。

  首先看第三个图,找到1、2、3、4对应的点记下来(即下图箭头指向位置)。

  切换到第二张图,根据入口确定线的颜色(这里只要拿着鼠标跟着线走就可以了)。

  确定线的颜色之后,按照1、2、3、4的顺序剪断线,完成拆弹。

  接着BB-X告诉我们要向右走,但是好像没有路,此时威廉出现,可以帮我们忙。

  我们控制威廉操作下面的机器,在最左边的图纸有说明,各位玩家尽量去理解,这里就不给大家讲原理,直接告诉大家答案了,原理都在图纸中说明。

  首先把右边的线路如下图相连。

  左边的电路箱样式如下图。

  点击启动,吸起中间的红色箱子,发现藏在箱子后面的门,必有蹊跷,而且左边的木箱是可以砸坏的。

  接下来不用动右边的电路箱,把左边的调成下图样式。

  按下按钮,砸第一下木箱。

  在把中间的电箱调成下图样子,把刚刚扔下去的红箱子再拿起来。

  拿起来之后,就要调右边的箱子了。

  调好之后,把左边的箱子调成下图样子。

  这时木箱会被砸烂,我们再把红箱子拿起来,放在门口。左右电箱调整如下:

  连续按4次就可以解谜完成,我们想要的箱子已经放到的目标地点。

  接下来继续控制主人公,向左走,下楼梯,到下面的控制台位置。

  操纵第一个控制台,选择货物。第一次选择货物时,前两个随便选,第三个选BOX箱子。等一会儿,就可以第二次选货物,第二次选择货物时,第一个和第三个随便选,第二个选BOX箱子。再等一会儿,就可以第三次选货物了,第三次选货物时,第一个选BOX箱子,剩下两个随便选。

  如图,三次选择结果:

  等货物开始运送的时候,等待我们选出来的3个箱子到下图位置,拉右边的闸,按照箭头路径往下跳。

  下来之后,操作中间的控制台。开锁方法,点一下最上面的,点一下最下面的,点4下中间的,就可以打开了。

  打开之后,调整表盘,左边指向R,右边指向2。

  来下图阀门处,转动阀门,可以用冷气喷坏两个巡逻的机器人。

  接下来就可以一直向右走,进入刚刚的门口了。

  就在这时,一个巨型机器人袭击我们,我们需要用手枪攻击他的腿。攻击方法就是准星在红色区域(不用是最中间的红点)开枪就行。一共要打断3条腿。

  打断所有腿之后,要控制威廉把他控制住。左边的电箱和右边的电箱调整如下:

  启动设备后,机器人会被吸起来,我们要进行最后一击。在外面绿圈缩小到里面的内圈后,开火,一定要把握好时机,有些难度,失败一次就死了,成功两次过关。

  接下来进入门内,按门铃。

  时间:2140年10月22日,星期六,傍晚

  结局非常惨,我们被当作试验品绑起来了。

  接下来又要使用威廉来救我们了,我们要做到的是让3个小型电磁塔和主电磁塔的谐振频率一致就可以了。首先我们一直向左走,调整第一个小型电磁塔,频率在右边的屏幕有写,数值随机。

  调整方法:一共3个按钮,首先找到调整幅度最大的和最小的,然后先调最大的,让他尽可能靠近最后的数值(注意这里不要在意后面的小数点,前面的整数对上就可以了),然后调中等的,最后调小的数值,完成后就可以同步了。

  第一个电磁塔调整完毕后,按照下图路线向上走,并且拉动红圈处拉杆。

  接着向右走,调整第二个小电磁塔。调整第二个电磁塔的时候如果看不见下面的数字,按↓键就可以看到了。

  调整好之后,原路返回(不要拉拉杆)。

  进入第一个电磁塔左边的传送带里,拉动拉杆。

  最后调整最后一个电磁塔,同样,看不到数字按↓键往下看。

  调整完毕后电磁塔启动,电死了所有敌人。

  主角被解救之后,离开这里,路线图如下(在主电塔可以获得档案【特斯拉电磁塔】):

  从窗户离开此地之后,主角抱怨了一下BB-X指路指错了。我们首先利用梯子下去。放下桥,回到刚刚冻死机器人的三个控制台处。控制选取货物的控制台,把标有OIL的油瓶取出来。

  中间的控制台设置成下图样式。

  等油到这里用右边的控制台停住,做旁边你的升降梯,上去拿油。

  拿到油之后,先把下面中间的控制台调成下图样子。

  来到左边的炉子,先下去把炉子关掉,然后把油瓶放在一堆货物旁。

  打开左边的炉子,油瓶会爆炸,爆炸后,关掉炉子,我们就可以继续前进了。

  时间:2140年10月22日,星期六,晚上

  进入废弃码头,调查最后一个货物走向。

  破解方法,第一步:

  第四步解谜完成后得知发出的地点就是这里,我们要接近最后的真相了!

  获得信息后,向左走,拾取升降机对重。

  把对重放到升降机上,用摇杆把升降机升上来,我们坐升降机下去。

  谁知道,升降机坏了,我们暂时无法回去,先来船舱门口取得电线捆。

  进入船舱控制台内,可以获得档案【“命定燃烧号”大副笔记】,没电的蓄电池,救生圈。声呐信号暂时没有什么用。摩斯电码是误导!没有任何作用!!!!!不要执着!

  从楼梯离开船舱,向下走。

  到了下层之后,控制电源,把船舱的灯关掉,点亮的灯如下图所示。

  在控制灯光设施的右边,调查获得无效的压力表盘,我们需要将其修好。

  爬上楼梯获得波纹管。

  在游戏机旁获得小齿轮。

  关掉游戏机的灯,打开游戏机下面有机器人尸体的灯,在此处获得剪刀和充电微型处理器。

  在船舱门口获得耐压法兰座。

  向右走,用剪子简短下面的线,获得线缆。

  把上面的雾灯调整一下,冲下照,然后打开雾灯,在下图位置获得直流变压器。

  把控制台点亮之后,进行合成。首先使用压力表和波纹管合成压力测试单元,接着用压力测试单元和法兰底座合成压力表盘。

  把压力表盘装回去,要进行调整。一共3个阀门,这里因为也是随机的,笔者没有找到更好的方法,就是一直转,让三个指针都指向绿色区域就成功了,各位玩家可以在评论区分享解法,无脑转解开也不难。

  装置启动后,电量更丰富了,并且会捡到一把雨伞。我们用伞把和齿轮在工作台合成摇杆。

  这样,我们就能利用升降梯返回上层了。返回上层后,来到红圈处,使用电线捆,左边烟囱下的区域就被照亮了。

  在照亮的灯光下,获得放水LED灯。

  在工作台用LED灯和游泳圈合成浮动LED灯,来到船舱最底层(也就是控制灯光的地方下面)放置浮动LED灯,在旁边取得耐压电路板,接着把LED灯踢到右边。

  从左边楼梯上去,打开门,这里的东西我们暂时还用不上。

  回到控制台,进行合成,使用充电微处理器和耐压电路板合成充电电子单元,使用充电电子单元和直流变电器合成充电器。

  拿着充电器,来到下层,对这没电的电池充电。

  获得电池后,把电池安在左边的LED灯下,灯光会照射一张纸,纸上有密码,记住8631。

  取下电池,回到最上层入口处。

  进入控制室,需要输入密码,输入密码的方法就是你顺时针转到字母位置后,逆时针转一下,就输入了那个字母。原理就是这样,那么0-9分别和下图对应的一样,输入8631就可以了。

  看不懂没关系,首先顺时针(即按E)转动到F位置,逆时针转到N位置,顺时针转到S位置,逆时针转到D位置,完成解谜。

  机器会把一个红箱子拉上来,我们打开红箱子。

  盒子内部构造大概是下图样式,解法:顺-逆-逆-逆-逆-逆-顺-顺-顺-顺-逆-逆-逆-逆。

  解开谜题后获得巨硕的机械鼠。

  在下图的红圈位置,获得蓄电池壳子。

  在控制台将老鼠和电池合成电量充足的蓄电池。

  把两个电池都放在拿电池的地方,在红圈处处防止用剪子剪断的电缆,在上层获得打火机。

  在最下方的右侧,遇到一个死去的机器人,获得一张我们之前的到塔罗牌,然后用塔罗牌燃烧尸体,获得齿轮。

  把齿轮放在下图位置,上方的装置想做拨动,在下方启动齿轮。

  等齿轮转起来之后,把雾灯调回原来的位置,按下图样子调整好亮度。

  接下来发射信号,模仿下面的波形图就可以,检查并不严格。

  暗门打开后,我们回到下图位置。把二层的蓝色箱子对到下图位置。

  齿轮放在下面,重新启动装置,这里就能用升降机了。

  把方架子,放在升降梯,移到2层红框位置。

  把机器人右边带梯子的方块,运到3层,放在红框位置。

  进入大齿轮下面的门内,进入最后的剧情。

  果然这里是充满了人类和机器人的残骸,我们一直向前走……这里甚至有之前遇到为他叫医生的机器人尸体。

  在最后死神出现,对我们说:“好久不见,侦探。”他出现在我们背后,举起镰刀!

  游戏结束,画面中央出现3个单词“To be continue”。

  至此《迷雾侦探》全解谜完结,感谢大家观看。

找个地方放一下简历附件

渣毕业设计,与游戏设计关系不大,更多地是展现自己有实际游戏开发能力,了解游戏开发各方面工作,能够使用游戏引擎。

本科生毕业论文(设计)

题目 基于Unreal4的战棋类游戏《棋行傀儡》的设计与实现

院 (系) 计算机科学与技术

第二章 可行性分析 3

第三章 游戏策划设计 6

第四章 程序实现设计与难点 14

4.3程序关键与难点算法 14

第五章 总结与反思 35

5.1 模块、函数独立性反思 35

5.4 方法函数与函数库反思 37

随着计算机科学与技术的发展,智能设备大幅度地改变了人们生活的方式。而电子游戏作为信息技术发展的衍生品,也快速代替了传统娱乐成为了广大民众的日常娱乐方式之一。电子游戏打破了传统娱乐方式的限制,融入了其他艺术形式,成为了当下的“第九艺术”。而制作一款电子游戏可以视为一项非常复杂的软件工程项目。如果想制作一款3D游戏,不仅仅要考虑游戏玩法的程序逻辑实现,还要涉及UI、模型、动画、特效等等,其中每一项难题都能扩展出一个完整的课题。因此想要以个人之力完成该项目,需要强大的制作工具的帮助。游戏引擎是游戏开发必要工具,也是游戏开发的基础,游戏引擎是多个子系统构成的一个复杂的系统工具,方便游戏开发者能更好地处理游戏制作相关的所有内容。此次毕业设计选用当下先进、开源的Unreal4游戏引擎作为游戏开发的主要环境,完成游戏策划案中所设计的所有玩法。

关键词:游戏设计,游戏制作,软件工程,Unreal4

随着物质生活的逐渐富裕,人们对精神娱乐方面的需求也在日渐提高。游戏作为娱乐与艺术的一种形式也有着越来越高的需求与市场。但由于以下各种原因导致目前游戏市场十分畸形,游戏品质也十分低下:

  • 由于国内经济起步较晚,也造成网络娱乐发展远落后于其他国家
  • 由于国内网络行业发展飞速,网络娱乐行业缺乏成熟的法律规章管制
  • 由于网络管制的限制与国内早期恶劣的游戏市场环境,国内玩家游戏审美十分低下,较少接触到优秀的游戏产品,逆向影响了游戏制作品质
  • 由于目前游戏设计并未算入正式专业,国内游戏设计与制作水平总体十分低下
  • 游戏宣发行业严重阻碍游戏创新,加上许多资源被大型厂商垄断因此难以产出优质游戏
  • 由于畸形的游戏产业环境,一些非移动平台的主流优秀工具

因此,国内游戏市场相对国际市场而言是处于极其不健康状态:劣质的游戏、低下的玩家平均审美、极度商业化的游戏、糟糕的消费习惯、紧缺的人才以及不完善的规章制度和生产模式。因此中国的游戏市场急需优秀的人才与优秀的游戏去打破现有的恶性循环。

这次的毕业设计旨在设计并且完整地制作一款小而精的游戏DEMO,有着以下几点目的:

  • 制作一款游戏需要多方面知识,而实际动手制作出来可以锻炼各方面的能力,而需求最基层的能力便是编程能力
  • 检验综合能力水平,同时找到能力的弱项与强项
  • 游戏原型的制作是个人能力最好的证明,该作品也有利于日后入行游戏行业
  • 熟悉国际公认的优秀游戏3D引擎Unreal4

使用Ureal4引擎制作出一款3D战棋类游戏DEMO,该游戏DEMO具有以下内容:

  • 完成游戏所设计出的基本玩法
  • 在基本玩法完成后尽可能多地完成次要功能与玩法的实现
  • 实现开发者模式,作为能方便地产出更多游戏内容的工具

一款完整的游戏制作工程是十分庞大的,即使是2D游戏如果没有游戏引擎工具的帮助一个小型团队也很难在短期内做出一个完整的游戏。因此想要一个人在毕设限制的时间内完成一款完整的3D游戏必须需要一款强大的3D游戏引擎的帮助。

Unreal4是由著名的游戏公司Epic所制作的一款3D游戏引擎,它是目前世面上少有的功能强大、开源免费的优秀的游戏引擎之一。Ureal4是一套完整的工具集成,提供制作游戏时所需要的绝大多数基础工具如UMG、3D笔刷、蓝图编程、动画蓝图、游戏框架、材质编辑器、粒子系统、AI控制等等。正是因为有这些强大的工具,因此才使得个人开发游戏成为可能。并且由于Epic平台致力于创建Unreal4国际化学习平台,可以在官网、Bilibili等网站找到大量值得参考的学习资源。

蓝图编程是Unreal4所提供的一个可视化编脚本系统,同时Unreal4也重新封装了C++以供开发者使用。此系统的基础概念是使用基于节点的界面在虚幻编辑器中创建游戏性元素。与诸多常用脚本语言相同,其用于定于引擎中的对象驱动(OO)类或对象。相较于C++它有着以下好处:

每一个蓝图节点可以视为一个封装好的函数,各种不同的函数按照流程管理连接在一起便成为了蓝图脚本。并且蓝图中增加了相较于函数更加灵活的“事件”的概念,因此学习者往往只需要知道每个蓝图节点有何作用、如何使用便可以灵活地使用在各个地方。同时,由于可视化的原因,节点如何使用以及有何种作用往往能非常容易的测试出来。而由于目前官方重新封装过C++并且在官网上提供的API查询功能有着诸多缺陷,因此Unreal的C++的学习成本远高于蓝图的学习成本。并且由于时间上的限制,想要在相同时间内尽可能实现更多功能,也不得不使用蓝图脚本。

Unreal4的蓝图系统与大多数的Unreal4内置工具有着良好的关联性,可以轻松使用蓝图系统将各种工具产出与游戏所关联在一起。尽管开发者仍然能通过C++完成任何蓝图所能够达到的功能,但是面对这些更加专业的工具,也意味着开发者需要更多时间与精力去学习各方面的接口框架等。而蓝图系统将所有工具与引擎基层可视化地关联于一体无疑大幅度提高了开发效率。

蓝图调试是一项非常强大的功能,它允许开发者在在编辑器中运行或在编辑器中模拟模式中暂停游戏执行,并通过使用断点单步调试蓝图或关卡蓝图的任何图表。同时蓝图拥有专门的断点功能,这提供了观察变量值并检查或单步调试蓝图内的执行流程的机会。给定蓝图的所有断点都显示在调试选项卡,可以在蓝图的图表中查看已选中的断点。能够大幅度提高开发中的排错效率。

蓝图中官方封装了大量的节点,这些节点等同于C++中的一个个方法。然而,官方在蓝图系统中制作了一个非常方便的分类与搜索功能。例如开发者如果需要一些针对玩家摄像头面向、旋转等控制的方法,或是一些常用的空间计算方法,可以在相应分类中快速查找。而同时由于官方APP制作不完善的问题,这使得蓝图的易用性与易学性又远远高出了C++编程。

一款完整的游戏固然离不开精美的各种美术资源,流畅的动画、精美的贴图、扣人心弦的音乐、舒适的UI会最终成就一款游戏的成功。但是这些资源往往都是由团队中的美术部门所制作出来的,一个人通常很难同时兼顾设计、程序与美术。然而很多时候游戏团队为了避免花费大量人力物力制作出的游戏可玩性低于预期,往往会先制作一个游戏DEMO用于测试游戏性,游戏DEMO往往会用快速廉价的美术素材,而游戏的功能也仅制作核心玩法。这样的游戏DEMO通常成本低廉,又可以一定程度上测试游戏的可玩性等,目前被大量游戏公司纳入游戏制作流程之中。而此次毕业设计为了保证能在规定时间内做出实际可玩的项目,并且规避美术资源的大量成本,因此将会制作游戏DEMO而非一款完整的游戏项目。

模型资源是游戏的必要资源之一,3D游戏的模型大部分往往非常复杂需要专门的人员制作。由于目标是制作游戏DEMO灰盒,因此并不要求太高质量的模型,相关模型需求可以通过以下几种方法解决:

  1. 对于较为复杂的模型,通过网上寻找免费或购买素材的方法获取
  2. 对于较为简单的模型,自己使用3DSMAX制作
  3. 在Unreal4提供的官方资源包中寻找合适的素材使用
  4. 对于类似的模型需求,使用同一模型代替以节省资源成本

UI资源不同于其他资源,有着自己的独特性难以通过其他渠道获得。幸运的是Unreal4有着自己的强大的UI制作工具:UMG系统。UMG不仅可以轻松地绘制UI,还能够与蓝图脚本密切关联,极其方便地编写UI逻辑。同时由于拥有一定美术基础知识,因此决定UI自行绘制。

贴图资源与模型资源同样具有复杂性和专业技能需求,贴图一般用作于模型材质、部分UI等,因此与模型资源同样是必要资源,因此通过以下方法解决:

  1. 在Unreal提供的官方资源包中寻找合适的素材使用
  2. 在网络上寻找免费或购买资源使用
  3. 对所找的资源进行略微改动已满足相似需求
  4. 在网上寻找合适的素材通过使用Photoshop制作所需贴图

动画资源相比模型资源要更加复杂,更加难以获取。大部分3D游戏中的动画往往都是与模型绑定的骨骼想配套,因此想在网络上寻找合适的素材几乎是无法实现的。所幸官方提供的标准人物模型骨骼配有一套常用动画,同时在Unreal官方商城中也售有此套骨骼动画资源。因此希望能够在商城和官方资源包中能够找到所需资源,如没有相应需求的资源则可能会将部分动画省略处理。

一款完整优秀的游戏往往离不开优秀的音乐音效资源,然而当制作一个游戏的DEMO版本时,声音资源甚至可以省略。声音资源与其他三种美术资源相比而言更加独特,需要更加专业的技能才能够制作。因此只有时间与条件允许时才会考虑加入声音资源。

本游戏设计是基于玩法设计的一个简单的回合制战棋类游戏。游戏中玩家需要在关卡之中通过招募棋子、攻占资源点、升级基地最终达成占领地方基地以获得胜利。游戏每个回合可以恢复所有棋子的行动力与攻击,并且根据基地等级提供基础资源。游戏地图是由一个个六边形单元地形块构成,每个单元地形块有着各自的地形与高度影响着棋子的攻击范围与行动,并且需要谨慎的控制自己的资源如何使用以达到更高的收益。玩家会根据自己所构建的卡组随机招募到棋子,并且可以通过升级基地来提高每回合收益与招募到更加稀有棋子的概率。当玩家胜利时,会随机解锁新的棋子供玩家驱使。

游戏策划架构如图3-1所示

图3-1 游戏策划架构思维导图

战斗系统是游戏单局战斗开始为起始点到单局战斗结束所涉及到的所有系统,同时也定义了游戏的核心玩法。

非战斗系统包含除开发系统与单局游戏外的系统,主要是由关卡选择系统、玩家棋牌构筑系统构成

开发系统包含制作关卡所需要的所有系统,主要包含通过柏林噪声函数随机生成地形的系统,通过UI界面自定义游戏地图预设配置的系统,地图存取系统等

战斗系统是游戏单局战斗开始为起始点到单局战斗结束所涉及到的所有系统,同时也定义了游戏的核心玩法

回合制是游戏中所常见的一种游戏底层机制,传统的棋类游戏都可以理解为回合制的。回合制往往不需要玩家进行实时的操作,可以将更多的精力使用在如何行动上,兼容高策略性玩法。同时,回合制也决定了最微观的游戏体验循环,每个回合即使游戏体验循环的元单元。

  • 游戏是回合制进行的,各势力轮流行动
  • 每回合会重置一些基础资源如重置棋子行动力与攻击能力,并提供一些经济资源

基础资源是所有游戏必不可少的,资源不仅仅是游戏里的金钱等面向玩家理解的资源,每个回合、玩家的每个棋子、棋子的行动力等等都可以视为游戏资源。然而基于策划层面考虑,这里所指的基本资源即玩家所拥有,游玩时所需要高度注意的资源,也是影响玩家行动的核心。目前将资金、粮食与人口定义为核心资源。

  • 玩家每回合根据战略点等级获得基础资金、粮食收入
  • 玩家可操控的棋子数量由战略点等级和棋子人口占用决定
  • 玩家每回合能够自动刷新招募池
  • 玩家可花费少量资源将棋子放置在有上限的预招募池内
  • 棋子独立行动,行动耗费行动值,每回合行动值自动恢复
  • 每局开始时拥有初始资金
  • 每回合结束时根据战略点等级提供基础资金收入
  • 野外各种资源点可提供每回合资金
  • 资金用于招募棋子,棋子能力技能越强资金耗费越多
  • 资金用于升级战略点,等级越高消耗越多
  • 每局开始时拥有初始粮食
  • 每回合结束时根据战略点等级提供基础粮食收入
  • 野外各种资源点可提供每回合粮食
  • 粮食用于招募棋子,棋子基础属性越高粮食耗费越多
  • 基础人口上限由战略点等级决定

棋子是游戏核心资源,此游戏中棋子拥有复杂的属性,为了体现出各种不同棋子之间的差异。同时这些不同的属性也会作用不同的效果,以保证各具特色。

每种类型的棋子都有各自的ID,决定了该棋子是哪种棋子。ID类似于主键,是棋子类型的唯一标识

每个ID的棋子拥有一个自己的名称

目前棋子共分为三种类型,每种类型都有自己的特性,如表3-1所示

类型特性个体基础属性值较低,费用花销较低,且人口占用较低复数基础属性值偏高,费用花销较高,且人口占用较高建筑无法移动,血量为1,其他生命值均为护盾

每个棋子拥有自己的血量,当血量为0时判定棋子死亡

护盾是位于血量之上的存在,当棋子受到伤害时,会优先扣除护盾值。当护盾存在时,会根据当前护盾值/护盾最大值百分比与棋子的防御属性共同决定最终的伤害减免。当护盾值为0时,棋子不再享受伤害减免效果。

攻击主要由物理攻击与魔法攻击值组成。物理攻击会根据物理防御计算伤害减免,魔法攻击会根据魔法防御计算伤害减免,最终计算伤害的总和对棋子造成伤害。

棋子也拥有攻击范围属性,决定了棋子能够攻击的范围。即使是相同的攻击范围,不同的攻击范围类型也会使得最终攻击范围有所不同。同时,棋子所在位置与目标位置之间的障碍也会影响是否能够实际攻击到目标单元格。

防御主要由魔法防御、物理防御与闪避值决定。物理防御与魔法防御往往根据受击目标的护盾百分比来共同决定最终防御值,再由伤害计算公式来决定最终受到的伤害值

闪避值则为一个百分比数值,棋子每次收到攻击时会先进行一个闪避判定,如果判定成功则会避免掉这次攻击事件

不同的棋子拥有不同的行动力,行动力在棋子行动时消耗。如果行动力不足则无法移动,棋子的行动力会在每个回合开始时恢复至最大行动值

棋子拥有自己的体型,建筑棋子往往会占用更多的的单元格,同时也会匹配模型的大小与位置

招募棋子时会消耗基础资源,如资金与粮食,同时会占用人口,如果任意一项资源无法满足招募条件则无法招募

每个棋子拥有自己的稀有度,稀有度决定了招募概率,并且每套卡组对同一稀有度的棋子有最小数量要求限制

表3-2 棋子稀有度表

  • 每局游戏开始时玩家拥有战略点
  • 通常战略点失守时游戏失败
  • 通常占领敌方战略点可获得胜利
  • 战略点提供棋子招募功能
    • 每次招募会招募到随机稀有度的棋子
    • 招募稀有度概率由战略点等级决定
    • 招募到的棋子会随机布置在战略点周围
    • 若战略点周围没有可放置棋子的单元格则无法招募
  • 战略点初始等级由关卡定义,默认为1级
  • 战略点可通过花费资金、粮食来进行升级
  • 战略点每回合根据战略点等级提供资金
  • 战略点每回合根据战略点等级提供粮食
  • 战略点等级决定人口基础上限
  • 胜利条件由关卡模式定义
  • 胜利条件通常为占领敌方战略点
  • 失败条件通常为超过回合限制

游戏的棋盘有一个个单元格构成,需要注意的是,游戏的棋盘并非传统的四边形而是六边形棋盘,这会使得玩家获得截然不同的游戏体验与更多可能性的游戏性,但同时六边形棋盘会面临着更高难度的实现难度。

游戏的地形能够展现丰富的地貌,同时会实际地影响棋子的行动规划。目前,不同地形往往会消耗不同的移动值。

表3-3 地形移动损耗表

建筑分为战略点建筑与资源点建筑,战略点是决定玩家胜负的核心,也是玩家的基础资源、经济来源、招募点等。而资源点建筑则是需要玩家设法攻占的资源地,资源建筑能每回合稳定地为玩家提供资源。

建筑名功能战略点决定胜负,提供招募功能,每回合提供资金、粮食并决定人口上限,可升级小型农场每回合提供额外少量粮食中型农场每回合提供额外中量粮食大型农场每回合提供额外大量粮食小型矿场每回合提供额外少量资金中型矿场每回合提供额外中量资金大型矿场每回合提供额外大量资金

每个单元格都拥有自己的高度值,不同高度值结合在一起产生了丰富的地貌。与地形相同,移动时的地形高度差也会对棋子的移动力产生不同的影响,同时不同的高度差也会决定是否能够攻击到目标单元格

表3-5 高度差移动损耗表

不同的关卡拥有不同的长度与宽度,具体由关卡创建时的输入决定。

  • 具体规模由关卡模式决定

游戏目前分为两个对立的势力,玩家所操作的势力将与另一方完全敌对

  • 与玩家与盟友对立,通常是玩家需要战胜的目标势力

非战斗系统包含除战斗系统与开发系统外的系统,包含游戏主菜单等内容。提供基本的开始游戏、选择关卡、构筑卡组、进入开发者模式与退出游戏等功能

关卡系统可以使玩家选择关卡进行游戏。每个关卡有着各自独立的地形、高度、敌人预设、建筑预设、回合限制等。

关卡系统与开发系统中的关卡生成密切相关。

游戏构筑系统可以帮助玩家构筑一套自定义的卡组,所有的玩家可使用卡牌被分为已解锁与未解锁两种,玩家会在游戏胜利后逐渐解锁所有卡牌。

  • 玩家可以选择性地将已经解锁的卡牌加入牌组
  • 玩家招募时只会招募到牌组中的卡牌
  • 构筑时每种稀有度卡牌有最小数量限制
  • 玩家在胜利时会随机解锁两张未解锁的卡牌

开发系统包含随机地形生成工具,关卡存读工具,地图编辑工具以及玩家棋子配置等功能。这些开发工具能够保证游戏能够方便地持续生产游戏内容,同时为游戏的修改、配置做基础。由于这是一个3D游戏,游戏有着接近真实的地图以及大量的预设配置,地形单元格往往多达数百个之多,并且常常需要手动配置地形与部分高地。因此,没有特别开发工具的帮助完成开发是近乎不可能的事情,也不利于游戏内容的填充。

随机地形的生成是游戏的基础,也是游戏的特色之一。在开发系统中,游戏将通过柏林噪声函数来生成随机的,近似真实的,连续的地形数据矩阵。然后再通过一系列算法生成最终的游戏地图。开发者可以随时修改输入参数以生成各个独特的地形,并且通过编辑并保存所需要的地形数据。

每个关卡是各不相同的,同时也要对应不同的存读数据。因此只要游戏设计关卡系统往往都需要预先开发一套专门的关卡存读系统。这个系统工具同样也会在日后的开发过程中节省大量的时间,并且可以将其中一部分作为游戏内的读取关卡系统直接使用。

如果想纯粹地靠随机算法生成所有的关卡内容是非常不切实际的事情。这需要非常多的各种专业算法融会贯通,经过大量的测试调整与开发才能够为自己的游戏量身定制一套完整的随机生成系统。而对于游戏DEMO而言,能够直观并且便捷地手动调整出开发者想要的效果便是关键。因此地图编辑系统也是几个不可或缺的核心开发系统之一。

玩家棋子配置系统本质上与地图编辑并无需别,而在游戏里由于棋子与地图的编辑算法与数据结构上的区别,因此可以是作为一个单独的模块进行开发,并且棋子的配置是建立于地图存在基础之上的。该模块同样是不可缺少的核心开发系统模块之一。

第四章 程序实现设计与难点

程序模块化架构如图4-1所示

图4-1 程序模块化架构思维导图

功能点列表是游戏开发中一种敏捷的开发方法。由于游戏制作工程量大,需求修改频繁,因此游戏开发时往往以优先开发重要部分为目标,然后依次按照评估的优先级进行开发,同时评测核心部分的玩法功能等。这种敏捷开发方法尤其适合人力不足时使用,因此本次毕业设计中也采取该种方法进行测试。以下为功能点列表(详细优先级列表参照 《行棋傀儡》功能点列表.xlsx)

表4-1功能点列表简表

编号内容1WS进行水平面竖直轴移动2AD进行水平面横向轴移动3当面向下方时,前后滚轮进行世界z轴移动4右键时鼠标任意方向进行镜头转向5BeginPlay时对玩家控制视角坐标置位默认位置6设定速率变量以随时调节镜头移动速度7按U键进入UI模式8根据x逻辑坐标计算x实际坐标9根据y逻辑坐标计算y实际坐标10根据逻辑高度h计算实际高度值以及棋子着点11根据地形枚举值设定顶端块材质12清除场景中所有地形块Actor13通过一系列参数的设置与柏林噪声函数为不同逻辑坐标地形计算随机高度值14为生成参数绘制UI面板实时调节15重置内置随机起始坐标16BeginPlay时生成UI控制界面17控制面板UI界面搭建18生成UI界面,初始化设置,读取枚举选项,输入数据限制19通过UI输入数据改变地图生成控制模块中的各个参数与事件20通过快捷键切换鼠标/自由视角模式21通过JSON结构存储生成的地图信息22将JSON存储至指定目录下23通过UI界面设置文件名与保存按钮24将指定目录文件名的JSON文件进行读取25解构读取的JSON数据生成地图26将指定读取文件名,读取按钮添加至UI界面中27鼠标点击选中单个actor28鼠标框选时绘制提示框29鼠标框选多个actor30被选中的actor拥有描边特效31通过键盘+、-改变所选地形高度32通过面板输入选择改变地所选形块地形33通过面板选择放置预设棋子于选择地形块上34通过面板清除选择地形块的棋子35根据选择关卡加载关卡地图信息并生成地形36根据选择关卡加载地图关卡信息并生成预设棋子37将棋子与地形信息存至MapController中38玩家镜头设置39鼠标位于窗口四边时镜头固定高度平面移动40鼠标所指向的棋子或地形框会高亮显示41鼠标左键选取所指向的地形或棋子42绘制地形面板信息UI43绘制棋子面板信息UI44若选中地形则右上角跳出地形显示面板45实现棋子体型算法规则46若选中棋子则计算棋子的体型范围47显示棋子的体型范围48实现棋子移动算法规则49若选中棋子则根据当前行动值与移动算法规则计算可移动范围50显示棋子的可移动范围51实现棋子攻击范围算法规则52若选中棋子则根据攻击算法规则计算可攻击范围53显示棋子的可攻击范围54玩家按住右键可转动视角55玩家按Home键可使玩家视角回归基地56玩家左键其他位置取消选择57当玩家点击移动范围时显示移动路径并等待确认移动58玩家再次确认移动根据路径进行移动指令59棋子每格移动给予一定延迟60棋子攻击范围内存在地方单位则处于可攻击状态并特殊标识61左键处于可攻击状态棋子或地形则执行棋子攻击指令62棋子根据双方属性造成伤害63攻击方棋子处于不可攻击状态并且清除移动力64当棋子处于可攻击时,棋子模型播放默认动画65当棋子处于不可攻击时,棋子模型不播放动画66当棋子死亡时,播放棋子死亡动画67当棋子死亡时,播放棋子死亡动画68当玩家建筑被摧毁时,摧毁建筑69当敌方建筑被摧毁时,占领建筑70我方建筑呈现蓝色,敌方建筑呈现红色71造成伤害时,受伤棋子出现浮动伤害数值72棋子上方设置血条显示棋子血量与护盾值73棋子设置归属方提示框74棋子设置稀有度提示框75播放如移动、伤害、敌方行动、棋子死亡动画时,锁定玩家禁止操作76当玩家基地被摧毁时游戏失败77当敌方基地被占领时游戏胜利78玩家设有资金、粮食、人口、基地等基础资源79绘制玩家资源信息UI80绘制当前回合提示UI81绘制结束回合按钮UI82当玩家按下回合结束按钮时进入下一回合83回合结束时根据基地等级与数据表提供资源84回合结束时根据资源点数量计算提供资源85恢复所有棋子攻击与行动力86敌方所有棋子攻击一次可以攻击到的第一个棋子87敌人每个棋子行动之间给予一定延迟间隔88将玩家摄像机聚焦于行动中的敌人89根据基地等级读取招募概率表90根据概率表随机生成5个固定稀有度招募位91根据招募位稀有度随机招募等稀有度棋子92根据玩家构筑生成随机五个招募棋子93玩家拥有与招募到的棋子每种不超过3个94玩家游戏开始时设有默认初始资源95绘制招募信息UI96玩家可锁定/解锁招募,回合结束时无法刷新招募97玩家通过UI界面花费资源招募棋子98招募棋子随机生成与基地周边格上,如果没有生成位置则无法招募99玩家可以通过招募UI升级基地等级并刷新UI100当资源信息改变时刷新UI101刷新招募消耗金币随基地等级提高102从文件中读取玩家构筑棋子信息103当回合数超过地图限制回合数时,游戏失败104绘制玩家失败UI,按钮跳回至主菜单105玩家胜利时随机解锁两张未解锁卡牌106绘制玩家胜利UI,按钮跳回至主菜单107当棋子属性改变时刷新显示108新一回合时绘制特殊UI与动画109点开玩家棋子设置时读取所有棋子重设默认值110玩家可以设置棋子是否为玩家棋子111绘制玩家棋子设置界面112绘制游戏主菜单113当玩家选择关卡时激活开始游戏114绘制玩家关卡选择界面115绘制关卡信息界面116玩家点击选择关卡时读取可选择关卡列表117读取玩家构筑棋子、已解锁棋子、玩家棋子信息118绘制玩家构筑界面119玩家可将已解锁卡牌加入至构筑卡组中,或从构筑卡组中移除120为每张卡牌绘制信息面板121根据选择关卡进入关卡122退出游戏123退出游戏确认UI

4.3程序关键与难点算法

4.3.1 柏林噪声地形生成算法

(1)柏林噪声算法的选择

该游戏的需求是真实的地形概括,因此常用的等量随机数是无法满足要求的,因为它缺乏一个关键的性质:连续性。尽管常规的可以通过插值函数使常规随机出的数据之间进行平滑,但最终效果会仍然显得十分不自然,因此需要寻找一种更加优秀的随机方法。

柏林噪声算法是游戏制作中非常常见的一种伪随机方法,其常常用于制作波形纹理、生成地形、模拟火焰,云,水等特效,它可以模拟生成从一维到甚至四维的噪声数据。在著名的游戏《我的世界》中便是使用它来随机生成地形的基础。

三维的柏林噪声函数会接受三个坐标向量作为输入,最终输出一个double值,同时函数会使用一个随机数组,由于是伪随机算法,如果输入的坐标与随机数组都完全一致,则最终输出的值也会一致。算法中会先取三个坐标的小数部分,这样便可以表示其在单元立体空间的某一个点上。然后,取三维空间的八个定点,使用(1,1,0),(-1,1,0),(1,-1,0),(-1,-1,0), (0,1,1),(0,-1,1),(0,1,-1),(0,-1,-1)这十二个向量中的八个(伪随机决定)作为梯度向量,再取该点到八个单元格定点的距离向量,对其分别做点积运算,就得到了每个顶点的影响值。对8个影响值做插值,进行加权平均值,就得到了最终输出结果。这里的插值如果使用常规的lerp线性插值则会使得最终噪声效果不自然,因此为了得到更平滑的噪声效果要采用非线性插值函数fade函数,即:6t^5-15t^4+10t^3。Fade函数在游戏、动画等制作之中常常用到,其特性是变化先快后慢再快,会产生一个非常平滑的过度效果,在运动、变化、颜色变化等方面可以起到非常良好的缓和效果,而在柏林噪声之中使用作为插值函数有着同样良好的作用,可以生成平滑的过度地形。

最终生成的地图效果如图4-2所示:

图4-2 柏林噪声地图生成效果图

游戏棋盘与大部分棋盘游戏有着一个重要的不同点,也是技术难点:游戏棋盘为六边形地图,因此不能简单地使用二维数组矩阵来当作游戏的地图数据。

经过资料查询与研究,最终发现:二维矩阵数组仍然可以适用于六边形棋盘,但是需要一种特别定义单元格“相邻”的条件。每个单元格除了绝对坐标(1,0),(-1,0),(0,1),(0,-1)外,(-1,1)与(-1,-1)同样定义为“相邻”条件。图4-3与图4-4分别指出了游戏棋盘数据样式与二维坐标相邻定义样式:

*以下图示会有致命的错误,会在总结中指出

图4-3 棋盘坐标示意图

图4-4 棋盘坐标数据结构示意图

另外,为了保证游戏场景的美观度,所有的单元格之间需要有一定的间隙,这又引申出了另一种算法需求。这里设六边形单元格半径为300,间隙长度为x,实现单元格间隙的算法如下图4-5所示

图4-5 地形块间距示意图

进一步可推出单元格的x,y轴实际坐标值:

  • x实际坐标 =(根号3*模型半径+间隔)*x逻辑坐标+(0.5*根号3*模型半径+0.5*半径) (当y为偶数时)

=(根号3*模型半径+间隔)*x逻辑坐标 (当y为奇数时)

  • y实际坐标 =(1.5*模型半径+2*根号3/3*间隔)*y逻辑坐标

游戏的制造中往往会涉及到玩家摄像头的控制与移动,3D游戏中尤为重要,这将决定了玩家最基本的操作手感与游戏体验。游戏中根据游戏模式的不同往往可能会有多种不同的视角操作方法,这也对应这多套不同的算法。在Unreal4中,虽然引擎中的范例提供了最常见的第三人称视角与第一人称视角模式,但是这并不满足该项目的需求,因为这两种算法都是基于玩家操作人物的物理控制与镜头追随。而在该项目中,玩家有着特殊的上帝视角移动控制方式与条件,游戏、开发模式两套视角控制算法,因此需要独自开发。同时,两个不同的模式的算法有部分重叠,甚至在开发者模式中需要可以开发者可以自由转换两种视角模式,因此将所有视角控制的算法进行拆解设计,再最终根据需求合并。

这里先将所用到的蓝图节点名称与作用一一列出,方便之后的解释:

  • GetControlRotation 获得控制者旋转量 该节点会先获得玩家目前操控的Actor,然后读取其旋转属性
  • GetForwardVector 获得面向前方的向量 该节点会将一个输入的旋转数据结构转换为旋转所面向的向量数据结构
  • GetRightVector 获得面向右方的向量 该节点会将一个输入的旋转数据结构转换为旋转所面向的向量数据结构
  1. 通过鼠标移动控制镜头面向

该功能是游戏中最常用的镜头控制方法之一,因此Unreal4也直接提供该方法,要注意的是鼠标仅有2个维度的控制,这里分别控制了Actor的Yaw轴与Pitch轴,可以通过AddControllerYawInput与AddControllerPitchInput两个方法直接实现。

  1. 通过WASD按键基于场景水平面上移动

由于此需求限制在场景的水平面上移动,因此常规的基于玩家面向直接通过GetForwardVector和GetRightVector无法直接达成要求,因此需要进一步改进算法。如图4-6所示,可以看到在3D坐标世界中,水平面的旋转量为Z轴旋转

图4-6 三维坐标旋转轴示意图

因此,可以先通过GetControlRotation获得玩家旋转向量,然后只取其Z轴旋转获得空间水平面的旋转方向,然后再通过GetRightVecotr与GetForwardVector方法即可获得基于玩家位置的在水平面中的位移方向,最后使用SetActorLocation使玩家在水平面上进行移动。

  1. 通过鼠标滚轮使镜头在场景竖直轴移动及限制条件

该算法十分简单,即在鼠标滚轮输入时,通过GetActorLocation获得玩家空间坐标,然后仅对Z轴进行自加减便可达成目的。

  1. 当玩家面向下方时,通过鼠标滚轮使玩家面向镜头方向前后移动

该算法主要分为两个部分:一是对于玩家面向下方的判定,其次是向镜头方向的先后移动。

首先是如何判断玩家面向是否为下方,先通过GetConrolRotation获得控制Actor的旋转属性,然后使用GetForwardVector转换为玩家所面向的向量属性,向量数据结构是(x,y,z)格式对应了三个坐标轴的向量值,这里只取得其中的Z值,如果Z值小于√2/2则可以判断出玩家面向下方45度或更高,原理如图4-7所示:

图4-7 游戏摄像机旋转坐标示意图

当玩家满足条件时,通过GetRightVector获得玩家所面向方向的向量,将其与玩家当前坐标相加即可完成镜头的移动。

  1. 当玩家鼠标位于窗口边缘时,镜头基于场景水平面上移动

该功能中基于场景水平面上移动与第2条的实现方法相同,这里主要说明对于判定鼠标窗口边缘的实现。

获得窗口大小并GetMousePosition方法用于获得鼠标位置,这样便得到了窗口的x轴与y轴最大值以及鼠标对应的x,y坐标位置。然后定义一个百分比阈值,该阈值用于判定是否位于屏幕边缘。在EvenTick事件中,判定鼠标坐标x是否位于区间[0,阈值百分比*窗口x值]OR[阈值百分比*窗口x,窗口x]内,以及鼠标坐标y是否位于区间[0,阈值百分比*窗口y值]OR[阈值百分比*窗口y,窗口y]内,即可判断鼠标是否处于屏幕边缘,并且根据判断结果使用第2条的方法实现基于场景水平面上的移动。

框选功能是游戏中非常常见的一个功能,尤其是在各类RTS游戏中。然而在Unreal4中目前并未找到合适实现此功能的方法,因此选择了一个并不十分完美的算法来代替实现:

这里用到了蓝图节点中的LineTraceByChannel节点,该节点的原理是:由给定的起始坐标与结束坐标连接而成一条线,判断该线上是否有位于指定碰撞频道上的物体阻挡,如果阻挡则返回一个复杂数据结构记录所有的信息。而实现框选算法的方法是:当玩家框选窗口时,计算窗口起止坐标,并计算其在3D空间中的射线坐标,并用100*100条射线平均地插入在起止坐标之中,返回所有射线碰撞到的位于框选频道的Actor,达成伪框选的目的。

因此这里需要另一个关键的节点方法:ConvertScreenLocationToWorldSpace,该节点接受鼠标的屏幕坐标(x,y),然后输出其在3D空间的起始坐标与方向向量,随后可以通过计算起止坐标+方向向量*射线长度即可得到射线终点坐标。示意图如图4-8:

图4-8 游戏框选功能原理示意图

Unreal4实际本身提供了一种游戏数据存读方法,但是由于目前个人未知其原理与存放哪些数据,因此自己使用JSON结构独立实现了游戏存读系统。JSON结构是存放的是一个序列化的对象或数字,易于阅读与编写,同时可进行良好的解析与生成。其存放的数据十分灵活,并且易于手动修改数据,因此选用它作为游戏数据存读的基础。

以下为游戏中使用到的几种数据存取结构及数据实例:

  • ChessBiuld文件 用于存放玩家的卡组构筑信息
  • LevelList文件 用于存放玩家可选择的关卡名信息
  • PlayerChessList文件 用于存放所有棋子是否为玩家可用棋子
  • SelectLevel文件 用于存放玩家当前选择的关卡名信息
  • 地图数据文件 文件名即为地图名称,用于存放该关卡所有地形信息与棋子预设信息

每个棋子的数据结构中,存放了一个体型结构体,该结构体有着两个属性:体型大小值与体型类型。当游戏需要读取棋子的体型时,会先读取体型大小值,然后再读取该体型值对应的体型类型预设。最终输出为一个二维坐标数组,该数组记录了该棋子体型的所有单元格相对于棋子坐标点的相对坐标值。图4-9是一个体型值为4,类型值为1的体型示意图:

图4-9 游戏体型相对坐标示意图

但是这里有个非常严重的问题,上述的四个相对坐标是只有棋子的y逻辑坐标为偶数时才能准确的。回到之前所述的图4-3-2中,若当前棋子的坐标为(0,1),那么对应的体型坐标应为(0,1),(1,1),(-1,2),(0,2),这显然与图示中所标注出的体型不符。所以这里应当增加一个修正判断逻辑:当目标的y逻辑坐标为奇数时,将读取出的所有y值为奇数坐标的x值+1,再计算对应的体型实际坐标。

上述问题将在后面的攻击范围算法、移动范围算法中同样遇到,因此后面会省略解释。

4.3.8 棋子攻击范围算法

在《行棋傀儡》中,所有攻击范围都按照一个算法处理。在游戏中有着高低起伏的地形,这些地形不仅仅影响着棋子的移动,也决定了棋子是否能够攻击到目标位置。任何一个棋子都不可能越过陡峭而又高耸的地形攻击到另一面的敌人。因此,该算法模拟了一个简易的抛物线,通过判断抛物线是否被地形阻挡来决定最终是否能够攻击到该目标。以下是算法的介绍:

首先,取攻击起始坐标与攻击目标坐标,读取两边逻辑坐标的地形在三维世界中的实际坐标,在每个地形的数据结构中存放了一个chessLocate的二维坐标,用于快捷地将棋子放置在该地形之上,因此可以直接取双方坐标地形的该数据值。然后分别将其z轴坐标加上一定高度h1,该高度h1一般为人物模型的三分之二。这样便得到了抛物线的起止点与终止点。玩家的攻击范围数据结构中会读取出一个整形值h2,该整型值h2用于决定玩家的攻击能够跨越高度的能力。取起始点与终止点两点的中点坐标,将该中点坐标的z值加上h2*固定系数,这样变得到了该抛物线的顶点坐标。最后,取中点坐标到两个端点的中点,再将得到的两个点的z值加上0.5乘以到中点坐标高度差的二分之一的值,这样便得到了最后的两个过渡点。最后将之前所得的5个点按顺序相连接,则得到了一条伪抛物线。

这条伪抛物线共有4条线段所组成,这里用之前所提到的LineTraceByChannel方法,将四条线段的顶点分别输入四次便可检测出该伪抛物线是否被地形所阻挡,如果阻挡则无法攻击到目标点,否则将该目标坐标加入可攻击范围的二维坐标数组中。图4-10从二维的角度说明了该算法原理,图4-11则为实际游戏中的实现效果:

图4-10 伪抛物线实现原理示意图

图4-11 游戏攻击范围判定效果图

4.3.9 棋子移动范围算法

棋子移动范围算法的核心为最优路径算法,在此基础上进行了重新设计并且与游戏契合,算法具体实现逻辑如下:该算法始终维护一个结构体数组a,该结构体记录了:一个目的二维坐标(x,y),一个方向枚举向量(该枚举向量表示与该坐标相邻的6个坐标的相对向量)数组,一个表示剩余体力值的整形数据。枚举向量数组即表示从原始目标到达该目标的路径,并且整形数据记录了使用此路径后剩余的体力值。

然后便开始一种递归算法:从出发点开始对周围6个单元格进行计算,得到一个新的路径以及新的剩余移动力,然后遍历结构体数组a,如果数组a中存在到达该目的最优路径则进行比较,取剩余移动力较大的路径原路径保存至数组a中;否则写入新的路径与剩余移动力,然后再以此单元格与记录中的最优路径剩余移动力为基础对周围6个单元格进行一轮新的递归计算,当剩余移动力无法移动至目标单元格或目标单元格为地图边界、已被其他棋子占有时则终止该次递归计算。

最终递归循环结束后,得到了结构体数组a,记录了所有可达到的目标点,剩余移动力和路径信息,棋子移动范围算法完成。图4-12显示了通过该算法计算出的所有可达到目标单元格,图4-13显示了移动到其中一个单元格的最优路径:

图4-12 游戏移动范围显示效果图

图4-13 游戏移动最优路径效果图

该算法的目的是使得玩家摄像头在一定高度自动对准某个棋子,并且面向地图中心方向。该算法首先会从MapController中读取地图属性,计算出棋盘中心的地形块位置,取其3D实际位置的x坐标值与y坐标值,再取目标棋子的高度值z,将目标棋子的3D实际坐标与该向量相减,即可得到从棋子到地图中心方向的向量。将该向量除以自身长度得到方向单位向量,将方向单位向量乘以一个水平面的距离值l1,再将该值的z轴加上l1,与目标棋子坐标相加,这样便得到了面向棋子与地图中心,并且可以45度俯视棋子的坐标值。

最后,将之前所得的单位方向向量转换为旋转结构体向量,取其Roll轴与Yaw轴旋转,将Pitch轴设为-45,便可得到最终结果,算法完成。图4-14是以玩家战略点为目标的聚焦算法,图4-15为原理示意图。

图4-14 游戏视角聚焦基地效果图

图4-15 游戏聚焦算法原理示意图

该游戏有着一套稍微复杂的攻击伤害计算算法,当棋子受到攻击时,会先进行闪避判定,即若random(0,100)<棋子闪避概率值,则判定为闪避该次攻击,不进行伤害计算。若没有成功闪避,则进行伤害计算,伤害的计算方法为:先检测棋子是否存在护甲,若没有护盾则无法享受伤害减免效果,直接受到全额伤害;若存在护甲,先计算护甲剩余百分比,读取棋子最小护甲百分比值,计算[护甲剩余百分比值*(100(即护甲最大百分比值)-护甲最小百分比值)+护甲最小百分比值]=最终防御修正值。然后用最终防御修正值分别乘以棋子护甲与魔抗,即可得到护甲与魔抗的生效值。最后将护甲与魔抗的生效值分别代入伤害减免公式:护甲or魔抗/(护甲or魔抗+100),将伤害减免*受到攻击值得到最终受到伤害值。

最复杂的情况下,以护甲为例(魔抗同理计算),棋子在有护盾的情况并且没有闪避时受到的最终伤害值公式为:

最终伤害=(((当前护盾/最大护盾)*(100-护甲最小百分比)+护甲最小百分比)*护甲/(护甲+100))*受到伤害

游戏的招募算法是游戏十分重要的一个算法之一,并且有着一定的复杂性,在此之前需要先明确招募玩法的规则:

首先玩家拥有5个招募槽位,每次招募时系统将随机5个招募结果填充至5个招募槽位并代替原本招募棋子。要想获得招募结果,首先需要读取玩家战略点等级数据,然后从表DataTable中读取对应的概率数值,游戏中所使用的的概率表如下所示:

游戏会根据概率表随机决定五个招募槽位棋子的稀有度,然后再随机筛选出该稀有度下玩家牌库中的棋子,决定招募到的棋子。如果该稀有度下无可用棋子则再次重新招募。另外,玩家牌库中的棋子每种最多招募三个,因此玩家场上的棋子与招募到的棋子总和不会超过三个。

当玩家选择招募该棋子时,会判断玩家的基础资源(金钱、食物、人口)是否足够,以及基地周围是否有可用的单元格,当全部满足条件时玩家才能够成功招募。

基于此算法设计如下:系统将招募5个槽位分为招募1个棋子的五次循环,分别将结果放置于5个槽位中。招募之前会将原招募槽清空,并使原招募槽里的棋子招募数据记录-1。每次招募单个棋子前先读取基地等级数据,然后根据招募概率表中将招募概率数据随机决定此次招募棋子的稀有度。招募稀有度决定后先进行检测,该稀有度下是否有可供招募的棋子,如果没有则重新招募;如果存在则在可供招募的棋子列表中随机招募其中一个棋子。招募系统会始终维护一个结构体,该结构体记录了玩家所有牌库中的棋子与相应的招募次数,当招募到该棋子时,会使其招募次数+1,该结构体也是判断某稀有度下是否有可招募棋子的依据。

当玩家点击招募某棋子时,会先判断招募是否可用,当满足条件(招募消耗金钱<=当前金钱)and(招募消耗粮食<=当前粮食)and((最大人口-当前人口)>=棋子占用人口)时,第一条判定通过。然后再判断基地周围是否有可用单元格,这里系统会遍历以2为半径的周围单元格,该遍历算法是复用之前攻击范围算法中的一个方法,如果单元格不存在chessOn单位、单元格地形类型不为water,则该单元格可用。系统会随机在所有可用单元格中随机挑选一个单元格将招募到的棋子放置。

至此,招募算法完成,其中一些微小的算法不详细介绍。图4-16为招募效果示意图

图4-16 游戏招募效果示意图

玩家牌库算法共分为两个部分:玩家构筑部分与棋子解锁部分。该部分主要为数据结构与数据处理:

首先是棋子解锁部分,游戏中所记录的所有棋子分为玩家棋子与非玩家棋子,玩家棋子为可被玩家解锁并加入构筑的棋子。棋子是否为玩家棋子可以在开发模式中设置,并且存放在专门的文件中,在之前提到的存储算法中提及。而玩家棋子又分为已解锁棋子与未解锁棋子,已解锁棋子可以加入玩家的构筑,未解锁棋子会在游戏胜利后随机解锁其中的2个棋子。

然后是玩家构筑部分,玩家只能将已经锁棋子加入构筑,也可以随时将构筑中的棋子取消构筑。玩家的构筑信息会以JSON结构形式保存在文件中,其决定了玩家在游戏中能够招募到哪些棋子。并且游戏对玩家的构筑有着一定的限制,即每种稀有度的卡牌至少需要有5个位于构筑内。图4-17显示了玩家构筑界面,图4-18显示了玩家未解锁的棋子。

图4-17 游戏玩家构筑界面

图4-18 游戏玩家未解锁棋子界面

当玩家进入主菜单界面时,游戏会先读取PlayerChessList文件,解析其中的JSON信息,并将所有玩家棋子记录在一个数组结构中。然后读取PlayerChessLock文件,解析JSON,将玩家已解锁、未解锁的棋子信息分别放在两个数组中。最后再读取ChessBuild文件,获得玩家构筑信息,将加入构筑的卡牌放入单独的数组中。该算法难点在于数据处理与UI逻辑,如图4-17所示,系统读取所有信息后会构建UI,在左侧会显示玩家当前加入构筑的棋子,在上放玩家可以点击分页来查看已经锁和未解锁的棋子。在未解锁的棋子中,可以点击Add Build将棋子加入构筑,同时可以点击左侧位于构筑内的棋子取消构筑,已经加入构筑的棋子会用Is In Build的提示信息覆盖原按钮。当玩家点击Apply时,如果达成构筑条件,则会重新生成构筑JSON信息并将数据覆盖原ChessBuild文件,如果不满足则在下方跳出提示信息。

虽然成功地完成了游戏DEMO的制作,但是仍然发现了诸多没能解决或由于进度的关系无法解决或实现的地方,这些可以说是制作的缺陷与改进的方法。不过第一次就能做出完美的软件成品也是不现实的事情,制作、发现问题、分析问题、解决问题从而提高自己的能力也是此次毕业设计的目的之一。最后总结出以下几点问题:

5.1 模块、函数独立性反思

首先便是编程中最基本的问题:类的独立性。这个问题源于个人的大意,导致了不少类之间没有明确的界限,并且不同类之间甚至会实现类似的算法等等。

起初先编写了一个简易的开发者系统,由于发现编写的过于混乱,方法的重合,一个类中积攒了过于多的功能实现,并且方法之间有大量的公共变量依赖,因此将其放弃又重新开始编写。第二次编写重新规划了类的功能与职责,减少了公共变量的使用,并且将一些未来可能需要复用的方法写进了函数库中。尽管有心为之,但最终发现类的功能分界仍然不够明确,并且开发者系统完成后仍然略显混乱,但相较于第一次编写时已经有所改善。

之后进行游戏战斗系统与非战斗系统的编写时,代码质量明显更进一步,将许多相对独立的功能等分别放入了不同的controller中,并且使各个controller存储的数据进行划分,也能够根据各自需要正常调用其他controller中的方法。但是之前所提到的问题并非不存在,并且由于之后所讲的MVC结构问题的忽略导致许多逻辑写入了UI类中。

总之,这方面的问题是编程的基础问题,也并非一朝一夕能完全掌握的,需要大量的编程经验以及预先设计,在日后再碰到类似的情况时定然会着重注意。

众所周知,软件工程里有着一个经典的模型:三层结构。该结构定义了数据层、逻辑层、表示层的三层分离结构模式,三层结构有着高内聚、低耦合的特性。三层结构相对而言是密封的三层代码,并提供访问接口。这种结构将用户所见的,底层数据存取以及中间逻辑分离,用于复杂的软件工程项目,可以大幅度提高程序代码质量、可拓展性等。

游戏作为一个复杂的软件项目,有着大量的逻辑处理、数据处理、UI表现与用户交互。因此大部分游戏往往需要遵循三层结构来编写代码,而在此之前并没有意识到这一点。当把大量的处理逻辑无意地与UI逻辑写入一起时,才发现了这个问题,也明白了为何要强调软件工程的三层结构。UI逻辑、业务逻辑与数据存取逻辑的混杂在程序体量较大时会造成极大地开发障碍,因此在编写程序时需要预先分析好每个逻辑的结构层归属,方便后续开发。

之前有所提及对于棋盘算法的描述,以及其缺陷。该缺陷为后来开发的许多算法带来了巨大的阻碍,其根本原因就是当y值的奇偶性质不同时,相对坐标的不一致。因此正确的数据坐标应当如下图5-1所示,实际显示情况如图5-2:

图5-1 游戏棋盘坐标数据结构修正示意图

图5-2 游戏棋盘坐标修正示意图

可惜的是,当发现这个问题时已经完成了整个开发系统,以及部分战斗系统,想要再修改需要额外花费大量的时间与精力,并且原先的问题并非不能解决,因此此次并没有将其修正。通过这个问题认识到当面对一些非常底层、基础的逻辑时,应当谨慎设计,并且要考虑到日后相关算法的设计影响。

5.4 方法函数与函数库反思

在函数独立性反思中已经提到,尽管有意尽地、可能地保证每个模块的独立性,并且开始将一些常用方法放入函数库以便复用,但是更微观地来看,此次做的并不漂亮。虽然确保了许多方法功能独立,但是细小的功能并没有很好地规划,因此常常出现某个方法涵盖了大量内容的情况。并且由于蓝图中有着事件的概念,事件有着类似方法的性质又有些不同,无法封装,因此使得这种情况更加混乱。

另外,函数库的使用也因此导致利用率较低,期间碰到一些可服用的小功能因为没有单独写成方法而无法复用。

这个问题个人认为仍然是经验不足导致得,希望下次能够吸取教训做到尽善尽美。

大部分游戏都有着控制台功能,也包括一些比较复杂的应用程序,控制台开发成本小,集齐了游戏中所有的逻辑指令,通过输入对应的指令便可完成相应的逻辑,是个非常便捷实用的调试工具。起初认为游戏规模较小,没有开发控制台工具的必要。但后来发现并非如此,许多情况如果有控制台能够大幅度增加开发效率,并且能够不需要编写临时的调试程序。

幸运的是,蓝图系统提供了非常多强大的调试工具,使得即使没有控制台也完成了游戏DEMO的开发,但是日后再遇到类似的开发需求,控制台也应当是第一开发优先级的系统。

此次毕业设计使我收获颇丰,虽然之前使用过2D的游戏引擎GameMakerStudio2,但是与3D游戏引擎仍然有着非常大的差距,并且之前从未完整地开发过一个游戏DEMO,仅仅是实现了部分功能。3D游戏的逻辑往往非常复杂,即使是看起来很小的游戏体量,也有着不俗的工作量。

并且这次毕业设计暴露了我非常多的问题。首先是程序设计上的不足,经验匮乏,导致开发工作饶了非常多的弯路。没有使用三层结构使得UI、数据存取以及实现逻辑混淆,难以修改与拓展;模块的划分、一个方法内所实现功能过多导致代码功能略显混乱;底层算法、数据结构的问题导致增加了工程量;以及由于第一次使用3D游戏引擎因此不熟练导致的诸多琐碎的问题等等。

不过发现问题并解决问题也是这次毕业设计的目标,这次成功地完成了该游戏的完整DEMO,使用了游戏开发中常用的Checklist的开发方式,设计了游戏系统架构,功能点列表,程序模块架构,熟悉了业界顶尖的3D游戏引擎Unreal4的使用等等。并且在不擅长的领域如UI、人物动画、贴图、模型等方面都完成了目标,大幅度提高了自己的综合能力。

希望我在以后类似的项目工作能够精益求精,止于至善

我要回帖

更多关于 电脑自己输入0停不下来 的文章

 

随机推荐