iT邦幫忙

2021 iThome 鐵人賽

0
自我挑戰組

Scratch 3 從入門到精通系列 第 45

Day45 ( 遊戲設計 ) 貪吃蛇

貪吃蛇

教學原文參考:貪吃蛇

這篇文章會介紹,如何在 Scratch 3 裡使用變數、清單、分身、重複、邏輯判斷、廣播訊息、碰到角色...等積木,實作一個可以用鍵盤控制的貪吃蛇小遊戲。

相關文章參考:變數清單重複廣播訊息分身邏輯判斷

角色設定

在角色編輯區,刪除貓咪角色,使用繪畫,繪製「蛇」和「蛋」兩個新角色 ( 參考:造型與繪圖 )。

Scratch 3 教學 - 貪吃蛇

切換到「造型」頁籤,將紅色正方形的「蛇」,對齊中心點,並將尺寸調整為 24x24

在造型頁籤左側清單的預覽圖,可以看見造型的真實尺寸。

Scratch 3 教學 - 貪吃蛇

使用同樣的做法,將「蛋」的造型對齊中心點,尺寸調整為 24x24

Scratch 3 教學 - 貪吃蛇

貪吃蛇遊戲原理

貪吃蛇的遊戲基本上屬於「清單」( 陣列 ) 的操作,只要明白清單的控制原理,就能輕鬆實現貪吃蛇的遊戲

  • 開始時,蛇的清單長度為 1,清單內容是蛇的位置
  • 蛇在移動時,將新的位置加入在第一個項目,並刪除最後一個項目
  • 如果吃到蛋,清單長度增加 1 ( 蛇的長度增加 1 ),將蛋的位置加入在第一個項目
  • 接著就按照上方的邏輯,控制移動和吃蛋的清單內容。

Scratch 3 教學 - 貪吃蛇

積木程式原理 ( 蛇 )

點擊「蛇」角色,建立「長度、得分、x、y」三個變數以及「listX 和 listY」兩個清單。

  • 得分:總共吃到幾顆蛋 ( 勾選顯示在舞台上 )。
  • 長度:蛇的長度。
  • x:水平移動的方向和距離。
  • y:垂直移動的方向和距離。
  • listX:記錄蛇身體 x 座標的清單。
  • listY:記錄蛇身體 y 座標的清單。

Scratch 3 教學 - 貪吃蛇

設計點擊綠旗的程式:

  • 設定 x 和 y 變數為 0。
  • 將蛇根據 x 和 y 變數定位到舞台中心點 (0, 0)。
  • 使用重複無限次積木,每隔 0.1 秒執行 x 和 y 的座標改變 ( 如果 x、y 變數有變化,座標就會改變 )。

Scratch 3 教學 - 貪吃蛇

放入「當向上、向下、向右、向左鍵被按下」的積木,在按下對應鍵盤時,改變 x 和 y 的變數數值,因為角色的尺寸是 24x24,所以 x 和 y 的數值以 25 為一個單位,讓排列或移動時,會有 0.5 的間隔 ( 避免誤觸以及畫面較為好看 )。

鍵盤 x y
向上 0 25
向下 0 -25
向左 -25 0
向右 25 0

Scratch 3 教學 - 貪吃蛇

完成後點擊綠旗,就能用鍵盤控制紅色正方形移動。

Scratch 3 教學 - 貪吃蛇

修改點擊綠旗程式:

  • 將得分設定為 0。
  • 將 listX 和 listY 的內容清空。
  • 將一開始的 xy 座標,添加到 listX 和 listY 清單裡

Scratch 3 教學 - 貪吃蛇

根據貪吃蛇遊戲原理,將「插入清單的第一項」和「刪除清單的最後一項」積木加入重複無限次積木裡,在移動前把 xy 座標插入清單的第一項,並刪除清單的最後一項

Scratch 3 教學 - 貪吃蛇

接著設計吃到蛋的程式:

  • 放入「長度」設定為 listX 或 listY 的長度。
  • 放入「如果...那麼」,判斷如果碰到「蛋」的角色時要做的動作:
    • 得分增加 1。
    • 插入目前的 xy 座標到 listX 和 listY 的第一項
    • 建立自己的分身
    • 廣播「吃到蛋」的訊息

Scratch 3 教學 - 貪吃蛇

設計分身產生 ( 建立蛇的身體 ) 的程式:

  • 改變分身的顏色和亮度,使其和蛇的頭有所區隔。
  • 使用重複無限次積木,每次重複執行:
    • 判斷如果長度大於 1,每次重複讓長度減少 1
    • 依序取出 listX 和 listY 的項目,作為分身的 xy 座標使用

Scratch 3 教學 - 貪吃蛇

積木程式原理 ( 蛋 )

點擊「蛋」角色,編輯對應的程式:

  • 點擊綠旗時,將蛋定位到 (100, 0),並將圖層移到最上層 ( 避免被蛇蓋住 )
  • 當收到「吃到蛋」訊息時,將 xy 座標設定為 25 倍數的隨機數 ( 剛好定位在蛇移動的路徑上 )

Scratch 3 教學 - 貪吃蛇

完成效果

完成後,點擊綠旗,就可以開始進行貪吃蛇的遊戲。

Scratch 3 教學 - 貪吃蛇

範例解答

範例解答:貪吃蛇

延伸練習

如果已經熟悉了貪吃蛇的原理,還可以嘗試更多好玩的作法:

  • 沿用範例程式,加入「撞到牆」和「撞到自己身體」時遊戲結束的邏輯判斷。( 解答 )

  • 沿用範例程式,加入「最高得分」的雲端變數。( 解答 )

關於我

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,如果對我有點興趣(笑,可以與我聯繫,一起來做點有玩又有創意的東西吧!


上一篇
Day44 ( 遊戲設計 ) Flappy Bird
下一篇
Day46 Scratch 系列完賽囉~
系列文
Scratch 3 從入門到精通46

尚未有邦友留言

立即登入留言