ゲーム「ワガハイ式7ならべ」 制作手順2-2

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

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

・トランプ山札をシャッフルして、各プレイヤーにカード配布

・手札に7のカードがあった場合は開始前に場に出す

・自分のターンに場に出すカードを選択、出せない場合はパス

・CPUが(とあるルールにのっとり)場に出すカードを選択、出せない場合はパス

・各プレイヤー0枚になったらあがり、順位表示

今回は上記リストの赤字部分に当たる箇所をスクリプト化していきます!

スクリプトを書こう1(シャッフル&配布)~続き~

前回山札のシャッフルまでスクリプト化出来ましたね。今回はその続きで各プレイヤーに配布する段階からスクリプト化していきましょう!

各プレイヤーにカード配布

各プレイヤーへのカード配布はこんな感じでしょうか。イメージとしては山札の上から1枚ずつ順に各プレイヤーに配布している感じです。

なお、今回各プレーヤーの手札を表す配列に、動的配列を使用しました。今後のことも考えて動的配列にしたのですが、動的配列???という方はこちらのページに別途纏めましたので併せて参考にして下さい。m(_ _)m

手札のカード配列次に、配布されたカードを各プレイヤーの手札位置に配置していきます。配置場所は制作手順1-2の時に決めたように、右図のような配置になりますので、それを数式化すると下のようなスクリプトになります。

あと、カードが配布されたついでにカードの整列、手札枚数表示の更新、CPUの手札カード裏返し、などの作業も併せてスクリプト化しておきましょう。

ちょっと長いですが、基本同じようなスクリプトを4回ずつ(各プレイヤーごとに)書いているだけですので、スクリプト中にあるコメント文を参考にして、一つ一つ確実に理解していって下さい。

なお、最後に書きましたSetPlayerCardsメソッド(手札の整列&残り枚数の更新)については、今後も含めて呼び出し頻度が高いため、今回は別メソッド化しております。本メソッドは次回以降もよく登場しますので、役割をしっかりおさえておきましょう。

スクリプトを書こう2(開始前に7カード出し)

今回ちょっと記事が長くなりますので、一旦ご休憩を…( ´・ω・)⊃旦

さて次に、Startメソッドの続きとして、開始前に7のカードを出す手続きをスクリプト化していきましょう。

本スクリプト中にある変数setcards[j,i]は、各カード(j:マーク、i:数字)が場に出ているか(1)否か(0)次出せるか(2)を記憶させておく変数なので、何も場にカードが出ていない初期状態は全て0ですし、各マークの7が出された後は、setcards[各マーク,7]=1になります。なお、本変数については、i=0~14になっていたり、コメント中に「周期境界」という謎の言葉が書かれていたり、と気になることが色々ありますが、これらが真に効果を発揮するのは次回になりますので、今回は「フーン」で構いません。

各カードに付けるスクリプトを書こう(場にゆっくり移動)

最後に、各カードオブジェクトに付いているスクリプト「eachcard.cs」について紹介します。「eachcard.cs」内では、各カードが手札位置から場に出る挙動をスクリプト化しております。ただ場に出すだけならtransform.positionメソッドでも問題無いのですが、今回は少し工夫してゆっくり場に出る挙動になるよう、Vector3.MoveTowards メソッドをUpdateメソッド中で使ってみます。スクリプトの中身は以下の通りです。

監督スクリプト中で各カードのcangomoveメソッドを呼び出せば、そのカードは移動許可が下り、Updateメソッドによりトランプカードが移動し始めます。なお、gettargetpos メソッドを用いて到着地点座標(targetpos)を事前に記憶させておきます。例えば、前回52枚のトランプカードを定義する際にでも、ついでにgettargetposメソッドを呼び出しておけばOKです。

最後に

ちょっと長くなりましたが、ここまでで監督スクリプトのお仕事2つがスクリプトに実装できました。これで、ゲーム開始の準備が整った=Startメソッドの中身を書き上げた、という段階です。次回から、ゲーム開始後の各プレイヤーの挙動について(Updateメソッド中に)スクリプトを書いていきます!次回以降もよろしくお願いします!!

シェアする

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

フォローする