人力资源机器吧 关注:838贴子:1,687
  • 10回复贴,共1

《人力资源机器》心得

只看楼主收藏回复

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


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


    IP属地:贵州2楼2016-05-02 16:28
    回复
      程序结果的审核
      一般最常见的错误是程序中意外的空手操作或类型不匹配,比如空手outbox、空手加减、空格子读取、字母加减数字等。其次,是错误输出值不符合要求,这里需要展开。
      1.你往往会发现只要输出一个错误结果,程序就会报错“程序期待输出某值,而你输出某值”,所以我们觉得,这个数值一定是预先算过的,就等着看你给错了哪个,这种猜想多数情况下是成立的。
      2.但还有稍不常见的错误,当你执行完毕按需输出后,程序报错“虽然你正确输出,但我能给出一个反例”,这种情况是你不完全理解题干,程序里出现某些特例不能兼顾的地方,或者投机取巧,仅仅为满足当前输入序列去产生特定的输出序列。我估计,系统在测试完当前给出的序列后,在后台对备用的所有序列都做了测试,行不通的就报错并在下次抛出这个序列。然而,系统有一个总步数评分系统,游戏作者主观上当然是希望它的备用序列在同一程序下跑分要一样,生成序列时可能用到一些理论或专业工具进行评估,但这或许还会遗留一些差异,或者说BUG,或许可以利用这些差异进行优化。
      3.还有更不常见的错误,如 loop{ ... ; outbox; .... ; inbox; ... }。“你输出了所有期待的值,但输出结果过多”(如1,2,3,4, 1,3,5,7, 1)。前面提到程序结束是以inbox(null)为标志的,所以在inbox前慎用outbox。


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


        IP属地:贵州4楼2016-05-02 16:50
        回复


          IP属地:贵州5楼2016-05-02 17:26
          回复
            开发地砖
            不知道这个游戏干嘛地上一堆地砖(我开始以为是箱子),除了极个别关卡差点不够用外,我觉得那些地砖根本就是配合便笺用来画画的嘛。地砖是用作储存数据的介质,开发空地砖是有成本的(读取数据+写入寄存器),但不开发的地砖无法运算。优化的方向是:
            1.少开发空地砖;
            2.见缝插砖,因为没办法直接输入任意数值,所以在程序中某些特定中间值产生时,要抓住机会“顺道”写入到目标地砖;
            3.如做不到上述2点,应尽量一次性开发多个地砖,读一次写多个;
            4.合理利用初始值,有初始值使用中无需复位,可以大胆调用。
            5.同上,0值是可以自己制造(copyfrom+sub,或者bump),不用刻意保留初始0地砖,但初始大数字地砖务必保留。


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


              IP属地:贵州7楼2016-05-02 18:08
              回复
                楼主这总结让我这学计算机专业的都自愧不如


                IP属地:广东8楼2016-05-07 11:32
                回复
                  楼主我推荐个游戏给你,也可以说是和这个游戏差不多,不过个人感觉更难
                  http://store.steampowered.com/app/370360


                  IP属地:广东9楼2016-05-07 11:49
                  收起回复
                    厉害的,留个爪


                    IP属地:浙江10楼2017-05-18 17:17
                    回复