Implement bishop moves
This commit is contained in:
parent
a8dd06590a
commit
8e881fc0b3
|
@ -221,7 +221,89 @@ func (b *Board) moveRook(position string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Board) moveBishop(position string) error {
|
func (b *Board) moveBishop(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++
|
||||||
|
yPrev--
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Bishop && 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 {
|
||||||
|
xPrev++
|
||||||
|
yPrev++
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Bishop && 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--
|
||||||
|
yPrev++
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Bishop && 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--
|
||||||
|
yPrev--
|
||||||
|
piece = b.getPiece(xPrev, yPrev)
|
||||||
|
if piece != nil {
|
||||||
|
if piece.Name == Bishop && piece.Color == b.turn {
|
||||||
|
b.tiles[xPrev][yPrev] = nil
|
||||||
|
b.tiles[x][y] = piece
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("no bishop found that can move to %s", position)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Board) moveKnight(position string) error {
|
func (b *Board) moveKnight(position string) error {
|
||||||
|
|
|
@ -109,6 +109,27 @@ func TestBoardMoveKnight(t *testing.T) {
|
||||||
assertNoPiece(t, b, "g8")
|
assertNoPiece(t, b, "g8")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBoardMoveBishop(t *testing.T) {
|
||||||
|
b := chess.NewBoard()
|
||||||
|
|
||||||
|
b.Move("Bc4")
|
||||||
|
|
||||||
|
assertMoveError(t, b, "Bc4", "no bishop found that can move to c4")
|
||||||
|
|
||||||
|
b.Move("e3")
|
||||||
|
b.Move("e6")
|
||||||
|
|
||||||
|
b.Move("Bc4")
|
||||||
|
|
||||||
|
assertPiece(t, b, "c4", chess.Bishop, chess.Light)
|
||||||
|
assertNoPiece(t, b, "f1")
|
||||||
|
|
||||||
|
b.Move("Bc5")
|
||||||
|
|
||||||
|
assertPiece(t, b, "c5", chess.Bishop, chess.Dark)
|
||||||
|
assertNoPiece(t, b, "f8")
|
||||||
|
}
|
||||||
|
|
||||||
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