App Inventor學習記錄98-球型精靈遊戲 1,碰到同色球得分,速度會加快球也會變大

專案編號已經到了第 98號,這是第一次我老婆會主動跟我要手機玩的遊戲。我會不知道該取什麼名子好,就直接叫球型精靈小遊戲了。
記錄一下:
App Inventor學習記錄98-球型精靈遊戲 1,碰到同色球得分,速度會加快球也會變大


遊戲進行的畫面如下:

遊戲開始的時候,壓下畫面中間的玩家球之後,就會開始遊戲。遊戲的規格如下。
1. 玩家球碰到同色球的時候,會得分然後變成隨機顏色。
2. 被到的同色球會移回原本的起點再出發,而且球的半徑變大,速度也變快。
3. 碰到越大或是越快的同色球時,得分就越高。
4. 玩家球碰到不同顏色的球後,則結束遊戲。
5. 結束遊戲之後,會依此次的遊玩時間及得分,出現排行榜的記錄。


遊戲執行後的第一個畫面如下,就是遊戲的說明。
程式碼的部份,就是直接開啟 MAIN這個放遊戲內容的螢幕。


MAIN這個螢幕的畫面編排如下:

背景是一個設定成全黑的畫布,畫面中間是由玩家控制的玩家球,四個角落放置 4個不同顏色的球型精靈。壓下玩家球的話就會開始遊戲。


MAIN的全部程式碼如下:


M1部的程式碼說明:

建立一個叫球形精靈群組的變數,它的值是一個清單,把四個球形精靈給加到這個清單中。
建立一個叫顏色清單的變數,它的值也是一個清單,把四個顏色給加到這個清單中。


再建立幾個變數如下。

建立一個叫小球 1碰撞後反彈的方向的變數。
建立一個叫小球 2碰撞後反彈的方向的變數。

建立一個叫遊戲開始的變數,它的初始值是假。
這個變數是要用在壓下玩家球做判斷用的。

建立存活時間得分資料傳遞的變數。
資料傳遞這個變數,就是要拿把值傳到下一個螢幕用的。


M2部份程式碼說明:

建立一個叫球形精靈半徑的小程式,加入一個叫半徑倍率的參數。
在這個程式之後,我們把球形精靈群組清單中的每一個球形精靈的半徑都設定一下。把它的半徑設定畫布寬度乘以 0.02後,再乘以一個半徑倍率的值。


M3部份的程式碼說明:

建立 4個小程式,這四個小程式就是要把 4個球形精靈,設定到我們指定的位置上。
這裡要注意的是 APP INVENTOR座標關係,這個部份請參考
App Inventor學習記錄35-2,調整畫布精靈的位置,讓游標正確顯示


M4部份的程式碼說明:

這一個部份就是設定兩個球型精靈碰撞之後,產生新的前進方向。
為了讓遊戲的變化性多一些些,所以產生新的前進方向的時候,加上了一點隨機值的調整。
我也是別的地方抄過來的……花了一點時間理解……
但我講不清楚,這裡就不獻醜了。


M5部份的程式碼說明:

建立一個叫遊戲開始的小程式,加入球的大小倍率以及球的速度這兩個參數。
遊戲開始的變數設定為真。
呼叫球形精靈半徑的程式,代入球的大小倍率參數值。

呼叫畫布 1.清除畫布
這個主要是重玩遊戲的時候,先把畫面的東西都先清掉一次。

把 4個球形精靈的前進方向都設定一下。
這個前進的方向,請回憶一下以前數學學過的象限值。

再設定一下球形精靈群組中,4個球形精靈的速度值。


M6部份的程式碼說明:

建立一個球變快變大的程式,加入叫那一個球的參數。
這裡用任意元件的方塊來做,指定出要設定的球形精靈是那一個就可以了。


M7部份的程式碼說明:

當 MAIN螢幕初始化的時候:
設定玩家球的 X、Y座標,呼叫 4個球形精靈回到初始位置的程式。
把玩家球的初始顏色,設定成變數_顏色清單中的任一個顏色。
把玩家球的半徑,設定成畫布.寬度乘以 0.02大小。

這裡先補充一下,這次玩家球的半徑大小,設定的很阿呆,但我一直到上手機測試的時候,才會現這個問題。主要是用模擬器在測試的時候,是用滑鼠箭頭代替手指頭,所以玩家球半徑設定的小小的,都看的很清楚。
但一放在手機上之後,玩家球就真的太小了……


M8部份的程式碼說明:

設定一下 4個球形精靈碰到邊界會反彈。
這個設定方法,是讓球形精靈不管碰到那一個邊界都會反彈。


M9部份的程式碼說明:

當球形精靈 1碰撞到球形精靈 2的時候,
呼叫小球碰撞後反彈方向這個程式,放入球形精靈 1和球形精靈 2之後,就可以取得這兩個球碰撞之後前進的方向。接著,再把這兩個球的前進方向給設定一下。

