Android Kotlin :經典貪吃蛇遊戲重現,寫好到遊玩不用一天!

前言
在本篇教學中

我們將學習如何使用 Android 的自定義 View 來實現經典的 Snake 遊戲。

以下是我們將要實現的功能
1.蛇的移動和轉向
2.隨機生成食物
3.蛇吃食物後增長
4.碰到邊界或自身時遊戲重置
Cover

實作貪食蛇的view
創建一個自定義 View 類

程式碼解說

首先,創建一個名為 SnakeGameView 的自定義 View 類,並繼承自 View 類。

定義變量和初始化

程式碼解說

在 SnakeGameView 類中,定義遊戲所需的變量,如蛇的位置、大小、方向等。
以下概略解釋各項用途
screenWidth:畫布寬(蛇可以跑的區域)
screenHeight:畫布長(蛇可以跑的區域)
snakeSize: 蛇的大小
snake:整隻蛇座標存在LinkedList內
food:食物座標
foodPaint:食物樣式
direction:蛇頭方向
score:得分
updateHandler:做一個間隔事件,讓貪食蛇持續更新畫面
snakeHeadBitmap:蛇頭的bitmap圖
snakeBodyBitmap:蛇身的bitmap圖
borderColor:邊框顏色
borderWidth:邊框寬度
borderPaint:邊框樣式
pendingDirection:即將轉向的方向

設置遊戲畫面尺寸

程式碼解說

在 SnakeGameView 類中,
我們需要覆寫 onMeasure 方法,
以便根據蛇的大小調整遊戲畫面的尺寸。
此範例展示了如何讓遊戲畫面自適應,
使其能夠剛好能讓蛇完整走完。
主要原因是不同廠牌手機的尺寸和密度各有差異,
可能導致設定的畫面尺寸與蛇寬、高不同,
從而影響遊戲效果。為了確保使用者體驗的一致性,採用了這種設計。
開發者可以根據自己的需求進行相應的調整。

繪製蛇和食物

程式碼解說

在 SnakeGameView ,
onDraw 方法中,
我們去繪製蛇和食物。
這個範例我們用bitmap導入蛇頭、身體資源
去客製化貪食蛇外觀
另外,因為蛇會一直移動需要轉動方向
所以使用Matrix() + rotationAngle 去設定旋轉角度
    val rotationAngle = when (direction) {
      Direction.UP -> 180f
      Direction.DOWN -> 0f
      Direction.LEFT -> 90f
      Direction.RIGHT -> -90f
    }
 val matrix = Matrix()
          matrix.postRotate(rotationAngle, bodyBitmap.width / 2f, bodyBitmap.height / 2f)
          matrix.postTranslate(part.x.toFloat(), part.y.toFloat())
          canvas.drawBitmap(bodyBitmap, matrix, null)
也可以根據自己的需求進行相應的調整。

遊戲邏輯

程式碼解說

新增一個 updateGame 方法,實現遊戲的主要邏輯,如蛇的移動、碰撞檢測等。
其中resetGame()可以自行定義當撞到牆或自己要進行什麼步驟
如:跳出彈框、結束畫面...等等。

生成食物

程式碼解說

新增一個generateFood 方法,實現隨機生成食物的功能。
把隨機生成的x,y座標,指定給前面宣告好的food物件,
這樣之後在onDraw時,
就能實現隨機產生食物的效果。

更新方向

程式碼解說

為了讓蛇能夠根據用戶的操作轉向,
我們需要實現一個 updateDirection 方法。

資源回收

程式碼解說

為了避免內存泄漏,我們需要實現一個回收使用的資源,如bitmap。 讓之後接回activity or fragment 生命週期時可以釋放掉。

接回fragment/activity 並設置按鈕事件

程式碼解說

這是最後一步了,
把前面實作的view接回fragment或activity
再加上可以互動的按鈕就能實現與使用者互動的貪食蛇了!
我這邊是使用自製的 joystickView 或者是你也可以使用四個按鈕去做上下左右的移動

You might also enjoy