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