App Inventor學習記錄203-貪食蛇(四),紅球出現、蛇身體變長、出界自撞判定

這一篇做完,基本上的貪食蛇功能就都有了……真的是超長篇。

記錄一下:
App Inventor學習記錄203-貪食蛇(四),紅球出現、蛇身體變長、出界自撞判定


這次範例的完成品如下。

出界會判定 game over,自撞的時候,也會判定 game over。
紅球會隨機出現、吃到紅球之後,貪食蛇會變長。


新增的全部方塊如下。


新增第 1部份方塊記錄如下。

建立變數_紅球的位置,等一下這個值就會隨機產生,然後紅球就會出現在畫面上。
建立清單_檢查自撞用的清單,這個等一下說明。


新增第 2部份的方塊記錄。

建立畫出紅球程式。
把畫布的畫筆顏色設定成紅色。
call canvas1.draw circle,呼叫畫布畫圓程式。
center x參數和 center y填入紅球的中心點,這裡就用前幾篇介紹過的方式計算就可以。
radius參數,這裡填 8,因為我們 1個的大小是 16×16,所以半徑填 8。
fill參數,填 true的話就是實心圓。


新增第 3部份的方塊記錄。

建立出界判斷程式。
建立一個區域變數_現在蛇頭的位置,它的值就是清單_蛇的初始位置中的第 1項。

我們就用這一個格子編號來判斷。如果區域變數_現在蛇頭位置的值,經過編號在第幾列計算後的值為 0或是 21,或者經過編號在第幾行計算後的值為 0或是 21,代表蛇頭已經跑到界外去了。這個時候就要呼叫遊戲結束程式。


新增第 4部份的方塊記錄。

我們現在的格子是 22×22,所以我們取值時候,用 random integer的數學方塊從 1~20取隨機值,再套用到用行列數字求出的位置這個程式,我們就可以得到一個新的編號。

這部份,應該還要在加上一個判斷,讓這個數字不是貪食蛇的數字才對。
當初做的時候沒考慮到這一點,這部份就請大家自個加上去。


新增第 5部份的方塊記錄。

移動蛇位置這個程式,我們要更新部份的程式碼。
要新加判斷的地方在於蛇頭的新位置等於紅球的位置,就只要把新位置加入到蛇的初始位置清單中。不用移除清單中的最後一項。加入清單之後,再呼叫紅球移動到隨機位置程式,把紅球移開。


新增第 6部份的方塊記錄。

新增遊戲結束程式。
這個程式執行的時候,就先把計時器給停止。
把畫布的字體大小設定成 50。
call canvas 1.draw text,呼叫畫布寫字的程式,讓它顯示 game over的文字。


新增第 7部份的方塊記錄。

建立判斷自撞的程式。
這個程式的原理很簡單,就是把清單_蛇的初始位置的全部的值,用 copy list方塊,複製到清單_檢查自撞用的清單中,再把檢查自撞用的清單中的第 1項移除。

然後,我們就可以判斷蛇頭的位置,也就是清單_蛇的初始位置的第 1項,有沒有在清單_檢查自撞用的清單中。用 is in list?這個方塊來判斷,如果回傳值是 true的話,就呼叫遊戲結束程式。


新增第 8部份的方塊記錄。

這個按鈕是測試紅球出現的位置用的。所以就呼叫紅球移動到隨機位置畫出紅球這兩個程式執行。


新增第 9部份的方塊記錄。

這個按鈕就是遊戲開始的按鈕。


新增第 10部份的方塊記錄。

當計時器開始計時的時候,要執行這些程式。
因為我們在前面的地方都寫好了,所以只要拉進來執行就可以了。

好的,全部的程式方塊都簡單說明過了,建議大家試著做一次,就會用的越來越熟。
但如果不想要重新拉程式方塊,或要需要範例 aia檔的話,請前往第 2頁哦!

This Post Has 7 Comments

  1. HANHAN

    請問要怎麼增加計算分數呢

    1. terry2346

      加一個變數,碰到紅球,變數加1

  2. HANHAN

    那請問如果想做扣分的話 是以原本碰到紅球這樣去改嗎?

    1. terry2346

      可以的

  3. HANHAN

    請問如果想做貪吃蛇吃到另一顆球扣分的話 是像做紅球一樣的方式嗎

    1. terry2346

      沒有問題的

  4. 林涵

    你好,我想請問得分要怎麼設定呢?

發佈留言