ゲーム「ワガハイ式ビリヤード」 制作手順2-3

監督スクリプトを記述しよう

このページでは、前回に引き続き、ゲームの監督スクリプトを記述していきます。監督スクリプトの主なお仕事は以下のような感じでしたね。

・ゲーム開始直後、数球オブジェクトを初期配置に並べる

自分のターンにて、パワーや方向などを調節し、手球を発射

・CPUが(とあるルールにのっとり)パワーや方向などを調節し、手球を発射

・発射後、手球や数球の状況によって、次の番が自分かCPUかを決定する

前回から、自分のターン時の作業をスクリプト化しています。スクリプトの全体概要については前回の前半を参考にして下さい。このページでは、詳細部分の説明の残りについて、順番に解説してきます!

スクリプトを書こう2-2(自ターンの動き 続き)

自ターンの挙動について、残りは④手球発射前の準備スクリプト⑤手球移動可能時の手球位置調整スクリプトになります。⑤は少し話が長くなりますが、しっかり理解していきましょう!

④手球発射前の準備

ここでは、手球発射前に、待ち時間中は不要なオブジェクトを削除します。また、この後待ち時間中に使う変数のリセットを行います。変数リセットについては、ここで初めて出てくる変数が色々ありますが、内容の詳細は全て制作手順2-52-6の方で説明しますので、ここでは省略しておきます。いつもの「フーン」で大丈夫です。

スクリプトは、以下のような感じになります。

⑤台上で手球の位置調整(移動可の時)

ビリヤード 手球移動可能範囲setting=2かつcanmove=0 or 2の時に台上の手球を動かせる、という処理についてです。注意が必要なのは、canmove=0(ファール後の次のターン)では台上全体を移動出来ますが、canmove=2(一番最初のショット時)では手球の移動可能範囲は左1/4程度のみになります(右図も参照)。その点を上手に書けるようなスクリプトにしようとすると、こんな感じでしょうか?

ただ、これで実装してみると分かるのですが、これでもまだ不十分です。というのも、手球の移動が自由過ぎて、台上の数球を動かしてしまうからです。これは現実では禁止行為であり、ファールになります。

そこで、このワガハイ式ビリヤードでは、台上の数球を動かさない範囲で手球を自由に移動出来る、というスクリプトに変更します。具体的には、上記moveplayerballメソッド中で、各矢印キーを押した時の対処が書いてあるif文の中身を以下のように修正します。以下では、代表で「上(Y軸正方向)移動」の時だけ書きます。

movecheck というメソッド内で、手球の移動先と数球が干渉し合わないかどうかのテストを行っています(注:まだ実際には移動していない)。干渉し合うか否かは、お互いの中心間距離(Vector3.Distance(2点の座標)で計測します)が球直径diam以下なら干渉=手球移動不可、という判定を下します。

各数球との確認結果は、notnear[i]というbool型配列に入り、それらを全部確認して総合的な結論を下すのがallnotnearというbool型変数になります。配列notnear[i]の中に、1つでもfalse、つまり移動NGが出ていると、allnotnear=falseになる、という仕組みです。ここの手続きにはメソッドの再帰呼び出しを使用しています。再帰呼び出しについてはぷよぷよ制作手順5-2にて詳しく解説しましたのでそちらを参照下さい。その時とは再帰呼び出しの使い方が異なりますが、こういうbool型配列の総合判断を下す時は、このような再帰呼び出しを活用してみるのも良さそうです。

最後に

やっと、自ターンの挙動について、Updateメソッド中にスクリプトを書きあげることが出来ました!長かった…。次回は、相手ターンでのCPUの挙動について、スクリプト化していきます!!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする