Exemplo n.º 1
0
        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 spinResult           = new Games.NuwaAndTheFiveElements.Models.GameResults.Spins.SpinResult(level, spinBet, wheel, topIndices, winPositions, matchingSymbolPositions, bombAndStopperPositions);
            var collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(spinResult, targetWheel, config.SymbolCollapsePairs, config.Payline, config.PayTable);

            return(string.Join('|', collapsingSpinResult.Wheel.Reels.Select(symbols => string.Join(',', symbols))));
        }
Exemplo n.º 2
0
        public static CollapsingSpinResult GenerateWithBonusCollapsingSpinResult(int level)
        {
            var generateCount        = 0;
            var config               = new Configuration();
            var spinResult           = GenerateWinningSpinResult(level);
            var targetWheel          = MainGameEngine.GetTargetWheel(level, config, spinResult.Wheel.ReelStripsId);
            var collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(
                spinResult,
                targetWheel,
                config.Payline,
                config.MainGamePayTable);

            while (!collapsingSpinResult.HasFeatureBonus)
            {
                spinResult           = GenerateWinningSpinResult(level);
                targetWheel          = MainGameEngine.GetTargetWheel(level, config, spinResult.Wheel.ReelStripsId);
                collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(
                    spinResult,
                    targetWheel,
                    config.Payline,
                    config.MainGamePayTable);
                generateCount++;
                Debug.WriteLine($"CollapsingSpinResult Generate Count: {generateCount}");
            }

            return(collapsingSpinResult);
        }
Exemplo n.º 3
0
        public string EngineShouldCreateCorrectCollapseReels(string wheelString, string indicesString, int level)
        {
            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    = config.WeightedReelStripsCollection.ElementAt(1).Wheel;
            var topIndices     = Array.ConvertAll(indicesString.Split(','), Convert.ToInt32).ToList();
            var wheel          = new Wheel(Game.WheelWidth, Game.WheelHeight, wheelString.ToFormattedWheelString());
            var winPositions   = MainGameEngine.GenerateWinPositions(config.Payline, config.MainGamePayTable, wheel, spinBet.LineBet, spinBet.Lines, spinBet.Multiplier);
            var bonusPositions = MainGameEngine.GenerateBonusPositions(wheel);

            var spinResult           = new SpinResult(spinBet, wheel, topIndices, winPositions, bonusPositions);
            var collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(spinResult, targetWheel, config.Payline, config.MainGamePayTable);

            return(string.Join('|', collapsingSpinResult.Wheel.Reels.Select(symbols => string.Join(',', symbols))));
        }
Exemplo n.º 4
0
        public void EngineShouldCreateCollapsingResultSameRoundId(int level)
        {
            var config = new Configuration();

            var spinResult           = GenerateWinningSpinResult(level);
            var targetWheel          = MainGameEngine.GetTargetWheel(level, config, spinResult.Wheel.ReelStripsId);
            var collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(spinResult, targetWheel, config.Payline, config.MainGamePayTable);

            Assert.IsTrue(spinResult.RoundId == collapsingSpinResult.RoundId);
        }
Exemplo n.º 5
0
        public static CollapsingSpinResult GenerateCollapsingSpinResult(int level)
        {
            var config               = new Configuration();
            var spinResult           = GenerateWinningSpinResult(level);
            var targetWheel          = MainGameEngine.GetTargetWheel(level, config, spinResult.Wheel.ReelStripsId);
            var collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(
                spinResult,
                targetWheel,
                config.Payline,
                config.MainGamePayTable);

            return(collapsingSpinResult);
        }
Exemplo n.º 6
0
        public void EngineShouldCreateCollapsingResultSameRoundId(int level)
        {
            var config = new Configuration();

            var spinResult           = GenerateWinningSpinResult(level);
            var collapsingSpinResult = GenerateWinningCollapsingSpinResult(level);

            var spinResultCollapsingResult           = CollapsingBonusEngine.CreateCollapsingSpinResult(spinResult, config.Wheels[level], config.SymbolCollapsePairs, config.Payline, config.PayTable);
            var collapsingSpinResultCollapsingResult = CollapsingBonusEngine.CreateCollapsingSpinResult(collapsingSpinResult, config.Wheels[level], config.SymbolCollapsePairs, config.Payline, config.PayTable);

            Assert.IsTrue(spinResult.RoundId == spinResultCollapsingResult.RoundId);
            Assert.IsTrue(collapsingSpinResultCollapsingResult.RoundId == collapsingSpinResult.RoundId);
        }
Exemplo n.º 7
0
        public void EngineShouldCreateCollapsingResultSameRoundId(int level)
        {
            var config = new Configuration();

            var spinResult               = GenerateWinningFreeSpinResult(level);
            var referenceWheel           = MainGameEngine.GetTargetWheel(level, config, spinResult.Wheel.ReelStripsId);
            var freeSpinCollapsingResult = GenerateWinningFreeSpinCollapsingResult(level);
            var freeSpinBonus            = FreeSpinBonusEngine.CreateFreeSpinBonus(freeSpinCollapsingResult);

            freeSpinBonus.UpdateBonus(freeSpinCollapsingResult);

            var spinResultCollapsingResult = CollapsingBonusEngine.CreateCollapsingSpinResult(spinResult, referenceWheel, config.BonusConfig.FreeSpin.Multipliers, config.Payline, config.PayTable);
            var freeSpinCollapsingResultCollapsingResult = FreeSpinBonusEngine.CreateFreeSpinBonusResult(freeSpinBonus, freeSpinCollapsingResult);

            Assert.IsTrue(spinResult.RoundId == spinResultCollapsingResult.RoundId);
            Assert.IsTrue(freeSpinCollapsingResultCollapsingResult.RoundId == freeSpinCollapsingResult.RoundId);
        }
        public void EngineShouldCreateCollapsingSpinResultWithCorrectMultiplier(int level)
        {
            var config      = new Configuration();
            var spinResult  = GenerateWinningSpinResult(level);
            var targetWheel = MainGameEngine.GetTargetWheel(level, config, spinResult.Wheel.ReelStripsId);

            CollapsingSpinResult collapsingSpinResult = null;

            do
            {
                collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(spinResult, targetWheel, config.BonusConfig.Collapse.Multipliers, config.Payline, config.PayTable);

                if (collapsingSpinResult.Win > 0)
                {
                    spinResult = collapsingSpinResult;
                }
            } while (collapsingSpinResult.Win > 0);

            var targetMultiplier = CollapsingBonusEngine.GetCollapseMultiplier(config.BonusConfig.Collapse.Multipliers, collapsingSpinResult.CollapsingSpinCount - 1);

            Assert.IsTrue(spinResult.AvalancheMultiplier == targetMultiplier);
        }
        public void EngineShouldIncreaseWinPositionMultiplierOnSpinCollapse(int level)
        {
            var config      = new Configuration();
            var spinResult  = GenerateWinningSpinResult(level);
            var targetWheel = MainGameEngine.GetTargetWheel(level, config, spinResult.Wheel.ReelStripsId);

            CollapsingSpinResult collapsingSpinResult = null;

            do
            {
                collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(spinResult, targetWheel, config.BonusConfig.Collapse.Multipliers, config.Payline, config.PayTable);

                if (collapsingSpinResult.Win > 0)
                {
                    spinResult = collapsingSpinResult;
                }
            } while (collapsingSpinResult.Win > 0);

            var targetMultiplier  = spinResult.AvalancheMultiplier;
            var targetWinPosition = spinResult.WinPositions.FirstOrDefault();
            var symbolMultiplier  = config.PayTable.GetOdds(targetWinPosition.Symbol, targetWinPosition.Count);

            Assert.IsTrue(symbolMultiplier * targetMultiplier == targetWinPosition.Multiplier);
        }
