/// <summary> /// 大当たり抽選 /// </summary> /// <param name="HoryuSu">保留カウント</param> /// <param name="KenriKaisu">権利回数(0でなければ確変中)</param> /// <returns></returns> public DrawLotResult DrawLot(int HoryuSu, int KenriKaisu, bool ForceNormalReach, bool ForceSPReach, bool ForceOoatari, bool ForceSP3, bool ForceSaishidou ) { DrawLotResult result = new DrawLotResult(); var IsKakuhen = (KenriKaisu == 0) ? false : true; Debug.Log("カクヘン:" + IsKakuhen); var Atari = IsAtari(RndFFFF, IsKakuhen); var ForceHazure = HazureKotei.Instance.State; if (ForceHazure) Atari = false; if (ForceOoatari) Atari = true; if (Atari) { //---------// // 大当たり // //---------// // リーチライン抽選 var rl = DrawLotReachLine(RndFFFF); if (SliderChange.Instance.value != 0) { while (SliderChange.Instance.value != GetTokuzu(rl.Tokuzu)) { rl = DrawLotReachLine(RndFFFF); } } // リーチパターン抽選 structReachPattern[] RP; if (rl.ReachLine != 4) { RP = Atari123_Chusen; } else { RP = Atari4_Chusen; } var rp = RP[RndFFFF]; if (ForceNormalReach) { ForceSPReach = false; ForceSP3 = false; ForceSaishidou = false; } if (ForceSPReach) { while (!rp.Name.Contains("SP")) { rp = Atari123_Chusen[RndFFFF]; } } if (ForceSP3) { while( rl.ReachLine != 4 ){ rl = DrawLotReachLine(RndFFFF); } while (!rp.Name.Contains("SP3")) { rp = Atari4_Chusen[RndFFFF]; } } if (ForceSaishidou) { while (!rp.Name.Contains("再始動")) { rp = RP[RndFFFF]; } } if (ForceNormalReach) { while (rp.Name.Contains("再始動") || rp.Name.Contains("SP")) { rp = RP[RndFFFF]; } } // 返却値をセット result.isOOatari = true; result.reachLine = rl.ReachLine; result.reachLineName = rl.Tokuzu; result.reachPattern = rp.No; result.reachPatternName = rp.Name; result.tokuzu = GetTokuzu(rl.Tokuzu); } else { Func<int, bool> DrawLotHazure; if (HoryuSu == 0) { DrawLotHazure = DrawLotHazureH0; } else if (HoryuSu == 1 || HoryuSu == 2) { DrawLotHazure = DrawLotHazureH12; } else { DrawLotHazure = DrawLotHazureH3; } // リーチライン抽選 var rl = DrawLotReachLine(RndFFFF); if (ForceSP3) { rl.ReachLine = 4; } // リーチ抽選 var reach = DrawLotHazure(RndFFFF); structReachPattern rp = new structReachPattern(); var tokuzu = GetTokuzu(rl.Tokuzu); if (reach || ForceNormalReach || ForceSPReach) { Func<int, structReachPattern> DrawLotReachPattern; if (rl.ReachLine == 4) { DrawLotReachPattern = DrawLotReachPattern4; } else { DrawLotReachPattern = DrawLotReachPattern123; } rp = DrawLotReachPattern(RndFFFF); if (ForceSPReach) { while (!rp.Name.Contains("SP")) { rp = DrawLotReachPattern(RndFFFF); } } if (ForceSP3) { while (!rp.Name.Contains("SP3")) { rp = DrawLotReachPattern(RndFFFF); } } //Debug.Log("ハズレリーチ:" + rp.Name); //Debug.Log("リーチライン:" + rl.ReachLine.ToString()); } else { // バラケ目 //Debug.Log("ハズレ"); rp.No = -1; // バラケ目時はリーチパターンNoをー1とする rl.ReachLine = -1; rp.Name = "ハズレ"; } // 返却値をセット result.isOOatari = false; result.reachLine = rl.ReachLine; result.reachLineName = rl.Tokuzu; result.reachPattern = rp.No; result.reachPatternName = rp.Name; result.tokuzu = tokuzu; } // 結果を返却する return result; }
// リーチパターンを抽選値の数のシーケンスに変換 IEnumerable<structReachPattern> RP2Sequence(structReachPattern rp) { return Enumerable.Range(0, rp.Chusenti) .Select(count => new structReachPattern(){ No = rp.No, Chusenti = rp.Chusenti, Name = rp.Name }); }