リプレイが成立していたらリプレイ図柄が止まる。
ボーナス成立時はリーチ目が出る。
今回の記事は、成立役ごとの出目を表現できるようにプログラミングしていきます。
Unity環境でテーブル制御を再現していきたいと思います。
(テーブル制御ってなんやねん!という方は前回の記事をご覧ください。)
自作パチスロについて記事のまとめはこちらです。
リール停止までの流れ
ストップボタン押下からリール停止までの流れ(イメージ)はこんな感じになります。
- ストップボタンを押す
- リール停止(ビタ止まり)
- スベリコマテーブルを参照してスベらせる
処理の流れをシーケンス図に表すとこうなります。
リールが止まった時、「リール角度調整」や「停止コマ数計算」などを行う必要がありますが、それはリール自身が行う設計にしています。
ちなみに、停止した角度をちゃんと調整しないと下のようにとんでもない止まり方をします。
必ず1コマ単位で停止するような調整が必要になります。
リールを滑らせる「テーブル制御」は別クラスで管理します。
リールの停止位置と小役フラグを「テーブル制御クラス」に投げて、何マス滑るかを戻り値で受け取る訳です。
戻り値の分だけスベらせて、終わり。という感じです。
制御表を見てみよう
こちらが自作した制御表になります。
今回は「左リール第1停止」の制御表のみ記載します。
見様見真似なので変な部分があったら、優しい気持ちでソッと目を瞑ってください。
これをCSVにしたものがこちらです。
UnityではこれをResourcesフォルダから読み込みます。
Hazure,3,0,0,1,2,0,1,0,1,2,3,0,0,1,0,1,0,1,0,1,2
Reg,3,0,0,1,0,1,2,0,1,2,3,0,0,1,2,0,1,0,0,1,2
Big,3,0,0,0,0,1,0,1,2,3,4,0,1,0,1,2,3,0,0,1,2
Replay,3,0,0,1,0,1,2,0,1,2,3,4,0,0,1,2,3,0,0,1,2
Bell,3,0,0,1,2,0,1,0,1,2,3,4,0,1,2,0,0,1,0,1,2
Suika,4,0,0,1,0,1,0,1,2,3,4,0,1,0,1,0,1,0,1,2,3
Cherry,0,1,2,3,0,1,2,3,0,1,0,1,0,1,2,3,0,1,2,0,1
私は業界人ではないので、実機もこんな感じで動いてるのかは不明ですが、それっぽく動けば良いので良いことにします。
前回の記事を見てもらうとわかりますが、第1停止のみテーブル制御にしようと考えています。
よって、「左第1停止」「中第1停止」「右第1停止」の3種類のみ制御表を作成すれば良いことになります。
第2停止からはコントロール制御となります。
テーブル制御のコード
ストップボタン押下からリール停止まで、全てのコードを記載すると記事がボヤけるので、ピントを絞って「テーブル制御」の部分のみコードを紹介します。
テーブル制御に関する「一連の流れ」はこんな感じです。
- 起動時に制御表のCSVを”Resouces”フォルダから読み込み。
- CSVのデータを、扱いやすい感じに並び替え。
- 引数を元にスベリコマ数を返す
- スベる。
起動時にCSVを読み込む(流れ1、2のコード)
CSVデータはResourcesフォルダに入れておきます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Linq;
public class Suberi_Script : MonoBehaviour
{
TextAsset _csvFile; // CSVファイル
// 小役フラグ判定用のキー
string[] _flagNames = new string[] { "Hazure", "Replay", "Bell", "Suika", "Cherry", "Reg", "Big" };
// 停止リール判定用のキー
string[] _CSVNames = new string[] { "CSV_Left", "CSV_Center", "CSV_Right"};
// CSVの中身を入れるリスト;
List<string[]> _csvDatas = new List<string[]>();
void Start()
{
// 今回はとりあえず左リールなので要素0番
_csvFile = Resources.Load(_CSVNames[0]) as TextAsset; // Resouces下のCSV読み込み
StringReader reader = new StringReader(_csvFile.text);
// , で分割しつつ一行ずつ読み込み
// リストに追加していく
while (reader.Peek() != -1) // reader.Peaekが-1になるまで
{
string line = reader.ReadLine(); // 一行ずつ読み込み
// -----↓↓ここから下は、各フラグごとの制御表の順番を0->21から21->0に入れ替える↓↓----
// ちなみにCSVは、フラグ名,1,2,3 となっている
List<string> reverseLine = new List<string>();
reverseLine = line.Split(',').ToList();
string temp_flagName = reverseLine[0]; // フラグ名をよせておく
reverseLine.RemoveAt(0); // フラグ名を最後尾にする
reverseLine.Add(temp_flagName);
reverseLine.Reverse(); // CSVの並びをひっくり返す
string joinLine = string.Join(",", reverseLine);
// -----↑↑ここから上は、各フラグごとの制御表の順番を0->21から21->0に入れ替える↑↑----
_csvDatas.Add(joinLine.Split(',')); // , 区切りでリストに追加
}
}
テーブルを参照しスベリコマ数を返す(流れ3、4のコード)
スベリコマ数を返すメソッドのコードになります。(リールがこのメソッドを呼び出します)
リールクラス -> テーブル制御クラス の間でやりとりし、停止コマ数の引数を元に、スベリコマ数を返します。
public int ReturnSuberiKoma(string flagName, int stopKoma)
{
int flagIndex = Array.IndexOf(_flagNames, flagName); // 成立フラグ名からindexを算出
// 検索用indexとリール停止のコマ数によりスベリコマ数を検索
int suberiKoma = int.Parse(_csvDatas[flagIndex][stopKoma]);
return suberiKoma; // スベリコマ数を返す
}
こんな感じになりました
成立フラグを「スイカ」に設定しました。
BAR落としのDDTからの→一般的なスイカすべりを再現できました。
もっとヌルッと滑る感じを出したいので、そのうち改良します。
とりあえずCSVを読み込んでテーブル制御は成功ですね。
コメント
記事拝見しております。質問なのですが、停止角度はどのように調整していますか?
コメントありがとうございます。
停止角度についてはPart6の記事に記載しております。
HPトップの「パチスロを作ってみた」のタブから過去記事をご覧いただけますので、宜しければご覧ください。