繪製盤面格子與 3x3 區塊分隔線
目標是讓遊戲螢幕能夠清楚呈現數獨盤面。
數獨的核心就是一個 9x9 的方格,玩家需要直觀地看到:
所以第一步就是先繪製格線,讓基礎盤面結構顯示出來。
用 Ebiten 的 Fill 或 DrawLine 畫線條。
func (gameLayout *GameLayout) Draw(screen *ebiten.Image) {
// 畫出基本背景
gameLayout.drawBoardBackground(screen)
// 根據遊戲狀態來畫出盤面
gameLayout.drawCellValuesOnBoard(screen)
// 畫出盤面格線
gameLayout.drawLinesOnBoard(screen)
}
// drawBoardBackground - 畫出盤面背景顏色
func (gameLayout *GameLayout) drawBoardBackground(screen *ebiten.Image) {
boardBgColor := color.RGBA{0xFF, 0xFF, 0xFF, 0xFF}
boardBackground := ebiten.NewImage(ScreenWidth, ScreenHeight)
boardBackground.Fill(boardBgColor)
screen.DrawImage(boardBackground, nil)
}
// drawCellValuesOnBoard - 根據遊戲狀態來畫出盤面
func (gameLayout *GameLayout) drawCellValuesOnBoard(screen *ebiten.Image) {
board := gameLayout.gameInstance.Board
for row := 0; row < game.BoardSize; row++ {
for col := 0; col < game.BoardSize; col++ {
// draw preset value
if board.Cells[row][col].Type == game.Preset {
gameLayout.drawCellBackground(screen, row, col, getTileBgColor(board.Cells[row][col].Type))
gameLayout.drawCellValue(screen, row, col, board.Cells[row][col].Value,
getTileColor(board.Cells[row][col].Type),
)
}
// TODO: draw input
}
}
}
// drawLinesOnBoard - 畫出目前盤面所需要的格線
func (gameLayout *GameLayout) drawLinesOnBoard(screen *ebiten.Image) {
// 畫出盤面格線
for i := 0; i <= game.BoardSize; i++ {
x := i * cellSize
y := i * cellSize
// 預設是細線
var lineColor color.Color = color.RGBA{0x77, 0x77, 0x77, 0xFF}
lineWidth := leanLineWidth
if i%3 == 0 {
lineColor = color.Black
lineWidth = thinkLineWidth
}
// 畫直線
ebitenUtilDrawLine(screen, x, 0, x, ScreenHeight, lineColor, lineWidth)
// 畫橫線
ebitenUtilDrawLine(screen, 0, y, ScreenWidth, y, lineColor, lineWidth)
}
}
func main() {
ebiten.SetWindowSize(layout.ScreenWidth, layout.ScreenHeight)
ebiten.SetWindowTitle("Sudoku Board")
gameLayout := layout.NewGameLayout()
if err := ebiten.RunGame(gameLayout); err != nil {
log.Fatal(err)
}
}
執行後,畫面會顯示:
https://github.com/leetcode-golang-classroom/sudoku-game/actions/runs/17526715147/job/49778149726
接下來,我們將進一步,設計操作遊戲畫面的 ui