黃道燚,陳敏敏
(汕尾職業(yè)技術(shù)學(xué)院,廣東 汕尾 516600)
目前,全球各個國家,特別是發(fā)達(dá)國家都非常重視學(xué)生的編程教育,把編程思想從小就融入到了理科課程之中。在我國,教育部也在大力推動科技教育、創(chuàng)客教育的發(fā)展,指導(dǎo)和組織各類科技制作、創(chuàng)客項(xiàng)目的比賽。許多高校也開始培養(yǎng)科技教育方面的人才[1],包括培訓(xùn)教師、技術(shù)人員等。在汕尾職業(yè)技術(shù)學(xué)院,電子信息技術(shù)類專業(yè)也開始加入了這方面的教學(xué),為學(xué)生的就業(yè)增加方向。文章設(shè)計(jì)了一個科技教育教學(xué)項(xiàng)目—“絕地求吃”,針對大部分學(xué)生對游戲都非常感興趣的特點(diǎn),讓學(xué)生學(xué)在其中,樂在其中。
“絕地求吃”為一個基于APPinventor[2]的APP制作教學(xué)項(xiàng)目,是一個手機(jī)游戲的制作過程,制作完成后,可以安裝到學(xué)生的手機(jī)上進(jìn)行娛樂,同時也是教學(xué)項(xiàng)目,學(xué)生從中能夠?qū)W習(xí)軟件制作知識,也可以自己定義規(guī)則、修改規(guī)則,增強(qiáng)設(shè)計(jì)能力,如圖1所示。項(xiàng)目涵蓋了若干部分的知識點(diǎn),同時具備非常強(qiáng)的趣味性。主要的游戲內(nèi)容包括:(1)玩家通過右邊的遙控球來控制主球的移動,去吃掉其他的小球。(2)主球在吃掉小球的同時,要避開比自己大的紅色球。(3)隨著游戲的進(jìn)行,主球和刷新的球逐漸變大,增加游戲難度。
學(xué)生在學(xué)習(xí)、制作的過程中,需要解決的問題和內(nèi)容步驟:(1)設(shè)計(jì)一個遙控球和一個主球,完成遙控球被拖動時,計(jì)算拖動的角度,然后根據(jù)角度來控制主球的方向及速度。(2)加入其他小球,主球碰撞到其他的小球時,制造主球吃掉小球的效果和自身半徑的增加(變大),以及被吃球的隨機(jī)刷新。(3)設(shè)計(jì)其他小球自主隨機(jī)移動,提高游戲趣味性,同時增加游戲分?jǐn)?shù)以及游戲背景的設(shè)計(jì)。(4)設(shè)計(jì)主球吃球動畫,對比其他小球與主球的半徑數(shù)值,分離為危險(xiǎn)球(比主球半徑數(shù)值大的球,設(shè)置為警告色:紅色)和安全球(其他顏色),設(shè)計(jì)主球碰到安全球則為吃掉小球,如果碰到危險(xiǎn)球則游戲結(jié)束。(5)增加吃球、勝利、失敗等音效和游戲背景音樂,增加游戲?qū)υ捄陀螒蛘f明。
圖1 絕地求吃游戲界面
項(xiàng)目的界面和組件設(shè)計(jì)包括:
(1)水平布局、垂直布局等輔助定位游戲?qū)ο蟮牟季纸M件[3],在項(xiàng)目中的功能主要是將游戲界面和操控界面隔開,分為左右側(cè)。
(2)畫布和圖像精靈、球體精靈等繪圖動畫組件,其功能為游戲的主體部分,包括主球、被吃球、遙控球等。
(3)按鈕、計(jì)時器、音效、音頻播放器、對話框等,其功能包括開始游戲按鈕、控制被吃球的隨機(jī)移動、圖片動態(tài)效果控制、游戲音效、與用戶交互等。
(4)素材處理:包括主球的圖片繪制、圖片透明化處理、背景圖片的裁剪、音樂文件、音效文件的查找和下載等。
學(xué)生在制作項(xiàng)目時,需要學(xué)習(xí)如何使用上面各種組件、工具以及合理設(shè)計(jì)相關(guān)屬性,同時也包括素材的處理和一些特效的制作等方法。
項(xiàng)目的程序采用面向?qū)ο蟮木幊趟枷?,下面將按照對象和過程對各個部分進(jìn)行闡述。需要注意的是,主球?yàn)橥婕铱刂频那?,遙控球?yàn)橥婕疫M(jìn)行遙控的遙控桿,被吃球?yàn)槌髑蛲獾钠渌蝮w精靈。
(1)主球的遙控過程:獲取遙控球被拖動前、后的坐標(biāo)[4],通過下面公式可以得到遙控球拖動方向的角度θ。然后設(shè)定主球的移動方向同為角度θ,設(shè)置主球移動速度為5 P×s。如果遙控球被釋放時,則設(shè)置遙控器回到起點(diǎn)坐標(biāo),同時停止主球。實(shí)現(xiàn)主球受遙控球的控制移動。
(2)主球的吃球過程:當(dāng)遙控球碰撞到其他被吃球時,則進(jìn)行吃球PK判斷,對比主球與被吃球的半徑數(shù)值。如果被吃球半徑數(shù)值大,則調(diào)用結(jié)束游戲過程、播放失敗音效。如果主球半徑數(shù)值大,則制造吃掉被吃球的效果,將被吃球進(jìn)行移動,調(diào)用球刷新的過程,同時進(jìn)行游戲分?jǐn)?shù)增加、主球半徑數(shù)值增加、吃球音效播放。
(3)球刷新過程:對被吃球進(jìn)行隨機(jī)移動,移動之后對當(dāng)前位置進(jìn)制判斷,判斷是否刷新在主球上表面,如果在主球上表面,則要重新移動位置和判斷。判斷過程如下:計(jì)算被吃球和主球的中心點(diǎn)坐標(biāo),由于APPinventor軟件系統(tǒng)采用頂點(diǎn)來作為對象的坐標(biāo)[5],所以被吃球中心的X,Y坐標(biāo)可以由其X,Y坐標(biāo)分別加上半徑R得到。而主球使用正方形的結(jié)構(gòu),則為X,Y坐標(biāo)分別加上其高或?qū)挼囊话霐?shù)值,可得到中心坐標(biāo)。得到兩者中心點(diǎn)后,進(jìn)行兩者中心點(diǎn)距離計(jì)算:
得到兩者中心點(diǎn)距離后,再與兩者的半徑之和的數(shù)值進(jìn)行比較,如果距離L數(shù)值大,則說明兩者不重疊,該點(diǎn)合理,不需要重新移動,否則需要重新移動,并再次重復(fù)判斷。
隨機(jī)設(shè)置該被吃球半徑數(shù)值,數(shù)值范圍在主球半徑數(shù)值上下5個像素內(nèi),使得刷新的球,出現(xiàn)危險(xiǎn)球和非危險(xiǎn)球的概率相等,設(shè)置完畢后進(jìn)行危險(xiǎn)球判斷。
(4)危險(xiǎn)球判斷過程:采用循環(huán)歷遍所有被吃球與主球進(jìn)行半徑數(shù)值比較。半徑數(shù)值比主球大的,設(shè)置為危險(xiǎn)球,顏色修改為警戒顏色(紅色);半徑數(shù)值比主球小的,則不設(shè)置危險(xiǎn)球,顏色設(shè)置為除紅色外隨機(jī)其他顏色。每當(dāng)主球半徑增加或球刷新,都進(jìn)行一次危險(xiǎn)球判斷過程的調(diào)用。該過程能夠幫助玩家判斷主球與被吃球的半徑大小關(guān)系。
(5)分?jǐn)?shù)顯示過程:在畫布左上方畫出線寬為35像素、長度70像素的黑線作為游戲分?jǐn)?shù)文字的背景,然后在黑線進(jìn)行分?jǐn)?shù)顯示。每當(dāng)主球成功吃到被吃球時,進(jìn)行分?jǐn)?shù)的增加和分?jǐn)?shù)顯示過程調(diào)用,或者開始游戲時需要改變分?jǐn)?shù),都進(jìn)行分?jǐn)?shù)顯示過程調(diào)用。
(6)被吃球隨機(jī)移動過程:使用計(jì)時器,每隔1.5 s,采用循環(huán)歷遍各個被吃球,對其移動方向和移動速度進(jìn)行隨機(jī)設(shè)置,使被吃球運(yùn)動軌跡多變,增加游戲難度和趣味性。
(7)被吃球到達(dá)邊界處理:當(dāng)被吃球到達(dá)邊界時,根據(jù)被吃球?qū)吔绲娜肷浣嵌冗M(jìn)行反彈。
(8)顯示游戲tips過程:打開APP,游戲開始,分?jǐn)?shù)累計(jì)到10的倍數(shù)時使用對話框進(jìn)行一些游戲tips展示[6],例如:在開始游戲時進(jìn)行游戲玩法提醒:“朋友,紅色的球能夠干掉你!諾,右邊那個大球就是遙控桿?!盇PP打開時則進(jìn)行隨機(jī)聊天語句,例如:“歡迎回來,朋友!”或者“看吶!水里有好多球!”等;而分?jǐn)?shù)到達(dá)10的倍數(shù)時,進(jìn)行隨機(jī)鼓勵語句,例如:“干得好!就是這樣的!”“你就是個天才!”等,增加游戲的趣味性。
(9)開始游戲過程和結(jié)束游戲過程:開始游戲過程主要是對主球的初始數(shù)值、游戲分?jǐn)?shù)值、計(jì)時器、游戲tips、遙控桿、背景音樂等的設(shè)置和啟用,包括半徑、速度、角度、計(jì)時值等。游戲結(jié)束過程則基本與開始游戲過程想反,包括關(guān)閉計(jì)時器、關(guān)閉背景音樂,禁用主球、被吃球、遙控桿,停止主球和被吃球的移動等內(nèi)容。
(10)屏幕初始化:被吃球?qū)ο罅斜淼奶畛?、進(jìn)入游戲的tips展示等。
一個好的項(xiàng)目,一個具有趣味性的項(xiàng)目,對于學(xué)生的吸引力非常大,學(xué)生樂意投在其中,從中可以學(xué)習(xí)到APPinventor軟件設(shè)計(jì)的完整流程,包括素材處理,軟件思路設(shè)計(jì)、界面設(shè)計(jì)、邏輯程序設(shè)計(jì)、調(diào)試改錯等方面,對學(xué)生的設(shè)計(jì)能力、編程能力能起到很大的提高作用。學(xué)生在項(xiàng)目的制作過程中,按照項(xiàng)目的思路和要求進(jìn)行逐步深入,很好地培養(yǎng)了學(xué)生解決問題、創(chuàng)新設(shè)計(jì)、編程實(shí)踐的能力。