From d8531fc59bac2729d2d9134341bf0bf9120a8be8 Mon Sep 17 00:00:00 2001 From: Maas Lalani Date: Wed, 22 Dec 2021 11:26:45 -0500 Subject: [PATCH] working fen --- board/fen.go | 11 ++++++++--- board/fen_test.go | 27 +++++++++++++++++++++++++++ board/move.go | 13 +++++++++++++ board/move_test.go | 19 +++++++++++++++++++ game/game.go | 3 ++- 5 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 board/move.go create mode 100644 board/move_test.go diff --git a/board/fen.go b/board/fen.go index ec09f33..319a6aa 100644 --- a/board/fen.go +++ b/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 } } diff --git a/board/fen_test.go b/board/fen_test.go index 0931181..64e1387 100644 --- a/board/fen_test.go +++ b/board/fen_test.go @@ -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) + } +} diff --git a/board/move.go b/board/move.go new file mode 100644 index 0000000..e576a11 --- /dev/null +++ b/board/move.go @@ -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() +} diff --git a/board/move_test.go b/board/move_test.go new file mode 100644 index 0000000..1e9e26c --- /dev/null +++ b/board/move_test.go @@ -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()) + } +} diff --git a/game/game.go b/game/game.go index bf84e34..3b20802 100644 --- a/game/game.go +++ b/game/game.go @@ -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, } }