public decimal TestCalculateTotalBet()
        {
            var user           = new UserGameKey(-1, 104);
            var requestContext = new RequestContext <SpinArgs>("unittest", "God of Fortune", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;
            return(module.CalculateTotalBet(new UserGameSpinData(), requestContext));
        }
        public void TestBonusBuilder()
        {
            // arrange
            var user           = new UserGameKey(-1, 109);
            var requestContext = new RequestContext <SpinArgs>("simulation", "Cleopatra", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;
            var freeSpinWheel = new FortuneChimesWheel
            {
                Reels = new List <int[]> {
                    new [] { 0, 1, 2 },
                    new [] { 0, 10, 1 },
                    new [] { 0, 10, 3 },
                    new [] { 0, 10, 2 },
                    new [] { 2, 3, 4 }
                }
            };

            var explodingWheel = new FortuneChimesWheel
            {
                Reels = new List <int[]> {
                    new [] { 0, 1, 2 },
                    new [] { 0, 4, 1 },
                    new [] { 0, 10, 3 },
                    new [] { 0, 10, 2 },
                    new [] { 2, 3, 4 }
                }
            };

            // Action
            var freeSpin = GameReduce.DoSpin(1, requestContext, freeSpinWheel);
            var expoding = GameReduce.DoSpin(1, requestContext, explodingWheel);

            // Assert
            Assert.IsTrue(freeSpin.HasBonus);
            Assert.IsTrue(freeSpin.Bonus.ClientId == 3);
            Assert.IsTrue(freeSpin.Bonus.Count == 14);

            Assert.IsTrue(expoding.HasBonus);
            Assert.IsTrue(expoding.Bonus.ClientId == 4);
            Assert.IsTrue(expoding.Bonus.Count == 1);
        }
        public void TestSpin()
        {
            // Arrange
            var user           = new UserGameKey(-1, 51);
            var requestContext = new RequestContext <SpinArgs>("simulation", "FortuneKoi", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;
            var wheel = new FortuneKoiWheel
            {
                Reels = new List <int[]> {
                    new [] { 0, 1, 2 },
                    new [] { 0, 10, 1 },
                    new [] { 0, 10, 3 },
                    new [] { 0, 10, 2 },
                    new [] { 2, 3, 4 }
                }
            };

            // Action
            var result      = GameReduce.DoSpin(1, requestContext, wheel);
            var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None));
            var element     = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace);
            var xelement    = result.ToXElement();

            // Assert
            Assert.IsTrue(result.ToString() != null);
            Assert.IsTrue(result.XmlType == XmlType.SpinXml);
            Assert.IsTrue(result.GameResultType == GameResultType.SpinResult);
            Assert.IsNotNull(element);
            Assert.IsNotNull(xelement);
            Assert.IsTrue(element.Element("wheels") != null);
            Assert.IsTrue(element.Element("wheels").Attribute("val") != null);
            Assert.AreEqual(element.Element("wheels").Attribute("val").Value, "0,1,2,0,10,1,0,10,3,0,10,2,2,3,4");
            Assert.IsTrue(element.Element("win") != null);
            Assert.AreEqual(result.Win, decimal.Parse(element.Element("win").Value));
            Assert.IsTrue(element.Element("winposition") != null);
            Assert.AreEqual(result.HasBonus, element.Element("bonus") != null);
            Assert.AreEqual(result.HasBonus, element.Element("bonusposition") != null);
        }
        public void TestSpin()
        {
            // Arrange
            var user           = new UserGameKey(-1, 3);
            var requestContext = new RequestContext <SpinArgs>("simulation", "Bikini Beach", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;

            // Action
            var spin   = module.ExecuteSpin(1, new UserGameSpinData(), requestContext);
            var result = spin.Value as BikiniBeachResult;

            // Assert

            Assert.AreEqual(1, result.Level);
            Assert.AreNotEqual(result.Wheel, default(BikiniBeachWheel));
            Assert.IsTrue(result.Bet == 30);
            if (result.HasBonus)
            {
                switch (result.Bonus.ClientId)
                {
                case 2:
                    Assert.AreEqual(4, result.Bonus.Count);
                    break;

                case 3:
                    Assert.AreEqual(1, result.Bonus.Count);
                    break;

                case 4:
                    Assert.AreEqual(3, result.Bonus.Count);
                    break;
                }
            }
        }
        public async Task <Result <RequestContext <SpinArgs>, ErrorCode> > Build(SpinMessage message)
        {
            var buildRequest = await RequestContextBuilder.Build <SpinArgs>(userService, gameService, cachedSettings, httpContextAccessor, message.Key, message.Game);

            if (buildRequest.IsError)
            {
                return(buildRequest.Error);
            }

            var request = buildRequest.Value;

            var gameState = await userService.GetGameState(request);

            if (gameState.Type == GameStateType.SlotStateBonus)
            {
                return(ErrorCode.IncorrectState);
            }
            request.LastGameState = gameState;

            if (message.Bet < 0m)
            {
                return(ErrorCode.IncorrectBet);
            }

            if (!request.GameSetting.CoinsDenomination
                .Split(';')
                .Select(decimal.Parse).ToList().Any(s => s == message.Bet))
            {
                return(ErrorCode.IncorrectBet);
            }

            EnsureBetMultiplier(message, request.GameSetting.CoinsMultiplier);

            if (message.SideBet && !request.Game.IsSideBet)
            {
                return(ErrorCode.WrongParameter);
            }
            request.Query.TryGetInt32("cheat", out int cheat);
            var args = new SpinArgs
            {
                LineBet        = message.Bet,
                SideBet        = message.SideBet,
                FunPlayDemoKey = cheat,
                IsAutoSpin     = false,
                BettingLines   = 0,
                Multiplier     = message.Multiplier
            };

            request.Parameters = args;

            return(request);
        }
Beispiel #6
0
        public void TestSpin()
        {
            // Arrange
            var user           = new UserGameKey(-1, 109);
            var requestContext = new RequestContext <SpinArgs>("simulation", "Cleopatra", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;
            var wheel = new FortuneChimesWheel
            {
                Reels = new List <int[]> {
                    new [] { 0, 1, 2 },
                    new [] { 0, 10, 1 },
                    new [] { 0, 10, 3 },
                    new [] { 0, 10, 2 },
                    new [] { 2, 3, 4 }
                }
            };

            // Action
            var result      = GameReduce.DoSpin(1, requestContext, wheel);
            var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None));
            var element     = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace);

            // Assert
            Assert.IsNotNull(element);
            Assert.IsTrue(element.Element("wheels") != null);
            Assert.AreEqual(wheel.Reels.Select(ele => string.Join(',', ele)).Aggregate((s1, s2) => string.Join(',', s1, s2)), element.Element("wheels").Attribute("val").Value);
            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("winposition") != null);
            Assert.AreEqual(result.HasBonus, element.Element("bonus") != null);
            Assert.AreEqual(result.HasBonus, element.Element("bonusposition") != null);
        }
