欢迎光临散文网 会员登陆 & 注册

vizzy编程与MFD的一次合辑

2023-06-10 21:51 作者:lzxi2016  | 我要投稿

声明∶本文转载等事宜遵循作者之前所写的总表 PS∶最近研究后发现vizzy很多积木并不好用,也许是本人的知识水平不够,也许是本人自己翻译的时候理解错误,加上缺少官方资料,很多运行结果不大满意,又本人学业繁重,所以后续更文会越来越慢甚至停止。 What's more∶vizzy和mfd有相近之处(其实就是同一个),并且需要注意老版本和新版本的差异

本期教学内容∶循环体、列表与自定义函数的使用,各个积木块放到专题里再讲

首先看本期的实例∶radar系列1.0与2.0(半成品) 【MFD雷达小预告-哔哩哔哩】 https://b23.tv/ZBS0bYh

【radar2.0但不完全2.0-哔哩哔哩】 https://b23.tv/e95RscK

预期效果∶导弹自动发射,并且雷达上显示导弹的位置,此外还可以手动或者自动标记敌方目标。 那么该如何实现呢?

该作品将被分为以下几个部分∶ 雷达∶

响应发射程序∶

触摸发射屏幕∶

(手机截屏不清晰,需要源码可以私聊) 首先请看雷达的实现∶红框为绘图算法,蓝框为转化算法

理论上有这部分,雷达就已经完成,其它部分为待测试或者细节处理算法。

绘图算法

∶根据研究,每一次绘图会默认绘制在顶部,类似于"排线"和"图层叠加"。先绘制一个白圈,再用小一些的黑圈遮盖一部分,需要注意的是处理好循环的步长,否则会重合。 颜色不一定为黑白相间,这里用了某个绘图作品的思想∶橡皮擦就是把线条涂背景的颜色的画笔(黑背景,橡皮擦就出黑色的涂料)。 实现大圈到小圈比较容易,理论上可以用for循环嵌套,穷举算法实现,但是经过测试此作品中双循环实现功能失败。 实现由小到大需要注意的是后绘制的需要用behind算法置底。 j变量是不必新建的,是为了区分大圈与小圈。此外,需要注意好顺序结构, 如for i in (0,100) for j in (0,100) print(i, j) (仅作为此游戏语言的参考,代码不一定正确) 输出的并不是(0,0),(1,1)……(100,100) 而是(0,0),(0,1)……(0,100)…… 双循环可能要结合break代码。

黄圈内的代码是内外圈大小,步长计算变换的关键,如果换算不对可能导致大小圈重叠,你看到的就只有一白一黑圈了。

换算坐标

∶蓝色框部分 运用了一点数学和物理知识,你可以画个图,将第三系统中A与B的坐标转化为以A为原点,B的坐标∶(Xb,Yb)-(Xa,Ya),类似于向量。

但是又有"友好距离"积木,可以直接显示距离。三维坐标换算二维坐标有些麻烦,所以这里直接用已有的坐标相减,不考虑多出来的坐标轴,此外还发现了某些可能具有坐标功能的代码。个人认为应该有更好的算法。 有同学可能会好奇

紫色部分代码有什么用∶函数

研究后发现,该语言函数有两种类型,一种为运算类,一种为程序类。

此种为运算类函数

红框为过程类函数,可以传入值,但是不能输出值,可能需要自定义变量输出

函数的优点在积木式的语言中不太能体现优势。 运算类函数相当于定义一个特值,比如"π" 其重要的作用主要在于合作项目∶你,负责数学计算,可以先做个A项目,然后保存。同学负责算法,可以将A项目另存为B项目,直接往里面添加代码。 接着是触摸屏程序

按钮的实现∶蓝框

运用标签被点击/鼠标按下/鼠标抬起侦测,发出广播,实现按钮效果。移动的设备选用鼠标按下效果更佳,因为其它种类侦测容易导致屏幕关闭

最重要的部分∶广播!

运用广播broadcast,你可以实现程序与程序,作品与作品之间的通讯(broadcast to nearby craft) 这里的屏幕就是指令的发出者(发出广播)。

实现管理∶

橙色部分与紫色部分

橙色部分用于矫正已有的导弹数量,此数量由用户输入。

紫色部分实现点击后呼叫其它火箭,但是操作其它火箭需要火箭自身,所以只能发出唤醒的广播(解答为什么不能一个程序控制两个芯片)

用此处的代码不知为何可以刚好实现导弹正在运行中的数量不为"-1"。

原计划用列表来管理已知的导弹,但是研究发现同一个作品中不同芯片的作品号也是一样的,所以可能需要新建n个作品或者用于复制粘贴源文件手段实现n个导弹的单独管理,否则可能需要更改导弹id码为1,2,3……与主芯片相连都为"craft-id",分离后为"craft-1id"。

此外∶未知原因导致广播发出列表的内容只能为"n items in …list",个人认为是变量无法全局到作品所致,但是用标签将列表的项目进行字符化也无法实现(把列表变成文字),所以干脆用最简单的变量直接输出数字,缺点是失去了导弹命名的个性化。

导弹模块∶

命令的接受者(广播的接受)

收到广播的信号且符合自己的编号就点火 测试表明至少要"active stage "三次 需要注意的是,导弹的引擎需要与导弹的芯片捆绑上。 此外本人比较懒,懒得校验了,如有错误请指出。

vizzy编程与MFD的一次合辑的评论 (共 条)

分享到微博请遵守国家法律