Fix reverse engineering requirements
parent
a580740354
commit
fb67e44fb4
|
@ -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)
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in New Issue