美文网首页
SHENZHEN I/O 深圳 I/O 攻略:思路与代码(不定期

SHENZHEN I/O 深圳 I/O 攻略:思路与代码(不定期

作者: MelonSoda | 来源:发表于2020-02-03 10:46 被阅读0次
    SHENZHEN I/O

    2019年的Steam冬季特卖,这款已经发行多年的老游戏引起了我的兴趣。本人金融背景,银行工作,不知怎的被这种模拟写代码的游戏迷住了(大概因为这不是工作内容吧233)。从第一关开始我就注定要沉迷其中,遂决定一边通关一边记录下攻略历程。若有幸能被人检索到我的攻略,还请不吝赐教。
    以下均以游戏内的邮件命名任务。

    (模拟)安全摄像头

    任务说明
    输入输出

    思路
    作为教学关,难易度为0。基本是让玩家理解这个游戏的概念、结构与流程。
    分别用两块芯片控制两个LED灯,如图。
    代码
    如图1。
    后续剧情中,得知可以使用gen命令,可以像图2中优化一下。

    1 2

    工厂模型替换件

    任务说明
    输入输出
    思路
    本关旨在让玩家理解运算模块。游戏中必须在acc中进行计算,这点让我觉得很头疼。将数值存入acc中,然后用乘法命令。

    代码
    如图。这个可以优化吗?

    image.png

    脉冲发生器

    任务说明
    输入输出
    思路
    当输入信号为100时产生脉冲,输入信号为0时停止脉冲并持续输出0。
    这里分两块思考:
    1. 判断开始脉冲和结束脉冲。这里用一种判断指令很容易实现,tgt,tlt,teq都可以。
    2. 产生脉冲。使用not指令,效果为让acc从0变成100或从100变为0,每单位时间执行一次就可以在0和100之间反复变换。

    为了节省行数,无论何时都用mov acc p1来输出,那么需要在脉冲结束时强制让acc值变为0。

    代码
    如图1。同理,知道gen指令以后可以简化为图2。

    1 2

    发光标志

    任务说明
    输入输出
    思路
    很麻烦的一关,很多简单IO。
    同样分为两块设计:
    1. 点击鼠标。一块芯片连两个输出口,运用not指令,产生脉冲即可。
    2. 喝。一个有三种帧的动画,当前进度下,起码需要两个芯片才能完成三个输出。观察信号发现,当喝0为100时,其余都为0;当喝0为0时,其余产生一定规律的输出。
      这里我用一块芯片(芯片1)输出喝0所需的信号,同时给控制喝1和喝2的芯片2也发送一份,芯片2对发送来的数据判断从而决定输出的数值。

    代码
    图1为一种解法

    1

    知道gen指令后,可以奢侈的用一块芯片控制一个输出,共计5块。

    2

    当学会0-1大法以后可以这么搞。。。

    3

    海量男爵!!

    任务说明
    输入输出
    思路
    得分+1,扣分-2,但是分数不能为负数。都在acc中进行运算,发送之前检查下acc是否小于0,如果小于0就归零。

    代码
    参考图1

    1

    之后也可以这样搞。(但没有必要


    2

    垃圾音频装置

    任务说明
    输入输出
    思路
    最优化为100时即启动优化算法,手册里的算法公式可以展开,就变成了。

    代码

    1

    红外线探测器

    任务说明
    输入输出

    思路
    用一块MC6000,接受设定的时间,当作报警器的开关。另一块MC4000用来判断传感器的信号是否大于等于20,决定是否启动闹钟。

    代码
    解法1

    1

    解法2,MC6000中的思路有所改变


    2

    虚拟现实设备

    任务说明
    输入输出
    思路
    观察输入发现除了01信号外,都是-999的数据。
    一样是一个判断是否产生脉冲的逻辑:对-999的Xbus数值不改变当前行为,仅当01出现时改变行为。
    代码
    套路啊
    1

    稍微优化了一下?Xbus的特性貌似是必须两边一个读一个写,数值才会被消耗掉,不然就会阻塞。所以可以利用下gen p1 1 1,不用担心多睡一回合,因为Xbus传入的0会等到你判断的时候再读进来(?)

    2

    帮个小忙?

    任务说明
    输入输出

    思路
    竟然可以在游戏里设计游戏手柄的电路!
    同样是一个触发机制,读到-1的时候就发送数据。x和y的数值好办,ab的数值要进行判断。我采取的方法是对2b+a的结果取百位数,这样四种情况的结果顺次刚好算出来是0、1、2、3(我这啥脑回路)。
    XBus的特性很好玩,可以传一组数。

    代码
    最初的解法

    1

    用DX300做了个简化(这折磨人的排线- -|||)


    2

    IT人生——触杀,你完蛋了!

    任务说明 输入输出

    思路
    本关的关键点应该在于判断玩家是否活着。
    其他要点:

    1. 死亡时扣扳机不会触发射击
    2. 死亡时仍然可以填单
    3. 子弹数受到填弹数限制

    这里用MC4000控制玩家的存活状态,同时将生存状态发送给输出以及MC6000, MC6000来对射击功能进行控制和管理。到这我才知道一个输出口可以把数据传给多个其他接口!

    代码

    1

    超酷老爸!!!!

    任务说明 输入输出

    思路
    RGB值好办。关键问题是如何在脉冲的中途终止,因为脉冲时间应该是用 slp n的方式完成的(n为读取的脉冲时长),而在sleep状态,芯片无法做出其他任何操作的样子。所以这关暂时没有找到解法o(TヘTo)
    代码

    设备 2A27

    任务说明 输入输出

    思路
    这个其实是一个转化问题,把(x, y)的值对转化为0、30、50、80的数字输出。

    几何规范
    分两种情况,一种是X即能决定输出值的情况,如X<20则一定输出30;另一种是X,Y共同决定输出值,比如的情况

    代码

    1

    三国铜币

    任务说明 输入输出

    思路
    很简单的一关

    1. 判断钱是否够了,够了则执行找零流程
    2. 找零从最大面值的可找硬币开始,直到全部找完,然后重新接受新的投币
    3. 如果付的钱=价格,不找零

    代码

    1

    三明治合成器

    任务说明 输入输出

    思路
    看起来超级美味的一关,加了芥末的三明治!
    菜单一共三种,通过观察输入输出发现,固定流程是前后两片面包、肉片、升国旗,可变流程是奶酪和芥末。
    于是我用一块MC6000控制固定流程,另一块控制可变流程。两块芯片之间用slx大法进行交互,这样可以使执行顺序和步骤时间间隔自动调整。
    代码

    1

    相关文章

      网友评论

          本文标题:SHENZHEN I/O 深圳 I/O 攻略:思路与代码(不定期

          本文链接:https://www.haomeiwen.com/subject/mothxhtx.html