Esempio n. 1
0
        private static SummaryData ExecuteBonus(int level, RequestContext <BonusArgs> requestContext, FortuneKoiSpinResult result)
        {
            var bonus           = module.CreateBonus(result);
            var fortunekoiBonus = bonus.Value as FortuneKoiBonus;
            var summData        = new SummaryData();
            var bonusContext    = new BonusStateContext(level, fortunekoiBonus);

            do
            {
                summData.FSpinCounter++;
                var bonusSpinResult = bonusContext.SetState(fortunekoiBonus.State).Transform(requestContext);
                var spinResult      = bonusSpinResult.SpinResult;
                if (spinResult.HasBonus)
                {
                    summData.FgFHit++;
                }

                summData.FgTotalWin += spinResult.Win;
                if (bonusContext.IsCompleted)
                {
                    break;
                }
                fortunekoiBonus.State = bonusContext.GetState();
            } while (true);

            return(summData);
        }
        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);
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        private static SummaryData ExecuteBonus(int level, RequestContext <BonusArgs> requestContext, CleopatraSpinResult result)
        {
            var bonus          = module.CreateBonus(result);
            var cleopatraBonus = bonus.Value as CleopatraBonus;
            var summData       = new SummaryData();
            var bonusContext   = new BonusStateContext(level, cleopatraBonus);

            do
            {
                var bonusSpinResult = bonusContext.SetState(cleopatraBonus.State).Transform(requestContext);
                if (bonusSpinResult.SpinResult.HasBonus)
                {
                    summData.FgSarchophagusHit++;
                }
                switch (bonusSpinResult.GameResultType)
                {
                case Model.GameResultType.FreeSpinResult:
                    summData.FSpinCounter++;
                    summData.FSTotalWin += bonusSpinResult.Win;
                    break;

                case Model.GameResultType.RevealResult:
                    summData.FgSarchophagusWin += bonusSpinResult.Win;
                    break;

                default:
                    throw new InvalidOperationException();
                }

                if (bonusSpinResult.IsCompleted)
                {
                    break;
                }
                cleopatraBonus.State = bonusContext.GetState();
            } while (true);

            return(summData);
        }
Esempio n. 8
0
        private static SummaryData ExecuteBonus(int level, RequestContext <BonusArgs> requestContext, FortuneChimesSpinResult result)
        {
            var bonus = module.CreateBonus(result);
            var fortunechimesBonus = bonus.Value as FortuneChimesBonus;
            var summData           = new SummaryData();
            var bonusContext       = new BonusStateContext(level, fortunechimesBonus);

            do
            {
                var bonusSpinResult = bonusContext.SetState(fortunechimesBonus.State).Transform(requestContext);
                var spinResult      = bonusSpinResult.SpinResult;
                if (spinResult.HasBonus)
                {
                    var additionBonus = spinResult.Bonus;
                    if (additionBonus.ClientId == 3)
                    {
                        summData.MgFHit++;
                    }
                    else if (additionBonus.ClientId == 4)
                    {
                        summData.FgExplodingHit++;
                    }
                    else
                    if (additionBonus.ClientId == 5)
                    {
                        summData.FgRevealHit++;
                    }
                }

                switch (fortunechimesBonus.State)
                {
                case ReSpinState _:
                    var nonScatterWin = spinResult.WinPositions.Where(winline => winline.Line > 0).Sum(item => item.Win);
                    var instanceWin   = spinResult.InstanceWin != null ? spinResult.InstanceWin.Win : 0;
                    summData.MgNonScatterExplodingWin += nonScatterWin;
                    summData.MgScatterExplodingWin    += (spinResult.Win - instanceWin - nonScatterWin);
                    summData.ExplodingCounter         += spinResult.InstanceWin != null ? 1 : 0;
                    summData.MgRevealWin += instanceWin;
                    break;

                case FreeSpinReSpinState _:

                    instanceWin              = spinResult.InstanceWin != null ? spinResult.InstanceWin.Win : 0;
                    summData.FgExplodingWin += (spinResult.Win - instanceWin);
                    summData.FgRevealWin    += instanceWin;
                    break;

                case FreeSpinState _:
                    summData.FSTotalWin += spinResult.Win;
                    summData.FSpinCounter++;
                    break;

                default:
                    throw new Exception();
                }
                if (bonusContext.IsCompleted)
                {
                    break;
                }
                fortunechimesBonus.State = bonusContext.GetState();
            } while (true);

            return(summData);
        }
Esempio n. 9
0
        public void TestReSpinCollapseFeature()
        {
            // 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", "Fortune Chimes", 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 {
                    Line = 1, 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 state = new ReSpinState(new ReSpinCollapse(bonusPositions, wheel, new List <int[]> {
                new int[0], new int[0], new int[0], new int[] { 1, 2, 4 }, new int[] { 2, 5, 7 }
            }));

            //Action
            var response    = state.Handle(requestBonusContext, bonusContext);
            var result      = response.result;
            var instanceWin = result.SpinResult.InstanceWin;
            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);
            Assert.AreEqual(result.SpinResult.HasBonus, !string.IsNullOrEmpty(element.Element("data").Element("spin").Element("bonus").Value));
            Assert.AreEqual(result.SpinResult.HasBonus, element.Element("data").Element("spin").Element("bonusposition").Descendants().Count() > 0);
            Assert.AreEqual(instanceWin != null, element.Element("data").Element("spin").Element("iw").HasAttributes);
        }