vizzy編程與MFD的一次合輯
聲明∶本文轉載等事宜遵循作者之前所寫的總表 PS∶最近研究后發(fā)現vizzy很多積木并不好用,也許是本人的知識水平不夠,也許是本人自己翻譯的時候理解錯誤,加上缺少官方資料,很多運行結果不大滿意,又本人學業(yè)繁重,所以后續(xù)更文會越來越慢甚至停止。 What's more∶vizzy和mfd有相近之處(其實就是同一個),并且需要注意老版本和新版本的差異
本期教學內容∶循環(huán)體、列表與自定義函數的使用,各個積木塊放到專題里再講
首先看本期的實例∶radar系列1.0與2.0(半成品) 【MFD雷達小預告-嗶哩嗶哩】 https://b23.tv/ZBS0bYh
【radar2.0但不完全2.0-嗶哩嗶哩】 https://b23.tv/e95RscK
預期效果∶導彈自動發(fā)射,并且雷達上顯示導彈的位置,此外還可以手動或者自動標記敵方目標。 那么該如何實現呢?
該作品將被分為以下幾個部分∶ 雷達∶
響應發(fā)射程序∶
觸摸發(fā)射屏幕∶
(手機截屏不清晰,需要源碼可以私聊) 首先請看雷達的實現∶紅框為繪圖算法,藍框為轉化算法
理論上有這部分,雷達就已經完成,其它部分為待測試或者細節(jié)處理算法。
繪圖算法
∶根據研究,每一次繪圖會默認繪制在頂部,類似于"排線"和"圖層疊加"。先繪制一個白圈,再用小一些的黑圈遮蓋一部分,需要注意的是處理好循環(huán)的步長,否則會重合。 顏色不一定為黑白相間,這里用了某個繪圖作品的思想∶橡皮擦就是把線條涂背景的顏色的畫筆(黑背景,橡皮擦就出黑色的涂料)。 實現大圈到小圈比較容易,理論上可以用for循環(huán)嵌套,窮舉算法實現,但是經過測試此作品中雙循環(huán)實現功能失敗。 實現由小到大需要注意的是后繪制的需要用behind算法置底。 j變量是不必新建的,是為了區(qū)分大圈與小圈。此外,需要注意好順序結構, 如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)…… 雙循環(huán)可能要結合break代碼。
黃圈內的代碼是內外圈大小,步長計算變換的關鍵,如果換算不對可能導致大小圈重疊,你看到的就只有一白一黑圈了。
換算坐標
∶藍色框部分 運用了一點數學和物理知識,你可以畫個圖,將第三系統(tǒng)中A與B的坐標轉化為以A為原點,B的坐標∶(Xb,Yb)-(Xa,Ya),類似于向量。
但是又有"友好距離"積木,可以直接顯示距離。三維坐標換算二維坐標有些麻煩,所以這里直接用已有的坐標相減,不考慮多出來的坐標軸,此外還發(fā)現了某些可能具有坐標功能的代碼。個人認為應該有更好的算法。 有同學可能會好奇
紫色部分代碼有什么用∶函數
研究后發(fā)現,該語言函數有兩種類型,一種為運算類,一種為程序類。
此種為運算類函數
紅框為過程類函數,可以傳入值,但是不能輸出值,可能需要自定義變量輸出
函數的優(yōu)點在積木式的語言中不太能體現優(yōu)勢。 運算類函數相當于定義一個特值,比如"π" 其重要的作用主要在于合作項目∶你,負責數學計算,可以先做個A項目,然后保存。同學負責算法,可以將A項目另存為B項目,直接往里面添加代碼。 接著是觸摸屏程序
按鈕的實現∶藍框
運用標簽被點擊/鼠標按下/鼠標抬起偵測,發(fā)出廣播,實現按鈕效果。移動的設備選用鼠標按下效果更佳,因為其它種類偵測容易導致屏幕關閉
最重要的部分∶廣播!
運用廣播broadcast,你可以實現程序與程序,作品與作品之間的通訊(broadcast to nearby craft) 這里的屏幕就是指令的發(fā)出者(發(fā)出廣播)。
實現管理∶
橙色部分與紫色部分
橙色部分用于矯正已有的導彈數量,此數量由用戶輸入。
紫色部分實現點擊后呼叫其它火箭,但是操作其它火箭需要火箭自身,所以只能發(fā)出喚醒的廣播(解答為什么不能一個程序控制兩個芯片)
用此處的代碼不知為何可以剛好實現導彈正在運行中的數量不為"-1"。
原計劃用列表來管理已知的導彈,但是研究發(fā)現同一個作品中不同芯片的作品號也是一樣的,所以可能需要新建n個作品或者用于復制粘貼源文件手段實現n個導彈的單獨管理,否則可能需要更改導彈id碼為1,2,3……與主芯片相連都為"craft-id",分離后為"craft-1id"。
此外∶未知原因導致廣播發(fā)出列表的內容只能為"n items in …list",個人認為是變量無法全局到作品所致,但是用標簽將列表的項目進行字符化也無法實現(把列表變成文字),所以干脆用最簡單的變量直接輸出數字,缺點是失去了導彈命名的個性化。
導彈模塊∶
命令的接受者(廣播的接受)
收到廣播的信號且符合自己的編號就點火 測試表明至少要"active stage "三次 需要注意的是,導彈的引擎需要與導彈的芯片捆綁上。 此外本人比較懶,懶得校驗了,如有錯誤請指出。