黃道燚,陳敏敏
(汕尾職業技術學院,廣東 汕尾 516600)
目前,全球各個國家,特別是發達國家都非常重視學生的編程教育,把編程思想從小就融入到了理科課程之中。在我國,教育部也在大力推動科技教育、創客教育的發展,指導和組織各類科技制作、創客項目的比賽。許多高校也開始培養科技教育方面的人才[1],包括培訓教師、技術人員等。在汕尾職業技術學院,電子信息技術類專業也開始加入了這方面的教學,為學生的就業增加方向。文章設計了一個科技教育教學項目—“絕地求吃”,針對大部分學生對游戲都非常感興趣的特點,讓學生學在其中,樂在其中。
“絕地求吃”為一個基于APPinventor[2]的APP制作教學項目,是一個手機游戲的制作過程,制作完成后,可以安裝到學生的手機上進行娛樂,同時也是教學項目,學生從中能夠學習軟件制作知識,也可以自己定義規則、修改規則,增強設計能力,如圖1所示。項目涵蓋了若干部分的知識點,同時具備非常強的趣味性。主要的游戲內容包括:(1)玩家通過右邊的遙控球來控制主球的移動,去吃掉其他的小球。(2)主球在吃掉小球的同時,要避開比自己大的紅色球。(3)隨著游戲的進行,主球和刷新的球逐漸變大,增加游戲難度。
學生在學習、制作的過程中,需要解決的問題和內容步驟:(1)設計一個遙控球和一個主球,完成遙控球被拖動時,計算拖動的角度,然后根據角度來控制主球的方向及速度。(2)加入其他小球,主球碰撞到其他的小球時,制造主球吃掉小球的效果和自身半徑的增加(變大),以及被吃球的隨機刷新。(3)設計其他小球自主隨機移動,提高游戲趣味性,同時增加游戲分數以及游戲背景的設計。(4)設計主球吃球動畫,對比其他小球與主球的半徑數值,分離為危險球(比主球半徑數值大的球,設置為警告色:紅色)和安全球(其他顏色),設計主球碰到安全球則為吃掉小球,如果碰到危險球則游戲結束。(5)增加吃球、勝利、失敗等音效和游戲背景音樂,增加游戲對話和游戲說明。

圖1 絕地求吃游戲界面
項目的界面和組件設計包括:
(1)水平布局、垂直布局等輔助定位游戲對象的布局組件[3],在項目中的功能主要是將游戲界面和操控界面隔開,分為左右側。
(2)畫布和圖像精靈、球體精靈等繪圖動畫組件,其功能為游戲的主體部分,包括主球、被吃球、遙控球等。
(3)按鈕、計時器、音效、音頻播放器、對話框等,其功能包括開始游戲按鈕、控制被吃球的隨機移動、圖片動態效果控制、游戲音效、與用戶交互等。
(4)素材處理:包括主球的圖片繪制、圖片透明化處理、背景圖片的裁剪、音樂文件、音效文件的查找和下載等。
學生在制作項目時,需要學習如何使用上面各種組件、工具以及合理設計相關屬性,同時也包括素材的處理和一些特效的制作等方法。
項目的程序采用面向對象的編程思想,下面將按照對象和過程對各個部分進行闡述。需要注意的是,主球為玩家控制的球,遙控球為玩家進行遙控的遙控桿,被吃球為除主球外的其他球體精靈。
(1)主球的遙控過程:獲取遙控球被拖動前、后的坐標[4],通過下面公式可以得到遙控球拖動方向的角度θ。然后設定主球的移動方向同為角度θ,設置主球移動速度為5 P×s。如果遙控球被釋放時,則設置遙控器回到起點坐標,同時停止主球。實現主球受遙控球的控制移動。

