Exemple #1
0
    /// <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;
    }
Exemple #2
0
 // リーチパターンを抽選値の数のシーケンスに変換
 IEnumerable<structReachPattern> RP2Sequence(structReachPattern rp)
 {
     return Enumerable.Range(0, rp.Chusenti)
                      .Select(count => new structReachPattern(){
                         No = rp.No,
                         Chusenti = rp.Chusenti,
                         Name = rp.Name });
 }