iT邦幫忙

2025 iThome 鐵人賽

DAY 3
1

🎯 今日目標

為 2048 遊戲設計一個 4x4 的二維整數陣列,作為遊戲盤面資料結構。
今天我們還不碰繪圖,僅專注在資料層,並在 CLI 印出結果,確保後續邏輯能順利運作。

💡 為什麼需要先設計資料結構?

在遊戲開發中,資料結構是邏輯運算的基礎,像 2048 這類棋盤型遊戲,盤面是遊戲的核心狀態:

  • 存放每個格子的數字
  • 決定合併與新增數字的邏輯輸入
  • 提供渲染層(Ebiten)所需的數據
    若資料結構清晰,之後的滑動、合併、判斷遊戲結束都能快速實作。

🛠 設計步驟

  1. 選擇資料結構
  • 使用 [][]int(二維整數切片)
  • 第一維代表列(Row)
  • 第二维代表行(Column)
  1. 初始化棋盤
  • 預設填滿 0 表示空格
  • 後續會用隨機方法放置 2 或 4
  1. 印出盤面(CLI 模式)
  • 每列用迴圈列印
  • 空格顯示為 . 方便閱讀

Row Based 格式設定狀態

📄 範例程式碼

package internal

// sideSize - 預設 sideSize
const sideSize = 4

// Game - 紀錄當下遊戲處理狀態
//
//	board [][]int - 紀錄盤面狀態
type Game struct {
	board [][]int
}

// Init - 初始化
func (g *Game) Init(data [][]int) {
	// 建立棋盤
	g.board = make([][]int, sideSize)
	for index := range g.board {
		g.board[index] = make([]int, sideSize)
	}
	// checkout input value
	if len(data) != sideSize || len(data[0]) != sideSize {
		return
	}
	// setup data
	for r := range sideSize {
		for c := range sideSize {
			if data[r][c] != 0 {
				g.board[r][c] = data[r][c]
			}
		}
	}
}

func NewGame() *Game {
	return &Game{}
}

✅ 驗收條件

  • 能建立一個 4x4 的二維整數陣列
  • 預設值為 0 代表空格
  • 可以透過Init 方法設定測試數字驗證 board 物件狀態

透過 gemini 生成測試案例

gemini -p "請幫我為 2048 遊戲的盤面資料結構設計生成至少 5 組測試案例。  
每個測試案例包含:  
1. 一個 4x4 的二維整數陣列示意(用空格分隔,0 表示空格)  
2. 對應的 CLI 印出格式(0 用 '.' 顯示,其他數字正常顯示)  

請格式化輸出如下範例:  
案例 1:  
盤面數據:  
2 0 0 0  
0 0 4 0  
0 0 0 0  
0 0 0 0  

CLI 印出:  
2 . . .  
. . 4 .  
. . . .  
. . . .  

請直接列出 5 組此類測試案例,方便用於程式輸出驗證。"

gemini 生成的測試案例

這裏是 5 組 2048 遊戲盤面的測試案例。

  • 案例 1:
    盤面數據:
2 4 0 0
8 0 0 0
16 0 4 0
0 0 0 0

CLI 印出:

2 4 . .
8 . . .
16 . 4 .
. . . .
  • 案例 2:
    盤面數據:
128 64 32 16
8 0 0 2
4 0 0 4
2 4 8 16

CLI 印出:

128 64 32 16
8 . . 2
4 . . 4
2 4 8 16
  • 案例 3:
    盤面數據:
0 0 0 0
0 2048 0 0
0 0 0 0
0 0 0 0

CLI 印出:

. . . .
. 2048 . .
. . . .
. . . .
  • 案例 4:
    盤面數據:
16 8 4 2
32 16 8 4
64 32 16 8
128 64 32 16

CLI 印出:

16 8 4 2
32 16 8 4
64 32 16 8
128 64 32 16
  • 案例 5:
    盤面數據:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

CLI 印出:

. . . .
. . . .
. . . .
. . . .

根據以上測試設定的測試案例

https://github.com/leetcode-golang-classroom/2048-game/actions/runs/17023263946/job/48255275705

🔧 今日收穫

  • 成功設計並實作了 2048 遊戲的核心資料結構:一個 4x4 的二維整數陣列,代表遊戲盤面。
  • 理解並確定盤面中 0 代表空格的設計,為後續邏輯提供清晰基礎。
  • 撰寫出對應的測試程式碼
  • 確認盤面初始化與印出結果符合預期,為接下來的遊戲邏輯開發做好準備。

🔮 明日預告

  • 將開始實作遊戲的「隨機新增數字」功能。
  • 包括初始化時隨機放置兩個 2 或 4,以及每次玩家滑動後新增新數字的規則。
  • 利用 Gemini CLI 產生多組測試案例,確保隨機新增數字邏輯的正確性與健壯性。
  • 讓遊戲盤面能動起來,逐步完成 2048 的基本遊戲流程。

上一篇
2048 遊戲:遊戲規則與盤面邏輯概念
下一篇
2048 遊戲: 隨機新增數字邏輯實作
系列文
在 ai 時代 gopher 遊戲開發者的 30 天自我養成22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言