使用 Ebiten inpututil 偵測鍵盤方向鍵,並驅動滑動邏輯更新盤面。
type Direction int
const (
Up Direction = iota
Down
Left
Right
)
使用 Update() 處理鍵盤輸入:
package layout
import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
"github.com/leetcode-golang-classroom/2048-game/internal/game"
)
// Update - 用來處理畫面偵測,與使用者互動,並且觸發狀態變更
func (g *GameLayout) Update() error {
if inpututil.IsKeyJustPressed(ebiten.KeyArrowUp) {
g.gameInstance.MoveUp()
g.gameInstance.AddRandomTile(game.DirectionUp)
}
if inpututil.IsKeyJustPressed(ebiten.KeyArrowDown) {
g.gameInstance.MoveDown()
g.gameInstance.AddRandomTile(game.DirectionDown)
}
if inpututil.IsKeyJustPressed(ebiten.KeyArrowLeft) {
g.gameInstance.MoveLeft()
g.gameInstance.AddRandomTile(game.DirectionLeft)
}
if inpututil.IsKeyJustPressed(ebiten.KeyArrowRight) {
g.gameInstance.MoveRight()
g.gameInstance.AddRandomTile(game.DirectionRight)
}
return nil
}
gemini -p "你是一位 Golang + Ebiten 遊戲測試專家。請依照以下規格生成可驗證 2048 遊戲鍵盤控制與盤面更新的單元測試案例,格式為 Golang `*_test.go` 檔案。
【測試目標】
1. 確認按下方向鍵(↑、↓、←、→)時,對應的 MoveBoard(direction) 方法會被正確呼叫。
2. 驗證每次滑動後,棋盤狀態有正確更新。
3. 確認每次滑動後,會新增一個隨機的 2 或 4。
4. 按鍵只觸發一次滑動,不會因為長按而多次觸發。
5. 測試快速連按多個方向鍵時,盤面更新正確。
【前置條件】
- 使用 Ebiten 的 inpututil 偵測鍵盤輸入。
- MoveBoard(direction) 已實作並可正常運作。
- 新增隨機數字邏輯已完成(Day 4 的功能)。
- 棋盤資料結構為 4x4 int 二維陣列。
- 渲染部分可忽略,不在測試範圍。
【測試案例需求】
- 使用 table-driven test 設計多組方向鍵輸入測試。
- 模擬鍵盤輸入(可用自訂 mock Input API 或模擬 key press 狀態)。
- 測試檔案命名為 `game_input_test.go`。
- 每個測試案例需附上簡短註解說明測試目的。
請依據上述規格輸出完整的 Golang 單元測試程式碼,並確保可直接執行 `go test` 驗證。"
https://github.com/leetcode-golang-classroom/2048-game/actions/runs/17163776490/job/48699159378
今天的重點是將 Ebiten 的 inpututil 鍵盤事件偵測 與 2048 的滑動邏輯 整合,讓遊戲可以透過鍵盤方向鍵操作:
明天我們將進入 遊戲結束判斷 的開發:
實作 Game Over 條件檢查:
盤面已無空格。
任意方向都無法再合併方塊。
在遊戲結束時顯示 Game Over 提示文字。
保留盤面供玩家檢視,並等待重新開始的按鍵事件。