Beispiel #7
0
        public void Spin(int level, int numusers, int numItrPerUser, decimal spinBet)
        {
            var sdt      = DateTime.Now;
            var spinArgs = new SpinArgs
            {
                LineBet    = spinBet,
                Multiplier = 1
            };

            var users    = Utilities.GenerateUsers(GameId, numusers, level);
            var summData = users.AsParallel().Select(user =>
            {
                var data           = new SummaryData();
                var request        = user.CreateRequestContext <SpinArgs>("FortunePack");
                request.Parameters = spinArgs;
                foreach (var iter in new byte[numItrPerUser])
                {
                    data.SpinCounter++;
                    data.TotalBet += 8 * spinBet;

                    var executeResult = module.ExecuteSpin(level, new UserGameSpinData(), request);
                    var result        = executeResult.Value as FortunePackResult;

                    data.TotalWin += result.Win;
                }
                return(data);
            }).AsEnumerable()
                           .Aggregate((s1, s2) => s1 + s2);

            var edt        = DateTime.Now;
            var oldOut     = Console.Out;
            var fileStream = new FileStream($@"..\..\..\Results\FortunePack\{TestContext.CurrentContext.Test.Name}.txt", FileMode.OpenOrCreate, FileAccess.Write);
            var writer     = new StreamWriter(fileStream);

            Console.SetOut(writer);
            Console.WriteLine(String.Format("Test.Level                : {0}", level));
            Console.WriteLine(String.Format("Test.TimeStart            : {0} {1}", sdt.ToShortDateString(), sdt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.TimeEnd              : {0} {1}", edt.ToShortDateString(), edt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.SpinMode             : {0}", "Random"));
            Console.WriteLine("----------------------------------------");
            Console.WriteLine(String.Format("SpinCount                 : {0}", summData.SpinCounter));
            Console.WriteLine(String.Format("TotalBet                  : {0,12:0.00}", summData.TotalBet));
            Console.WriteLine(String.Format("Game Win                  : {0,12:0.00}", summData.TotalWin));
            Console.WriteLine("--- RTP.OverAll ------------------------");
            Console.WriteLine(String.Format("RTP.Total (Over All)      : {0,11:0.00}%", 100 * summData.RTPOverAll));
            Console.SetOut(oldOut);
            writer.Close();
            fileStream.Close();
            Console.WriteLine("Done");
        }
Beispiel #8
0
        public void TestSpin()
        {
            // Arrange
            var user           = new UserGameKey(-1, 51);
            var requestContext = new RequestContext <SpinArgs>("simulation", "Qixi", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;

            // Action
            var result      = module.ExecuteSpin(1, new UserGameSpinData(), requestContext).Value as QixiSpinResult;
            var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None));
            var element     = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace);
            var xelement    = result.ToXElement();

            // Assert
            Assert.IsTrue(result.ToString() != null);
            Assert.IsTrue(result.XmlType == XmlType.SpinXml);
            Assert.IsTrue(result.GameResultType == GameResultType.SpinResult);
            Assert.IsNotNull(element);
            Assert.IsNotNull(xelement);
            Assert.IsTrue(element.Element("wheels") != null);
            Assert.IsTrue(element.Element("wheels").Attribute("val") != null);
            Assert.IsTrue(element.Element("wheels").Attribute("val").Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray().Length == 15);
            Assert.IsTrue(element.Element("win") != null);
            Assert.AreEqual(result.Win, decimal.Parse(element.Element("win").Value));
            Assert.IsTrue(element.Element("winposition") != null);
            Assert.AreEqual(null, element.Element("bonus"));
            Assert.AreEqual(null, element.Element("bonusposition"));
        }
        public void TestSpin()
        {
            // Arrange
            var user           = new UserGameKey(-1, 104);
            var requestContext = new RequestContext <SpinArgs>("simulation", "Dragon Riches", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;

            // Action
            var spin   = module.ExecuteSpin(1, new UserGameSpinData(), requestContext);
            var result = spin.Value as Games.DragonRiches.DragonRichesResult;

            // Assert

            Assert.AreEqual(1, result.Level);
            Assert.AreNotEqual(result.Wheel, default(Games.DragonRiches.DragonRichesWheel));
            Assert.IsTrue(result.Bet == 30);
            if (result.HasBonus)
            {
                if (result.Bonus.ClientId == 3)
                {
                    Assert.AreEqual(6, result.Bonus.Count);
                }
                else
                {
                    Assert.AreEqual(3, result.Bonus.ClientId);
                }
            }
        }
Beispiel #10
0
        public void TestSpin()
        {
            // Arrange
            var user           = new UserGameKey(-1, 32);
            var requestContext = new RequestContext <SpinArgs>("simulation", "FortuneKoi", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;

            // Action
            var spin   = module.ExecuteSpin(1, new UserGameSpinData(), requestContext);
            var result = spin.Value as FortuneKoiSpinResult;

            // Assert

            Assert.AreEqual(1, result.Level);
            Assert.AreNotEqual(result.Wheel, default(FortuneKoiWheel));
            Assert.IsTrue(result.Bet == 10);
            Assert.AreEqual(result.GameResultType, GameResultType.SpinResult);
            if (result.HasBonus)
            {
                Assert.NotNull(result.Bonus);
                Assert.AreEqual(1, result.Bonus.Count);
            }
        }
Beispiel #11
0
        public void ReSpinMode(int level, int purchaseReel, int numItrPerUser, string stringWheel)
        {
            var sdt      = DateTime.Now;
            var summData = new SummaryData {
                SpinCounter = numItrPerUser,
                TotalBet    = 0
            };
            var spin = new SpinArgs {
                LineBet    = 1,
                Multiplier = 1
            };
            var user = new UserGameKey(-1, GameId)
            {
                Level = level
            };
            var requestContext = user.CreateRequestContext <SpinArgs>("monkeysmash");

            requestContext.Parameters = spin;
            var bonusRequestcontext = user.CreateRequestContext <BonusArgs>("monkeysmash");
            var reels           = Utilities.Encoding(stringWheel);
            var priorSpinResult = new ReelGemResult()
            {
                Wheel             = Utilities.Encoding(stringWheel, 5, 3),
                ReelRespinCredits = ReelGemsEngine.CalcWagerCost(level, reels)
            };

            foreach (var item in new sbyte[numItrPerUser])
            {
                summData.TotalBet += priorSpinResult.ReelRespinCredits[purchaseReel];
                var result = ReelGemsEngine.BuyReel(level, purchaseReel, priorSpinResult, requestContext);
                Assert.NotNull(result);
                summData.TotalWin += result.Win;
                if (result.HasBonus)
                {
                    var freeSpinResult = ExecuteFreeSpin(level, bonusRequestcontext, result);
                    summData.FSTotalWin += freeSpinResult.TotalWin;
                }
            }
            PrintResult(level, sdt, DateTime.Now, summData, TestContext.CurrentContext.Test.Name);
        }
        public void TestSpin()
        {
            // Arrange
            var user           = new UserGameKey(-1, 14);
            var requestContext = new RequestContext <SpinArgs>("simulation", "God of Fortune", PlatformType.None)
            {
                GameSetting = new GameSetting {
                    GameSettingGroupId = 1
                },
                Query = new QueryCollection {
                },
            };

            var userSession = new UserSession
            {
                SessionKey = "unittest"
            };
            var spinArgs = new SpinArgs
            {
                LineBet    = 1,
                Multiplier = 1
            };

            requestContext.Parameters  = spinArgs;
            requestContext.UserSession = userSession;

            // Action
            var spin   = module.ExecuteSpin(1, new UserGameSpinData(), requestContext);
            var result = spin.Value as Games.FortunePack.FortunePackResult;

            // Assert

            Assert.AreEqual(1, result.Level);
            Assert.AreNotEqual(result.Wheel, default(Wheel));
            Assert.IsTrue(result.Bet == 8);
        }
Beispiel #13
0
        public void Spin(int level, int numusers, int numItrPerUser, decimal spinBet)
        {
            var sdt      = DateTime.Now;
            var spinArgs = new SpinArgs
            {
                LineBet    = spinBet,
                Multiplier = 1
            };

            var users    = Utilities.GenerateUsers(GameId, numusers, level);
            var summData = users.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount).Select(user =>
            {
                var data           = new SummaryData();
                var request        = user.CreateRequestContext <SpinArgs>("bonus-bear");
                request.Parameters = spinArgs;
                foreach (var iter in new byte[numItrPerUser])
                {
                    data.SpinCounter++;
                    data.TotalBet    += 25 * spinBet;
                    var executeResult = module.ExecuteSpin(level, new UserGameSpinData(), request);
                    var result        = executeResult.Value as BearResult;
                    data.MainGameWin += result.Win;

                    if (result.HasBonus)
                    {
                        var bonus        = result.Bonus;
                        var bonusRequest = user.CreateRequestContext <BonusArgs>("Bonus Bear-hunter");
                        var typeOfBonus  = bonus.ClientId;
                        switch (typeOfBonus)
                        {
                        case 4:
                            data.MgHoneyHit++;
                            data += ExecuteMainGameHoney(level, bonusRequest, result);
                            break;

                        case 3:
                            data.MgFHit++;
                            data += ExecuteFreeSpin(level, bonusRequest, result);
                            break;

                        default:
                            throw new Exception();
                        }
                    }
                }
                return(data);
            }).AsEnumerable()
                           .Aggregate((s1, s2) => s1 + s2);

            var edt        = DateTime.Now;
            var oldOut     = Console.Out;
            var fileStream = new FileStream($@"..\..\..\Results\CaptainRabbit\{TestContext.CurrentContext.Test.Name}.txt", FileMode.OpenOrCreate, FileAccess.Write);
            var writer     = new StreamWriter(fileStream);

            Console.SetOut(writer);
            Console.WriteLine(String.Format("Test.Level                  : {0}", level));
            Console.WriteLine(String.Format("Test.TimeStart              : {0} {1}", sdt.ToShortDateString(), sdt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.TimeEnd                : {0} {1}", edt.ToShortDateString(), edt.ToLongTimeString()));
            Console.WriteLine(String.Format("SpinCount                   : {0}", summData.SpinCounter));
            Console.WriteLine(String.Format("TotalBet                    : {0,12:0.00}", summData.TotalBet));
            Console.WriteLine("----------------------------------------");
            Console.WriteLine(String.Format("Honey Hit Rate         (MG) : {0,12:0.00}", summData.MgHoneyHitRate));
            Console.WriteLine(String.Format("Feature Hit Rate       (MG) : {0,12:0.00}", summData.MgFHitRate));
            Console.WriteLine(String.Format("Honey Hit Rate         (FG) : {0,12:0.00}", summData.FgHoneyHitRate));
            Console.WriteLine(String.Format("Feature Hit Rate       (FG) : {0,12:0.00}", summData.FgFHitRate));
            Console.WriteLine(String.Format("MG Win                      : {0,12:0.00}", summData.MainGameWin));
            Console.WriteLine(String.Format("MG Honey Win                : {0,12:0.00}", summData.MgHoneyWin));
            Console.WriteLine(String.Format("FG Win                      : {0,12:0.00}", summData.FSTotalWin));
            Console.WriteLine(String.Format("FG Honey Win                : {0,12:0.00}", summData.FgHoneyWin));
            Console.WriteLine("----------------------------------------");
            if (summData.TotalBet > 0)
            {
                Console.WriteLine(String.Format("MG RTP                     : {0,11:0.00}%", 100 * summData.MainGameWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG Honey  RTP              : {0,11:0.00}%", 100 * summData.MgHoneyWin / summData.TotalBet));
                Console.WriteLine(String.Format("FG RTP                     : {0,11:0.00}%", 100 * summData.FSTotalWin / summData.TotalBet));
                Console.WriteLine(String.Format("FG Honey RTP               : {0,11:0.00}%", 100 * summData.FgHoneyWin / summData.TotalBet));
            }
            Console.WriteLine("--- RTP.OverAll ------------------------");
            Console.WriteLine(String.Format("RTP.Total (Over All)      : {0,11:0.0000}%", 100 * summData.RTPOverAll));
            Console.SetOut(oldOut);
            writer.Close();
            fileStream.Close();
            Console.WriteLine("Done");
        }
Beispiel #14
0
        public void Spin(int level, int numusers, int numItrPerUser, decimal spinBet)
        {
            var sdt      = DateTime.Now;
            var spinArgs = new SpinArgs {
                LineBet    = spinBet,
                Multiplier = 1
            };

            var users    = Utilities.GenerateUsers(GameId, numusers, level);
            var summData = users
                           .AsParallel()
                           .Select(user => {
                var data           = new SummaryData();
                var request        = user.CreateRequestContext <SpinArgs>("monkeysmash");
                request.Parameters = spinArgs;
                foreach (var iter in new byte[numItrPerUser])
                {
                    data.SpinCounter++;
                    data.TotalBet    += spinBet * 25;
                    var executeResult = module.ExecuteSpin(level, new UserGameSpinData(), request);
                    var result        = executeResult.Value as ReelGemResult;
                    data.TotalWin    += result.Win;
                    if (result.HasBonus)
                    {
                        var bonusRequest   = user.CreateRequestContext <BonusArgs>("monkeysmash");
                        var freeSpinResult = ExecuteFreeSpin(level, bonusRequest, result);
                        data.FSTotalWin   += freeSpinResult.TotalWin;
                    }
                    else
                    {
                        var priorSpinResult = result.Copy();
                        for (int pr = 0; pr < 5; pr++)
                        {
                            var buyReelResult = BuyReel(level, pr, priorSpinResult);
                            data.BuyReel     += buyReelResult;
                        }
                    }
                }
                return(data);
            })
                           .AsEnumerable()
                           .Aggregate((s1, s2) => s1 + s2);

            var edt        = DateTime.Now;
            var oldOut     = Console.Out;
            var fileStream = new FileStream($@"..\..\..\Results\MonkeySmash\{TestContext.CurrentContext.Test.Name}.txt", FileMode.OpenOrCreate, FileAccess.Write);
            var writer     = new StreamWriter(fileStream);

            Console.SetOut(writer);
            Console.WriteLine(String.Format("Test.Level                : {0}", level));
            Console.WriteLine(String.Format("Test.TimeStart            : {0} {1}", sdt.ToShortDateString(), sdt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.TimeEnd              : {0} {1}", edt.ToShortDateString(), edt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.SpinMode             : {0}", "Random"));
            Console.WriteLine("---NORMAL -------------------------------");
            Console.WriteLine(String.Format("Test.SpinCount            : {0}", summData.SpinCounter));
            Console.WriteLine(String.Format("TotalBet                  : {0,12:0.00}", summData.TotalBet));
            Console.WriteLine(String.Format("Game Win                  : {0,12:0.00}", summData.TotalWin));
            Console.WriteLine(String.Format("Free Spin Win             : {0,12:0.00}", summData.FSTotalWin));
            if (summData.TotalBet > 0)
            {
                Console.WriteLine(String.Format("Main Game RTP             : {0,12:0.00}", 100 * summData.TotalWin / summData.TotalBet));
                Console.WriteLine(String.Format("Free Spin RTP             : {0,12:0.00}", 100 * summData.FSTotalWin / summData.TotalBet));
                Console.WriteLine(String.Format("Total RTP                 : {0,12:0.00}", 100 * (summData.TotalWin + summData.FSTotalWin) / summData.TotalBet));
            }
            var buyReelSum = summData.BuyReel;

            Console.WriteLine("--- BUY REEL----------------------------");
            Console.WriteLine(String.Format("Test.SpinCount            : {0}", buyReelSum.SpinCounter));
            Console.WriteLine(String.Format("TotalBet                  : {0,12:0.00}", buyReelSum.TotalBet));
            Console.WriteLine(String.Format("Game Win                  : {0,12:0.00}", buyReelSum.TotalWin));
            Console.WriteLine(String.Format("Free Spin Win             : {0,12:0.00}", buyReelSum.FSTotalWin));
            if (summData.BuyReel.TotalBet > 0)
            {
                Console.WriteLine(String.Format("Main Game RTP             : {0,12:0.00}", 100 * buyReelSum.TotalWin / buyReelSum.TotalBet));
                Console.WriteLine(String.Format("Free Spin RTP             : {0,12:0.00}", 100 * buyReelSum.FSTotalWin / buyReelSum.TotalBet));
                Console.WriteLine(String.Format("Total RTP                 : {0,12:0.00}", 100 * (buyReelSum.TotalWin + buyReelSum.FSTotalWin) / buyReelSum.TotalBet));
            }
            Console.WriteLine("--- RTP.OverAll -------------------------");
            Console.WriteLine(String.Format("RTP.Total (Over All)      : {0,12:0.00}", 100 * summData.RTPOverAll));
            Console.SetOut(oldOut);
            writer.Close();
            fileStream.Close();
            Console.WriteLine("Done");
        }
        public void Spin(int level, int numusers, int numItrPerUser, decimal spinBet)
        {
            var sdt      = DateTime.Now;
            var spinArgs = new SpinArgs
            {
                LineBet    = spinBet,
                Multiplier = 1
            };

            var users    = Utilities.GenerateUsers(GameId, numusers, level);
            var summData = users.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount).Select(user =>
            {
                var data           = new SummaryData();
                var request        = user.CreateRequestContext <SpinArgs>("fortunechimes");
                request.Parameters = spinArgs;
                foreach (var iter in new byte[numItrPerUser])
                {
                    data.SpinCounter++;
                    data.TotalBet               += 30 * spinBet;
                    var executeResult            = module.ExecuteSpin(level, new UserGameSpinData(), request);
                    var result                   = executeResult.Value as FortuneChimesSpinResult;
                    var scatterPayout            = result.WinPositions.Where(ele => ele.Line == 0 && ele.Symbol == 10).Sum(item => item.Win);
                    data.MainGameScatterWin     += scatterPayout;
                    data.MainGameNoneScatterWin += result.Win - scatterPayout;
                    if (result.HasBonus)
                    {
                        var bonus        = result.Bonus;
                        var bonusRequest = user.CreateRequestContext <BonusArgs>("fortunechimes");
                        var typeOfBonus  = bonus.ClientId;
                        switch (typeOfBonus)
                        {
                        case 4:
                        case 5:
                            data.MgExplodingHit++;
                            break;

                        case 3:
                            data.MgFHit++;
                            break;

                        default:
                            throw new Exception();
                        }
                        data += ExecuteBonus(level, bonusRequest, result);
                    }
                }
                return(data);
            }).AsEnumerable()
                           .Aggregate((s1, s2) => s1 + s2);

            var edt        = DateTime.Now;
            var oldOut     = Console.Out;
            var fileStream = new FileStream($@"..\..\..\Results\FortuneChimes\{TestContext.CurrentContext.Test.Name}.txt", FileMode.OpenOrCreate, FileAccess.Write);
            var writer     = new StreamWriter(fileStream);

            Console.SetOut(writer);
            Console.WriteLine(String.Format("Test.Level                  : {0}", level));
            Console.WriteLine(String.Format("Test.TimeStart              : {0} {1}", sdt.ToShortDateString(), sdt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.TimeEnd                : {0} {1}", edt.ToShortDateString(), edt.ToLongTimeString()));
            Console.WriteLine(String.Format("SpinCount                   : {0}", summData.SpinCounter));
            Console.WriteLine(String.Format("TotalBet                    : {0,12:0.00}", summData.TotalBet));
            Console.WriteLine("----------------------------------------");
            Console.WriteLine(String.Format("Exploding Hit Rate     (MG) : {0,12:0.00}", summData.MgExplodingHitRate));
            Console.WriteLine(String.Format("MG Avg Feature Hit Rate     : {0,12:0.00}", summData.MgFHitRate));
            Console.WriteLine(String.Format("Exploding Feature Hit Rate  : {0,12:0.00}", summData.MgExplodingFHitRate));
            Console.WriteLine(String.Format("Exploding Hit Rate     (FG) : {0,12:0.00}", summData.FgExplodingHitRate));
            Console.WriteLine(String.Format("Reveal Hit Rate        (FG) : {0,12:0.00}", summData.FgRevealHitRate));
            Console.WriteLine(String.Format("MG Scatter Win              : {0,12:0.00}", summData.MainGameScatterWin));
            Console.WriteLine(String.Format("MG None Scatter Win         : {0,12:0.00}", summData.MainGameNoneScatterWin));
            Console.WriteLine(String.Format("MG ReSpin Scatter Win       : {0,12:0.00}", summData.MgScatterExplodingWin));
            Console.WriteLine(String.Format("MG ReSpin None Scatter Win  : {0,12:0.00}", summData.MgNonScatterExplodingWin));
            Console.WriteLine(String.Format("MG Reveal Win               : {0,12:0.00}", summData.MgRevealWin));
            Console.WriteLine(String.Format("FG Win                      : {0,12:0.00}", summData.FSTotalWin));
            Console.WriteLine(String.Format("FG Exploding Win            : {0,12:0.00}", summData.FgExplodingWin));
            Console.WriteLine(String.Format("FG Reveal Win               : {0,12:0.00}", summData.FgRevealWin));
            Console.WriteLine("----------------------------------------");
            if (summData.TotalBet > 0)
            {
                Console.WriteLine(String.Format("MG Scatter RTP             : {0,11:0.00}%", 100 * summData.MainGameScatterWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG None Scatter RTP        : {0,11:0.00}%", 100 * summData.MainGameNoneScatterWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG ReSpin Scatter RTP      : {0,11:0.00}%", 100 * summData.MgScatterExplodingWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG ReSpin NOne Scatter RTP : {0,11:0.00}%", 100 * summData.MgNonScatterExplodingWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG Reveal  RTP             : {0,11:0.00}%", 100 * summData.MgRevealWin / summData.TotalBet));

                Console.WriteLine(String.Format("FG RTP                     : {0,11:0.00}%", 100 * summData.FSTotalWin / summData.TotalBet));
                Console.WriteLine(String.Format("FG Exploding RTP           : {0,11:0.00}%", 100 * summData.FgExplodingWin / summData.TotalBet));
                Console.WriteLine(String.Format("FG Reveal RTP              : {0,11:0.00}%", 100 * summData.FgRevealWin / summData.TotalBet));
            }
            Console.WriteLine("--- RTP.OverAll ------------------------");
            Console.WriteLine(String.Format("RTP.Total (Over All)      : {0,11:0.0000}%", 100 * summData.RTPOverAll));

            Console.SetOut(oldOut);
            writer.Close();
            fileStream.Close();
            Console.WriteLine("Done");
        }
        public void FullCycle(int level, decimal spinBet)
        {
            var strips = Slot.Games.FortuneChimes.Configuration.Config.MainGameReelStrip[0];
            var reel1  = strips[0];
            var reel2  = strips[1];
            var reel3  = strips[2];
            var reel4  = strips[3];
            var reel5  = strips[4];
            var user   = new UserGameKey(-1, 109)
            {
                Level = level
            };
            var summData = new SummaryData();
            var sdt      = DateTime.Now;
            var spinArgs = new SpinArgs
            {
                LineBet    = spinBet,
                Multiplier = 1
            };
            var request = user.CreateRequestContext <SpinArgs>("fortunechimes");

            for (int i1 = 0; i1 < reel1.Count; i1++)
            {
                for (int i2 = 0; i2 < reel2.Count; i2++)
                {
                    for (int i3 = 0; i3 < reel3.Count; i3++)
                    {
                        for (int i4 = 0; i4 < reel4.Count; i4++)
                        {
                            for (int i5 = 0; i5 < reel5.Count; i5++)
                            {
                                request.Parameters = spinArgs;
                                var r1 = reel1.TakeCircular(i1, 3).ToArray();
                                var r2 = reel2.TakeCircular(i2, 3).ToArray();
                                var r3 = reel3.TakeCircular(i3, 3).ToArray();
                                var r4 = reel4.TakeCircular(i4, 3).ToArray();
                                var r5 = reel5.TakeCircular(i5, 3).ToArray();
                                if (i1 == 2 && i2 == i3 && i3 == i4 && i4 == 9)
                                {
                                }
                                var wheel = new FortuneChimesWheel
                                {
                                    Reels = new List <int[]> {
                                        r1, r2, r3, r4, r5
                                    },
                                    Indices = new int[] { i1, i2, i3, i4, i5 }
                                };
                                summData.SpinCounter++;
                                summData.TotalBet += Slot.Games.FortuneChimes.Configuration.Config.Lines * spinBet;
                                var result        = GameReduce.DoSpin(level, request, wheel);
                                var scatterPayout = result.WinPositions.Where(ele => ele.Line == 0 && ele.Symbol == 10).Sum(item => item.Win);
                                summData.MainGameScatterWin     += scatterPayout;
                                summData.MainGameNoneScatterWin += result.Win - scatterPayout;
                                if (scatterPayout > 0)
                                {
                                    summData.MgFHit++;
                                }
                                if (result.HasBonus)
                                {
                                    var bonus        = result.Bonus;
                                    var bonusRequest = user.CreateRequestContext <BonusArgs>("fortunechimes");
                                    var typeOfBonus  = bonus.ClientId;
                                    switch (typeOfBonus)
                                    {
                                    case 4:
                                    case 5:
                                        summData.MgExplodingHit++;
                                        break;

                                    case 3:
                                        summData.MgFHit++;
                                        break;

                                    default:
                                        throw new Exception();
                                    }
                                    summData += ExecuteBonus(level, bonusRequest, result);
                                }
                            }
                        }
                    }
                }
            }

            var edt        = DateTime.Now;
            var oldOut     = Console.Out;
            var fileStream = new FileStream($@"..\..\..\Results\FortuneChimes\{TestContext.CurrentContext.Test.Name}.txt", FileMode.OpenOrCreate, FileAccess.Write);
            var writer     = new StreamWriter(fileStream);

            Console.SetOut(writer);
            Console.WriteLine(String.Format("Test.Level                  : {0}", level));
            Console.WriteLine(String.Format("Test.TimeStart              : {0} {1}", sdt.ToShortDateString(), sdt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.TimeEnd                : {0} {1}", edt.ToShortDateString(), edt.ToLongTimeString()));
            Console.WriteLine(String.Format("SpinCount                   : {0}", summData.SpinCounter));
            Console.WriteLine(String.Format("TotalBet                    : {0,12:0.00}", summData.TotalBet));
            Console.WriteLine("----------------------------------------");
            Console.WriteLine(String.Format("Exploding Hit Rate     (MG) : {0,12:0.00}", summData.MgExplodingHitRate));
            Console.WriteLine(String.Format("MG Feature Hit Rate         : {0,12:0.00}", summData.MgFHitRate));
            Console.WriteLine(String.Format("MG Scatter ReSpin Hit       : {0,12:0.00}", summData.MgScatterReSpinFHit));
            Console.WriteLine(String.Format("MG None Scatter ReSpin Hit  : {0,12:0.00}", summData.MgNoneScatterReSpinFHit));
            Console.WriteLine(String.Format("MG ReSpin Feature Hit Rate  : {0,12:0.00}", summData.MgReSpinFHitRate));

            //Console.WriteLine(String.Format("MG Avg Feature Hit Rate     : {0,12:0.00}", summData));
            Console.WriteLine(String.Format("Exploding Feature Hit Rate  : {0,12:0.00}", summData.MgExplodingFHitRate));
            Console.WriteLine(String.Format("Exploding Hit Rate     (FG) : {0,12:0.00}", summData.FgExplodingHitRate));
            Console.WriteLine(String.Format("Reveal Hit Rate        (FG) : {0,12:0.00}", summData.FgRevealHitRate));
            Console.WriteLine(String.Format("MG Scatter Win              : {0,12:0.00}", summData.MainGameScatterWin));
            Console.WriteLine(String.Format("MG None Scatter Win         : {0,12:0.00}", summData.MainGameNoneScatterWin));
            Console.WriteLine(String.Format("MG ReSpin Scatter Win       : {0,12:0.00}", summData.MgScatterExplodingWin));
            Console.WriteLine(String.Format("MG ReSpin None Scatter Win  : {0,12:0.00}", summData.MgNonScatterExplodingWin));
            Console.WriteLine(String.Format("MG Reveal Win               : {0,12:0.00}", summData.MgRevealWin));
            Console.WriteLine(String.Format("FG Win                      : {0,12:0.00}", summData.FSTotalWin));
            Console.WriteLine(String.Format("FG Exploding Win            : {0,12:0.00}", summData.FgExplodingWin));
            Console.WriteLine(String.Format("FG Reveal Win               : {0,12:0.00}", summData.FgRevealWin));
            Console.WriteLine("----------------------------------------");
            if (summData.TotalBet > 0)
            {
                Console.WriteLine(String.Format("MG Scatter RTP             : {0,11:0.00000000000000000000000000}%", 100 * summData.MainGameScatterWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG None Scatter RTP        : {0,11:0.00000000000000000000000000}%", 100 * summData.MainGameNoneScatterWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG ReSpin Scatter RTP      : {0,11:0.00000000000000000000000000}%", 100 * summData.MgScatterExplodingWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG ReSpin None Scatter RTP : {0,11:0.00000000000000000000000000}%", 100 * summData.MgNonScatterExplodingWin / summData.TotalBet));
                Console.WriteLine(String.Format("MG Reveal  RTP             : {0,11:0.00000000000000000000000000}%", 100 * summData.MgRevealWin / summData.TotalBet));

                Console.WriteLine(String.Format("FG RTP                     : {0,11:0.00}%", 100 * summData.FSTotalWin / summData.TotalBet));
                Console.WriteLine(String.Format("FG Exploding RTP           : {0,11:0.00}%", 100 * summData.FgExplodingWin / summData.TotalBet));
                Console.WriteLine(String.Format("FG Reveal RTP              : {0,11:0.00}%", 100 * summData.FgRevealWin / summData.TotalBet));
            }
            Console.WriteLine("--- RTP.OverAll ------------------------");
            Console.WriteLine(String.Format("RTP.Total (Over All)      : {0,11:0.0000}%", 100 * summData.RTPOverAll));

            Console.SetOut(oldOut);
            writer.Close();
            fileStream.Close();

            Console.WriteLine($"Max Collapse {maxCollapse}");
            Console.WriteLine("Done");
        }
Beispiel #17
0
        public void Spin(int level, int numusers, int numItrPerUser, decimal spinBet)
        {
            var sdt      = DateTime.Now;
            var spinArgs = new SpinArgs
            {
                LineBet    = spinBet,
                Multiplier = 1
            };

            var users    = Utilities.GenerateUsers(GameId, numusers, level);
            var summData = users.AsParallel().Select(user =>
            {
                var data           = new SummaryData();
                var request        = user.CreateRequestContext <SpinArgs>("fudaole");
                request.Parameters = spinArgs;
                foreach (var iter in new byte[numItrPerUser])
                {
                    data.SpinCounter++;
                    data.TotalBet    += 38 * spinBet;
                    var executeResult = module.ExecuteSpin(level, new UserGameSpinData(), request);
                    var result        = executeResult.Value as FuDaoLeResult;
                    if (result.Wheel.Reels[2].All(ele => ele == 15))
                    {
                        data.ExpandingHit++;
                    }
                    if (result.Win <= 0)
                    {
                        continue;
                    }
                    var normalWinning    = result.WinPositions.Where(item => item.Line > 0).ToList();
                    var nonNormalWinning = result.WinPositions.Where(item => item.Line == 0).ToList();

                    data.MainGameWin        += normalWinning.Sum(ele => ele.Win);
                    data.EnvelopeJackpotWin += nonNormalWinning.Where(ele => ele.Symbol < 14).Sum(item => item.Win);
                    data.ScatterWin         += nonNormalWinning.Where(ele => ele.Symbol == 14).Sum(item => item.Win);

                    if (result.HasBonus)
                    {
                        var bonusRequest   = user.CreateRequestContext <BonusArgs>("fudaole");
                        var freeSpinResult = ExecuteFreeSpin(level, bonusRequest, result);
                        data += freeSpinResult;
                        data.MgFHit++;
                    }
                }
                return(data);
            }).AsEnumerable()
                           .Aggregate((s1, s2) => s1 + s2);

            var edt        = DateTime.Now;
            var oldOut     = Console.Out;
            var fileStream = new FileStream($@"..\..\..\Results\FuDaoLe\{TestContext.CurrentContext.Test.Name}.txt", FileMode.OpenOrCreate, FileAccess.Write);
            var writer     = new StreamWriter(fileStream);

            Console.SetOut(writer);
            Console.WriteLine(String.Format("Test.Level                 : {0}", level));
            Console.WriteLine(String.Format("Test.TimeStart             : {0} {1}", sdt.ToShortDateString(), sdt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.TimeEnd               : {0} {1}", edt.ToShortDateString(), edt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.SpinMode              : {0}", "Random"));
            Console.WriteLine("----------------------------------------");
            Console.WriteLine(String.Format("SpinCount                  : {0}", summData.SpinCounter));
            Console.WriteLine(String.Format("Expanding Hit              : {0}", summData.ExpandingHit));
            Console.WriteLine(String.Format("Scatter Hit                : {0}", summData.MgFHit));
            Console.WriteLine(String.Format("TotalBet                   : {0,12:0.00}", summData.TotalBet));
            Console.WriteLine(String.Format("Game Win                   : {0,12:0.00}", summData.MainGameWin));
            Console.WriteLine(String.Format("Scatter Win                : {0,12:0.00}", summData.ScatterWin));
            Console.WriteLine(String.Format("Envelope Jackpot Win       : {0,12:0.00}", summData.EnvelopeJackpotWin));
            Console.WriteLine(String.Format("Free Spin Win              : {0,12:0.00}", summData.FSTotalWin));
            Console.WriteLine(String.Format("Free SpinCount             : {0,12:0.00}", summData.FSpinCounter));
            Console.WriteLine(String.Format("Av Num of Free Games       : {0,12:0.00}", (decimal)summData.FSpinCounter / summData.MgFHit));
            Console.WriteLine(String.Format("Expanding Hit Rate         : {0,12:0.00}", summData.ExpandingHitHitRate));
            Console.WriteLine(String.Format("MG Feature Hit Rate        : {0,12:0.00}", summData.MgFHitRate));
            Console.WriteLine(String.Format("FG Feature Hit Rate        : {0,12:0.00}", summData.FgFHitRate));
            Console.WriteLine("----------------------------------------");
            if (summData.TotalBet > 0)
            {
                Console.WriteLine(String.Format("Main Game Non Scatter RTP  : {0,11:0.00}%", 100 * summData.MainGameWin / summData.TotalBet));
                Console.WriteLine(String.Format("Scatter RTP                : {0,11:0.00}%", 100.0m * summData.ScatterWin / summData.TotalBet));
                Console.WriteLine(String.Format("Envelope Jackpot RTP       : {0,11:0.00}%", 100 * summData.EnvelopeJackpotWin / summData.TotalBet));
                Console.WriteLine(String.Format("Free Spin RTP              : {0,11:0.00}%", 100 * summData.FSTotalWin / summData.TotalBet));
            }

            Console.WriteLine("--- RTP.OverAll ------------------------");
            Console.WriteLine(String.Format("RTP.Total (Over All)       : {0,11:0.00}%", 100 * summData.RTPOverAll));
            Console.SetOut(oldOut);
            writer.Close();
            fileStream.Close();
            Console.WriteLine("Done");
        }
Beispiel #18
0
        public void Spin(int level, int numusers, int numItrPerUser, decimal spinBet)
        {
            var sdt      = DateTime.Now;
            var spinArgs = new SpinArgs
            {
                LineBet    = spinBet,
                Multiplier = 1
            };

            var users    = Utilities.GenerateUsers(GameId, numusers, level);
            var summData = users.AsParallel().Select(user =>
            {
                var data           = new SummaryData();
                var request        = user.CreateRequestContext <SpinArgs>("geniesluck");
                request.Parameters = spinArgs;
                foreach (var iter in new byte[numItrPerUser])
                {
                    data.SpinCounter++;
                    data.TotalBet += 40 * spinBet;

                    var executeResult = module.ExecuteSpin(level, new UserGameSpinData(), request);
                    var result        = executeResult.Value as GeniesLuckResult;

                    data.MainGameWin += result.Win;
                    if (result.HasBonus)
                    {
                        if (result.Bonus.ClientId == 3)
                        {
                            data.MgFHit++;
                        }
                        else
                        {
                            data.MgReHit++;
                        }
                        var bonusRequest   = user.CreateRequestContext <BonusArgs>("geniesluck");
                        var freeSpinResult = ExecuteBonus(level, bonusRequest, result);
                        data += freeSpinResult;
                    }
                }
                return(data);
            }).AsEnumerable()
                           .Aggregate((s1, s2) => s1 + s2);

            var edt        = DateTime.Now;
            var oldOut     = Console.Out;
            var fileStream = new FileStream($@"..\..\..\Results\GeniesLuck\{TestContext.CurrentContext.Test.Name}.txt", FileMode.OpenOrCreate, FileAccess.Write);
            var writer     = new StreamWriter(fileStream);

            Console.SetOut(writer);
            Console.WriteLine(String.Format("Test.Level                : {0}", level));
            Console.WriteLine(String.Format("Test.TimeStart            : {0} {1}", sdt.ToShortDateString(), sdt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.TimeEnd              : {0} {1}", edt.ToShortDateString(), edt.ToLongTimeString()));
            Console.WriteLine(String.Format("Test.SpinMode             : {0}", "Random"));
            Console.WriteLine("----------------------------------------");
            Console.WriteLine(String.Format("SpinCount                 : {0}", summData.SpinCounter));
            Console.WriteLine(String.Format("TotalBet                  : {0,12:0.00}", summData.TotalBet));
            Console.WriteLine(String.Format("Game Win                  : {0,12:0.00}", summData.MainGameWin));
            Console.WriteLine(String.Format("Free Spin Win             : {0,12:0.00}", summData.FSWin));
            Console.WriteLine(String.Format("Free SpinCount            : {0,12:0.00}", summData.FSpinCounter));
            Console.WriteLine(String.Format("MG ReSpin Hit Rate        : {0,12:0.00}", summData.MgReHitRate));
            Console.WriteLine(String.Format("MG Feature Hit Rate       : {0,12:0.00}", summData.MgFHitRate));
            Console.WriteLine(String.Format("FG ReSpin Hit Rate        : {0,12:0.00}", summData.FgReHitRate));
            Console.WriteLine(String.Format("FG Feature Hit Rate       : {0,12:0.00}", summData.FgFHitRate));

            Console.WriteLine("----------------------------------------");
            if (summData.TotalBet > 0)
            {
                Console.WriteLine(String.Format("Main Game RTP             : {0,11:0.00}%", 100 * summData.MainGameWin / summData.TotalBet));
                Console.WriteLine(String.Format("ReSpin RTP                : {0,11:0.00}%", 100 * summData.ReSpinWin / summData.TotalBet));
                Console.WriteLine(String.Format("Main Game RTP             : {0,11:0.00}%", 100 * summData.FSWin / summData.TotalBet));
                Console.WriteLine(String.Format("ReSpin Free Game RTP      : {0,11:0.00}%", 100 * summData.ReSpinFSWin / summData.TotalBet));
            }

            Console.WriteLine("--- RTP.OverAll ------------------------");
            Console.WriteLine(String.Format("RTP.Total (Over All)      : {0,11:0.00}%", 100 * summData.RTPOverAll));
            Console.SetOut(oldOut);
            writer.Close();
            fileStream.Close();
            Console.WriteLine("Done");
        }