异星工厂吧 关注:60,309贴子:382,785

【电路探究】电路不明白的?那就研究研究呗!

只看楼主收藏回复

一、前言
在吧内看到过很多篇启发思路的电路教程,阳春白雪,下里巴人。有些太基础,对于老鸟有些乏味;有些太高端曲高和寡,让菜鸟不知所云。本人对电路也是似懂非懂,不写吧心里痒痒,写吧又怕贻笑大方。纠结了一阵,看吧内有点冷清,还是先聊聊吧。大家喜欢的话我就多写点,不喜欢的话就少写点(笑,只能如此了)。本文部分内容可能会借鉴御道风云、马老师等人的贴文,为行文流畅(为了偷懒)下文中就不一一列明了,盼海涵。因本人时间有限,更新从不定期,回复从未及时,望见谅。


IP属地:四川1楼2018-07-20 00:05回复
    二、约定
    为避免混淆信号0~9和数字0~9情况,信号全部加中括号,例如:[0]~[9]。
    游戏里时间最小单位是tick(如不特别注明就简写为t),未测试过tick时长,就直接按照1s=60t的假设进行吧。
    电路设计原则应该是宜简不宜繁,红绿线的话尽量做到红线控制流,绿线信息流。
    [X]、[Y]、[Z]一般作为控制信号,不在其他的地方乱用(下方例子里有大量[Z],请注意)。


    IP属地:四川2楼2018-07-20 00:06
    回复
      二、探究
      1、关于存储器

      这货就是游戏里最常用的存储信号设备,有18个格子,可以存储18种信号(这是废话),就像电脑里的硬盘,可以用来存储固定数据。


      IP属地:四川3楼2018-07-20 00:07
      回复
        但是,有时候是变化的信号数据,暂时存储怎么办?其实就是将瞬时信号转换成持续信号,如下图:

        不妨将左侧称为上游,将右侧称为下游。上游的瞬时信号被这个自加0的算数运算器不断运算,结果起到了“暂存”信号的目的。(当然上面预算参数改为*1也是一样的效果)
        再来一张图:

        几乎与上一张起到一个作用,但是现在可以详细说一下区别了。第一张图上游和下游其实是一个线路,信号传输延迟0tick(以后简写tick为t),上游信号河下游信号可以相互污染。第二章图上游和下游是两个线路,信号传输延迟1t,上游信号河下游信号相互隔离。
        不过这个暂存储器只能不断叠加信号,当想存储新信号时得要先清零,不过这个叠加特性也是不错的(后面会讲到)。


        IP属地:四川4楼2018-07-20 00:09
        回复
          但是想要实现新信号来自动清零并存储新的信号就要用到下面这个东西了:

          下方两个是“延时器”,就是任意信号+0直接输出,起到的作用就是将输入信号延迟1t输出。
          简述,上游有信号(不含[Z])时,1t时下游原有信号不变并增加[Z]1信号,2t时下游原有信号被上游信号替代并保持,同时[Z]归零(当然如果上游信号持续时[Z]1保持,一直到上游信号消失1t后归零)。
          信号传输延迟2t,并伴有[Z]1污染,污染时间为上游信号开始后1t至上游信号结束后1t。
          此处有变种,如图:

          其他都不变只有右上方自连线由红线变为绿线,部分功能发生改变。上游有信号(不含[Z])时,1t时下游信号不变,2t时下游信号归零,3t时下游信号变更为上游信号并保持。若上游信号为持续信号,在2t后一直保持无信号输出状态,直至上游信号消失后2t变更为最后的上游信号。
          信号延迟至少3t,无信号污染,但会出现信号断档期,断档时间为上游信号开始后2t至上游信号结束后2t。
          好了,这个就先讲到这里。顺便说一下,这个可以类比为电脑的内存。


          IP属地:四川5楼2018-07-20 00:10
          收起回复
            1、关于计数器
            其实吧,我先说的就是一个会自加的东西,比如能生成1、2、3、……序列的东西。直接上图:

            左边是个常量存储器,里面就放一个信号,比如[Z]1,这货就会自娱自乐到天荒地老。或者这样:

            左边只要给我个支点(给个信号),我就能翘起地球……
            可这有啥用?可以……嗯……可以计数呀!!!(果然是完全正确却没任何卵用的解释),其实我想要的节拍,对!就是节奏。比如每过1秒执行一次操作,就需要这个计数(时)器。


            IP属地:四川6楼2018-07-20 00:12
            回复
              好了,我们开始啦,比如这样:(常量存储器里只有[Z]1):

              凭我们多年经验都知道这个东西会自加,假如60t是1s的话,着玩儿意一秒钟就循环一次。等等,有个疑问,条件里面是[Z]<60就输出[Z]输入数值,到底下游会不会出现[Z]60这个信号呀,还是到[Z]59就返回[Z]0了呀?
              不要着急,跟着我的节拍走……
              这玩意儿上游和下游是一个线路(废话都用红线连在一起),第1个值是常量存储器的[Z]1,下游瞬间也的到该值,所以可以说是延迟为0t。下游第2个值是自加后的[Z]2,以此类推……第59个值是[Z]59,第60个值是[Z]60,(不要忘了常量存储器里的[Z]1),之后输出值为[Z]0+[Z]1=[Z]1,即第60个值是[Z]1。看到没有,压根就没有[Z]0的事儿,这个序列为1~60。
              总结下就是该计数器是从1开始一直到判断参数里小于的那个数(强调一下,包含此数,理解不了的可以自己算算,或者在游戏里做实验),延迟为0t。
              此处还有变种(*,怎么老有变种,这是X战警的节奏呀,不对也许是生化危机):

              老规矩,红线变绿线。就不详细说过程了,直接聊结果。下游是0~59的循环(看清楚没60的事儿),延迟为1t(上下游为两个线路)。
              看出点意思了,之后继续。继续啥呀,很多情况下有两层循环,我们可以嵌套!
              可能会有同学提问:“为啥不用除法及取模运算干这个呀?”
              “这个……,嗯,这个……。你是不是想拆台,不好好听讲还来捣乱,来人,把这个捣乱纪律的同学拖出去!”


              IP属地:四川7楼2018-07-20 00:14
              收起回复
                好了,我们继续,直接上图:

                大概可以看出我的意思了,左边两个就是一个每60t循环一次(1s)的计数器,第三个就是没次循环最后1t触发一次懂触发器,最右边的意思是每秒持续输出1个数的计数器。想达到的效果下游第1秒信号[Z]1,第2秒信号[Z]2,……,第10秒信号[Z]10。
                我:“看图,有问题可以提问。”
                同学A:“我有个问题想问!”
                我:“说。”
                同学A:“为什么信号老举[Z]?”
                我:“这也有捣乱的!拖出去……”
                同学A:“刀下留人,我想问的是上图不能达到想要的效果!”
                我:“对,要的就是这句话!!!”
                未完待续》》》(码字真累)


                IP属地:四川8楼2018-07-20 00:15
                收起回复
                  广告位招租


                  IP属地:福建9楼2018-07-20 00:18
                  回复
                    吃瓜,写的很棒


                    IP属地:江苏来自Android客户端10楼2018-07-20 02:03
                    回复
                      大半夜不睡觉,打工厂


                      IP属地:湖北来自iPhone客户端11楼2018-07-20 02:11
                      回复
                        占个位置


                        IP属地:福建来自Android客户端12楼2018-07-20 08:10
                        回复
                          正好不会,学习学习


                          IP属地:中国香港来自iPhone客户端13楼2018-07-20 09:29
                          回复
                            哇很生动,学习学习


                            IP属地:浙江来自Android客户端14楼2018-07-20 10:12
                            回复
                              书接上文
                              第1秒由于左边一直未输出,所以下游也无从叠加,所以说第1秒是[Z]1。不过这不是重点,我可以推后1秒再看呀。重点是就算这样,第10秒[Z]10也只维持了1t,之后瞬间变为[Z]0。也就是说[Z]1~[Z]9,每个都会维持60t,[Z]10只会维持1t,[Z]0会维持59t!
                              这好像和上文里的内容不大一样呀,不过细想一下你就会明白。游戏最小时间为1t,这种计数器是在一个线路中,达到判定条件边界前还会正常输出,但是和上游输出为1的一相加就会达到判定边界,但是下游已经获取到了这个边界数值。判断运算器还需要花一个游戏最小时间来归零,所以才会出现边界数值。但是在宏观情况下(多t情况下),在这么理解就会出现问题,因为判断运算器只需要花1t来纠正边界数据,所以边界数据只会昙花一现。
                              要是想达到效果可以采取变种方案,如图:

                              老规矩,红线转绿线。但这样输出效果会变为[Z]0~[Z]9,所以我在下游无耻的加了个常量箱,里面只存了一个信号——[Z]1。
                              哈哈,就是这么调皮。
                              我这一贴主要就是想告诉大家在宏观里面看到的规律和在围观里看到的规律可能是不一样的,微观甚至可以影响到宏观!这就是脍炙人口的定理——薛定谔的狗!
                              同学A:“不是薛定谔的猫吗?”
                              我:“还是得拖出去……”
                              同学A:“……”


                              IP属地:四川15楼2018-07-20 21:00
                              回复