vizzy基礎(chǔ)課一∶初識vizzy與編程三大結(jié)構(gòu),變量
聲明∶本文章遵循作者之前所寫的總表中的原則,所用圖片以作者截屏與官網(wǎng)內(nèi)容為主,若產(chǎn)生收益用于教育投資,以后作品不再說明 PS∶作者未學(xué)過計算機相關(guān)專業(yè)(只接觸過Python基礎(chǔ))。文章大部分是按作者理解所寫。參考了廖雪峰、謝聲濤等老師的書與文章,以及百度百科,如有不足
(
特別是版權(quán)相關(guān)知識
)
與錯誤請及時指出。為滿足不同需求閱讀,文章特殊標記如∶
英文翻譯,相關(guān)拓展資料等(如10+,13+,16+分別表示閱讀該段至少應(yīng)掌握的知識水平,高于標記段水平可跳過,未標記為以上三種均可,標記界限并不嚴格)。
官方文檔
https://www.simplerockets.com/Blog/View/120034來自vizzy界面左上角get more 廢話不多說,正文開始∶ 首先我們來了解一個概念∶
高級語言∶
高級語言(High-level programming language)是一種獨立于機器,面向過程或?qū)ο蟮恼Z言。高級語言是參照數(shù)學(xué)語言而設(shè)計的近似于日常會話的語言。
高級語言并不是特指的某一種具體的語言,而是包括很多編程語言。
(以上均來自百度百科) 由此見低級語言指機器語言(機器碼),而vizzy是高級語言之一。書寫數(shù)字與符號時應(yīng)盡量
用英文輸入,以減少出錯
以上作為常識了解
上文中提及新概念∶
面向過程編程與面向?qū)ο缶幊?思想
面向過程編程
”(Procedure Oriented)是一種以過程為中心的編程思想。這些都是以什么正在發(fā)生為主要目標進行編程(以上來自百度百科) 解讀∶vizzy基本所有程序都應(yīng)按照該思想編寫,比如要做一個自動入軌的程序,設(shè)計思想應(yīng)該是∶新建入軌程序,拖出一級點火
積木
(代碼塊),到達某高度一級塔分離…讀代碼時一般按順序從上至下,層進式。
[16+]面向?qū)ο缶幊?OOP)
是相對于面向過程來講的,面向?qū)ο蠓椒?,把相關(guān)的數(shù)據(jù)和方法組織為一個整體來看待,從更高的層次來進行系統(tǒng)建模,更貼近事物的自然運行模式。(以上來自百度百科)類似于并列式 面向?qū)ο缶幊倘筇卣鳌?/p>
繼承,封裝與多態(tài)
解讀∶我剛開始學(xué)的時看了幾遍書也不懂OOP,在讀了高中以后學(xué)到函數(shù)一章才有初步的了解。題外話∶首先來了解一點初高中函數(shù)知識∶
語文中的函∶裝東西的匣子
函數(shù)的傳統(tǒng)定義: 設(shè)在某變化過程中有兩個變量x、y,如果對于x在某一范圍內(nèi)的每一個確定的值,y都有唯一確定的值與它對應(yīng),那么就稱y是x的函數(shù),x叫做自變量。(初中常見)
函數(shù)的近代定義: 設(shè)A,B都是非空的數(shù)的集合,f:x→y是從A到B的一個對應(yīng)法則,那么從A到B的映射f:A→B就叫做函數(shù),記作y=f(x),其中x∈A,y∈B,原象集合A叫做函數(shù)f(x)的定義域,象集合C叫做函數(shù)f(x)的值域,顯然有CB。(高中常見)
(計算機)編程通常會把數(shù)學(xué)某一概念抽象出來。
以上函數(shù)相關(guān)的知識看不懂沒關(guān)系。
舉個例子∶小學(xué)的時候,考的好可以換獎勵,作業(yè)A+十次也可以換獎勵,而考差了只能挨罵,
可以發(fā)現(xiàn),人的狀態(tài)是自變量(外界輸入),得獎勵和挨罵這兩個事物是因變量(輸出結(jié)果),而學(xué)習(xí)是對應(yīng)法則,自變量可以多對一因變量,但反過來不可(映射關(guān)系?)
,抽象成計算機中的函數(shù),也就是
學(xué)習(xí)("學(xué)得好")∶輸出獎勵
通過函數(shù)可以簡化程序過程,模塊、系統(tǒng)化程序
并且通過此類思想,不必知道函數(shù)背后的代碼,只要讀得懂官方的文檔,知道輸入和輸出的結(jié)果,就能輕松運用某類工具了。所以如果聽到xxx小學(xué)學(xué)生開發(fā)人工智能類新聞,有概率是用了
api(程序接口)。
可用此類思想實現(xiàn)團隊合作
PS∶如果在Python的終端中輸入"print",會提示 build-in function,意為內(nèi)置模塊,print即為對應(yīng)法則
之所以提函數(shù)是因為函數(shù)(方法)在OOP中非常重要
更多函數(shù)內(nèi)容移步后續(xù)課程
回到OOP上∶OOP可以理解為在面向過程編程中,數(shù)據(jù)裝進一個"類"中(容器?)經(jīng)過方法處理。
同樣一個入軌程序,可以這樣寫∶新建飛船操作程序,新建軌道類,定義入軌方法(函數(shù))∶一級點火積木,分離……定義糾正姿態(tài)方法∶轉(zhuǎn)向……
程序,類,方法為包含與被包含關(guān)系(從大到小)
運用OOP也許程序的效率會略微下降,但大大提升了程序的可讀性與可利用性,下次你想要加入自動對接程序,可以用面向過程編程思想寫一個對接程序,或者用OOP思想往軌道類中添加對接方法
以上內(nèi)容作了解即可,vizzy大部分為面向過程編程。
[9+]
在開始本文必會知識前,再插入小知識點∶
注釋
與debug。bug為漏洞(蟲子),debug即排除故障。一般的代碼式的語言集成開發(fā)環(huán)境(ide)都會有工具。然而我們的vizzy似乎不具有,所以只能一遍一遍的朗讀與背…(誤)一邊一邊的進游戲與退出,這對手機玩家來說是相當痛苦的。
當然也可以用輸出積木進行debug,以確定該積木以下部分是否正常運行(log或者直接向屏幕輸出提示)
注釋
并不是什么高級難懂的知識點,但是有些人的代碼寫的
可讀性太差了! 沒有注釋根本無法維護,
Madam,you don't want your……too
#中的為注釋(疑問∶achieve change color怎么改變顏色?),
注釋不是解釋代碼的內(nèi)容,比如∶
start
"active next stage"使下一階段開始(活躍) ,
注釋不應(yīng)該將文字意思解釋出來(開始,下一階段),而應(yīng)當解釋為你的目的,如"實現(xiàn)飛船入軌"
注釋應(yīng)當添加到難懂且代碼長的地方,減少不必要的,以簡短易懂為重
以上為學(xué)前必懂小知識,以下為今日必會知識(以后vizzy可以縮寫為VZ) vizzy是什么?Vizzy is a visual programming system that you can use to automate your craft to execute a wide variety of flight-oriented tasks(源自官網(wǎng))簡而言之∶幫助實現(xiàn)自動操作和各種飛行任務(wù)的可視化語言系統(tǒng) vizzy實際可以插入任何部件中,選中然后點flight program(programme)即可
一∶初識界面
想學(xué)vizzy的同學(xué)基本上都知道在哪里打開了(舊版本左上角menu中的選項,新版本右側(cè)的羅馬?X) 編程三大結(jié)構(gòu)∶
順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)
順序結(jié)構(gòu)即從start或其他event積木一直逐條運行到最后一條
選擇(分支)結(jié)構(gòu)∶又分為單分支if,雙分支if else,多分支
(其實會用就行啦)
循環(huán)結(jié)構(gòu),for循環(huán)和while循環(huán)。while實現(xiàn)條件循環(huán),for實現(xiàn)切片(歷遍某個列表,集合等中某連續(xù)不連續(xù)段),或者重復(fù)n次循環(huán)
事件∶start(開始)與各種特殊的開始,比如"a與b對接時",它應(yīng)當作為程序主體的第一個積木。最
重要的是
broadcast廣播模塊,有了它,你甚至可以實現(xiàn)在游戲中玩Minecraft(如果技術(shù)夠,設(shè)備撐得住),它可以實現(xiàn)不同代碼間的通訊,控制不同循環(huán)體的開始與結(jié)束。
程序流程∶里面有時間模塊(等待),重復(fù)(n次)執(zhí)行(循環(huán)體),條件判斷。為程序主體。
運算(此處為"操控"或"控制"更合適,但為突出其特點)∶四則運算,各種數(shù)學(xué)運算,字符運算,與或非在此
飛船指令(此處為游戲特有)∶控制飛船(部件)朝向,蜂鳴器,選擇操作飛船等。至于與C#什么關(guān)系有待考查。
邏輯(此處為"飛船信息"更佳)∶某些"定量"數(shù)據(jù),如∶部件id,飛船坐標,配合運算與判斷更佳
存儲相關(guān)∶ 變量∶可以變的量,一般的語言(Python)類型中有∶字符串(string所寫str)如"jno"為三個字符組成的字符串,整型(int)即整數(shù),浮點型(小數(shù)),布爾值(ture,false即真和假),注意"4"str與"4"int與"4.0"float在計算機中是不同的,因為存儲的方式不同,"4"str可以理解為"漢字",并且變量的大小寫不同,變量也是不同的,如A與a是兩個變量
列表∶列表與集合是不同的,集合是確定、互異、無序的,而列表是可重復(fù)、有序的,如[1,2,3]數(shù)列,第0個元素是1(Python一般的習(xí)慣第一個元素為0索引),配合for循環(huán)切片,你可以將某個變量依次賦值為列表中的某些按順序排的量
函數(shù)與自定義模塊 此游戲有兩種函數(shù)(個人覺得可能是語言與游戲銜接的過程減少bug而設(shè)計的) 自定義表達∶官方文檔∶類似于面向過程式的, 可以不可以定義指令,但是返回參數(shù)
自定義指令∶可以定義指令,但不返回參數(shù)
但貌似都可以添加變參 以上的區(qū)別待我研究后在后續(xù)課程中講解 此外還有MDF(數(shù)據(jù)屏)相關(guān)代碼,這將在MDF專題中提出 以及
FUND()函數(shù),
這似乎是官方為了將語言與游戲銜接做的一個實驗性部件,類似某國產(chǎn)編程軟件的積木與代碼切換。通過funk可能可以訪問某些thinkerpanel中的屬性,待研究完畢后續(xù)課程提供講解
以下為官網(wǎng)關(guān)于vizzy介紹
變量的內(nèi)容上文已提及差不多了,以下為補充
變量可以理解為存儲數(shù)據(jù)的空間。
變量存儲對象可分為可變對象與不可變對象,主要與計算機存儲有關(guān),這里不贅述
變量在不同語言大概分為屬性變量和用戶自己創(chuàng)建的變量,屬性變量如物件id一般不可變,此外應(yīng)聲明全局與局部或隱式變量,全局為任何一個部件都可以使用,但是可能容易引起錯誤,局部為僅該部件可用。此外,for循環(huán)切片時的變量也應(yīng)該為臨時存在的局部變量
變量賦值∶set……to給變量特定值(vizzy似乎只能用數(shù)字)。change by增加或減少(減少時為負值)
user input為用戶輸入,即鍵盤輸入。輸入與輸出(i/o)可以實現(xiàn)程序與程序(以函數(shù)參數(shù)和return形式),人機交互(以input和打印形式)
開源與版權(quán)
開源軟件(Open Source Software)簡單的說就是源代碼對公眾開放的軟件。自由軟件當然主張純粹的“利他主義”,而開源軟件則力求從中取得平衡點。(百度百科) 出名的開源社區(qū)有∶github,并且提供代碼托管 開源協(xié)議大致有GPL、BSD、MIT、Mozilla、Apache和LGPL等。(菜鳥教程) 《著作權(quán)法》第二條 中國公民、法人或者其他組織的作品,不論是否發(fā)表,依照本法享有著作權(quán)。 自然人的作品,其發(fā)表權(quán)、著作財產(chǎn)性權(quán)利的保護期為作者終生及其死亡后五十年。(華律)
個人認為,應(yīng)當支持依法維權(quán),保護知識產(chǎn)權(quán),也要積極貢獻社會。所以能開源的不閉源,能免費的不增加額外條例。個人認可注明作者一開全開、僅用于學(xué)習(xí)并保留版權(quán)與閉源,其它形式打著"開源"旗號而本著"爭暗利"的開源形式格局太小,不利于作品的傳播,也不利于社會發(fā)展。
況且,不應(yīng)將自己的代碼看的過重,總有版權(quán)到期的一天,技術(shù)的更新必然造就代碼的淘汰,所以盡量一開全開。
而個人作品也應(yīng)盡量少使用開源代碼,注意使用代碼的相關(guān)協(xié)議,注明作者。
最后源碼最開始處建議用注釋說明作者
下期預(yù)告∶各分類積木塊、循環(huán)體、列表與自定義函數(shù)的使用