#智商与逻辑双重考验# 烧脑编程游戏: 深圳 IO 篇二:脑洞加宽的进阶提示
接上篇:
此篇紧接上篇.
如果你还没读过篇一, 请务必先点上面卡片读读篇一. 如果你还没读过篇一, 请务必先点上面卡片读读篇一. 如果你还没读过篇一, 请务必先点上面卡片读读篇一.
如果你读完了篇一还自(cheng)信(neng)想要继续, 或者好奇这游戏还能多烧脑, 那就继续往下看吧. 我会尽最大努力给你当导游的 这边走
第二关: 信号增幅器
信号增幅器是个生活中很常见的电子零件, 用于增强声光电信号, 比如功放机, WiFi信号放大号, 网络中继器/交换机等. 其实每关都是现实生活中取材的, 边玩边学知识. 比玩消消乐那些纯浪费时间的游戏有意义吧? 求消消乐党匆追打....
第二关 邮件 (这关的邮件是这个游戏里最短最没劲的.... )
张工说我们工厂里有些老设备需要增强信号, 原有的增强设备被压坏了, 你叫设计一下.
(就这些...)
第二关 提示
任务很简单, 把control-in输入的信号翻倍后输出给control-out.
第二关 分析
这关有输入输出共2个连续信号, 可以用1个MC4000来连接, 输入信号进入p0, 经代码处理后从p1输出.
根据测试数据不难看出, 输入信号在0~50之间, 翻倍后就是0~100. 那么我们只需要把p0输入的信号值放acc里乘2后输出给p1就够了.
mov p0 acc # 输入信号存到acc
mul 2 # acc值乘2
mov acc p1 # acc值输出到p1
slp 1 # 睡1秒 - 等待下1秒信号进来
下图是个WiFi信号放大器, 基本原理和第二关一样.
第三关: 纸牌接龙麻将版
空挡接龙是Windows系统的标志之一, 没想到此游戏的作者在这个游戏里虚拟的概念OS里也做了个空挡接龙, 刚开始主菜单里看不到, 等你完成了前两关后, 它会突然出现并成为你的第三关 .
很多玩家都调侃说一度把这个接龙小游戏当成此游戏的本体. 然后作者就把这个内嵌小游戏独立发布出来了, 好像还出了个dos版
第三关 邮件
张工: 我女儿在学编程, 她做了个纸牌游戏. 你们能不能试玩一下给她点反馈意见? 她想成为游戏开发人员.
卡尔: 哇喔! 做得太漂亮了, 比我预计的难太多了..... 你女儿设计得太挑战耐心了, 最好能加个"后退"功能.
张工: 她觉得不需要, 只要玩熟了就很简单了.
卡尔: 她真是得你的真传啊.
第三关 提示
退到主菜单, 点开新出现的接龙游戏图标. 右下有个 INSTRUCTION 是规则说明.
把三组牌接1~9的顺序叠在右上角就赢了.牌桌中间的牌只能按从大到小的顺序叠在不同色的牌上左上3格可以放任意牌当中/发/白4张全见光时, 就可以叠在一起放左上角了.
第三关 分析
这完全就是把4花色扑克牌♠♥♣♦的空挡接龙换成了麻将牌嘛... 规则几乎一样.
下图是过关动画 (NG的好多盘 )
下图是过关后邮件里搞笑后续 不是汉化版里的, 原版游戏里就是有中文.
第四关: 脉冲生成器
本来不打算写这一关的, 因为找不出对应的现实生活中的产品. 不过这一关的目的是给玩家练习测试指令(逻辑判断)的, 这可是后面关卡必备的基本指令, 也是编程的基础之一.
设计要求很简单, button为100时(打开开关), 开始生成1上1下的脉冲信号, 持续到button变为0(关闭开关). 有点无聊的东西. 不过如果你把它想象成辐射2里的YK42B脉冲步枪, 抠下扳机就发射脉冲能量束~~ 是不是立马高大上了? 我们拖一个MC4000上板, p0接button, p1接pulse. 代码如下:
teq p0 100
+ mov 100 p1
+ slp 1
+ mov 0 p1
slp 1
只有当 "teq p0 100" 即 p0=100 成立时, 下面3行带+的代码才会执行. 否则只会执行最后一行"slp 1". 因为button只会输入0和100两种数据, 所以可以用 "tgt p0 0" 或 "tcp p0 0" 指令替换 "teq p0 100". 我们甚至可以逆向思维把条件反过来.
teq p0 0
- mov 100 p1
- slp 1
- mov 0 p1
slp 1
虽然这2段代码完成了同样的任务, 但它们有时候不尽相同的意义. 这个以后出现需要双重条件判断的时候你就会了解了.
第五关: 电竞广告牌
第四关开始卡尔就告诉你可以使用其它一些元件做设计了. 但是第四关只是个过渡关, 剧情和设计都不出彩, 我就不写了.
老周拉来一个大单, 给一个电竞团队制作一个动画广告牌. 广告牌有5个信号输出, 信号规律是固定的. 看起来蛮简单的, 不就是第一关仿真监控器加强版嘛~~~
初次尝试:
按第一关的做法, 拖5个MC4000分别连上5个输出端口, 虽然有点挤, 好在PCB板够放.
根据验证数据一一为5个MC4000编码:
#click-0
mov 100 p0
slp 1
mov 0 p0
slp 1
# click-1
mov 0 p1
slp 1
mov 100 p1
slp 1
# drink-0
mov 100 p0
slp 6
mov 0 p0
slp 4
# drink-1
mov 0 p0
slp 6
mov 100 p0
slp 1
mov 0 p0
slp 2
mov 100 p0
slp 1
# drink-2
mov 0 p0
slp 7
mov 100 p0
slp 2
mov 0 p0
slp 1
测试执行后你会发现, 虽然能过关, 但是成绩非常差, 连平均分都达不到, 感觉自己像智障 1个MC4000明明可以接2个连续信号输出, 一共只需要3个MC4000就行了, 用5个明确是浪费! 而且5个MC4000都有空余的代码行没写.
千万不要以"能过关就行"这样的心态来继续这个游戏, 每过一关都要锻炼自己的技术, 把你的脑子放进acc然后狂点add . 你在其它游戏里每过一关积累的可能是金币或装备或等级, 在这个游戏里你唯一能积累的就是你的脑力, 寻求最简最快最省的解决问题的能力.
再次尝试:
click-0, click-1这两个信号规律很简单,1上1下和1下1上共4种变化. 用1个MC4000能搞定的, drink-1本身就已经有6下1上2下1上四种变化了, 估计需要占掉1个MC4000. 剩下的drink-0, drink-2信号相似, 共用1个MC4000应该没问题. 代码如下
# p0 –> click-0, p1 -> click-1
mov 100 p0
mov 0 p1
slp 1
mov 0 p0
mov 100 p1
slp 1
# p0 -> drink-0, p1 -> drink-2
mov 100 p0
mov 0 p1
slp 6
mov 0 p0
slp 1
mov 100 p1
slp 2
mov 0 p1
slp 1
# p1 -> drink-1
mov 0 p1
slp 6
mov 100 p1
slp 1
mov 0 p1
slp 2
mov 100 p1
slp 1
测试验证通过! 总算成功的拿到平均分. 成绩图表里显示有只用2-3行代码就完成的! 他们和我们玩的同一款游戏吗?
感觉我这个灵魂走路(线)有点丑, 再来优化一下看看.这下齐整多了. 奇怪为什么线路都到元件下面去了? 按下TAB键, 就能看到全部的走线了.原来只要不碰到其它的引脚, 元件下面也能走线. 节省空间方便布局?
别说我玩个游戏太钻牛角尖, 提前习惯一下可以让你在后面的关卡少拔掉自己不少头发呢 .
类似本关电竞广告牌的产品真实生活中一般没有量产商品, 主要都是定制, 如下图. (OH我的乌嘛女神~ ) 如果你去过澳门或者Vegas, 应该见过不少这种动态的霓虹灯吧. 它们就是这个原理动起来的 . (GIF是不是也一样? 不是, GIF是幻灯片, 原理比这个不弱智得多.)
第七关: 音效加强引擎 (垃圾功放芯片)
第七关这个音效加强引擎(harmonic maximization engine 貌似很屌的东东)被卡尔称为垃圾(Rubbish). 功能和一些功放硬件或播放软件的均衡器插件差不多. 但不算是混音.
卡尔在邮件里说到: 我们有个设计音频组件的合同, 客户保证产品的包装盒上会印上"完美均衡的清脆的高音与震撼的低音". 他把客户的广告方案放在你桌上了, 让你去说明书找来看看... 卡尔还说不管这玩意有多垃圾, 我们还是得完成它, 工作就是工作.
被卡尔说得这么不堪? 我翻开说明书找到客户的"Incredible Sound at a Breakthrough Price."这页方案. 吹了一大堆, 中间提示我们要用到的公式: AUDIO_OUT = (AUDIO_IN - 50) x 4 + 50. 用初中的数字知识简化一下这个公式得到 AUDIO_OUT = AUDIO_IN x 4 -150. WTF?! 把输入信号乘4再减150就是他们说牛X音效加强引擎?!!! 某厂不也用胶水方案出过多核CPU嘛~~
这一关有2个连续信号输入和1个连续信号输出, 用一个MC4000不够, 我们需要组合一对MC4000来完成.
maximize值为0时, 直接把audio-in传给audio-out就行了, 只有当maximize为100时, 才需要通过"神奇的公式"处理信号再输出.
过程很简单, 先把audio-in存进acc, 如果maximize等于100(开关开启), 就把acc x 4 - 1500, 最后把acc的值传到另1个MC4000, 另1个MC4000收到信号马上传至audio-out. 1个MC4000作处理器, 1个MC4000作转接头. 当你的显卡只有hdmi输出而显示器只有vga输入时, 这第2个MC4000就相当于一个hdmi转vga的头子了. 又学知识了吧~
第十五关: 投币机
这一个非常有意思, 除了关卡本身, 作者给配套的故事就比较经典.
"隐藏指令":
首先是卡尔听说了MCxxxx元件的隐藏指令, 然后张工告诉他不是隐藏的, 中文原版说明书上有的, 你们用的英文版忘了翻译这一节了而已 (求卡尔此时心里的阴影面积 ). 作者太坏了......这种桥段也想得出.....
2个"隐藏指令"如下:
1. gen pn x y: 如 gen p0 2 1 效果等同于
mov 100 p0
slp 2
mov 0 p0
slp 1
2. @: 在指令行左边加上@符号代表此行代码只执行一次, 之后将被忽略. 较少使用.
试试把前面几关用的一些代码用gen代替, 也许能提高不少成绩哦.
邮件:
戴维: 你们去过三国游乐园(这不是翻译名)吗? 我刚去了深圳的一家, 他们重塑的古代中国社会风貌真是太棒了! 你甚至要用古铜钱来买东西, 就像你真的在古代一样. 我看他们工作人员用手数钱, 是不是有点傻? 我觉得他们可以用投币机来数钱, 那就快多了, 所以我跟他们谈了建投币机的笔生意.
卡尔: 嗯.....投币机不符合那里的历史风貌吧?
戴维: 我跟他们谈过外观问题了. 把投币机造成刻着龙的山形就可以了. 你只要把足够的币投进去, 比如一个馒头的价格. 它就会噹一声通知工作人员把馒头给你, 然后退你零钱.
提示:
我们要设计的这个投币机可以接受3种币值, 1铢5铢12铢. 这老美开发的游戏用到12铢这个独特的币算是有点考究的了, "秦钱半两重十二铢", 三国游乐园里用秦半两, 没毛病. 又学知识了吧.
PCB板上有个定价元件, 当投入的币值之和大于或等于定价时, 要马上敲响4秒钟并同时开始退零钱, 而零钱优先退5铢的, 不够5铢时再退1铢的.
3种币值就是3个连续输入信号, 用2个MC元件来联机处理太浪费了. 不知道你在第十二关有没有用过DX300这个元件 (什么? 没有攻略直接跳过那关了? ). 这里我用使用DX300来把3个连续信号转换成1个离散信号来输入. 先来看一下DX300用法:离散转连续, 离散信号数字只接受1和0, 大于1的都当成1, 小于1的都当成0. 离散值3位数从左至右对应p2 p1 p0
连续转离散, 连续信号值只接受0和100, 大于100的都当成100, 小于100的都当成0. p2 p1 p0分别对应 100 010 001, 同时输入时将和值输出到离散端.
DX300是个非常强大的元件, 会在游戏中起到重要的作用.
分析:
从测试数据可以看出, 不会同1秒内多次投币, 也不会多次退币.
我们用1个DX300同时接收3个投币输入, 将会出现4种输入值: 000/001/010/100, 分别对应未投/投1铢/投5铢/投12铢. 未投币时我们什么都不要管, 直接跳到下一秒执行; 投了币就把币值加到acc中;
当acc的值大于或等于定价器时, 输出"gen p1 4 0"用来敲4秒钟. 然后减去定价把余额退出来.
而每个退币的信号完全可以用 "gen pn 1 1" 生成, 所以我们用1个MC4000负责2个退币输出工作.
不知道你们会怎么设计, 我费掉些脑细胞把代码精简到只要1个MC6000和1个MC4000完成的. 如下图:
判断币值我用了1个tcp指令配合1个tgt, 先存5铢到dat, 大于010(即100, 不会有其它值)时存12铢, 小于010时先存1铢, 再判断如果不大于0(即等于0, 这里就是个双重判断了)时再存成0铢. 然后把dat加进acc. 这样用7行代码算好总币值了.
接着判断总币值是否大于或等于定价. 是的话就敲钟, 如果大于还得退零钱. 由于退钱已经计划交给退钱模块(另1个MC4000)处理, 所以这里只需要把零钱数告诉退钱模块就是了. 我又用了一次tcp指令! 钱不够直接跳到结束, 然后扣钱, 有余额就退钱, 然后敲钟.
退钱模块收到余额数值放进acc, 再循环判断是够5铢, 够就退面值5铢的, 不够了就退1铢的.
呵呵, 是不是觉得有点复杂了? 别给我说用C语言一下就搞定了. 我有50架航母也随便搞定7个insane难度的虫族电脑啊.
总结:
篇一目前有900+收藏 190+赞. 不知道能坚持看完这篇二的能有多少人. 如果有人完成一周目开启海上城市之章的一定要@我哦
后面的关卡越来越复杂了, 我感觉每一关都够写篇原创贴了. 就是怕没人关注没人看
Kim较瘦
校验提示文案
just4fun
校验提示文案
南北桃源
校验提示文案
太虚道人
校验提示文案
NeilWood
校验提示文案
[已注销]
校验提示文案
IPPdesu
校验提示文案
Kim较瘦
校验提示文案
御门院雪
校验提示文案
生活健康分享
校验提示文案
poppysong
校验提示文案
千千w
校验提示文案
pakacy
校验提示文案
值友7848362200
校验提示文案
值友3485004633
teq p0 100
+ mov p0 x1
slp 1
slx x0
+ jmp 01
slx x1
+ jmp 02
01:
add 1
02:
sub 2
tgt acc 0
- mov 0 acc
mov acc x3
slp 1
校验提示文案
值友3485004633
teq p0 100
+ mov p0 x1
slp 1
slx x0
+ jmp 01
slx x1
+ jmp 02
01:
add 1
02:
sub 2
tgt acc 0
- mov 0 acc
mov acc x3
slp 1
校验提示文案
值友7848362200
校验提示文案
pakacy
校验提示文案
千千w
校验提示文案
poppysong
校验提示文案
IPPdesu
校验提示文案
[已注销]
校验提示文案
NeilWood
校验提示文案
生活健康分享
校验提示文案
御门院雪
校验提示文案
太虚道人
校验提示文案
南北桃源
校验提示文案
just4fun
校验提示文案
Kim较瘦
校验提示文案
Kim较瘦
校验提示文案