public void OnPost()
        {
            // Overwrite current rules
            foreach (var key in Request.Form.Keys)
            {
                // Get value for current key
                Request.Form.TryGetValue(key, out var strVal);

                // Skip empty fields
                if (string.IsNullOrWhiteSpace(strVal) || string.IsNullOrEmpty(strVal))
                {
                    continue;
                }

                // Skip non-integer parameters
                if (!int.TryParse(key, out var intKey))
                {
                    continue;
                }

                if (!int.TryParse(strVal, out var intVal))
                {
                    StatusMsg = "Non-integer rules!";
                    IsError   = true;
                    return;
                }

                // Update static rule context
                ActiveGame.TryChangeRule((RuleType)intKey, intVal);
            }

            IsStatus          = true;
            StatusMsg         = "Rules saved!";
            IsDisplayContinue = true;
        }
        public static void ChangeRuleValue(RuleType ruleType)
        {
            var rule = ActiveGame.GetRule(ruleType);

            var menu = new Menu {
                Title     = $"Change rule {rule.RuleType}",
                MenuTypes = new List <MenuType> {
                    MenuType.Input, MenuType.RuleIntInput
                },
                MenuItems = new List <MenuItem> {
                    new MenuItem {
                        Description = $"Current value: {rule.Value}"
                    },
                    new MenuItem {
                        Description = $"Enter a value between {rule.MinVal} and {rule.MaxVal}"
                    }
                }
            };

            while (true)
            {
                // Run menu, ask user for integer input
                var input = menu.RunMenu();

                // User entered exit shortcut
                if (input.ToUpper() == MenuInitializers.GoBackItem.Shortcut)
                {
                    return;
                }

                // Attempt to parse input as int
                if (string.IsNullOrEmpty(input) || !int.TryParse(input, out var value))
                {
                    Console.WriteLine("Value not an integer!");
                    Console.ReadKey(true);
                    continue;
                }

                if (!ActiveGame.TryChangeRule(ruleType, value))
                {
                    Console.WriteLine("Value not in range!");
                    Console.ReadKey(true);
                    continue;
                }

                Console.WriteLine("Rule value changed!");
                Console.ReadKey(true);
                break;
            }
        }
        public static void Load(int gameId)
        {
            using (var ctx = new AppDbContext()) {
                // Reset current game to initial state
                ActiveGame.Init();

                // Find the DAL game
                var dalGame = ctx.Games.Find(gameId);

                // Load game data into static context
                ActiveGame.Players      = DomainConverter.GetAndConvertPlayers(ctx, gameId);
                ActiveGame.Moves        = DomainConverter.GetAndConvertMoves(ctx, gameId, ActiveGame.Players);
                ActiveGame.Winner       = ActiveGame.Players.FirstOrDefault(player => player.Name.Equals(dalGame.Winner));
                ActiveGame.RoundCounter = dalGame.RoundCounter;
                ActiveGame.GameId       = dalGame.Id;

                // Load rules into static context
                var dalRules = ctx.Rules.Where(rule => rule.Game.Id == gameId);
                foreach (var dalRule in dalRules)
                {
                    ActiveGame.TryChangeRule((RuleType)dalRule.RuleType, dalRule.Value);
                }
            }
        }