Implement rook moves
This commit is contained in:
parent
8e881fc0b3
commit
2c6a7133e3
|
@ -217,7 +217,85 @@ func (b *Board) movePawn(position string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Board) moveRook(position string) error {
|
func (b *Board) moveRook(position string) error {
|
||||||
return nil
|
var (
|
||||||
|
x int
|
||||||
|
y int
|
||||||
|
xPrev int
|
||||||
|
yPrev int
|
||||||
|
piece *Piece
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
if x, y, err = getXY(position); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
xPrev = x
|
||||||
|
yPrev = y
|
||||||
|
for xPrev >= 0 && xPrev < 8 && yPrev >= 0 && yPrev < 8 {
|
||||||
|
xPrev++
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Rook && piece.Color == b.turn {
|
||||||
|
b.tiles[xPrev][yPrev] = nil
|
||||||
|
b.tiles[x][y] = piece
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
// direction blocked by other piece
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xPrev = x
|
||||||
|
yPrev = y
|
||||||
|
for xPrev >= 0 && xPrev < 8 && yPrev >= 0 && yPrev < 8 {
|
||||||
|
yPrev--
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Rook && piece.Color == b.turn {
|
||||||
|
b.tiles[xPrev][yPrev] = nil
|
||||||
|
b.tiles[x][y] = piece
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xPrev = x
|
||||||
|
yPrev = y
|
||||||
|
for xPrev >= 0 && xPrev < 8 && yPrev >= 0 && yPrev < 8 {
|
||||||
|
xPrev--
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Rook && piece.Color == b.turn {
|
||||||
|
b.tiles[xPrev][yPrev] = nil
|
||||||
|
b.tiles[x][y] = piece
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xPrev = x
|
||||||
|
yPrev = y
|
||||||
|
for xPrev >= 0 && xPrev < 8 && yPrev >= 0 && yPrev < 8 {
|
||||||
|
yPrev++
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Rook && piece.Color == b.turn {
|
||||||
|
b.tiles[xPrev][yPrev] = nil
|
||||||
|
b.tiles[x][y] = piece
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("no rook found that can move to %s", position)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Board) moveBishop(position string) error {
|
func (b *Board) moveBishop(position string) error {
|
||||||
|
|
|
@ -130,6 +130,27 @@ func TestBoardMoveBishop(t *testing.T) {
|
||||||
assertNoPiece(t, b, "f8")
|
assertNoPiece(t, b, "f8")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBoardMoveRook(t *testing.T) {
|
||||||
|
b := chess.NewBoard()
|
||||||
|
|
||||||
|
b.Move("Ra3")
|
||||||
|
|
||||||
|
assertMoveError(t, b, "Ra3", "no rook found that can move to a3")
|
||||||
|
|
||||||
|
b.Move("a4")
|
||||||
|
b.Move("a5")
|
||||||
|
|
||||||
|
b.Move("Ra3")
|
||||||
|
|
||||||
|
assertPiece(t, b, "a3", chess.Rook, chess.Light)
|
||||||
|
assertNoPiece(t, b, "a1")
|
||||||
|
|
||||||
|
b.Move("Ra6")
|
||||||
|
|
||||||
|
assertPiece(t, b, "a6", chess.Rook, chess.Dark)
|
||||||
|
assertNoPiece(t, b, "a8")
|
||||||
|
}
|
||||||
|
|
||||||
func assertPiece(t *testing.T, b *chess.Board, position string, name chess.PieceName, color chess.Color) {
|
func assertPiece(t *testing.T, b *chess.Board, position string, name chess.PieceName, color chess.Color) {
|
||||||
p := b.At(position)
|
p := b.At(position)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue