mirror of
https://github.com/imjasonh/chessh
synced 2026-07-19 07:07:04 +00:00
improve board rendering
Signed-off-by: Jason Hall <jason@chainguard.dev>
This commit is contained in:
parent
bf74a871ff
commit
3a772ea21b
3 changed files with 27 additions and 25 deletions
18
chess.go
18
chess.go
|
|
@ -96,7 +96,7 @@ func NewBoard() Board {
|
||||||
{Pawn, White}, {Pawn, White}, {Pawn, White}, {Pawn, White},
|
{Pawn, White}, {Pawn, White}, {Pawn, White}, {Pawn, White},
|
||||||
}
|
}
|
||||||
|
|
||||||
for col := 0; col < 8; col++ {
|
for col := range 8 {
|
||||||
for row := 2; row < 6; row++ {
|
for row := 2; row < 6; row++ {
|
||||||
board[row][col] = Piece{Empty, White}
|
board[row][col] = Piece{Empty, White}
|
||||||
}
|
}
|
||||||
|
|
@ -435,8 +435,8 @@ func (g *Game) updateGameState(from, to Position, piece Piece) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) FindKing(color Color) Position {
|
func (g *Game) FindKing(color Color) Position {
|
||||||
for row := 0; row < 8; row++ {
|
for row := range 8 {
|
||||||
for col := 0; col < 8; col++ {
|
for col := range 8 {
|
||||||
pos := Position{row, col}
|
pos := Position{row, col}
|
||||||
piece := g.Board.At(pos)
|
piece := g.Board.At(pos)
|
||||||
if piece.Type == King && piece.Color == color {
|
if piece.Type == King && piece.Color == color {
|
||||||
|
|
@ -455,8 +455,8 @@ func (g *Game) IsInCheck(color Color) bool {
|
||||||
|
|
||||||
enemyColor := 1 - color
|
enemyColor := 1 - color
|
||||||
|
|
||||||
for row := 0; row < 8; row++ {
|
for row := range 8 {
|
||||||
for col := 0; col < 8; col++ {
|
for col := range 8 {
|
||||||
pos := Position{row, col}
|
pos := Position{row, col}
|
||||||
piece := g.Board.At(pos)
|
piece := g.Board.At(pos)
|
||||||
if piece.Type != Empty && piece.Color == enemyColor {
|
if piece.Type != Empty && piece.Color == enemyColor {
|
||||||
|
|
@ -500,13 +500,13 @@ func (g *Game) IsCheckmate(color Color) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
for row := 0; row < 8; row++ {
|
for row := range 8 {
|
||||||
for col := 0; col < 8; col++ {
|
for col := range 8 {
|
||||||
from := Position{row, col}
|
from := Position{row, col}
|
||||||
piece := g.Board.At(from)
|
piece := g.Board.At(from)
|
||||||
if piece.Type != Empty && piece.Color == color {
|
if piece.Type != Empty && piece.Color == color {
|
||||||
for toRow := 0; toRow < 8; toRow++ {
|
for toRow := range 8 {
|
||||||
for toCol := 0; toCol < 8; toCol++ {
|
for toCol := range 8 {
|
||||||
to := Position{toRow, toCol}
|
to := Position{toRow, toCol}
|
||||||
if g.isValidMoveIgnoringCheck(from, to) {
|
if g.isValidMoveIgnoringCheck(from, to) {
|
||||||
originalPiece := g.Board.At(to)
|
originalPiece := g.Board.At(to)
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ resource "google_cloud_run_v2_service" "chessh" {
|
||||||
|
|
||||||
scaling {
|
scaling {
|
||||||
min_instance_count = 0
|
min_instance_count = 0
|
||||||
max_instance_count = 10
|
max_instance_count = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
32
main.go
32
main.go
|
|
@ -331,7 +331,7 @@ func (m model) renderBoardWithInfo() string {
|
||||||
if i < len(boardLines) {
|
if i < len(boardLines) {
|
||||||
s.WriteString(boardLines[i])
|
s.WriteString(boardLines[i])
|
||||||
} else {
|
} else {
|
||||||
s.WriteString(strings.Repeat(" ", 27)) // Board width padding
|
s.WriteString(strings.Repeat(" ", 26)) // Board width padding (8*3 + 2 for row numbers)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.WriteString(" ")
|
s.WriteString(" ")
|
||||||
|
|
@ -349,41 +349,43 @@ func (m model) renderBoardWithInfo() string {
|
||||||
func (m model) getBoardLines() []string {
|
func (m model) getBoardLines() []string {
|
||||||
var lines []string
|
var lines []string
|
||||||
|
|
||||||
lines = append(lines, " a b c d e f g h ")
|
lines = append(lines, " a b c d e f g h ")
|
||||||
|
|
||||||
for row := 7; row >= 0; row-- {
|
for row := 7; row >= 0; row-- {
|
||||||
var line strings.Builder
|
var line strings.Builder
|
||||||
line.WriteString(fmt.Sprintf("%d ", row+1))
|
line.WriteString(fmt.Sprintf("%d", row+1))
|
||||||
|
|
||||||
for col := 0; col < 8; col++ {
|
for col := range 8 {
|
||||||
pos := Position{row, col}
|
pos := Position{row, col}
|
||||||
piece := m.game.Board.At(pos)
|
piece := m.game.Board.At(pos)
|
||||||
|
|
||||||
cellChar := piece.String()
|
cellChar := piece.String()
|
||||||
if piece.Type == Empty {
|
if piece.Type == Empty {
|
||||||
if (row+col)%2 == 0 {
|
cellChar = " "
|
||||||
cellChar = "·"
|
|
||||||
} else {
|
|
||||||
cellChar = " "
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Determine background color
|
||||||
|
var bgColor string
|
||||||
if m.cursorRow == row && m.cursorCol == col {
|
if m.cursorRow == row && m.cursorCol == col {
|
||||||
line.WriteString(fmt.Sprintf("[%s]", cellChar))
|
bgColor = "\033[41m" // Red background for cursor
|
||||||
} else if m.selected != nil && m.selected.Row == row && m.selected.Col == col {
|
} else if m.selected != nil && m.selected.Row == row && m.selected.Col == col {
|
||||||
line.WriteString(fmt.Sprintf("<%s>", cellChar))
|
bgColor = "\033[43m" // Yellow background for selected
|
||||||
} else if slices.Contains(m.validMoves, pos) {
|
} else if slices.Contains(m.validMoves, pos) {
|
||||||
line.WriteString(fmt.Sprintf("*%s*", cellChar))
|
bgColor = "\033[42m" // Green background for valid moves
|
||||||
|
} else if (row+col)%2 == 0 {
|
||||||
|
bgColor = "\033[47m" // White background for light squares
|
||||||
} else {
|
} else {
|
||||||
line.WriteString(fmt.Sprintf(" %s ", cellChar))
|
bgColor = "\033[40m" // Black background for dark squares
|
||||||
}
|
}
|
||||||
|
|
||||||
|
line.WriteString(fmt.Sprintf("%s %s \033[0m", bgColor, cellChar))
|
||||||
}
|
}
|
||||||
|
|
||||||
line.WriteString(fmt.Sprintf(" %d", row+1))
|
line.WriteString(fmt.Sprintf("%d", row+1))
|
||||||
lines = append(lines, line.String())
|
lines = append(lines, line.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
lines = append(lines, " a b c d e f g h ")
|
lines = append(lines, " a b c d e f g h ")
|
||||||
|
|
||||||
return lines
|
return lines
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue