游民星空 - 查攻略必备

下载游民App,免费领取游戏大作

  终于通关了,尽管有几关连1星都没拿下,说下这个游戏的心得吧,我不是电脑专业的,汇编以前基本没碰过,电脑专业的同学就不要笑话了。

游民星空

程序结束判定

  不知道大家留意没,这个游戏的编程是没有终止命令的,而绝大多数任务都是靠循环的,那到底怎么样才算程序的结束呢?通过头机关,不难发现,代码走完了,程序就结束了,这个符合直觉对吧。但那些无法跳到底的程序呢,我觉得是靠触发inbox来实现的,当使用inbox时,如果输入队列为空,则程序跳出。这里就产生了一个问题,如果inbox离循环入口太远,那输出最终结果后,又得多运行几个动作才能到达inbox(null),增加总步数,如无必要,此处可优化。

程序结果的审核

  一般最常见的错误是程序中意外的空手操作或类型不匹配,比如空手outbox、空手加减、空格子读取、字母加减数字等。其次,是错误输出值不符合要求,这里需要展开。

  1.你往往会发现只要输出一个错误结果,程序就会报错“程序期待输出某值,而你输出某值”,所以我们觉得,这个数值一定是预先算过的,就等着看你给错了哪个,这种猜想多数情况下是成立的。

  2.但还有稍不常见的错误,当你执行完毕按需输出后,程序报错“虽然你正确输出,但我能给出一个反例”,这种情况是你不完全理解题干,程序里出现某些特例不能兼顾的地方,或者投机取巧,仅仅为满足当前输入序列去产生特定的输出序列。我估计,系统在测试完当前给出的序列后,在后台对备用的所有序列都做了测试,行不通的就报错并在下次抛出这个序列。然而,系统有一个总步数评分系统,游戏作者主观上当然是希望它的备用序列在同一程序下跑分要一样,生成序列时可能用到一些理论或专业工具进行评估,但这或许还会遗留一些差异,或者说BUG,或许可以利用这些差异进行优化。

  3.还有更不常见的错误,如 loop{ ... ; outbox; .... ; inbox; ... }。“你输出了所有期待的值,但输出结果过多”(如1,2,3,4, 1,3,5,7, 1)。前面提到程序结束是以inbox(null)为标志的,所以在inbox前慎用outbox。

跳转出固有思维

  jump,或者我更喜欢称为goto,是程序实现条件判断、循环、子程序等的关键,高级语言中的goto、if、for、while、case、function等统统通过jump和它两个不成器的条件跳转兄弟来完成。汇编语言之所以灵活高效,跟这些“无条件”跳转指令不能说没有关系,虽然以高级语言的角度。用goto乱跳意味着以后你的代码将难以调试(write-only、通心粉代码),所以很多高级语言摒弃了类似的命令。高级语言是面向对象的,咳咳,就算面向过程至少也该可以定义几个函数不是吗?即便没有函数也至少有循环语句不是吗?但这是汇编,这个游戏里追求的是极限体积的小任务,还在用高级语言的思维你就玩不转!

游民星空

开发地砖

  不知道这个游戏干嘛地上一堆地砖(我开始以为是箱子),除了极个别关卡差点不够用外,我觉得那些地砖根本就是配合便笺用来画画的嘛。地砖是用作储存数据的介质,开发空地砖是有成本的(读取数据+写入寄存器),但不开发的地砖无法运算。优化的方向是:

  1.少开发空地砖;

  2.见缝插砖,因为没办法直接输入任意数值,所以在程序中某些特定中间值产生时,要抓住机会“顺道”写入到目标地砖;

  3.如做不到上述2点,应尽量一次性开发多个地砖,读一次写多个;

  4.合理利用初始值,有初始值使用中无需复位,可以大胆调用。

  5.同上,0值是可以自己制造(copyfrom+sub,或者bump),不用刻意保留初始0地砖,但初始大数字地砖务必保留。

关于备注

  大量的自由跳转语句、无法自主输入特定数字、指令单调、字体太大屏幕放不下,这些原因都会导致寻码、跟踪困难。高级关卡有两种备注方法:一是把便笺拖到代码窗,二是单击地砖编辑,地砖上的内容会反映在代码窗内。写备注的技巧是地砖代码尽量写得高瘦些,不然有可能连在一起。备注代码不要吝啬,不然回头找死你。

相关内容请关注:人力资源机器专区

作者:lieroping     责任编辑:追风男神
SSI ļʱ

相关推荐

APP精彩推荐打开游民APP查看更多

在线玩推荐更多