Memorize dead pieces

pull/1/merge
Thibault Duplessis 2012-03-03 13:46:39 +01:00
parent ef1e0a02ac
commit a7b4ee2873
2 changed files with 33 additions and 13 deletions

View File

@ -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)
}

View File

@ -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)
}
}
}
}