Fix reverse engineering requirements

pull/1/merge
Thibault Duplessis 2012-03-05 22:08:42 +01:00
parent a580740354
commit fb67e44fb4
2 changed files with 9 additions and 7 deletions

View File

@ -1,9 +1,11 @@
package lila.chess
final class ReverseEngineering(from: Game, to: Game) {
final class ReverseEngineering(fromGame: Game, to: Board) {
val from = fromGame.board
def move: Option[(Pos, Pos)] =
if (to.turns != from.turns + 1) None else findMove
if (from.pieces == to.pieces) None else findMove
private def findMove: Option[(Pos, Pos)] = {
findMovedPieces match {
@ -13,14 +15,14 @@ final class ReverseEngineering(from: Game, to: Game) {
}
private def findPieceNewPos(pos: Pos, piece: Piece): Option[Pos] = for {
dests from.situation.destinations get pos
dest dests find { to.board(_) map (_ is piece.color) getOrElse false }
dests fromGame.situation.destinations get pos
dest dests find { to(_) map (_ is piece.color) getOrElse false }
} yield dest
private def findMovedPieces: List[(Pos, Piece)] = {
val fromPlayerPieces = from.board piecesOf from.player
val toPlayerPieces = to.board piecesOf from.player
val fromPlayerPieces = from piecesOf fromGame.player
val toPlayerPieces = to piecesOf fromGame.player
fromPlayerPieces map {
case (pos, piece) (pos, piece, toPlayerPieces get pos)

View File

@ -5,7 +5,7 @@ import format.Visual.addNewLines
class ReverseEngineeringTest extends ChessTest {
def findMove(g1: Game, g2: Game) = (new ReverseEngineering(g1, g2)).move
def findMove(g1: Game, g2: Game) = (new ReverseEngineering(g1, g2.board)).move
def play(game: Game, moves: (Pos, Pos)*): Game =
game.playMoveList(moves).fold(e sys.error(e.toString), identity)
val playedGame = play(Game(),