public string EngineShouldCreateCorrectCollapseReels(string wheelString, string indicesString, int level)
        {
            wheelString = string.Join(',', wheelString.Split('|'));
            var config  = new Configuration();
            var spinBet = MainGameEngine.GenerateSpinBet(new RequestContext <SpinArgs>("", "", PlatformType.Web)
            {
                GameSetting = new Model.Entity.GameSetting {
                    GameSettingGroupId = 0
                },
                Currency = new Model.Entity.Currency {
                    Id = 0
                },
                Parameters = new SpinArgs
                {
                    LineBet    = 1,
                    Multiplier = 1
                }
            });

            var targetWheel             = MainGameEngine.GetTargetWheel(level, config);
            var topIndices              = Array.ConvertAll(indicesString.Split(','), Convert.ToInt32).ToList();
            var wheel                   = new Wheel(Game.WheelWidth, Game.WheelHeight, wheelString);
            var winPositions            = MainGameEngine.GenerateWinPositions(config.Payline, config.PayTable, wheel, spinBet.LineBet, spinBet.Lines, 1);
            var matchingSymbolPositions = MainGameEngine.GenerateMatchingSymbolPositions(config.SymbolCollapsePairs, winPositions.Select(wp => wp.Symbol).ToList(), wheel);
            var bombAndStopperPositions = MainGameEngine.GenerateBombAndStopperPositions(wheel, winPositions);

            var freeSpinResult           = new Games.NuwaAndTheFiveElements.Models.GameResults.Spins.FreeSpinResult(level, spinBet, wheel, topIndices, winPositions, matchingSymbolPositions, bombAndStopperPositions);
            var freeSpinCollapsingResult = FreeSpinBonusEngine.CreateFreeSpinCollapsingResult(freeSpinResult, targetWheel, config.SymbolCollapsePairs, config.Payline, config.PayTable);

            return(string.Join('|', freeSpinCollapsingResult.Wheel.Reels.Select(symbols => string.Join(',', symbols))));
        }
        public bool FreeSpinResultShouldHaveBombCollapseWhenReelsHaveBombAndWin(string wheelString, int level, decimal bet)
        {
            var config  = new Configuration();
            var spinBet = MainGameEngine.GenerateSpinBet(new RequestContext <SpinArgs>("", "", PlatformType.Web)
            {
                GameSetting = new Model.Entity.GameSetting {
                    GameSettingGroupId = 0
                },
                Currency = new Model.Entity.Currency {
                    Id = 0
                },
                Parameters = new SpinArgs
                {
                    LineBet    = bet,
                    Multiplier = 1
                }
            });

            var wheel        = new Wheel(Game.WheelWidth, Game.WheelHeight, wheelString);
            var winPositions = MainGameEngine.GenerateWinPositions(
                config.Payline,
                config.PayTable,
                wheel,
                spinBet.LineBet,
                spinBet.Lines,
                spinBet.Multiplier);
            var bombAndStopperPositions = MainGameEngine.GenerateBombAndStopperPositions(wheel, winPositions);

            var freeSpinResult = new Games.NuwaAndTheFiveElements.Models.GameResults.Spins.FreeSpinResult(level, spinBet, wheel, null, winPositions, null, bombAndStopperPositions);

            return(freeSpinResult.HasBomb && freeSpinResult.Collapse);
        }