diff --git a/modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala b/modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala index 4de0665..e9e4474 100644 --- a/modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala +++ b/modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala @@ -163,6 +163,12 @@ object DefaultRules extends RuleSet: CastlingMove("e8", "c8", "d8", "a8", MoveType.CastleQueenside)) moves.toList + private def queensideBSquare(kingToAlg: String): List[String] = + kingToAlg match + case "c1" => List("b1") + case "c8" => List("b8") + case _ => List.empty + private def addCastleMove( context: GameContext, moves: scala.collection.mutable.ListBuffer[Move], @@ -170,11 +176,8 @@ object DefaultRules extends RuleSet: castlingMove: CastlingMove ): Unit = if castlingRight then - // For queenside, also check the square between king destination and rook start - val extraSqs = if castlingMove.kingToAlg == "c1" then List("b1") - else if castlingMove.kingToAlg == "c8" then List("b8") - else List.empty - val clearSqs = (List(castlingMove.middleAlg, castlingMove.kingToAlg) ++ extraSqs).flatMap(Square.fromAlgebraic) + val clearSqs = (List(castlingMove.middleAlg, castlingMove.kingToAlg) ++ queensideBSquare(castlingMove.kingToAlg)) + .flatMap(Square.fromAlgebraic) if squaresEmpty(context.board, clearSqs) then for kf <- Square.fromAlgebraic(castlingMove.kingFromAlg)