From 63e973a3be0eae1b4559aaab40bcf39d01f76cf2 Mon Sep 17 00:00:00 2001 From: Marco Date: Wed, 28 Jun 2023 11:39:44 +0200 Subject: [PATCH] Fix king moves and fix formatting. --- chess/board.go | 13 ++++++------- chess/free_squares.go | 32 +++++++++++++++++--------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/chess/board.go b/chess/board.go index 638f5a4..e3fb693 100644 --- a/chess/board.go +++ b/chess/board.go @@ -181,9 +181,9 @@ func (b Board) getLastMove() types.Move { func (b Board) getCopyOfBoard() Board { return Board{ - position: b.position.getCopyOfPosition(), - history: b.history, - colorToMove: b.colorToMove, + position: b.position.getCopyOfPosition(), + history: b.history, + colorToMove: b.colorToMove, } } @@ -200,12 +200,11 @@ func (b *Board) handleSpecialMove(move types.Move) bool { var was bool var pieceAtStartSquare = b.getPieceAt(move.StartSquare) - switch pieceAtStartSquare.(type) { + switch piece := pieceAtStartSquare.(type) { case Pawn: - pawn := pieceAtStartSquare.(Pawn) - was = pawn.HandlePossiblePromotion(b, move) + was = piece.HandlePossiblePromotion(b, move) if !was { - was = pawn.HandleEnPassant(b, move, b.getLastMove()) + was = piece.HandleEnPassant(b, move, b.getLastMove()) } } return was diff --git a/chess/free_squares.go b/chess/free_squares.go index 84516db..9d2b4b8 100644 --- a/chess/free_squares.go +++ b/chess/free_squares.go @@ -31,14 +31,15 @@ func (b *Board) GetNonBlockedDiagonals(fromSquare types.Coordinate) []types.Coor } func (b *Board) GetNonBlockedKingMoves(fromSquare types.Coordinate) []types.Coordinate { - return b.getNonBlockedConsecutive(fromSquare.GetAllKingMoves(), fromSquare) + return b.getNonBlockedRaw(fromSquare.GetAllKingMoves(), fromSquare) } func (b *Board) GetNonBlockedKnightMoves(fromSquare types.Coordinate) []types.Coordinate { - allKnightMoves := fromSquare.GetAllKnightMoves() - return b.getNonBlockedForKnights(allKnightMoves, fromSquare) + return b.getNonBlockedRaw(fromSquare.GetAllKnightMoves(), fromSquare) } +// returns only those squares in a straight/diagonal that are not blocked +// until it hits a blocking piece (excluding same color, including diff color) func (b *Board) getNonBlockedConsecutive( squaresToCheck []types.Coordinate, sourceSquare types.Coordinate, @@ -50,8 +51,8 @@ func (b *Board) getNonBlockedConsecutive( piece := b.getPieceAt(square) if piece != nil { if piece.GetColor() == pieceOnSourceSquare.GetColor() { - //We do not append squares with same-colored pieces - //and also not the squares behind it + //We do not append squares with same-colored pieces + //and also not the squares behind it break } // if there is an opposite colored piece we append it but @@ -64,18 +65,19 @@ func (b *Board) getNonBlockedConsecutive( return nonBlocked } -func (b *Board) getNonBlockedForKnights( +// returns any square in squaresToCheck that are not blocked +func (b *Board) getNonBlockedRaw( squaresToCheck []types.Coordinate, sourceSquare types.Coordinate, ) []types.Coordinate { - pieceOnSourceSquare := b.getPieceAt(sourceSquare) - nonBlocked := []types.Coordinate{} + pieceOnSourceSquare := b.getPieceAt(sourceSquare) + nonBlocked := []types.Coordinate{} - for _, square := range squaresToCheck { - piece := b.getPieceAt(square) - if piece == nil || piece.GetColor() != pieceOnSourceSquare.GetColor() { - nonBlocked = append(nonBlocked, square) - } - } - return nonBlocked + for _, square := range squaresToCheck { + piece := b.getPieceAt(square) + if piece == nil || piece.GetColor() != pieceOnSourceSquare.GetColor() { + nonBlocked = append(nonBlocked, square) + } + } + return nonBlocked }