高瀾心
打地鼠是一款大眾喜愛的經(jīng)典游戲,這次我們自己制作一個(gè)。在手機(jī)上用手指頭快速打擊出洞的地鼠,即可獲得分?jǐn)?shù)。通過(guò)制作這個(gè)游戲,我們會(huì)涉及多屏幕切換、多組件模塊組合使用、畫布與精靈的坐標(biāo)、計(jì)時(shí)器的應(yīng)用等知識(shí)點(diǎn)。通過(guò)綜合運(yùn)用各種技巧讓我們的游戲可玩性更高。
游戲開始后進(jìn)入選擇場(chǎng)景頁(yè)面,可以選擇3個(gè)場(chǎng)景(圖1)。
場(chǎng)景1:地鼠隨機(jī)出現(xiàn)在屏幕任何位置,每500毫秒移動(dòng)一次,如果玩家手指觸摸地鼠,顯示命中數(shù)增加1,并伴有音效;如果手指觸摸到屏幕但沒有擊中地鼠,則失敗數(shù)增加1(圖2)。
場(chǎng)景2:地鼠隨機(jī)出現(xiàn)在地洞中,當(dāng)擊中10次地鼠時(shí),游戲結(jié)束并顯示“你贏了”(圖3)。
場(chǎng)景3:在倒計(jì)時(shí)60秒時(shí)間內(nèi),每次擊中地鼠時(shí)命中數(shù)增加1,當(dāng)時(shí)間為0時(shí),顯示“游戲結(jié)束,請(qǐng)重新開始”(圖4)。
登錄到http://app.gzjkw.net/等開發(fā)網(wǎng)站,新建項(xiàng)目,命名為“dadishu”。收集項(xiàng)目需要的素材:圖片4張(地鼠mole.png、被打中地鼠mole2.png、洞hole.png、2場(chǎng)景背景background.png、3場(chǎng)景背景background2.png)和擊中音效(zong.mp3)(圖5)。
初始屏幕提示了游戲名,為3個(gè)不同場(chǎng)景做引導(dǎo)。初始屏幕的組件屬性設(shè)置如表1,組件排布如圖6。
表1
游戲由多個(gè)屏幕組成,點(diǎn)擊初始屏幕的三個(gè)按鈕可以切換到其他屏幕。這里我們使用了簡(jiǎn)單的直接打開另一屏幕。App Inventor中,屏幕不能訪問(wèn)另一個(gè)屏幕的組件或者變量,如果要實(shí)現(xiàn)屏幕之間的值傳遞,可以用“打開屏幕并傳值”和“關(guān)閉屏幕并返回值”模塊,不過(guò)這個(gè)模塊只能傳輸一個(gè)值,如果需要傳入多個(gè)值,可以通過(guò)列表的形式來(lái)傳遞。接收返回值時(shí),可以使用“獲取初始值”模塊(圖7)。
用“新增屏幕”新建一個(gè)屏幕,命名為“Screen_first”。注意屏幕組件一旦命名確定后就不能修改了。場(chǎng)景1的組件屬性設(shè)置如表2。
表2
想要控制地鼠的移動(dòng),我們先要了解Android的圖形定位機(jī)制,坐標(biāo)(0,0)在畫布的左上角,圖像精靈的左上角是坐標(biāo)(x,y)。
因此當(dāng)?shù)厥笪挥诋嫴甲笊辖菚r(shí),其x和y值都是0。當(dāng)?shù)厥笪挥诋嫴嫉挠蚁陆菚r(shí),坐標(biāo)是(畫布的寬度-圖像精靈的寬度,畫布的高度-圖像精靈的高度)。所以地鼠的移動(dòng)范圍如圖8。
在游戲開始前,為了讓所有組件不能意外移動(dòng),用一個(gè)全局變量來(lái)檢測(cè)游戲狀態(tài),建立全局變量“游戲已經(jīng)開始標(biāo)志”。游戲沒開始時(shí)設(shè)為“假”,當(dāng)點(diǎn)擊開始設(shè)為“真”,其他組件先檢查這個(gè)變量是否為“真”再進(jìn)行后續(xù)的動(dòng)作。
點(diǎn)擊“開始”按鈕,游戲回復(fù)到初始狀態(tài)。計(jì)時(shí)器、計(jì)數(shù)都?xì)w零,畫布可以觸碰,地鼠開始移動(dòng)。
為了讓地鼠固定時(shí)間移動(dòng)一次,計(jì)時(shí)也需調(diào)用“地鼠移動(dòng)”,如果調(diào)試時(shí)覺得地鼠移動(dòng)得太快或太慢,可以改變“計(jì)時(shí)器_地鼠”的時(shí)間間隔如圖9。
通過(guò)畫布的被觸碰事件來(lái)處理地鼠被擊中后的過(guò)程。XY坐標(biāo)表示手指觸摸點(diǎn),用“碰到任意精靈”來(lái)檢測(cè)是否碰到地鼠。
先檢查“游戲已經(jīng)開始標(biāo)志”變量是否為“真”,為真表示游戲進(jìn)行中。
如果“任意被觸碰的精靈”為真,表示碰到了地鼠,則命中數(shù)加1,并播放音效。否則,失敗數(shù)加1(圖10)。
場(chǎng)景2中,我們讓地鼠出現(xiàn)在洞中,用5個(gè)圖像精靈表示地洞,這5個(gè)圖像精靈的屬性全部默認(rèn),我們后面用程序控制它們的外觀,其余組件與場(chǎng)景1類似(圖11)。
利用列表對(duì)5個(gè)地洞設(shè)置圖片為“hole2.png”。首先創(chuàng)建空列表“地洞”,將5個(gè)圖像精靈直接作為列表項(xiàng);使用左側(cè)模塊中“任意組件-任意圖像精靈”中的“設(shè)置圖像精靈 圖片”模塊,循環(huán)為將每一項(xiàng)的圖片設(shè)為“hole2.png”。
因?yàn)槲覀冃枰獙?duì)多個(gè)圖像精靈進(jìn)行設(shè)置不是特指,所以才需要使用“任意組件”中的模塊來(lái)泛指所有需要設(shè)置的多個(gè)組件(圖12)。
列表中“圖像精靈_洞1”模塊比較特殊,它沒有具體屬性而是代表這個(gè)圖像精靈本身,你可以在所有屬性的最后找到它。
地鼠必須出現(xiàn)在某個(gè)洞口,程序要用同樣的XY坐標(biāo)數(shù)字控制地鼠和地洞,我們可以在保持地鼠和地洞圖片的大小相同前提下,調(diào)整圖像中兩者的位置達(dá)到需要的效果(圖13)。
由于畫布中有多個(gè)圖像精靈,場(chǎng)景1中的判斷方式就不適用了。需要用“圖像精靈_地鼠被觸碰”來(lái)判斷(圖14)。
點(diǎn)擊開始按鈕,游戲恢復(fù)初始狀態(tài)。計(jì)時(shí)器定時(shí)移動(dòng)地鼠一次。如果點(diǎn)擊返回,則回到“Screen 1”屏幕(圖15)。
在場(chǎng)景3中,洞口就是背景圖的一部分,我們需要預(yù)先將地鼠放在每一個(gè)洞口,并記下坐標(biāo)值。用列表存儲(chǔ)這些坐標(biāo)值,用隨機(jī)數(shù)取列表的項(xiàng)目序號(hào)的方式來(lái)取出坐標(biāo)。為了定位準(zhǔn)確,需要定位畫布的寬和高(圖16)。
游戲已經(jīng)比較完善了,現(xiàn)在為游戲添加一個(gè)倒計(jì)時(shí)顯示。每隔1秒,倒計(jì)時(shí)文本減1,直至為0,游戲結(jié)束,并顯示“游戲結(jié)束,請(qǐng)重新開始”。由于需要在畫布指定位置顯示文字,在點(diǎn)擊開始時(shí)還要清除畫布(圖17)。
受篇幅所限,我們只介紹了打地鼠游戲程序中的重點(diǎn)部分,剩下的一些還需要你用已經(jīng)掌握的知識(shí)自己完善。