(2)主球的吃球過程:當遙控球碰撞到其他被吃球時,則進行吃球PK判斷,對比主球與被吃球的半徑數值。如果被吃球半徑數值大,則調用結束游戲過程、播放失敗音效。如果主球半徑數值大,則制造吃掉被吃球的效果,將被吃球進行移動,調用球刷新的過程,同時進行游戲分數增加、主球半徑數值增加、吃球音效播放。
(3)球刷新過程:對被吃球進行隨機移動,移動之后對當前位置進制判斷,判斷是否刷新在主球上表面,如果在主球上表面,則要重新移動位置和判斷。判斷過程如下:計算被吃球和主球的中心點坐標,由于APPinventor軟件系統采用頂點來作為對象的坐標[5],所以被吃球中心的X,Y坐標可以由其X,Y坐標分別加上半徑R得到。而主球使用正方形的結構,則為X,Y坐標分別加上其高或寬的一半數值,可得到中心坐標。得到兩者中心點后,進行兩者中心點距離計算:

得到兩者中心點距離后,再與兩者的半徑之和的數值進行比較,如果距離L數值大,則說明兩者不重疊,該點合理,不需要重新移動,否則需要重新移動,并再次重復判斷。
隨機設置該被吃球半徑數值,數值范圍在主球半徑數值上下5個像素內,使得刷新的球,出現危險球和非危險球的概率相等,設置完畢后進行危險球判斷。
(4)危險球判斷過程:采用循環歷遍所有被吃球與主球進行半徑數值比較。半徑數值比主球大的,設置為危險球,顏色修改為警戒顏色(紅色);半徑數值比主球小的,則不設置危險球,顏色設置為除紅色外隨機其他顏色。每當主球半徑增加或球刷新,都進行一次危險球判斷過程的調用。該過程能夠幫助玩家判斷主球與被吃球的半徑大小關系。
(5)分數顯示過程:在畫布左上方畫出線寬為35像素、長度70像素的黑線作為游戲分數文字的背景,然后在黑線進行分數顯示。每當主球成功吃到被吃球時,進行分數的增加和分數顯示過程調用,或者開始游戲時需要改變分數,都進行分數顯示過程調用。
(6)被吃球隨機移動過程:使用計時器,每隔1.5 s,采用循環歷遍各個被吃球,對其移動方向和移動速度進行隨機設置,使被吃球運動軌跡多變,增加游戲難度和趣味性。
(7)被吃球到達邊界處理:當被吃球到達邊界時,根據被吃球對邊界的入射角度進行反彈。
(8)顯示游戲tips過程:打開APP,游戲開始,分數累計到10的倍數時使用對話框進行一些游戲tips展示[6],例如:在開始游戲時進行游戲玩法提醒:“朋友,紅色的球能夠干掉你!諾,右邊那個大球就是遙控桿。”APP打開時則進行隨機聊天語句,例如:“歡迎回來,朋友!”或者“看吶!水里有好多球!”等;而分數到達10的倍數時,進行隨機鼓勵語句,例如:“干得好!就是這樣的!”“你就是個天才!”等,增加游戲的趣味性。
(9)開始游戲過程和結束游戲過程:開始游戲過程主要是對主球的初始數值、游戲分數值、計時器、游戲tips、遙控桿、背景音樂等的設置和啟用,包括半徑、速度、角度、計時值等。游戲結束過程則基本與開始游戲過程想反,包括關閉計時器、關閉背景音樂,禁用主球、被吃球、遙控桿,停止主球和被吃球的移動等內容。
(10)屏幕初始化:被吃球對象列表的填充、進入游戲的tips展示等。
一個好的項目,一個具有趣味性的項目,對于學生的吸引力非常大,學生樂意投在其中,從中可以學習到APPinventor軟件設計的完整流程,包括素材處理,軟件思路設計、界面設計、邏輯程序設計、調試改錯等方面,對學生的設計能力、編程能力能起到很大的提高作用。學生在項目的制作過程中,按照項目的思路和要求進行逐步深入,很好地培養了學生解決問題、創新設計、編程實踐的能力。