标签:
前几天某QQ群有人推荐这个游戏,百度了下找到了贴吧下载,但是攻略好像没找到,B站到是有个入门视频介绍还满有用的。
入门的话强烈推荐先看完了解个大概
http://www.bilibili.com/video/av3312630/
因为我也是新手没玩几天,所以程序优化什么的都没有,只能算是勉强过关,有写的中二的算法直接无视就好。
关卡按X行Y列为序
首先是1_1
毫无疑问这关应该没人过不了,真真正正的Hello World,左边给了IN.X到OUT.X,右边照葫芦画瓢就行
1_2
这也没啥好说的,因为游戏指令只有加,减,移位和跳转,所以乘法无非就是A+A,
把数据读入寄存器,然后加自身,结果输出就完了
1_3
A-P的值输出到P,P-A的值输出到N
这关主要是告诉你,一个数据可以发送到多个CPU端口。
比如IN.A先把数据
1.读入寄存器,
2.发送到右边
3.拿到右边值,用自身ACC减去拿到的值
4.把ACC结果发送到下边
右边同理,要注意的是指令的执行顺序和等待,
点击STEP单步运行可以看到A在运行到SUB RIGHT那行时在等待右边,直到右边运行到最后一行的
MOV ACC LEFT,左边才继续运行,
搞清等待非常重要,这个我刚入门时折腾了好久才搞清,那个自带的手册上好像并没有提到等待的内容,虽然我也没怎么认真看就是了......
总之等待,数据同步这个概念很重要,后面关卡会很依赖这个概念,
有时候程序明明解决思路的逻辑都想出来了,但是执行不正确,多半就是等待和执行顺序的问题
另外要注意输入,输出数量要相等,比如目前这个最简单的
A是2入(上入,右入),2出(右出,下出)
B也是2入(上入,左入),2出(下出,左出)
A输出到B数据,B一定要接收,不然程序会阻塞锁死。
同理,数据发送到没有用的CPU端口,没有处理也会锁死,
所以一定要有数据有出OUT,就必需有入IN,垃圾数据也要有接收处理的概念。
当然这是后话,就目前这关直接用直觉写就能过,总之先有这个概念,后面会用到。
1_4
题目要求,G,E,L三个输出分别为数据>,=和<三种状态的真假值,
如果数据>0,那么G就为1,其他两个为0,
数据=0,那么E为1,其他两个为0
数据<0,L为1,其他两个为0
这里比较坑的是第一次你是否能读懂题,反正第一次我是没读懂这玩意,根本不是人类语言......
1_5
3个IN,1个OUT
跟据S值判断
S=-1输出A
S=1输出B
S=0输出A+B
MOV UP ACC //读值到ACC JLZ RA //小于0跳到RA标签处 JGZ RB //大于0跳到RB MOV LEFT ACC //否则计算A+B并输出 ADD RIGHT MOV ACC DOWN JMP END RA:MOV LEFT DOWN MOV RIGHT ACC JMP END RB:MOV RIGHT DOWN MOV LEFT ACC END:NOP
因为这个代码写的比较早,后来发现,可以把第一行加个标签,
这样就不用跳到END最后一行的NOP,而是直接重头运行,可以节省一行,
不过反正目前是能过关就行,暂时不管他
未完待续......
标签:
原文地址:http://www.cnblogs.com/kileyi/p/5095750.html