protected virtual bool WouldBeSuicideOrInvalidSelfMoveInCheck(Move move, Player player) { ChessUtilities.ThrowIfNull(move, nameof(move)); var copy = new AtomarChessGame(Board, player); copy.ApplyMove(move, true); bool ownKingIsGone = copy.KingIsGone(player); bool otherKingIsGone = copy.KingIsGone(ChessUtilities.GetOpponentOf(player)); if (ownKingIsGone) { return(true); } else if (otherKingIsGone) { return(false); } else { return(copy.IsInCheck(player)); } }