1
0
mirror of https://github.com/maaslalani/gambit.git synced 2025-02-05 13:05:17 +02:00

working fen

This commit is contained in:
Maas Lalani 2021-12-22 11:26:45 -05:00
parent 724419ce7f
commit d8531fc59b
No known key found for this signature in database
GPG Key ID: 5A6ED5CBF1A0A000
5 changed files with 69 additions and 4 deletions

View File

@ -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
}
}

View File

@ -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
View 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
View 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())
}
}

View File

@ -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,
}
}