From b6b3654edbc414a9373869d41757b48db9da42a7 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sat, 25 Feb 2012 15:39:46 +0100 Subject: [PATCH] Attempt to generalize castle side --- src/main/scala/model/Actor.scala | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/scala/model/Actor.scala b/src/main/scala/model/Actor.scala index 7606f29fa3..fe82093f1a 100644 --- a/src/main/scala/model/Actor.scala +++ b/src/main/scala/model/Actor.scala @@ -41,21 +41,24 @@ case class Actor(piece: Piece, pos: Pos, board: Board) { } private def castle: Implications = { - val kingSide: Option[Implication] = for { + def side(trans: Direction, compare: (Int, Int) ⇒ Boolean): Option[Implication] = for { kingPos ← board kingPosOf color if board.history canCastleKingSide color rook = color.rook rookPos ← board actorsOf color collectFirst { - case a if (a is rook) && (a.pos.x > kingPos.x) ⇒ a.pos + case a if (a is rook) && compare(a.pos.x, kingPos.x) ⇒ a.pos } - newKingPos ← kingPos > 2 + newKingPos ← trans(kingPos) newRookPos ← newKingPos.left b1 ← board take rookPos b2 ← b1.move(kingPos, newKingPos) b3 ← b2.place(rook, newRookPos) } yield (newKingPos, b3) - kingSide toMap + List( + side(p ⇒ p > 2, (x, y) ⇒ x > y), + side(p ⇒ p < 2, (x, y) ⇒ x < y) + ).flatten toMap } private def shortRange(dirs: Directions): Implications = {