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));
            }
        }