昨天我們已經整理了踩地雷遊戲的規則與玩法,今天我們要進一步規劃 程式中的資料結構。遊戲設計要能清楚表達出「棋盤、方格、地雷分布、遊戲狀態」,這樣未來在邏輯實作上才會乾淨俐落。
設計格子結構(是否有雷、是否揭開、是否標旗、周圍雷數)、建立二維盤面資料結構
以下是初步的 Go 資料結構:
// 單一格子 (Cell)
type Cell struct {
IsMine bool // 是否為地雷
Revealed bool // 是否被翻開
Flagged bool // 是否被插旗
AdjacentMines int // 周圍地雷數
}
// 棋盤 (Board)
type Board struct {
Rows int
Cols int
Cells [][]*Cell
}
// 遊戲狀態 (Game)
type Game struct {
Board *Board
IsGameOver bool
IsPlayerWin bool
Remaining int // 剩餘需要翻開的格子數
}
gemini -p "請根據以下 Golang struct,生成一份踩地雷遊戲的 sample data。
資料需包含:
- 棋盤大小 (Rows, Cols) = 5x5
- 固定 5 顆地雷
- 各 Cell 需填上 IsMine, Revealed, Flagged, AdjacentMines
- GameOver = false, Victory = false, Remaining = 未翻開且非地雷格數
請輸出 JSON 格式,符合以下 struct 定義:
// 單一格子 (Cell)
type Cell struct {
IsMine bool
Revealed bool
Flagged bool
AdjacentMines int
}
// 棋盤 (Board)
type Board struct {
Rows int
Cols int
Cells [][]Cell
}
// 遊戲狀態 (Game)
type Game struct {
Board *Board
IsGameOver bool
IsPlayerWin bool
Remaining int
}
"
{
"Board": {
"Rows": 5,
"Cols": 5,
"Cells": [
[
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 0},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1},
{"IsMine": true, "Revealed": false, "Flagged": false, "AdjacentMines": 0},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1}
],
[
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": true, "Revealed": false, "Flagged": false, "AdjacentMines": 0}
],
[
{"IsMine": true, "Revealed": false, "Flagged": false, "AdjacentMines": 0},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2}
],
[
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": true, "Revealed": false, "Flagged": false, "AdjacentMines": 0},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1}
],
[
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1},
{"IsMine": true, "Revealed": false, "Flagged": false, "AdjacentMines": 0},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 2},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1},
{"IsMine": false, "Revealed": false, "Flagged": false, "AdjacentMines": 1}
]
]
},
"IsGameOver": false,
"IsPlayerWin": false,
"Remaining": 20
}
https://github.com/leetcode-golang-classroom/mine-sweeper-game/actions/runs/17274131269
在定義好資料結構後,明天我們將會進一步探討 棋盤初始化邏輯: