MachineTestAnalysisLuckyModeResult GetLuckyModeResult(MachineTestLuckyMode mode, List <MachineTestRoundResult> roundResults) { MachineTestAnalysisLuckyModeResult result = new MachineTestAnalysisLuckyModeResult(); IsLuckyModePredicate luckyPred = _luckyPredicateDict[mode]; IsLuckyModePredicate luckyNoRespinPred = _luckyNoRespinPredicateDict[mode]; result._totalConsumedBetAmount = GetTotalConsumedBetAmount(luckyPred, roundResults); result._totalWinAmount = GetTotalWinAmount(luckyPred, roundResults); result._rtp = GetRTP(result._totalConsumedBetAmount, result._totalWinAmount); result._spinCountInCurrentMode = GetSpinCountInCurrentMode(luckyPred, roundResults); result._enterSpecialSmallGameStateCount = GetEnterSpecialSmallGameStateCount(luckyPred, roundResults); result._respinCount = GetRespinCount(luckyPred, roundResults); result._enterSpecialSmallGameStateCountProb = GetEnterSpecialSmallGameStateCountProb(result); result._respinCountProb = GetRespinCountProb(result); if (mode != MachineTestLuckyMode.Hybrid && ShouldAnalysisDetail(_machineConfig)) { result._payoutRowCounts = GetJoyRowCounts(luckyNoRespinPred, mode, SpinResultType.Win, roundResults); result._nearHitRowCounts = GetJoyRowCounts(luckyNoRespinPred, mode, SpinResultType.NearHit, roundResults); result._payoutRowProbs = GetJoyRowProbs(result._payoutRowCounts, result._spinCountInCurrentMode); result._nearHitRowProbs = GetJoyRowProbs(result._nearHitRowCounts, result._spinCountInCurrentMode); result._payoutRowProbDeviations = GetJoyRowProbDeviations(mode, SpinResultType.Win, result._payoutRowProbs); result._nearHitRowProbDeviations = GetJoyRowProbDeviations(mode, SpinResultType.NearHit, result._nearHitRowProbs); result._payoutTotalProb = GetJoyTotalProb(result._payoutRowProbs); result._nearHitTotalProb = GetJoyTotalProb(result._nearHitRowProbs); result._payoutTotalProbDeviation = GetJoyTotalProbDeviation(mode, SpinResultType.Win, result._payoutTotalProb); result._nearHitTotalProbDeviation = GetJoyTotalProbDeviation(mode, SpinResultType.NearHit, result._nearHitTotalProb); } return(result); }
float GetRespinCountProb(MachineTestAnalysisLuckyModeResult luckyModeResult) { float result = 0.0f; int manualSpinCount = luckyModeResult._spinCountInCurrentMode - luckyModeResult._respinCount; if (manualSpinCount > 0) { result = (float)luckyModeResult._respinCount / (float)manualSpinCount; } return(result); }
private void WriteSingleLuckyModeResult(MachineTestLuckyMode mode, MachineTestAnalysisLuckyModeResult luckyModeResult) { Write("LuckyMode=" + mode.ToString() + ":"); string s = string.Format("TotalConsumedBetAmount:{0}, TotalWinAmount:{1}, RTP:{2}", luckyModeResult._totalConsumedBetAmount, luckyModeResult._totalWinAmount, luckyModeResult._rtp); Write(s); s = string.Format("SpinCountInCurrentMode:{0}", luckyModeResult._spinCountInCurrentMode); Write(s); s = string.Format("EnterSpecialSmallGameStateCount:{0}, EnterSpecialSmallGameStateCountProb:{1:N6}", luckyModeResult._enterSpecialSmallGameStateCount, luckyModeResult._enterSpecialSmallGameStateCountProb); Write(s); s = string.Format("RespinCount:{0}, RespinCountProb:{1:N6}", luckyModeResult._respinCount, luckyModeResult._respinCountProb); Write(s); Write(""); if (mode != MachineTestLuckyMode.Hybrid && MachineTestAnalysisHelper.Instance.ShouldAnalysisDetail(MachineConfig.Instance)) { //payout results bool payoutAssert = (luckyModeResult._payoutRowCounts.Count == luckyModeResult._payoutRowProbs.Count) && (luckyModeResult._payoutRowCounts.Count == luckyModeResult._payoutRowProbDeviations.Count); Debug.Assert(payoutAssert); Write("Payout result:"); Write("Id, RowCount, RowProb, ExpectProb, RowProbDeviation"); for (int i = 0; i < luckyModeResult._payoutRowCounts.Count; i++) { float expectProb = MachineTestUtility.GetJoyOverallHit(MachineConfig.Instance, mode, SpinResultType.Win, i); s = string.Format("{0}, {1}, {2:N6}, {3:N6}, {4:N6}", i + 1, luckyModeResult._payoutRowCounts[i], luckyModeResult._payoutRowProbs[i], expectProb, luckyModeResult._payoutRowProbDeviations[i]); Write(s); } float expectWinTotalProb = MachineTestUtility.GetJoyTotalProb(MachineConfig.Instance, mode, SpinResultType.Win); s = string.Format("TotalProb:{0:N6}, ExpectTotalProb:{1:N6}, TotalProbDeviation:{2:N6}", luckyModeResult._payoutTotalProb, expectWinTotalProb, luckyModeResult._payoutTotalProbDeviation); Write(s); Write(""); //nearHit results bool nearHitAssert = (luckyModeResult._nearHitRowCounts.Count == luckyModeResult._nearHitRowProbs.Count) && (luckyModeResult._nearHitRowCounts.Count == luckyModeResult._nearHitRowProbDeviations.Count); Debug.Assert(nearHitAssert); Write("NearHit result:"); Write("Id, RowCount, RowProb, ExpectProb, RowProbDeviation"); for (int i = 0; i < luckyModeResult._nearHitRowCounts.Count; i++) { float expectProb = MachineTestUtility.GetJoyOverallHit(MachineConfig.Instance, mode, SpinResultType.NearHit, i); s = string.Format("{0}, {1}, {2:N6}, {3:N6}, {4:N6}", i + 1, luckyModeResult._nearHitRowCounts[i], luckyModeResult._nearHitRowProbs[i], expectProb, luckyModeResult._nearHitRowProbDeviations[i]); Write(s); } float expectNearHitTotalProb = MachineTestUtility.GetJoyTotalProb(MachineConfig.Instance, mode, SpinResultType.NearHit); s = string.Format("TotalProb:{0:N6}, ExpectTotalProb:{1:N6}, TotalProbDeviation:{2:N6}", luckyModeResult._nearHitTotalProb, expectNearHitTotalProb, luckyModeResult._nearHitTotalProbDeviation); Write(s); Write(""); } }