示例#1
0
    /// <summary>
    /// オートプレイ処理
    /// </summary>
    public void AutoPlay()
    {
        // オートプレイは 0.5Hz
        var hz = 0.5f;
        time += Time.deltaTime;
        if (time > hz)
        {
            time -= hz;
        }
        else
        {
            return;
        }

        // 全部止まってるならコイン投入&リール回して抜ける
        if (IsAllReelStopped())
        {
            // オートプレイ設定をクリア            
            currentAutoPlayPattern = null;
            KeyInput(5);
            return;
        }

        // オートプレイ設定が未確定なら抜ける
        if (currentAutoPlayPattern == null) return;

        // 自動停止順に基づき停止対象リールを選択
        int targetReel = -1;
        int[] stopOrder;
        if (currentAutoPlayPattern.isStopReverse)
        {
            stopOrder = new int[] { 2, 1, 0 };
        }
        else
        {
            stopOrder = new int[] { 0, 1, 2 };
        }

        for (int idx = 0; idx < 3; idx++)
        {
            if (!mOmatsuri.IsReelStopped(stopOrder[idx]))
            {
                targetReel = stopOrder[idx];
                break;
            }
        }

        // 目押し処理
        if (currentAutoPlayPattern.targetRow[targetReel] == -1)
        {
            // -1なら連打
            KeyInput(targetReel + 1);
        }
        else
        {
            // 目当ての場所を狙って止める
            // 偶にリール番号が跳ぶ(1フレームあたりの回転数が早すぎ?)なので条件を甘く
            float allowSlip = 0; // 許容する面のズレ
            for (int cnt = 0; cnt < 1 + allowSlip; cnt++)
            {
                int faceIdx = mOmatsuri.ANGLE2INDEX(mOmatsuri.int_s_value[Defines.DEF_INT_REEL_ANGLE_R0 + targetReel]);
                int idxCorrectValue = 7; // 仕様の面番号と実際の面番号がズレてるので補正する
                int targetIdx = currentAutoPlayPattern.targetRow[targetReel] + idxCorrectValue;
                targetIdx += cnt;
                if (targetIdx >= 21) targetIdx -= 21;
                if (faceIdx == targetIdx)
                {
                    KeyInput(targetReel + 1);
                    break;
                }
            }
        }
    }
示例#2
0
    /// <summary>
    /// オートプレイパターン設定
    /// オートプレイ定義と現在の状態を参照してリール停止パターンを決定する
    /// </summary>
    void SetAutoPlayPattern()
    {
        AutoPlayPatternDefine.AutoPlayPatternValue[] patterns;
        switch (clOHHB_V23.getWork(Defines.DEF_GMLVSTS)) {
            case 1: // RB中
                patterns = currentAutoPlaySetting.regular;
                break;
            case 2: // BB中
                // 4th青ドン状態チェック
                bool isAodon = mOmatsuri.int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] == 237;
                // リプレイずらし判定
                if (currentAutoPlaySetting == autoPlayFull &&    
                    clOHHB_V23.getWork(Defines.DEF_BIGBCTR) == 1 &&
                    clOHHB_V23.getWork(Defines.DEF_BBGMCTR) >= 8 ) {
                    // フルなら4th青ドン&残JAC回数1&残ボーナスゲーム8回以上

                    // 4thが確定するまで待つ
                    if (!Is4thReelStopped()) {
                        Debug.Log("リプレイずらし・4th停止待機");
                        return;
                    } else {
                        // 4thが青ドンならリプレイずらし
                        if (isAodon) {
                            Debug.Log("リプレイずらし・BB逆(FULL)");
                            patterns = currentAutoPlaySetting.bigReverse;
                        } else {
                            Debug.Log("リプレイずらし無し");
                            patterns = currentAutoPlaySetting.big;
                        }
                    }
                    Debug.Log(
                        "オート判定:青ドン=" + isAodon.ToString() +
                        " 残B=" + clOHHB_V23.getWork(Defines.DEF_BIGBCTR) +
                        " 残JAC=" + clOHHB_V23.getWork(Defines.DEF_BBGMCTR));

                } else if (
                    currentAutoPlaySetting == autoPlaySelf &&
                    ((clOHHB_V23.getWork(Defines.DEF_BIGBCTR) == 2 && clOHHB_V23.getWork(Defines.DEF_BBGMCTR) >= 16) ||
                     (clOHHB_V23.getWork(Defines.DEF_BIGBCTR) == 1 && clOHHB_V23.getWork(Defines.DEF_BBGMCTR) >= 10))) {
                    // セルフなら4th青ドン&
                    // ((残JAC回数2&残ボーナスゲーム16回以上)  ||
                    //  (残JAC回数1&残ボーナスゲーム10回以上))

                    // 4thが確定するまで待つ
                    if (!Is4thReelStopped()) {
                        Debug.Log("リプレイずらし・4th停止待機");
                        return;
                    } else {
                        // 4thが青ドンならリプレイずらし
                        if (isAodon) {
                            Debug.Log("リプレイずらし・BB逆(FULL)");
                            patterns = currentAutoPlaySetting.bigReverse;
                        } else {
                            Debug.Log("リプレイずらし無し");
                            patterns = currentAutoPlaySetting.big;
                        }
                    }
                } else {
                    Debug.Log("オート判定:BB");
                    patterns = currentAutoPlaySetting.big;
                }
                Debug.Log(
                    "オート判定:青ドン=" + isAodon.ToString() +
                    " 残B=" + clOHHB_V23.getWork(Defines.DEF_BIGBCTR) +
                    " 残JAC=" + clOHHB_V23.getWork(Defines.DEF_BBGMCTR));
                break;
            case 4: // 通常
                patterns = currentAutoPlaySetting.normal;
                break;
            case 8: // RB内部あたり
                patterns = currentAutoPlaySetting.regReach;
                break;
            case 16: // BB内部あたり
                patterns = currentAutoPlaySetting.bigReach;
                break;
            default:
                Debug.LogError("オート判定:想定外の値:" + clOHHB_V23.getWork(Defines.DEF_GMLVSTS));
                patterns = currentAutoPlaySetting.normal;
                break;
        }
        currentAutoPlayPattern = patterns[UnityEngine.Random.Range(0, 100) % patterns.Length];
        //Debug.Log("自動プレイパターン:" + 
        //    (currentAutoPlayPattern.isStopReverse ? "右から" : "左から") + 
        //    currentAutoPlayPattern.targetRow[0] + "-" +
        //    currentAutoPlayPattern.targetRow[1] + "-" +
        //    currentAutoPlayPattern.targetRow[2]);
    }