public override void ParseOptions(string input) { var inputOptions = input.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).Skip(1).ToList(); GameMode gameMode; if (!inputOptions.Any() || !Enum.TryParse(inputOptions[0], true, out gameMode)) { throw new InvalidCommandOptionsException("Unknown game mode."); } if (gameMode == GameMode.Custom) { int height, width, mines; if (inputOptions.Count < 4) { throw new InvalidCommandOptionsException("Invalid number of parameters for custom mode."); } if (!int.TryParse(inputOptions[1], out height) || !int.TryParse(inputOptions[2], out width) || !int.TryParse(inputOptions[3], out mines)) { throw new InvalidCommandOptionsException("Cannot parse parameters for custom mode. Integers are required."); } _gameOptions = GameOptions.BuildCustom(height, width, mines); _windowName = inputOptions.Count > 4 ? inputOptions[4] : null; } else { _gameOptions = GameOptions.GetPredefined(gameMode); _windowName = inputOptions.Count > 1 ? inputOptions[1] : null; } }