mirror of
https://github.com/maaslalani/gambit.git
synced 2025-02-05 13:05:17 +02:00
working fen
This commit is contained in:
parent
724419ce7f
commit
d8531fc59b
11
board/fen.go
11
board/fen.go
@ -29,6 +29,7 @@ func (b Board) ToFen() string {
|
||||
// empty squares we have encountered so far
|
||||
if emptyCounter > 0 {
|
||||
sb.WriteString(strconv.Itoa(emptyCounter))
|
||||
emptyCounter = 0
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,6 +41,7 @@ func (b Board) ToFen() string {
|
||||
// empty squares dump the number of empty squares
|
||||
if emptyCounter > 0 {
|
||||
sb.WriteString(strconv.Itoa(emptyCounter))
|
||||
emptyCounter = 0
|
||||
}
|
||||
|
||||
if r > 0 {
|
||||
@ -68,18 +70,21 @@ func FromFen(fen string) (Board, error) {
|
||||
ranks := strings.Split(parts[0], "/")
|
||||
|
||||
for r, rank := range ranks {
|
||||
for c, char := range rank {
|
||||
col := 0
|
||||
for _, char := range rank {
|
||||
// Empty squares, append n empty pieces into the board
|
||||
if char >= '1' && char <= '8' {
|
||||
n := int(char - '0')
|
||||
for i := 0; i < n; i++ {
|
||||
b.Grid[7-r][c+i] = piece.Empty()
|
||||
b.Grid[7-r][col] = piece.Empty()
|
||||
col += 1
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
p := piece.FromFen(string(char))
|
||||
b.Grid[7-r][c] = p
|
||||
b.Grid[7-r][col] = p
|
||||
col += 1
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,3 +33,30 @@ func TestFen(t *testing.T) {
|
||||
t.Errorf("FromFen()\nActual = %s\nTarget = %s", fromFen.ToFen(), fen)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFenMoved(t *testing.T) {
|
||||
fen := "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 1"
|
||||
grid := [8][8]Piece{
|
||||
{RW, NW, BW, QW, KW, BW, NW, RW},
|
||||
{PW, PW, PW, PW, OO, PW, PW, PW},
|
||||
{OO, OO, OO, OO, OO, OO, OO, OO},
|
||||
{OO, OO, OO, OO, PW, OO, OO, OO},
|
||||
{OO, OO, OO, OO, OO, OO, OO, OO},
|
||||
{OO, OO, OO, OO, OO, OO, OO, OO},
|
||||
{PB, PB, PB, PB, PB, PB, PB, PB},
|
||||
{RB, NB, BB, QB, KB, BB, NB, RB},
|
||||
}
|
||||
b := board.Board{
|
||||
Grid: grid,
|
||||
Turn: White,
|
||||
}
|
||||
|
||||
if b.ToFen() != fen {
|
||||
t.Errorf("ToFen()\nActual = %s\nTarget = %s", b.ToFen(), fen)
|
||||
}
|
||||
|
||||
fromFen, _ := board.FromFen(fen)
|
||||
if fromFen.ToFen() != fen {
|
||||
t.Errorf("FromFen()\nActual = %s\nTarget = %s", fromFen, fen)
|
||||
}
|
||||
}
|
||||
|
13
board/move.go
Normal file
13
board/move.go
Normal file
@ -0,0 +1,13 @@
|
||||
package board
|
||||
|
||||
import (
|
||||
"github.com/maaslalani/gambit/piece"
|
||||
"github.com/maaslalani/gambit/position"
|
||||
)
|
||||
|
||||
func (b *Board) Move(from, to string) {
|
||||
f := position.ToPosition(from)
|
||||
t := position.ToPosition(to)
|
||||
b.Grid[t.Row][t.Col] = b.Grid[f.Row][f.Col]
|
||||
b.Grid[f.Row][f.Col] = piece.Empty()
|
||||
}
|
19
board/move_test.go
Normal file
19
board/move_test.go
Normal file
@ -0,0 +1,19 @@
|
||||
package board
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
. "github.com/maaslalani/gambit/squares"
|
||||
)
|
||||
|
||||
func TestMove(t *testing.T) {
|
||||
initial := "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
|
||||
expected := "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 1"
|
||||
b, _ := FromFen(initial)
|
||||
b.reversed = true
|
||||
b.Move(E2, E4)
|
||||
|
||||
if b.ToFen() != expected {
|
||||
t.Errorf("Expected %s, got %s", expected, b.ToFen())
|
||||
}
|
||||
}
|
@ -10,8 +10,9 @@ type model struct {
|
||||
}
|
||||
|
||||
func Model() tea.Model {
|
||||
b, _ := board.FromFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1")
|
||||
return model{
|
||||
board: board.New(),
|
||||
board: b,
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user