球形精靈 1碰到 球形精靈 3、球形精靈 4的做法都是一樣的。


M10部份的程式碼說明:

球形精靈 1的碰撞做完後,接著做球形精靈 2的碰撞。


M11部份的程式碼說明:

球形精靈 1、2的碰撞做完後,接著做球形精靈 3的碰撞。
這裡我們有 4個球,所以有 6種組合要做。


M12部份的程式碼說明:

當玩家球被壓下之後,如果遊戲開始的值為假的話:
就呼叫開始遊戲這個程式。
也把計時器_活多久給啟用。

這裡補充一下,由於等一下會用拖曳玩家球的方式來移動玩家球,但按久了手會痠,手指頭肯定會離開螢幕。想要再移動玩家球的話,就會再按下玩家球。
這個時候,我們就需要用遊戲開始這個變數的值,來判斷遊戲是否進行中。
如果遊戲進行中的話,就不需要再呼叫開始遊戲這個程式。


M13部份的程式說明:

當計時器開始計時的時候,就把變數_存活時間,每秒加1。
再把標籤_存活時間的文字,設定成變數_存活時間


M14部份的程式說明:

當玩家球被拖曳的時候:
呼叫玩家球移動到指定位置,這個指定的位置,當然就是當前的 X座標和當前 Y座標。
只是我們希望把可以把玩家球的圓心,設定成我們手指頭點到的地方。
所以我們要在當成的 X和 Y座標上,再分別減去球的半徑。


M15部份的程式碼說明:

這部份就是這個遊戲程式中最重要的部份。
當玩家球碰到到其它球形精靈時會發生什麼事。
如果玩家球的畫筆顏色等於球形精靈 1的畫筆顏色的話:
就把球形精靈 1移到原本的位置,然後把球的半徑和速度都增加,得分值也往上加。


碰到球形精靈 2、3、4的時候,都是一樣的做法。


但如果玩家球的畫筆顏色,不等於球形精靈 1、或球形精靈 2、3、4的話。

就把變數_球形精靈群組中的每一個球形精靈的速度,都設定為 0。
停用計時器。
把玩家球的啟用設定為假,這樣按下玩家球的時候,就不會再有反應產生。
變數_存活時間以及變數_得分的值,加入變數_資料傳遞的清單中。
開啟 END這個螢幕,把變數_資料傳遞當成初始值到到下一個螢幕中。


當玩家球碰到不同顏色的球形精靈之後,就會開啟 END這個螢幕。
END 螢幕的畫面配置如下。

左右邊分別是用清單顯示器做的存活時間以及得分的前十排行榜。


END螢幕的全部程式碼如下:


E1部份的程式碼說明:

建立變數_這一次的數據,讓它的值等於初始值。
建立變數_存活前十數據,它的值是空清單。
建立變數_得分前十數據,它的值是空清單。


E2部份的程式碼說明:

建立一個叫由大到小排序的程式,加入要排序的清單這次輸入的值這兩個參數。
這次值如果大於排行榜第 10個數值的話,就取代它。


然後就是把數字由大到小排列一下。

這個部份請參考之前介紹過的文章。
App Inventor學習記錄35-2,調整畫布精靈的位置,讓游標正確顯示


E3部份的程式碼說明:

利用呼叫微型資料庫.取得數值的功能,把變數_存活前十數據的值,設定成資料庫中,存活前十這個標籤下的值。如果存活前十這個標籤下沒有值的話,就把它的值,設定成 CSV列轉清單的值。
這是因為第一次使用的時候,這個標籤下的值是空白的,這樣會發生錯誤。
所以先代入一個值使用。

變數_得分前十數據的值,設定方法也是相同的。


再來就是呼叫我們剛剛寫的程式來用。

比較一下數字的大小跟重新排列後,把兩個清單顯示器的元素都設定一下。
再把各別的值,存到微型資料庫的標籤下就可以了。


E4部份的程式碼說明:

當再玩一次按鈕按下的時候,就開啟 MAIN這一個螢幕。


這次的遊戲受到我老婆的喜愛,這可是第一次。
所以我會慢慢的完善它,包括加入一些其它的元素。

我覺得可能是這次遊戲的規格簡單,再加上有一個排行榜的關係,完全的激起我老婆的鬥志。
以後我每個遊戲能加排行榜的話,都要給它加上。

另,這種簡單的遊戲,還有好幾種變化。再來一個一個慢慢的寫。

這次的 aia檔的下載連結如下:
點我下載 NO_98_Ball_game.aia

之前介紹過的一些 appinventor的使用記錄,都整理在下面這個頁面上了。
APP INVENTOR學習記錄及資源整理頁面

發表迴響