public bool IsLineBetValid(Game game, SpinBet bet) { var isValid = game.IsBetAllLines && bet.Lines == game.Lines || bet.Lines > 0 && bet.Lines <= game.Lines; return(isValid); }
public bool IsCoinValid(string coinsDenomination, SpinBet bet) { return(coinsDenomination.Split(';') .Select(decimal.Parse) .ToList() .Any(s => s == bet.LineBet)); }
public void TestFreeSpinFeatgure() { // arrange var freeSpin = new FreeSpin(1, 0); var user = new UserGameKey(-1, 30); var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var action = new FreeSpinAction(1, PlatformType.None, bet, () => { return(new List <IReadOnlyList <int> > { new int[] { 1, 1, 1 }, new int[] { 2, 2, 2, 2 }, new int[] { 3, 3, 3, 3 }, new int[] { 4, 4, 4, 4 }, new int[] { 5, 5, 5 } }); }); // action var bikiniBeachState = FreeSpinReducer.Dispatch(freeSpin, action); var result = bikiniBeachState.Result; // Assert Assert.IsTrue(bikiniBeachState.State is Finish); Assert.AreEqual(result.Wheel[0], new[] { 1, 1, 1 }); Assert.AreEqual(result.Wheel[1], new[] { 10, 10, 10 }); Assert.AreEqual(result.Wheel[2], new[] { 3, 3, 3 }); Assert.AreEqual(result.Wheel[3], new[] { 4, 4, 4 }); Assert.AreEqual(result.Wheel[4], new[] { 5, 5, 5 }); }
public void TestHoneyFeatgure() { // arrange var honeyItem = new HoneyItem(4, 1, new Prize(3, 0), new Prize(1, 0), 0); var user = new UserGameKey(-1, 103); var bet = new SpinBet(user, PlatformType.None) { Lines = 25, LineBet = 1.0m, Multiplier = 1 }; var action = new Domain.Action(1, user, bet, 1, PlatformType.None); // action var state = HoneyReducer.dispatch(action, honeyItem); var honeyState = state.BonusState as Honey; // Assert Assert.AreEqual(3, honeyState.Item.Count); Assert.AreEqual(1, honeyState.Item.CurrentStep); Assert.AreEqual(2, honeyState.Item.Pot.Count); Assert.AreEqual(1, honeyState.Item.Pot.CurrentStep); Assert.AreEqual(1, honeyState.Item.BeeHive.Count); Assert.AreEqual(0, honeyState.Item.BeeHive.CurrentStep); Assert.AreEqual(false, honeyState.Item.IsCompleted); Assert.IsTrue(state.Result.Win > 0); }
public bool IsMultiplierValid(string coinsMultiplier, SpinBet bet) { return(coinsMultiplier .Split(';') .Select(int.Parse) .ToList() .Any(s => s == bet.Multiplier)); }
public void TestReSpinFeature() { // arrange var user = new UserGameKey(-1, 32); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 10, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "FortuneKoi", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new FortuneKoiBonus { SpinBet = bet }); var state = new ReSpinState(new List <int[]> { new int[] { }, new int[] { 7, 7, 7 }, new int[] { }, new int[] { }, new int[] { } }, new bool[] { false, true, false, false, false }); //Action var response = state.Handle(requestBonusContext, bonusContext); var result = response.result; var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None)); var element = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace); // Assert Assert.IsNotNull(element); Assert.IsTrue(element.Element("data").Element("spin").Element("wheels") != null); Assert.AreEqual(result.Win, decimal.Parse(element.Element("win").Value)); Assert.AreEqual(result.Win > 0, element.Element("data").Element("spin").Element("winposition").Descendants().Count() > 0); if (result.SpinResult.HasBonus) { Assert.IsNotNull(element.Element("data").Element("spin").Element("bonus")); Assert.IsTrue(string.IsNullOrEmpty(element.Element("data").Element("spin").Element("bonusposition").Value) == false); Assert.IsNotNull(element.Element("data").Element("spin").Element("bonusposition")); Assert.IsTrue(element.Element("data").Element("spin").Element("bonusposition").Descendants().Count() > 0); } }
public void TestFreeSpinFeature() { // arrange var wheel = new DragonRichesWheel { Reels = new List <int[]>(), CoinCollapsing = new DragonRichesWheel.CoinCollapse() }; var holdSpinItem = new FreeSpin(new State(6, 0), 0); var user = new UserGameKey(-1, 104); var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var action = new FreeSpinAction(1, PlatformType.None, bet, () => new List <IReadOnlyList <int> > { new List <int> { 1, 1, 1 }, new List <int> { 2, 2, 2 }, new List <int> { 3, 3, 3 }, new List <int> { 4, 4, 4 }, new List <int> { 5, 5, 5, } }); // action var dragonState = FreeSpinReducer.Dispatch(holdSpinItem, action); // Assert if (dragonState.State is FreeSpin) { var freeSpinState = dragonState.State as FreeSpin; var scatters = dragonState.Result.Wheel.Reels.Sum(ele => ele.Count(item => item == 9)); Assert.AreEqual(freeSpinState.State.Count >= 5, true); Assert.AreEqual(false, freeSpinState.IsCompleted); Assert.AreEqual(scatters >= 3, freeSpinState.State.Count >= 12); } if (dragonState.State is HoldFreeSpin) { var holdFreeSpinState = dragonState.State as HoldFreeSpin; Assert.AreEqual(3, holdFreeSpinState.HoldSpin.State.Count == 3); Assert.AreEqual(3, holdFreeSpinState.FreeSpin.State.Count == 5); Assert.AreEqual(true, dragonState.Result.Wheel.Reels.Sum(ele => ele.Count(item => item == 12)) >= 6); Assert.AreEqual(false, holdFreeSpinState.IsCompleted); } }
public void TestExplodingFeature() { // arrange var user = new UserGameKey(-1, 109); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "FortuneChimes", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new FortuneChimesBonus { SpinBet = bet }); var bonusPositions = new List <BonusPosition> { new BonusPosition { RowPositions = new List <int> { 1, 1, 1, 0, 0 } } }; var wheel = new FortuneChimesWheel { Reels = new List <int[]> { new[] { 1, -1, -1 }, new[] { 1, -1, -1 }, new[] { 1, -1, -1 }, new[] { -1, -1, -1 }, new[] { -1, -1, -1 } }, Indices = new int[] { 1, 2, 3, 4, 5 } }; var reSpinCollapse = new ReSpinCollapse(bonusPositions, wheel, new List <int[]> { new int[0], new int[0], new int[0], new int[] { -1, -2, -3 }, new int[] { -1, -2, -3 } }); var state = new ReSpinState(reSpinCollapse); //Action var response = state.Handle(requestBonusContext, bonusContext); // Assert Assert.AreEqual(response.result.Win > 0, response.nextState is ReSpinState); Assert.AreEqual(response.result.Win > 0, !response.nextState.IsCompleted); Assert.AreEqual(response.result.Win == 0, response.nextState is Finish); }
public void TestHoneyFreeSpinFeature() { // arrange var honeyItem = new HoneyItem(4, 3, new Prize(0, 0), new Prize(1, 0), 0); var freeSpinItem = new BonusItem(3, 3, new Prize(2, 0), 1); var honeyFreeSpinItem = new BearHoneyFreeSpin(honeyItem, freeSpinItem); var user = new UserGameKey(-1, 103); var bet = new SpinBet(user, PlatformType.None) { Lines = 25, LineBet = 1.0m, Multiplier = 1 }; var action = new Domain.Action(1, user, bet, 1, PlatformType.None); // action var state = HoneyFreeSpinReducer.dispatch(action, honeyFreeSpinItem); // Assert Assert.AreEqual(false, state.BonusState.IsHoney); if (state.BonusState.IsHoneyFreeSpin) { var honeyFreeSpinState = state.BonusState as HoneyFreeSpin; var honey = honeyFreeSpinState.Item.Honey; var freeSpin = honeyFreeSpinState.Item.FreeSpin; Assert.AreEqual(4, honey.Id); Assert.AreEqual(3, honey.Multiplier); Assert.AreEqual(0, honey.Pot.Count); Assert.AreEqual(1, honey.Pot.CurrentStep); Assert.AreEqual(1, honey.BeeHive.Count); Assert.AreEqual(0, honey.BeeHive.CurrentStep); Assert.AreEqual(false, honey.IsCompleted); Assert.AreEqual(3, freeSpin.Id); Assert.AreEqual(3, freeSpin.Multiplier); Assert.AreEqual(2, freeSpin.Prize.Count); Assert.AreEqual(0, freeSpin.Prize.CurrentStep); Assert.AreEqual(false, freeSpin.IsCompleted); } if (state.BonusState.IsFreeSpin) { var freeSpin = state.BonusState as FreeSpin; Assert.AreEqual(3, freeSpin.Item.Id); Assert.AreEqual(3, freeSpin.Item.Multiplier); Assert.AreEqual(2, freeSpin.Item.Prize.Count); Assert.AreEqual(0, freeSpin.Item.Prize.CurrentStep); Assert.AreEqual(false, freeSpin.Item.IsCompleted); Assert.AreEqual(state.Result.Win + freeSpinItem.CumulativeWin, freeSpin.Item.CumulativeWin); } }
public void TestReSpinFeature() { // arrange var user = new UserGameKey(-1, 32); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 10, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "FortuneKoi", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new FortuneKoiBonus { SpinBet = bet }); var state = new ReSpinState(new List <int[]> { new [] { 0, 1, 2 }, new [] { 0, 7, 1 }, new [] { 4, 5, 6 }, new [] { 1, 2, 3 }, new [] { 6, 5, 4 } }, new bool[] { false, true, false, false, false }); //Action var response = state.Handle(requestBonusContext, bonusContext); var spinResult = response.result.SpinResult; var wheel = spinResult.Wheel; // Assert Assert.AreEqual(spinResult.HasBonus, !response.nextState.IsCompleted); Assert.AreEqual(wheel[2].Any(item => item == 7) || wheel[3].Any(item => item == 7), response.nextState is ReSpinState); Assert.AreEqual(wheel[2].All(item => item < 7) && wheel[3].All(item => item < 7), response.nextState is Finish); }
public void TestHoldFreeSpinFeature() { // arrange var coins = new DragonRichesWheel.CoinCollapse(); coins.Add(new DragonRichesWheel.CoinUnfilled(new[] { new Coin(), new Coin(1), new Coin(5) })); coins.Add(new DragonRichesWheel.CoinUnfilled(new[] { new Coin(), new Coin(1), new Coin(5) })); coins.Add(new DragonRichesWheel.CoinUnfilled(new[] { new Coin(), new Coin(1), new Coin(5) })); coins.Add(new DragonRichesWheel.CoinUnfilled(new[] { new Coin(), new Coin(1), new Coin(5) })); coins.Add(new DragonRichesWheel.CoinUnfilled(new[] { new Coin(), new Coin(), new Coin() })); coins.TotalItems = 8; var user = new UserGameKey(-1, 104); var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var action = new HoldFreeSpinAction(1, PlatformType.None, bet); var holdSpinItem = new HoldFreeSpin( holdSpin: new HoldSpin( new State(3, 0), new List <int[]> { new int[3], new int[3], new int[3], new int[3], new int[3] }, coins), freeSpin: new FreeSpin(new State(5, 1), 1) ); // action var dragonState = HoldFreeSpinReducer.Dispatch(holdSpinItem, action); var holdSpinState = dragonState.State as HoldFreeSpin; var wheel = dragonState.Result.Wheel; // Assert Assert.NotNull(holdSpinState); Assert.AreEqual(holdSpinState.HoldSpin.State.Count >= 2, true); Assert.AreEqual(5, holdSpinState.FreeSpin.State.Count); Assert.AreEqual(wheel.CoinCollapsing.TotalItems, wheel.Coins.Sum(reward => reward.Count(item => item > 0))); Assert.IsTrue(dragonState.Result.Win == 0); Assert.AreEqual(false, holdSpinState.IsCompleted); }
public void TestFreeSpinFeature() { // arrange var freeSpinItem = new BonusItem(3, 3, new Prize(15, 0), 0); var user = new UserGameKey(-1, 103); var bet = new SpinBet(user, PlatformType.None) { Lines = 25, LineBet = 1.0m, Multiplier = 1 }; var action = new Domain.Action(1, user, bet, 1, PlatformType.None); // action var state = FreeSpinReducer.dispatch(action, freeSpinItem); // Assert Assert.AreEqual(false, state.BonusState.IsHoney); if (state.BonusState.IsFreeSpin) { var freeSpinState = state.BonusState as FreeSpin; Assert.AreEqual(3, freeSpinState.Item.Id); Assert.AreEqual(3, freeSpinState.Item.Multiplier); Assert.AreEqual(true, freeSpinState.Item.IsStarted); Assert.AreEqual(14, freeSpinState.Item.Prize.Count); Assert.AreEqual(1, freeSpinState.Item.Prize.CurrentStep); Assert.AreEqual(false, freeSpinState.Item.IsCompleted); } if (state.BonusState.IsHoneyFreeSpin) { var honeyFreeSpinState = state.BonusState as HoneyFreeSpin; Assert.AreEqual(4, honeyFreeSpinState.Item.Honey.Id); Assert.AreEqual(3, honeyFreeSpinState.Item.Honey.Multiplier); Assert.AreEqual(state.Result.Bonus.Count, honeyFreeSpinState.Item.Honey.Pot.Count); Assert.AreEqual(true, honeyFreeSpinState.Item.Honey.Pot.Count > 0 && honeyFreeSpinState.Item.Honey.Pot.Count < 6); Assert.AreEqual(0, honeyFreeSpinState.Item.Honey.Pot.CurrentStep); Assert.AreEqual(1, honeyFreeSpinState.Item.Honey.BeeHive.Count); Assert.AreEqual(0, honeyFreeSpinState.Item.Honey.BeeHive.CurrentStep); Assert.AreEqual(state.Result.Bonus.Count + 1, honeyFreeSpinState.Item.Honey.TotalSpin); Assert.AreEqual(14, honeyFreeSpinState.Item.FreeSpin.Prize.Count); Assert.AreEqual(1, honeyFreeSpinState.Item.FreeSpin.Prize.CurrentStep); Assert.AreEqual(3, honeyFreeSpinState.Item.FreeSpin.Multiplier); Assert.AreEqual(false, honeyFreeSpinState.Item.IsCompleted); } }
private Dictionary <int, SpinBet> GenerateUserBets(List <UserGameKey> keys, decimal bet, int credits, int lines, int mp) { var sbs = new Dictionary <int, SpinBet>(); foreach (var k in keys) { var sb = new SpinBet(k, PlatformType.None) { LineBet = bet, Credits = credits, Lines = lines, Multiplier = mp }; sbs[k.UserId] = sb; } return(sbs); }
public void TestSarchophagusFeature() { // arrange var user = new UserGameKey(-1, 51); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 50, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Cleopatra", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new CleopatraBonus { SpinBet = bet }); var state = new SarchophagusState(new PreSpin(1, 0)); //Action var response = state.Handle(requestBonusContext, bonusContext); var result = response.result; var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None)); var element = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace); // Assert Assert.IsNotNull(element); Assert.AreEqual(result.Win > 0, element.Element("win") != null); Assert.AreEqual(result.Win, decimal.Parse(element.Element("win").Value)); Assert.AreEqual(result.Win > 0, element.Element("data").Element("spin").Element("winposition") != null); Assert.AreEqual("", element.Element("data").Element("spin").Element("winposition").Value); }
public void TestReSpinFreeSpinFeatgure() { // arrange var freeSpin = new ReSpinFreeSpin(1, 0, 1, new List <int[]> { new int[] { 9, 9, 9 }, new int[] { 9, -1, -1, -1 }, new int[] { 9, 9, 9, -1 }, new int[] { -1, 11, -1, -1 }, new int[] { -1, 1, -1 }, }, new FreeSpin(1, 0)); var user = new UserGameKey(-1, 80); var bet = new SpinBet(user, PlatformType.None) { Lines = 40, LineBet = 1.0m, Multiplier = 1 }; var action = new ReSpinAction(1, PlatformType.None, bet, () => { return(new List <IReadOnlyList <int> > { new int[] { 1, 1, 1 }, new int[] { 2, 2, 2, 2 }, new int[] { 3, 3, 3, 3 }, new int[] { 4, 4, 4, 4 }, new int[] { 5, 5, 5 } }); }); // action var geniesLuckState = ReSpinFreeSpinReducer.Dispatch(freeSpin, action); var result = geniesLuckState.Result; // Assert Assert.IsTrue(geniesLuckState.State is FreeSpin); Assert.AreEqual(result.Wheel[0], new[] { 9, 9, 9 }); Assert.AreEqual(result.Wheel[1], new[] { 9, 2, 2, 2 }); Assert.AreEqual(result.Wheel[2], new[] { 9, 9, 9, 3 }); Assert.AreEqual(result.Wheel[3], new[] { 4, 11, 4, 4 }); Assert.AreEqual(result.Wheel[4], new[] { 5, 5, 5 }); Assert.IsTrue(result.Win > 0); }
public void TestSmashingWildRtp(double ratio) { var spinBet = new SpinBet(new UserGameKey(-1, 93), PlatformType.None) { LineBet = 1, Multiplier = 1, Lines = 25 }; var totalBet = 0.0m; var totalWin = 0.0m; var profile = new Dictionary <int, decimal>(); for (var iter = 0; iter < 1000000; iter++) { totalBet += 25m; var result = GameReduce.wolvesSmashing(1, ratio, spinBet); Assert.IsTrue(result.Win > 0); totalWin += result.Win; } Console.WriteLine(String.Format("RTP.Total : {0,12:0.0000000000}", 100 * totalWin / totalBet)); }
public void TestReSpinWithWildExpendAllReelFeatgure() { // arrange var freeSpin = new FreeSpin(new[] { 0, 1, 2, 3, 0 }); var user = new UserGameKey(-1, 30); var bet = new SpinBet(user, PlatformType.None) { Lines = 20, LineBet = 1.0m, Multiplier = 1 }; var action = new FreeSpinAction(1, PlatformType.None, bet); // action var sevenWondersState = FreeSpinReducer.Dispatch(freeSpin, action); // Assert Assert.AreEqual(sevenWondersState.State is Finish, true); }
public void TestSwimWearFeatgure() { // arrange var swimWear = new SwimWear(1, 0); var user = new UserGameKey(-1, 80); var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var action = new SwimWearAction(1, PlatformType.None, bet); // action var bikiniBeachState = SwimWearReducer.Dispatch(swimWear, action); var result = bikiniBeachState.Result; // Assert Assert.IsTrue(bikiniBeachState.State is Finish); Assert.IsTrue(result.Win > 0); }
public void TestBodyPartFeatgure() { // arrange var bodyPart = new BodyPart(1, 0, new Item[6]); var user = new UserGameKey(-1, 3); var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var action = new BodyPartChooseAction(1, PlatformType.None, bet, 1); // action var bikiniBeachState = BodyPartReducer.Dispatch(bodyPart, action); var result = bikiniBeachState.Result; // Assert Assert.IsTrue(bikiniBeachState.State is Finish); Assert.AreEqual(result.Win, result.Wheel.Items[0].Prize); }
public void TestReSpinWithWildExpendAtSecondReelFeatgure() { // arrange var freeSpin = new FreeSpin(new[] { 0, 1, 0, 0, 0 }); var user = new UserGameKey(-1, 30); var bet = new SpinBet(user, PlatformType.None) { Lines = 20, LineBet = 1.0m, Multiplier = 1 }; var action = new FreeSpinAction(1, PlatformType.None, bet); // action var sevenWondersState = FreeSpinReducer.Dispatch(freeSpin, action); var result = sevenWondersState.Result; var wheel = result.Wheel.Reels; // Assert Assert.AreEqual(sevenWondersState.State is Finish, wheel[2].All(ele => ele != 7) && wheel[3].All(ele => ele != 7)); Assert.AreEqual(sevenWondersState.State is FreeSpin, wheel[2].Any(ele => ele == 7) || wheel[3].Any(ele => ele == 7)); }
public void TestFreeSpinFeature() { // arrange var user = new UserGameKey(-1, 51); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 50, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Cleopatra", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new CleopatraBonus { SpinBet = bet }); var state = new FreeSpinState(1, 0); //Action var reponse = state.Handle(requestBonusContext, bonusContext); // Assert Assert.AreEqual(!reponse.result.SpinResult.HasBonus, reponse.nextState.IsCompleted); Assert.AreEqual(!reponse.result.SpinResult.HasBonus, reponse.nextState is FreeSpinState); Assert.AreEqual(reponse.result.SpinResult.HasBonus, reponse.nextState is SarchophagusState); }
private decimal TestCollapsingPayout(string strwheel, decimal betperline, Func <int, int, int[], Wheel> wheelEncoding) { var alchemyReelsModule = new AlchemyReelsModule(null); var maxWin = 0m; var totalWin = 0m; var maxIndexPosition = new List <int>(); var requestContext = new RequestContext <SpinArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web); var summData = new SummaryData(); AlchemyReelsCommon.CreateWheels(new List <int>() { 3, 3, 3 }); Assert.That(strwheel, Is.Not.Null.Or.Empty); string[] arrstr = strwheel.Split(','); int[] arr = Array.ConvertAll(arrstr, int.Parse); var ugk = new UserGameKey() { UserId = -1, GameId = AlchemyReelsConfiguration.GameId, Level = 1 }; var sb = new SpinBet(ugk, PlatformType.None) { LineBet = 1, Credits = 0, Lines = AlchemyReelsConfiguration.BettingLines, Multiplier = 1 }; requestContext.Currency = new Currency() { Id = sb.CurrencyId }; requestContext.Parameters = new SpinArgs() { LineBet = sb.LineBet, BettingLines = sb.Lines }; requestContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; var sr = new AlchemyReelsCollapsingSpinResult() { SpinBet = new SpinBet(ugk, PlatformType.None) { Lines = AlchemyReelsConfiguration.BettingLines, Multiplier = 1, LineBet = betperline }, Wheel = wheelEncoding(AlchemyReelsConfiguration.Width, AlchemyReelsConfiguration.Height, arr) }; sr.TopIndices = new List <int>() { 6, 6, 49 }; totalWin = AlchemyReelsCommon.CalculateWin(sr); Console.WriteLine(); Console.WriteLine("--- POSITION TABLE ---"); foreach (AlchemyReelTableWin tw in sr.TableWins) { Console.WriteLine(String.Format("[WIN:{0} SYM:{1} COUNT:{2}]", tw.Win, tw.Card, tw.Count)); } if (sr.HasBonus) { var bonusCreated = alchemyReelsModule.CreateBonus(sr); var bonus = bonusCreated.Value; bonus.SpinTransactionId = sr.TransactionId; bonus.GameResult = sr; var requestBonusContext = new RequestContext <BonusArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web); requestBonusContext.Currency = new Currency() { Id = sb.CurrencyId }; requestBonusContext.Parameters = new BonusArgs() { Bonus = "CollapsingSpin" }; requestBonusContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; BonusResult bonusResult; int step = bonus.CurrentStep; do { var entity = new BonusEntity { UserId = ugk.UserId, GameId = AlchemyReelsConfiguration.GameId, Guid = bonus.Guid.ToString("N"), Data = bonus.ToByteArray(), BonusType = bonus.GetType().Name, Version = 2, IsOptional = bonus.IsOptional, IsStarted = bonus.IsStarted, RoundId = sr.RoundId }; bonusResult = alchemyReelsModule.ExecuteBonus(AlchemyReelsConfiguration.LevelOne, entity, requestBonusContext).Value; var alchemyFreeCollapsingSpinResult = bonusResult as AlchemyFreeCollapsingSpinResult; var win = alchemyFreeCollapsingSpinResult.Win; if (win > 0) { totalWin += win; } var maxTopIndices = alchemyFreeCollapsingSpinResult.SpinResult.TopIndices.ToList(); if (totalWin > maxWin) { maxWin = totalWin; maxIndexPosition = maxTopIndices; } Console.WriteLine("--- POSITION TABLE ---"); foreach (AlchemyReelTableWin tw in alchemyFreeCollapsingSpinResult.SpinResult.TableWins) { Console.WriteLine(String.Format("[WIN:{0} SYM:{1} COUNT:{2}]", tw.Win, tw.Card, tw.Count)); } bonus = bonusResult.Bonus; }while (!bonusResult.IsCompleted && bonusResult.Bonus != null); } Console.WriteLine($"Win : {totalWin}"); return(totalWin); }
private decimal TestPayout(string strwheel, decimal betperline, Func <int, int, int[], Wheel> wheelEncoding) { var alchemyReelsModule = new AlchemyReelsModule(null); var requestContext = new RequestContext <SpinArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web); AlchemyReelsCommon.CreateWheels(new List <int>() { 5, 5, 5 }); Assert.That(strwheel, Is.Not.Null.Or.Empty); var arrstr = strwheel.Split(','); var arr = Array.ConvertAll(arrstr, int.Parse); var ugk = new UserGameKey() { UserId = -1, GameId = AlchemyReelsConfiguration.GameId, Level = 1 }; var sb = new SpinBet(ugk, PlatformType.None) { LineBet = 1, Credits = 0, Lines = AlchemyReelsConfiguration.BettingLines, Multiplier = 1 }; requestContext.Currency = new Currency() { Id = sb.CurrencyId }; requestContext.Parameters = new SpinArgs() { LineBet = sb.LineBet, BettingLines = sb.Lines }; requestContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; var sr = new AlchemyReelsCollapsingSpinResult() { SpinBet = new SpinBet(ugk, PlatformType.None) { Lines = AlchemyReelsConfiguration.BettingLines, Multiplier = 1, LineBet = betperline }, Wheel = wheelEncoding(AlchemyReelsConfiguration.Width, AlchemyReelsConfiguration.Height, arr) }; var win = AlchemyReelsCommon.CalculateWin(sr); Console.WriteLine("--- WIN POSITION ---"); foreach (AlcheryReelsWinPosition wp in sr.WinPositions) { Console.WriteLine(String.Format("[LINE:{0} MUL:{1} WIN:{2}]", wp.Line, wp.Multiplier, wp.Win)); } Console.WriteLine(); Console.WriteLine("--- WIN TABLE ---"); foreach (AlchemyReelTableWin tw in sr.TableWins) { Console.WriteLine(String.Format("[CARD:{0} COUNT:{1} WILD:{2}]", tw.Card, tw.Count, tw.Wild)); } return(win); }
private decimal TestCollapsingPayout(string strwheel, decimal betperline, string strIndices, Func <int, int, int[], Wheel> wheelEncoding) { var PandaWarriorModule = new PandaWarriorModule(null); var maxWin = 0m; var totalWin = 0m; var maxIndexPosition = new List <int>(); var requestContext = new RequestContext <SpinArgs>("", PandaWarriorConfiguration.GameName, PlatformType.Web); var summData = new SummaryData(); Assert.That(strwheel, Is.Not.Null.Or.Empty); string[] arrstr = strwheel.Split(','); int[] arr = Array.ConvertAll(arrstr, int.Parse); string[] arrIndices = strIndices.Split(','); int[] indices = Array.ConvertAll(arrIndices, int.Parse); var ugk = new UserGameKey() { UserId = -1, GameId = PandaWarriorConfiguration.GameId, Level = 1 }; var sb = new SpinBet(ugk, PlatformType.None) { LineBet = 1, Credits = 0, Lines = PandaWarriorConfiguration.Lines, Multiplier = 1 }; requestContext.Currency = new Currency() { Id = sb.CurrencyId }; requestContext.Parameters = new SpinArgs() { LineBet = sb.LineBet, BettingLines = sb.Lines }; requestContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; var sr = new PandaWarriorCollapsingSpinResult() { SpinBet = new SpinBet(ugk, PlatformType.None) { Lines = PandaWarriorConfiguration.Lines, Multiplier = 1, LineBet = betperline }, Wheel = wheelEncoding(PandaWarriorConfiguration.Width, PandaWarriorConfiguration.Height, arr) }; sr.TopIndices = new List <int>(indices); totalWin = PandaWarriorCommon.CalculateWin(sr); Console.WriteLine(); Console.WriteLine("--- WIN POSITION ---"); foreach (PandaWarriorWinPosition wp in sr.WinPositions) { Console.WriteLine(String.Format("[LINE:{0} MUL:{1} WIN:{2}]", wp.Line, wp.Multiplier, wp.Win)); } Console.WriteLine(); Console.WriteLine("--- WIN TABLE ---"); foreach (PandaWarriorTableWin tw in sr.TableWins) { Console.WriteLine(String.Format("[CARD:{0} COUNT:{1} WILD:{2}]", tw.Card, tw.Count, tw.Wild)); } if (PandaWarriorCommon.CheckFreeSpin(sr.Wheel)) { sr.IsBonus = true; sr.IsFreeSpin = true; sr.InitialBonusPositions = PandaWarriorFreeSpinFeature.CreatePosition(sr); sr.CurrentStep = 1; sr.CurrentFreeSpinCounter = PandaWarriorConfiguration.FreeSpinCount; sr.NumOfFreeSpin = PandaWarriorConfiguration.FreeSpinCount; } else if (sr.Collapse) { sr.IsBonus = true; } if (sr.HasBonus) { var bonusCreated = PandaWarriorModule.CreateBonus(sr); var bonus = bonusCreated.Value; bonus.SpinTransactionId = sr.TransactionId; bonus.GameResult = sr; var requestBonusContext = new RequestContext <BonusArgs>("", PandaWarriorConfiguration.GameName, PlatformType.Web) { Currency = new Currency() { Id = sb.CurrencyId }, Parameters = new BonusArgs() { Bonus = "CollapsingSpin" }, GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId } }; BonusResult bonusResult; int step = bonus.CurrentStep; do { var entity = new BonusEntity { UserId = ugk.UserId, GameId = PandaWarriorConfiguration.GameId, Guid = bonus.Guid.ToString("N"), Data = bonus.ToByteArray(), BonusType = bonus.GetType().Name, Version = 2, IsOptional = bonus.IsOptional, IsStarted = bonus.IsStarted, RoundId = sr.RoundId }; bonusResult = PandaWarriorModule.ExecuteBonus(PandaWarriorConfiguration.LevelOne, entity, requestBonusContext).Value; var collapsingBonusResult = bonusResult as PandaWarriorCollapsingBonusResult; var win = collapsingBonusResult.Win; if (win > 0) { totalWin += win; } var maxTopIndices = collapsingBonusResult.SpinResult.TopIndices.ToList(); if (totalWin > maxWin) { maxWin = totalWin; maxIndexPosition = maxTopIndices; } Console.WriteLine("--- WIN POSITION ---"); foreach (PandaWarriorWinPosition wp in sr.WinPositions) { Console.WriteLine(String.Format("[LINE:{0} MUL:{1} WIN:{2}]", wp.Line, wp.Multiplier, wp.Win)); } Console.WriteLine(); Console.WriteLine("--- WIN TABLE ---"); foreach (PandaWarriorTableWin tw in sr.TableWins) { Console.WriteLine(String.Format("[CARD:{0} COUNT:{1} WILD:{2}]", tw.Card, tw.Count, tw.Wild)); } bonus = bonusResult.Bonus; }while (!bonusResult.IsCompleted && bonusResult.Bonus != null); } Console.WriteLine($"Win : {totalWin}"); return(totalWin); }
public void TestAlchemyReelsFullCycle(int level, List <int> rows) { var sdt = DateTime.Now; var serviceProvider = new ServiceCollection() .AddLogging() .BuildServiceProvider(); var logFactory = serviceProvider.GetService <ILoggerFactory>(); var logger = logFactory.CreateLogger <AlchemyReelsModule>(); var alchemyReelsModule = new AlchemyReelsModule(logger); var maxWin = 0m; var profile = new Dictionary <decimal, int>(); var maxIndexPosition = new List <int>(); AlchemyReelsCommon.CreateWheels(rows); var summData = new SummaryData(); for (var reel0 = 0; reel0 < AlchemyReelsConfiguration.Wheels[level].Reels[0].Count; reel0++) { for (var reel1 = 0; reel1 < AlchemyReelsConfiguration.Wheels[level].Reels[1].Count; reel1++) { for (var reel2 = 0; reel2 < AlchemyReelsConfiguration.Wheels[level].Reels[2].Count; reel2++) { var totalWin = (decimal)0; var ugk = new UserGameKey() { UserId = -1, GameId = AlchemyReelsConfiguration.GameId, Level = 1 }; var sb = new SpinBet(ugk, PlatformType.None) { LineBet = 1, Credits = 0, Lines = AlchemyReelsConfiguration.BettingLines, Multiplier = 1 }; var requestContext = new RequestContext <SpinArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web); var requestBonusContext = new RequestContext <BonusArgs>("", AlchemyReelsConfiguration.GameName, PlatformType.Web); requestContext.Currency = new Currency() { Id = sb.CurrencyId }; requestContext.Parameters = new SpinArgs() { LineBet = sb.LineBet, BettingLines = sb.Lines }; requestContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; var wheel = new Wheel(rows); wheel.Reels[0] = GetRange(AlchemyReelsConfiguration.Wheels[level].Reels[0], reel0, wheel.Rows[0]); wheel.Reels[1] = GetRange(AlchemyReelsConfiguration.Wheels[level].Reels[1], reel1, wheel.Rows[1]); wheel.Reels[2] = GetRange(AlchemyReelsConfiguration.Wheels[level].Reels[2], reel2, wheel.Rows[2]); var sr = new AlchemyReelsCollapsingSpinResult() { SpinBet = new SpinBet(ugk, PlatformType.None) { Lines = AlchemyReelsConfiguration.BettingLines, Multiplier = 1, LineBet = 1m }, Wheel = wheel }; sr.Wheel = wheel; sr.TopIndices = new List <int>() { reel0, reel1, reel2 }; AlchemyReelsCommon.CalculateWin(sr); totalWin = sr.Win; UpdateSummaryData(summData, sr); UpdateAlchemyReelsSummaryData(summData, sr); if (sr.HasBonus) { var bonusCreated = alchemyReelsModule.CreateBonus(sr); var bonus = bonusCreated.Value; bonus.SpinTransactionId = sr.TransactionId; bonus.GameResult = sr; requestBonusContext.Currency = new Currency() { Id = sb.CurrencyId }; requestBonusContext.Parameters = new BonusArgs() { Bonus = "CollapsingSpin" }; requestBonusContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; BonusResult bonusResult; var step = bonus.CurrentStep; do { var entity = new BonusEntity { UserId = ugk.UserId, GameId = AlchemyReelsConfiguration.GameId, Guid = bonus.Guid.ToString("N"), Data = bonus.ToByteArray(), BonusType = bonus.GetType().Name, Version = 2, IsOptional = bonus.IsOptional, IsStarted = bonus.IsStarted, RoundId = sr.RoundId }; bonusResult = alchemyReelsModule.ExecuteBonus(level, entity, requestBonusContext).Value; var alchemyFreeCollapsingSpinResult = bonusResult as AlchemyFreeCollapsingSpinResult; var win = alchemyFreeCollapsingSpinResult.Win; if (win > 0) { totalWin += win; } var maxTopIndices = alchemyFreeCollapsingSpinResult.SpinResult.TopIndices.ToList(); if (totalWin > maxWin) { maxWin = totalWin; maxIndexPosition = maxTopIndices; } UpdateSummaryDataCollapsing(summData, alchemyFreeCollapsingSpinResult.SpinResult); UpdateAlchemyReelsSummaryData(summData, alchemyFreeCollapsingSpinResult.SpinResult); bonus = bonusResult.Bonus; }while (!bonusResult.IsCompleted && bonusResult.Bonus != null); } if (!profile.ContainsKey(totalWin)) { profile.Add(totalWin, 1); } else { profile.TryGetValue(totalWin, out int count); profile.Remove(totalWin); profile.Add(totalWin, count + 1); } } } } DisplayAlchemyReelsSummaryData(level, 1, 10, summData, sdt, maxWin, maxIndexPosition); if (profile != null) { foreach (var item in profile.OrderByDescending(p => p.Key)) { Console.WriteLine($"Win : {item.Key}; {item.Value}"); } } }
public void TestExecuteBonus() { // Arrange var user = new UserGameKey(-1, 3); var spinBet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m }; var result1 = new BikiniBeachResult() { BonusPositions = new List <BonusPosition> { new BonusPosition { Line = 1, Multiplier = 1, RowPositions = new List <int> { 0, 2, 2, 2, 0 } } }, Bonus = new Stake(Guid.NewGuid(), 2) { Count = 1 } }; var result2 = new BikiniBeachResult() { BonusPositions = new List <BonusPosition> { new BonusPosition { Line = 1, Multiplier = 1, RowPositions = new List <int> { 0, 2, 2, 2, 0 } } }, Bonus = new Stake(Guid.NewGuid(), 3) { Count = 1 } }; var result3 = new BikiniBeachResult() { BonusPositions = new List <BonusPosition> { new BonusPosition { Line = 1, Multiplier = 1, RowPositions = new List <int> { 0, 2, 2, 2, 0 } } }, Bonus = new Stake(Guid.NewGuid(), 4) { Count = 1 } }; result1.SpinBet = spinBet; result2.SpinBet = spinBet; result3.SpinBet = spinBet; var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var requestContext = new RequestContext <SpinArgs>("simulation", "Bikini Beach", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, Game = new Game { Id = 3 } }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Bikini Beach", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonus1 = module.CreateBonus(result1).Value; var bonus2 = module.CreateBonus(result2).Value; var bonus3 = module.CreateBonus(result3).Value; var entity1 = new BonusEntity { UserId = userSession.UserId, GameId = requestContext.Game.Id, Guid = bonus1.Guid.ToString("N"), Data = Model.Utility.Extension.ToByteArray(bonus1), BonusType = bonus1.GetType().Name, Version = 3, IsOptional = bonus1.IsOptional, IsStarted = bonus1.IsStarted, RoundId = 1, BetReference = "" }; var entity2 = new BonusEntity { UserId = userSession.UserId, GameId = requestContext.Game.Id, Guid = bonus2.Guid.ToString("N"), Data = Model.Utility.Extension.ToByteArray(bonus2), BonusType = bonus2.GetType().Name, Version = 3, IsOptional = bonus2.IsOptional, IsStarted = bonus2.IsStarted, RoundId = 1, BetReference = "" }; var entity3 = new BonusEntity { UserId = userSession.UserId, GameId = requestContext.Game.Id, Guid = bonus3.Guid.ToString("N"), Data = Model.Utility.Extension.ToByteArray(bonus3), BonusType = bonus3.GetType().Name, Version = 3, IsOptional = bonus3.IsOptional, IsStarted = bonus3.IsStarted, RoundId = 1, BetReference = "" }; // action var freeSpinResult1 = module.ExecuteBonus(1, entity1, requestBonusContext).Value as BikiniBeachBonusSpinResult; var freeSpinResult2 = module.ExecuteBonus(1, entity2, requestBonusContext).Value as BikiniBeachBonusSpinResult; var freeSpinResult3 = module.ExecuteBonus(1, entity3, requestBonusContext).Value as BikiniBeachBonusSpinResult; // assert Assert.NotNull(freeSpinResult1); Assert.NotNull(freeSpinResult2); Assert.NotNull(freeSpinResult3); Assert.AreEqual(freeSpinResult1.SpinResult.HasBonus == false, ((BikiniBeachBonus)freeSpinResult1.Bonus).State is Finish); Assert.AreEqual(freeSpinResult2.SpinResult.HasBonus == false, ((BikiniBeachBonus)freeSpinResult1.Bonus).State is Finish); Assert.AreEqual(freeSpinResult3.SpinResult.HasBonus == false, ((BikiniBeachBonus)freeSpinResult1.Bonus).State is Finish); Assert.AreEqual(freeSpinResult1.GameResultType, GameResultType.FreeSpinResult); Assert.AreEqual(freeSpinResult2.GameResultType, GameResultType.RevealResult); Assert.AreEqual(freeSpinResult3.GameResultType, GameResultType.RevealResult); }
public void TestFaFaZhuFullCycle(int level, List <int> rows) { var sdt = DateTime.Now; var serviceProvider = new ServiceCollection() .AddLogging() .BuildServiceProvider(); var logFactory = serviceProvider.GetService <ILoggerFactory>(); var logger = logFactory.CreateLogger <FaFaZhuModule>(); var FaFaZhuModule = new FaFaZhuModule(logger); var maxWin = 0m; Dictionary <decimal, int> profile = new Dictionary <decimal, int>(); List <int> maxIndexPosition = new List <int>(); var summData = new SummaryData(); var reel1Pointer = 0; var reel2Pointer = 0; var reel3Pointer = 0; for (var reel0 = 0; reel0 < FaFaZhuConfiguration.VirtualReels[level][0]; reel0++) { for (var reel1 = 0; reel1 < FaFaZhuConfiguration.VirtualReels[level][1]; reel1++) { for (var reel2 = 0; reel2 < FaFaZhuConfiguration.VirtualReels[level][2]; reel2++) { var totalWin = (decimal)0; UserGameKey ugk = new UserGameKey() { UserId = -1, GameId = FaFaZhuConfiguration.GameId, Level = 1 }; SpinBet sb = new SpinBet(ugk, PlatformType.None) { LineBet = 1, Credits = 0, Lines = FaFaZhuConfiguration.BettingLines, Multiplier = 1 }; RequestContext <SpinArgs> requestContext = new RequestContext <SpinArgs>("", FaFaZhuConfiguration.GameName, PlatformType.Web); RequestContext <BonusArgs> requestBonusContext = new RequestContext <BonusArgs>("", FaFaZhuConfiguration.GameName, PlatformType.Web); requestContext.Currency = new Currency() { Id = sb.CurrencyId }; requestContext.Parameters = new SpinArgs() { LineBet = sb.LineBet, BettingLines = sb.Lines }; requestContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; var wheel = new Wheel(rows); for (int i = 1; i < FaFaZhuConfiguration.Wheels[level].Reels[0].Count - 1; i++) { if (reel0 < FaFaZhuConfiguration.CumulativeWeightReels[level][0][i - 1]) { reel1Pointer = i; wheel.Reels[0] = FaFaZhuCommon.GetRange(FaFaZhuConfiguration.Wheels[level].Reels[0], reel1Pointer, wheel.Rows[0]); break; } } for (int j = 1; j < FaFaZhuConfiguration.Wheels[level].Reels[1].Count - 1; j++) { if (reel1 < FaFaZhuConfiguration.CumulativeWeightReels[level][1][j - 1]) { reel2Pointer = j; wheel.Reels[1] = FaFaZhuCommon.GetRange(FaFaZhuConfiguration.Wheels[level].Reels[1], reel2Pointer, wheel.Rows[1]); break; } } for (int k = 1; k < FaFaZhuConfiguration.Wheels[level].Reels[2].Count - 1; k++) { if (reel2 < FaFaZhuConfiguration.CumulativeWeightReels[level][2][k - 1]) { reel3Pointer = k; wheel.Reels[2] = FaFaZhuCommon.GetRange(FaFaZhuConfiguration.Wheels[level].Reels[2], reel3Pointer, wheel.Rows[2]); break; } } FaFaZhuSpinResult sr = new FaFaZhuSpinResult(ugk) { SpinBet = new SpinBet(ugk, PlatformType.None) { Lines = FaFaZhuConfiguration.BettingLines, Multiplier = 1, LineBet = 1m }, WheelActual = wheel }; sr.WheelActual = wheel; FaFaZhuCommon.CalculateWin(sr); totalWin = sr.Win; UpdateSummaryData(summData, sr); UpdateFaFaZhuSummaryData(summData, sr); if (!profile.ContainsKey(totalWin)) { profile.Add(totalWin, 1); } else { profile.TryGetValue(totalWin, out int count); profile.Remove(totalWin); profile.Add(totalWin, count + 1); } } } } DisplayFaFaZhuSummaryData(level, 1, 10, summData, sdt, maxWin, maxIndexPosition); if (profile != null) { foreach (var item in profile.OrderByDescending(p => p.Key)) { Console.WriteLine($"Win : {item.Key}; {item.Value}"); } } }
public void TestExecuteBonus() { // Arrange var user = new UserGameKey(-1, 109); var spinBet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m }; var wheel = new FortuneChimesWheel { Reels = new List <int[]> { new int[] { 1, 1, 1 }, new int[] { 2, 10, 2 }, new int[] { 3, 10, 3 }, new int[] { 4, 10, 4 }, new int[] { 5, 5, 5 }, }, Indices = new int[] { 0, 0, 0, 0, 0 } }; var result1 = new FortuneChimesSpinResult(user) { Wheel = wheel, BonusPositions = new List <BonusPosition> { new BonusPosition { Line = 1, Multiplier = 1, RowPositions = new List <int> { 0, 2, 2, 2, 0 } } }, Bonus = new Stake(Guid.NewGuid(), 3) { Count = 1 } }; result1.SpinBet = spinBet; var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var requestContext = new RequestContext <SpinArgs>("simulation", "Cleopatra", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, Game = new Game { Id = 109 } }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Cleopatra", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonus1 = module.CreateBonus(result1).Value; var entity1 = new BonusEntity { UserId = userSession.UserId, GameId = requestContext.Game.Id, Guid = bonus1.Guid.ToString("N"), Data = Model.Utility.Extension.ToByteArray(bonus1), BonusType = bonus1.GetType().Name, Version = 3, IsOptional = bonus1.IsOptional, IsStarted = bonus1.IsStarted, RoundId = 1, BetReference = "" }; // action var freeSpinResult1 = module.ExecuteBonus(1, entity1, requestBonusContext).Value as FortuneChimesBonusSpinResult; // assert Assert.NotNull(freeSpinResult1); Assert.AreEqual(freeSpinResult1.GameResultType, GameResultType.FreeSpinResult); }
private decimal TestPayout(string strwheel, decimal betperline, Func <int, int, int[], Wheel> wheelEncoding) { var sdt = DateTime.Now; var serviceProvider = new ServiceCollection() .AddLogging() .BuildServiceProvider(); var logFactory = serviceProvider.GetService <ILoggerFactory>(); var logger = logFactory.CreateLogger <ChessRoyaleModule>(); var chessRoyaleModule = new ChessRoyaleModule(logger); var totalWin = 0m; List <int> maxIndexPosition = new List <int>(); RequestContext <SpinArgs> requestContext = new RequestContext <SpinArgs>("", ChessRoyaleConfiguration.GameName, PlatformType.Web); var summData = new SummaryData(); Assert.That(strwheel, Is.Not.Null.Or.Empty); string[] arrstr = strwheel.Split(','); int[] arr = Array.ConvertAll(arrstr, int.Parse); UserGameKey ugk = new UserGameKey() { UserId = -1, GameId = ChessRoyaleConfiguration.GameId, Level = 1 }; SpinBet sb = new SpinBet(ugk, PlatformType.None) { LineBet = 1, Credits = 0, Lines = ChessRoyaleConfiguration.Lines, Multiplier = 1 }; requestContext.Currency = new Currency() { Id = sb.CurrencyId }; requestContext.Parameters = new SpinArgs() { LineBet = sb.LineBet, BettingLines = sb.Lines }; requestContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; ChessRoyaleSpinResult sr = new ChessRoyaleSpinResult(ugk) { SpinBet = new SpinBet(ugk, PlatformType.None) { Lines = ChessRoyaleConfiguration.Lines, Multiplier = 1, LineBet = betperline }, Wheel = wheelEncoding(ChessRoyaleConfiguration.Width, ChessRoyaleConfiguration.Height, arr) }; totalWin = ChessRoyaleCommon.CalculateWin(sr, 1); if (sr.HasBonus) { var bonusCreated = chessRoyaleModule.CreateBonus(sr); var bonus = bonusCreated.Value; bonus.SpinTransactionId = sr.TransactionId; bonus.GameResult = sr; RequestContext <BonusArgs> requestBonusContext = new RequestContext <BonusArgs>("", ChessRoyaleConfiguration.GameName, PlatformType.Web); requestBonusContext.Currency = new Currency() { Id = sb.CurrencyId }; requestBonusContext.Parameters = new BonusArgs() { Bonus = "CollapsingSpin" }; requestBonusContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; BonusResult bonusResult; int step = bonus.CurrentStep; do { var entity = new BonusEntity { UserId = ugk.UserId, GameId = ChessRoyaleConfiguration.GameId, Guid = bonus.Guid.ToString("N"), Data = bonus.ToByteArray(), BonusType = bonus.GetType().Name, Version = 2, IsOptional = bonus.IsOptional, IsStarted = bonus.IsStarted, RoundId = sr.RoundId }; bonusResult = chessRoyaleModule.ExecuteBonus(ChessRoyaleConfiguration.LevelOne, entity, requestBonusContext).Value; var chessRoyaleFreeSpinResult = bonusResult as ChessRoyaleFreeSpinResult; var win = chessRoyaleFreeSpinResult.Win; if (win > 0) { totalWin += win; } bonus = bonusResult.Bonus; }while (!bonusResult.IsCompleted && bonusResult.Bonus != null); } Console.WriteLine($"Win : {totalWin}"); return(totalWin); }
private decimal TestPayout(string strwheel, decimal betperline, Func <int, int, int[], Wheel> wheelEncoding) { var sdt = DateTime.Now; var serviceProvider = new ServiceCollection() .AddLogging() .BuildServiceProvider(); var logFactory = serviceProvider.GetService <ILoggerFactory>(); var logger = logFactory.CreateLogger <FountainOfFortuneModule>(); var FountainOfFortuneModule = new FountainOfFortuneModule(logger); var maxWin = 0m; var totalWin = 0m; List <int> maxIndexPosition = new List <int>(); RequestContext <SpinArgs> requestContext = new RequestContext <SpinArgs>("", FountainOfFortuneConfiguration.GameName, PlatformType.Web); var summData = new SummaryData(); Assert.That(strwheel, Is.Not.Null.Or.Empty); string[] arrstr = strwheel.Split(','); int[] arr = Array.ConvertAll(arrstr, int.Parse); UserGameKey ugk = new UserGameKey() { UserId = -1, GameId = FountainOfFortuneConfiguration.GameId, Level = 1 }; SpinBet sb = new SpinBet(ugk, PlatformType.None) { LineBet = 1, Credits = 0, Lines = FountainOfFortuneConfiguration.Lines, Multiplier = 1 }; requestContext.Currency = new Currency() { Id = sb.CurrencyId }; requestContext.Parameters = new SpinArgs() { LineBet = sb.LineBet, BettingLines = sb.Lines }; requestContext.GameSetting = new GameSetting() { GameSettingGroupId = sb.GameSettingGroupId }; FountainOfFortuneSpinResult sr = new FountainOfFortuneSpinResult(ugk) { SpinBet = new SpinBet(ugk, PlatformType.None) { Lines = FountainOfFortuneConfiguration.Lines, Multiplier = 1, LineBet = betperline }, Wheel = wheelEncoding(FountainOfFortuneConfiguration.Width, FountainOfFortuneConfiguration.Height, arr) }; totalWin = FountainOfFortuneCommon.CalculateWin(sr, 1); Console.WriteLine($"Win : {totalWin}"); return(totalWin); }