このコーナーでは、主に初心者さんに向けたイベントのテクニックを紹介していきます。
RPGツクールVXAceで説明していきますが、多くはVXや他のツクールでも可能です。
合言葉は「スクリプトなんて飾りです、偉い人にはそれが分からんのですよ。」
777HIT御礼企画の特別回です。
イベントだけでスロットマシンを作る方法を紹介します。
解説編ではサンプルプロジェクトに含まれているイベントを解説します。
つづきはこちら、からどうぞ。
基礎設計さて、早速イベント内容の紹介と行きたいところですが
その前に今回のイベントの目的と手段について整理しておきます。
というのもこれが「どうイベントを組むべきか」と密接に結びついているからです。
例えばですが
「3つの乱数を発生させて、文章表示でその3つの変数を並べて表示し
3つが等しければ当たりの処理、そうでなければ外れの処理を行う」というイベント。
「1つの乱数を使ってランダムで揃った場合と揃ってない場合に分岐し
ピクチャで揃った画像や揃ってない画像を表示して処理を行う」というイベント。
どちらも今回のイベントに比べてとても簡単に組めるイベントですが
これだってスロットマシンのイベントとしては間違ってないです。
私が今回のイベントを作る前に考えたのは「プレイヤーが遊ぶ」という点です。
運ではなくプレイヤーの操作が結果に影響するように次の点にこだわりました。
・揃った絵柄によって貰える金額が変わる
・ランダムに絵柄が出るのではなく、ちゃんとリールが高速回転する
・プレイヤーはリールを自分の判断でストップさせる
・プレイヤーは多くコインを賭けることで有効な列が増えて有利になる
これを元に、完成したイベントを想像しながらどういう仕組みにするか考えます。
今回は素材配布なので、同時になるべく変更しやすいつくりも心掛けています。
イベントの解説では解説の方に移りたいと思います。
リールパネルイベントまず最初に「リールパネル」というイベントを用意します。
スロットの絵柄表示用のキャライベントで、今回は3*3の9種類作ります。
そしてそれに対応するように、変数とスイッチも9種類用意します。
サンプルでは上中下のTMBと左中右のLCRの組み合わせで、左上ならTLと区別してます。
リールパネルはどれも、条件とキャラチップが異なる多数のページを持っており
対応する変数によって(ページが切り替わり)キャラチップが変化していきます。
対応するスイッチがオンになっている場合はキャラチップが足踏みして点滅を表現します。
イベントコマンドは設定せず、キャラチップは向き固定にしてしまいます。
こういったイベントを作ることで
・変数の操作だけで簡単に絵柄を変えることができる
・イベントを置くだけでリールの位置を自由に設定できる
というメリットがあります。
特に座標やイベントIDを使っていないため、コピペに強いというのが大きいです。
変数はスロットの絵柄を区別するのにも使えるので無駄が少ないです。
スロットマシン本体イベント(サンプルマップ中央にある基本スロットを開いて参照して下さい)
「スロットマシン本体」の処理は次のような流れになっています。
・ベットする額の決定
・リールの初期設定
・リールの回転&ストップ処理
・絵柄が揃ったかの判定
リールの回転とストップ処理は繰り返しのループにする必要がありますが
これらは順番に1つずつ行えば良いものなので1つのイベントで問題ありません。
基本的に「決定キーで開始」の1ページで作れますが
1ページで作ると長くなって見辛いのと
ついでにスロットマシンのキャラチップを変化させたいので
セルフスイッチと自動実行を使って次のページにバトンタッチさせるようになってます。
1ページ目最初に行うのはベットする額の決定ですが
ここで大事なのは変数にいくらベットしたかを記録することだけです。
まず幾ら賭けるのかの選択肢を表示し、所持金が足りていたら所持金を引いてベットを確定
足りない場合はラベルジャンプを使ってもう一度選択肢に戻るというものです。
次にリールの初期設定を行います。
リールの番号の仕組みは、まずリール毎に「リール配列」を設定します。
配列は数値の並びのことで、変数が集まったものとでも考えれば良いでしょう。
これを作るためにスクリプトを使って変数に配列を代入してます。
$game_variables[12] = [0,1,2,3,4,5,6,7]
$game_variables[14] = [0,1,2,3,4,5,6,7]
$game_variables[16] = [0,1,2,3,4,5,6,7]
以前紹介したことがありますが、これは変数の種類を変える方法なので
配列が代入された変数と数値が入っている普通の変数で計算を行うとエラーで落ちます。
この方法は、例えばその変数を専用にして他で使わないなど、少し気をつけて使うべきです。
更にリール毎に「配列の何番目か」を記録する変数「リール番号」を用意します。
そして次のページに移ります。前述の通りスロットマシンの画像を変えるのが目的です。
2ページ目さて、これで必要な変数が揃いましたので、リールの仕組みについて説明できます。
リールパネルのときに説明した変数9つが「表示されている絵柄」です。
スロットなのでこれはストップしない限り次々と変化していきます。
回転するリールの仕組みを考えると、常に新しい絵柄が出現するのは一番上のパネルです。
次に出現する絵柄は、「リール配列」と「リール番号」の組み合わせで決定します。
例えば配列が[0,1,2,3,4,5,6,7]、番号が5なら、次の絵柄は4ということです。
絵柄が出現したらリール番号に+1をするので配列通りに次々と絵柄が変わるわけです。
中と下のパネルは上から絵柄がそのまま降りてくるだけです。
2ページ目の最初にあるのは回転処理です。
まずは左側のリールの処理があります。
条件分岐でストップ数が1以上なら、左のリールはストップされたので回転処理を行いません。
そうでないなら、変数の操作でリール番号を+1し
スロット変数M-LとB-Lはそれぞれ上の変数を代入して絵柄を引き継ぎます。
次のスクリプトは.size命令を使い、リール番号が配列の数以上になったら0に戻します。
(つまりリール配列の一番最後を過ぎたら一番最初に戻るようなループになる)
次もスクリプトですが、これは変数の操作と同じことをしています。
「リール配列」から(リール番号)番目の数を「T-L」に代入する
という内容です。変数名が長いので難しく見えますが実際は単純です。
[]が二回続くので間違っているように見えますが、これで正解です。
これで左側のリールの上中下の絵柄は切り替わりました。
後はこれを中央と右側のリールに対しても行います。
その次に作るのがストップの処理です。
先に説明してしまいますが、ストップ処理の後にラベルジャンプで
リールの回転に戻るようにしてループを組んでいます。
ここまでのリールの回転処理は一瞬で行われるので、直後に作るストップ処理は
リールの回転と同時に行われてループし続けることになります。
そして使用するのは我らがアイドルInput.trigger?(:C)です。
(以前は
EBの策略で並列処理の仕様でダメな子扱いでしたが)
Input.trigger?(:C)は決定キーを「新たに押されたか」で判定する命令です。
その場合はストップ数を+1し、更にストップ数が3ならラベルジャンプでループを抜け出します。
このラベルジャンプを使ったループは普通のループよりも便利なのでオススメですよ。
これでストップ処理自体はOKですが、ループ前にウェイト1Fを入れないと
1Fに無限回ループしてしまうので止まってしまいます。
更に、このままテストプレイしてみると1F毎にリールが動くので
超速すぎて折角の「リール再現」と「プレイヤーがストップ」の要素が死んでます。
よってリールの回転を3F毎くらいに押さえたいと思います。
ここで注意してほしいのがウェイトを単純に3Fに増やさないこと。
回転処理が3F毎になるだけでなく、ストップ処理も3F毎になってしまいます。
Input.trigger?は毎フレームチェックしないと上手く機能しないので
そうすると早い話がキーを押しても2/3の確率で無効になってしまいます。
なのでサンプルのように、ストップ処理と1Fウェイトを1セットで増やします。
さて、リールのストップが終われば次は揃ったかの判定です。
これは非常に頭の悪そうな(笑)力押しで実装しています。
要は揃ったか判定するのは最大で3列と斜め2列の5パターンなので総当りします。
まずベットが1以上なら、中央の横列が判定の対象になります。
つまりM-L、M-C、M-Rが全て同じなら揃っているということですね。
普通の条件分岐で作ると恐ろしいデススタックが詰みあがるので
スクリプトで計算して1行で済ませます。
このとき注意点として計算式は常に左辺と右辺の2つからなる決まりをお忘れなく。
つまりa == b == cというのはNGです。a == b && b == cという形にします。
こうすればa == bとb == cとX && Yという3つの計算がちゃんと成立するのでOKです。
(何故こんな注意をするのかって?私がやっちゃったからですよ!)
揃っていれば、払い戻し額を一旦「リザルト」という変数に入れておきます。
払い戻し額は777なら100、そうでないなら数字*10を払い戻すというルールにしました。
更にM-L、M-C、M-Rが揃ったということでスイッチを入れて点滅させます。
この辺りの設計は、複数ラインが同時に揃うことを前提に作っています。
ここまでの処理を、次はベットが2以上、3以上の場合で作ります。
それら全ての判定が終わったら払い戻しの処理に入ります。
またまたスロットの画像を変えたいので、当たったときと外れたときでページを変えます。
3&4ページ目最後の処理は極めてシンプルなものです。
効果音や文章の演出をして、リザルト変数を使って所持金を増やします。
それから使った変数を全てリセットしてイベント終了です。
以上で解説編は終わりです。お疲れ様でした~!
いやはや改めて解説しようとすると書くのも読むのも大変ですね。
おそらく1回の説明で理解できる人はそうそういないと思いますが
サンプルと見比べるなり、改造してみるなりして経験値にして頂ければ幸いです。
それでは次回、改造編でお会いしましょう。お疲れ様でした~♪
[4回]
PR
-->