refactor(rule): update RuleSet to use GameContext
Replace Situation parameter with GameContext across all RuleSet methods to align with the new game state abstraction. Updated imports to use the api module's types (GameContext, Square, Move). StandardRules will need to be updated in Task 3 to implement the new interface signature and use api types instead of maichess. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,29 +1,33 @@
|
||||
package de.nowchess.rules
|
||||
|
||||
import de.nowchess.chess.{Move, Situation, Square}
|
||||
import de.nowchess.api.game.GameContext
|
||||
import de.nowchess.api.board.Square
|
||||
import de.nowchess.api.move.Move
|
||||
|
||||
/** Extension point for chess rule variants. Implement to support Chess960, etc. */
|
||||
/** Extension point for chess rule variants (standard, Chess960, etc.).
|
||||
* All rule queries are stateless: given a GameContext, return the answer.
|
||||
*/
|
||||
trait RuleSet:
|
||||
/** All pseudo-legal moves for the piece on `square` (ignores check). */
|
||||
def candidateMoves(situation: Situation, square: Square): List[Move]
|
||||
def candidateMoves(context: GameContext, square: Square): List[Move]
|
||||
|
||||
/** Legal moves for `square`: candidates that don't leave own king in check. */
|
||||
def legalMoves(situation: Situation, square: Square): List[Move]
|
||||
def legalMoves(context: GameContext, square: Square): List[Move]
|
||||
|
||||
/** All legal moves for the side to move. */
|
||||
def allLegalMoves(situation: Situation): List[Move]
|
||||
def allLegalMoves(context: GameContext): List[Move]
|
||||
|
||||
/** True if the side to move's king is in check. */
|
||||
def isCheck(situation: Situation): Boolean
|
||||
def isCheck(context: GameContext): Boolean
|
||||
|
||||
/** True if the side to move is in check and has no legal moves. */
|
||||
def isCheckmate(situation: Situation): Boolean
|
||||
def isCheckmate(context: GameContext): Boolean
|
||||
|
||||
/** True if the side to move is not in check and has no legal moves. */
|
||||
def isStalemate(situation: Situation): Boolean
|
||||
def isStalemate(context: GameContext): Boolean
|
||||
|
||||
/** True if neither side has enough material to checkmate. */
|
||||
def isInsufficientMaterial(situation: Situation): Boolean
|
||||
def isInsufficientMaterial(context: GameContext): Boolean
|
||||
|
||||
/** True if halfMoveClock >= 100 (50-move rule). */
|
||||
def isFiftyMoveRule(situation: Situation): Boolean
|
||||
def isFiftyMoveRule(context: GameContext): Boolean
|
||||
|
||||
Reference in New Issue
Block a user