public override BoardMinified UndoRule(BoardMinified board, HistoryItemMinified toUndo, HistoryItemMinified lastMoveBeforeUndo) { if ( lastMoveBeforeUndo != null && toUndo.IsKill && lastMoveBeforeUndo.IsKill && toUndo.Player == lastMoveBeforeUndo.Player) { var piece = board.GetPiece(toUndo.From.X, toUndo.From.Y, toUndo.Player); piece.ClearMoves(); var newPiece = NeedToCaptureRule.Check(piece, board, board.GetSize()); if (newPiece.HasAvailableMoves()) { board.ClearMoves(); board.UpdatePieceAvailableMoves(newPiece, toUndo.Player); if (board.ActivePlayer != lastMoveBeforeUndo.Player) { board.SwitchPlayers(); } return(board); } } return(NextUndo(board, toUndo, lastMoveBeforeUndo)); }
public override BoardMinified ApplyRule(BoardMinified board, HistoryItemMinified latestMove) { board.ClearMoves(); var(newBoard, noNeedToCallNext) = CheckRule(board); if (!noNeedToCallNext) { return(Next(newBoard, latestMove)); } return(newBoard); }
public override BoardMinified UndoRule(BoardMinified board, HistoryItemMinified toUndo, HistoryItemMinified lastMoveBeforeUndo) { board.ClearMoves(); var(newBoard, noNeedToCallNext) = CheckRule(board); if (!noNeedToCallNext) { return(NextUndo(newBoard, toUndo, lastMoveBeforeUndo)); } return(newBoard); }
public override BoardMinified ApplyRule(BoardMinified board, HistoryItemMinified latestMove) { if (latestMove.IsKill) { var piece = board.GetPiece(latestMove.To.X, latestMove.To.Y, latestMove.Player); piece.ClearMoves(); var newPiece = NeedToCaptureRule.Check(piece, board, board.GetSize()); if (newPiece.HasAvailableMoves()) { board.ClearMoves(); board.UpdatePieceAvailableMoves(newPiece, board.ActivePlayer); return(board); } } return(Next(board, latestMove)); }