mindustry吧 关注:12,840贴子:77,182

回复:逻辑处理器前瞻性教程

只看楼主收藏回复

有异星工厂的味道了


IP属地:浙江31楼2020-08-15 11:38
回复
    这可太好了\(^▽^)/!


    IP属地:河北来自Android客户端32楼2020-08-15 11:49
    回复


      IP属地:山东来自Android客户端33楼2020-08-15 20:15
      回复
        lz,这种应该怎么做啊


        IP属地:江苏来自Android客户端34楼2020-08-16 20:27
        收起回复
          最近群里一堆人在问radar怎么用,吧里也
          be 9292
          【radar】
          利用某单位的视野来搜索符合要求的生物【单位】。
          这是你接触的第一个动态获取单位的指令。在这之前,sensor和control都需要对单位进行操作,而你只有关联的方块可以用,但现在嘛

          5个参数+一个返回值。
          turret1是要借用视野的【方块】。看简介里有【范围】(不是能量范围或者别的什么特殊范围)的,范围显示效果像炮塔那样虚线的,应该就能用。
          target后面三项是筛选器,可以同时筛选3个属性。可选项分别为:
          any任意
          enemy敌人
          ally友军
          player玩家
          flying空中
          ground地面
          只有满足3个属性的会进入名单。最后名单要经过order排序获取最优目标。
          order是顺序,0倒序1正序。目前radar只按距离远近排序。
          result是返回值,返回一个储存了单位的变量。你可以直接用这个变量名去尝试做sensor、control之类的事情,如果不可用的话只会没效果而已。
          例:下图语句借用浪涌炮ripple1的视野探测附近的敌方·空中·玩家,倒序(距离最远者),输出到enemy1.并用sensor读取enemy1的xy坐标

          radar只能搜索生物和玩家,目前还不能获取方块有英语好的神族可以和anuke探讨一下

          目前radar只有按距离远近排序,但参数只是隐藏了而已,如图distance。希望新版本没事


          36楼2020-08-18 12:50
          收起回复
            be 9292
            【变量操作】
            部分内容需要数学和计算机相关知识

            【set】
            直接给名为result的变量赋值。如果变量不存在,就相当于创建。
            数字支持十进制,字符串请使用英文双引号,变量复制请填变量名
            【binary op】
            二元运算。将a和b经过某运算的值赋给result

            可用的算子有
            +,-,*,/,<,>,≤,≥小学生过关项
            ^乘方,= a ^ b
            max,min求最值
            dst距离,= √(a ^ 2 + b ^ 2)
            atan2反正切,= arctan(b / a)。接收的是平面直角坐标系的xy坐标,返回相应的角度°。
            %求余,= a (mod b)
            ==相同,返回逻辑真1假0
            not相异,返回逻辑真假
            <<左移一位,把a写成二进制后,左移一位并在末尾补0,再转为十进制输出
            >>右移一位,右移一位(删去末位),其余同上
            or或,and与,xor异或,自行了解"布尔逻辑运算"
            【unary op】
            一元运算,将b经过某运算的值赋给result

            可用的算子有
            -相反数
            not非,自行了解"布尔逻辑运算"
            abs绝对值
            log对数,对自然常数e
            log10对数,对10
            sin,cos,tan高中生过关项
            floor向下取整
            ceil向上取整
            sqrt开二次方,相当于b ^ (1/2)
            rand生成随机数,取值范围可能是[0,b)。了解java的神族可以看看能不能取到b


            37楼2020-08-18 14:03
            收起回复
              干死黄旭东,电弧能对空


              IP属地:江苏38楼2020-08-18 14:16
              收起回复
                be 9303
                数据存取存储器专场,信息板爬

                【write】
                将变量的值写入存储器。存储器是那个长得像信息板的方块
                三个参数。
                result,要写入的变量的名称。cell1,关联的存储器方块名称。at,是存储器内的地址名。
                提醒:写入变量、地址名这两处,只支持数字和变量(根据变量的值)。如果输入字符串则转换为1。从硬编码的层面,存储器只有32个double的空间,也就是只能存32个值,因此地址名取值为0~31。

                【read】
                从存储器读取。三个参数。
                result,读取后赋给的变量名。cell1,同前。at,同前。
                若读取失败,不会改变result的值。
                例:一条值为114514的数据从左处理器传递给右处理器并打印到信息板


                39楼2020-08-18 14:43
                收起回复

                  be 9336
                  【getlink】
                  根据连接顺序动态获取关联的【方块】。一个参数,一个返回值。
                  link井,要获取的关联位次,从0开始计数。
                  result,储存了【单位】的变量
                  众所周知,处理器在关联新的方块的时候,会将该方块记录到类似下图表格的内部数组中(图示仅供参考)

                  getlink就是根据序号来获取对应的方块,提高代码的灵活性。
                  常见的应用情境比如你设计了一个草控电弧炮的代码(连接一台浪涌作为视野,再搜索敌人并控制电弧攻击)
                  现在希望推广应用到其他炮塔组合,则可以使用getlink设计。以后只需复制粘贴代码,再按代码规定的顺序连接即可
                  例:通用型炮塔雷普玩家
                  使用getlink获取第一个方块(#0)作为雷达,radar获取玩家,计算signal确定是否开火,最后getlink和control组合控制第二三四五(#1234)个关联方块
                  -代码
                  getlink radar1 0
                  radar player any any distance radar1 0 target
                  sensor x target @x
                  sensor y target @y
                  bop mul x y signal
                  getlink t1 1
                  getlink t2 2
                  getlink t3 3
                  getlink t4 4
                  control shoot t1 x y signal 0
                  control shoot t2 x y signal 0
                  control shoot t3 x y signal 0
                  control shoot t4 x y signal 0
                  -效果(适配范例:火焰雷达+电弧,熔毁雷达+蓝瑟)



                  41楼2020-08-19 14:42
                  收起回复
                    be 9336
                    绘图语句万众瞩目的绘图!

                    【draw】
                    相当复杂的绘图语句,显示屏专属。谨记显示屏为80x80像素
                    点击第一个参数可以选择要进行的操作:

                    可选操作为:
                    clear,清空并设置背景色,使用RGB颜色空间,参数为红R绿G蓝B
                    color,设置画笔颜色,使用RGBA颜色空间,参数为红R绿G蓝B透明度A
                    stroke,设置画笔粗细(适用line,linerect,linepoly),参数为画笔粗细stroke(单位像素)
                    line,线段,参数为起点xy和终点xy坐标
                    rect,矩形(填充),参数为起点xy坐标+宽width↔高height↕
                    linerect,矩形(边框),参数同上
                    poly,多边形(填充),参数为中心xy坐标+边数side+半径radius+逆时针旋转rotation
                    linepoly,多边形(边框),参数同上
                    triangle,三角形(填充),参数为三个点的xy坐标

                    将就一下
                    【drawflush】
                    把处理器缓冲的图像绘制到显示屏上。一个参数。
                    display1为指定的显示屏。
                    这两个和print、printflush差不多,都是先缓冲,再用flush输出到方块。
                    感兴趣的可以百毒“双缓冲绘图”,是这个技巧。
                    提醒:默认画笔是白色,如果要用画笔画其他颜色的图形,就必须在作之前使用color。
                    提醒:处理器执行draw语句,是发送指令给显示器并让显示器执行。当多处理器同时操作一个显示器时,需要留心color和stroke设定
                    这个玩意让我想起了以前玩过的gdi+
                    语句讲完了,稍后弄几个例子吧


                    42楼2020-08-19 20:21
                    收起回复
                      @红巾起 申精


                      43楼2020-08-19 20:26
                      收起回复
                        例1(be 9336)
                        34楼提到的,anuke官方示范之仓库内容物控制传送带

                        从效果图看,anuke的设计要求大概是容器铜储量>=20时,启动传送带,否则要保持传送带关闭
                        由于前文没有讲绘图程序思路,所以后面遇到绘图我会着重一点


                        先关联方块。
                        【控制传送带】,写:

                        其中,二元运算输出的是“copper≥20”这一命题的真伪性,真1假0。这里能直接算信号值enable1,就不要用jump,技巧之一,划重点
                        -效果-

                        下一步是【绘图】,代码如下,加了注释
                        sensor copper container1 @Copper //探测铜储量,不多谈
                        draw color 86 86 102 255 0 0 //背景色
                        draw rect t 0 2 80 0 0 //指针t可以控制x坐标,在t所指示纵列先填满背景色86,86,102
                        draw color 225 200 20 255 0 0 //土黄色动点,在指针t所指示的纵列标出铜储量对应的点
                        draw rect t copper 2 2 0 0
                        draw color 255 20 20 255 0 0 //红色刻度线,恰在20铜的高度,位置和t无关,每t都画
                        draw rect 0 20 80 2 0 0
                        drawflush display1
                        bop add t 1 t //t是计时器,也是绘图位置的指针(模拟扫描那种感觉)。当t≥80,就跳回0
                        jump 11 greaterThanEq t 80
                        end
                        set t 0
                        -效果-

                        Done


                        44楼2020-08-19 21:45
                        收起回复
                          我的计算机二级就靠这个游戏了
                          对了,这对我们抵御根哥和死神有什么帮助吗


                          来自Android客户端45楼2020-09-03 06:17
                          收起回复
                            加精了,虽然没完全看懂


                            IP属地:江苏来自Android客户端46楼2020-09-06 10:47
                            回复
                              6.0版本更新后,也许真正的大佬,不是pvp大神,不是pve大神,更不是挑战狂人,而是对逻辑处理器了如指掌的人(参考mc)


                              IP属地:江苏47楼2020-09-06 11:39
                              收起回复