diff --git a/chess/src/main/scala/Game.scala b/chess/src/main/scala/Game.scala index 997741154b..32ea529f1e 100644 --- a/chess/src/main/scala/Game.scala +++ b/chess/src/main/scala/Game.scala @@ -3,17 +3,25 @@ package lila.chess import format.PgnDump case class Game( - board: Board, - player: Color, + board: Board = Board(), + player: Color = White, pgnMoves: String = "", - clock: Option[Clock] = None) { + clock: Option[Clock] = None, + deads: Map[Pos, Piece] = Map.empty) { - def playMove(from: Pos, to: Pos, promotion: PromotableRole = Queen): Valid[Game] = for { - move ← situation.move(from, to, promotion) + def playMove( + orig: Pos, + dest: Pos, + promotion: PromotableRole = Queen): Valid[Game] = for { + move ← situation.move(orig, dest, promotion) } yield { val newGame = copy( board = move.afterWithPositionHashesUpdated, - player = !player + player = !player, + deads = (for { + cpos ← move.capture + cpiece ← board(cpos) + } yield deads + ((cpos, cpiece))) getOrElse deads ) val pgnMove = PgnDump.move(situation, move, newGame.situation) newGame.copy(pgnMoves = (pgnMoves + " " + pgnMove).trim) @@ -23,10 +31,3 @@ case class Game( def pgnMovesList = pgnMoves.split(' ').toList } - -object Game { - - def apply(): Game = Game( - board = Board(), - player = White) -} diff --git a/chess/src/test/scala/GameTest.scala b/chess/src/test/scala/GameTest.scala new file mode 100644 index 0000000000..abb33672bc --- /dev/null +++ b/chess/src/test/scala/GameTest.scala @@ -0,0 +1,19 @@ +package lila.chess + +import Pos._ +import format.Visual.addNewLines + +class GameTest extends ChessTest { + + "capture a piece" should { + "add it to the dead pieces" in { + val game = Game().playMoves( + E2 -> E4, + D7 -> D5, + E4 -> D5) + game must beSuccess.like { + case g ⇒ g.deads must_== Map(D5 -> Black.pawn) + } + } + } +}