Exemplo n.º 10
0
        public void TestFreeGameFullCycle(int gameId, int level, string reelStripId)
        {
            var timeStart           = DateTime.Now;
            var module              = SimulationHelper.GetModule(gameId);
            var configuration       = new Configuration();
            var targetRtpLevel      = Math.Round(configuration.RtpLevels.FirstOrDefault(rl => rl.Level == level).Rtp, 2);
            var totalSummaryData    = new SummaryData();
            var spinRequestContext  = SimulationHelper.GetMockSpinRequestContext(gameId);
            var bonusRequestContext = SimulationHelper.GetMockBonusRequestContext(0, gameId);
            var targetWheel         = MainGameEngine.GetTargetWheel(level, configuration, reelStripId);
            var userGameKey         = new UserGameKey()
            {
                UserId = -1,
                GameId = gameId,
                Level  = level
            };

            var spinBet = MainGameEngine.GenerateSpinBet(spinRequestContext);
            var wheel   = new Wheel(Game.WheelWidth, Game.WheelHeight)
            {
                ReelStripsId = reelStripId
            };

            for (var reel1 = 0; reel1 < targetWheel[0].Count; reel1++)
            {
                for (var reel2 = 0; reel2 < targetWheel[1].Count; reel2++)
                {
                    for (var reel3 = 0; reel3 < targetWheel[2].Count; reel3++)
                    {
                        for (var reel4 = 0; reel4 < targetWheel[3].Count; reel4++)
                        {
                            for (var reel5 = 0; reel5 < targetWheel[4].Count; reel5++)
                            {
                                wheel.Reels[0] = SimulationHelper.GetReelRange(targetWheel[0], reel1);
                                wheel.Reels[1] = SimulationHelper.GetReelRange(targetWheel[1], reel2);
                                wheel.Reels[2] = SimulationHelper.GetReelRange(targetWheel[2], reel3);
                                wheel.Reels[3] = SimulationHelper.GetReelRange(targetWheel[3], reel4);
                                wheel.Reels[4] = SimulationHelper.GetReelRange(targetWheel[4], reel5);

                                var topIndices = new List <int> {
                                    reel1, reel2, reel3, reel4, reel5
                                };
                                var avalancheMultiplier = configuration.BonusConfig.FreeSpin.Multipliers.First();
                                var winPositions        = MainGameEngine.GenerateWinPositions(configuration.Payline, configuration.PayTable, wheel, spinBet.LineBet, spinBet.Lines, avalancheMultiplier);
                                var bonusPositions      = MainGameEngine.GenerateBonusPositions(wheel);

                                var spinResult = new SpinResult(spinBet, wheel, topIndices, winPositions, bonusPositions, avalancheMultiplier)
                                {
                                    PlatformType = spinRequestContext.Platform,
                                    Level        = level
                                };

                                totalSummaryData.Update(spinResult);

                                if (spinResult.HasBonus)
                                {
                                    var bonus = module.CreateBonus(spinResult).Value;

                                    if (bonus is FreeSpinBonus)
                                    {
                                        bonus = CollapsingBonusEngine.CreateCollapsingSpinBonus(spinResult);
                                    }

                                    var collapsingSpinBonus = bonus as CollapsingSpinBonus;

                                    while (!bonus.IsCompleted)
                                    {
                                        var previousSpinResult = collapsingSpinBonus.PreviousGameResult == null ? collapsingSpinBonus.SpinResult : collapsingSpinBonus.PreviousSpinResult;

                                        var referenceWheel       = MainGameEngine.GetTargetWheel(level, configuration, previousSpinResult.Wheel.ReelStripsId);
                                        var collapsingSpinResult = CollapsingBonusEngine.CreateCollapsingSpinResult(
                                            previousSpinResult,
                                            referenceWheel,
                                            configuration.BonusConfig.FreeSpin.Multipliers,
                                            configuration.Payline,
                                            configuration.PayTable);

                                        collapsingSpinBonus.UpdateBonus(collapsingSpinResult);
                                        var bonusResult = CollapsingBonusEngine.CreateCollapsingBonusResult(collapsingSpinBonus, collapsingSpinResult);

                                        totalSummaryData.UpdateBonus(bonusResult);

                                        bonus = bonusResult.Bonus;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            totalSummaryData.DisplayData(level, timeStart, targetRtpLevel);
            var resultOverallRtp = Math.Round(totalSummaryData.RtpData.OverallRtp, 2);

            var isWithinRtp = totalSummaryData.RtpData.OverallRtp >= targetRtpLevel - 0.5m && totalSummaryData.RtpData.OverallRtp <= targetRtpLevel + 0.5m;

            Assert.True(isWithinRtp, $"RTP not matching. The result is {resultOverallRtp}. Expected is {targetRtpLevel}");
        }