ケータイFlashゲーム制作レクチャー

第8回 カードゲームレクチャー(2) スクリプトを仕込む!!

この記事を読むのに必要な時間:およそ 4 分

魔法の呪文!? FlashLite1.xのActionScriptの底力を知ろう!

予告通り,今回からバリバリとスクリプトを仕込んで行くよ!え? 「FlashLite1.xのScriptじゃ大した事できないでしょ?」って? 誰だい,そんなこと言ってるのは!そんな人こそ,このレクチャーを読むのだピピ~ィ!!

擬似配列を使ったデータ上のシャッフル

複数のオブジェクトやデータを一様に扱いたい場合,たいていのプログラム言語では,配列というデータ構造を利用する。Flashでもバージョン5のActionScriptからこの"配列"が使えるようになった。しかし,Flash4のスクリプト仕様を踏襲するFlashLite1.xのスクリプトには,この配列がない。その代わりとして用いられている方法が,擬似配列である。

今回作成する"神経衰弱ゲーム"の場合,場に並ぶ8枚のカード(とそのパラメタを管理するための変数)を,この擬似配列で作成する。

(1)擬似配列の作り方

いきなり擬似配列などと仰々しい名前を出して脅かしてしまったかも知れないが,実の所は普通のオブジェクトであり,普通の変数だ。ただ,そのインスタンス名(もしくは変数名)を末尾のみ連番とした統一の名前で命名すれば良いのだ。

例えば,phase3の「カードを選ぶ,めくる(プレイ部分)」においては,"場"に8枚分のカードクリップのインスタンスが並ぶことになるが,これらのインスタンス名をCard0~Card7とするだけで,擬似配列は利用可能なのだ。

Fla画面1 ゲームクリップ上に配置したオブジェクト

Fla画面1 ゲームクリップ上に配置したオブジェクト

ご覧いただけば分かるように各カードクリップは,ゲームクリップ上に直接配置しているわけではなく,プレイクリップを介している。プレイクリップのインスタンス名は,"CardPlay"である。

(2)各カードのマークやナンバーを保持する変数

前回の復習になるがカードクリップは,1フレーム目に裏模様のイメージを,2フレーム目以降に52枚分のカードパターンを,すべて持っている。フレームアクションとして,1フレーム目にstopが記述されているため,初期状態では裏向きのまま停止しているのだ。したがってカードがめくられた場合には,2フレーム目以降のどこかのフレームにgotoAndStopでジャンプすれば,そのフレームに設定したマークやナンバーを表示することができる。ここでカードは,何度もめくられたり戻されたりする点に注意が必要である。めくられる度にカードのマークやナンバーが変わってしまったのでは,ゲームにならない。そこでカードごとに,ジャンプすべきフレーム番号を保持する変数が必要になる。この変数は8枚のカードそれぞれに対応しているため,カードのインスタンス名と同様に擬似配列とした方が扱いやすい。そこで,各カードのマークやナンバーを保持する変数として,CardVal0~CardVal7を設定することにする。

(3)シャッフルさせるスクリプト

ゲームクリップの1フレーム目にカードをシャッフルさせるスクリプトを記述する。もっともカードそのものをシャッフルさせる必要はない。CardVal0~CardVal7に設定するフレーム番号をシャッフルさせるだけで良いのだ。

Fla画面2 カードをシャッフルさせるスクリプトの記述場所

Fla画面2 カードをシャッフルさせるスクリプトの記述場所

ここに記述するスクリプトは次のようなものだ。

List1 カードをシャッフルさせるスクリプト

//0~12の数列を作る・・・・・・①
for(i=0;i<13;i++){
    set("Number" add i, i);
}
//適当に交換して,乱数列を作る(頭4つを利用)・・・・・・②
for(i=0;i<13;i++){
    idx1 = Random( 13);
    idx2 = Random( 13);
    temp = Eval("Number" add idx1);
    set("Number" add idx1,Eval("Number" add  idx2));
    set("Number" add idx2,temp);
}
//場に並ぶカードの決定・・・・・・③
for(i=0;i<4;i++){
    j=i+4;
    switch(Random( 6)){
       case 0:                  //スーツ(ダイヤ×クローバ)
          set("CardVal" add i,Eval("Number" add i)+2);
          set("CardVal" add j,Eval("Number" add i)+15);
          break;
       case 1:                  //スーツ(ダイヤ×ハート)
          set("CardVal" add i,Eval("Number" add i)+2);
          set("CardVal" add j,Eval("Number" add i)+28);
          break;
       case 2:                  //スーツ(ダイヤ×スペード)
          set("CardVal" add i,Eval("Number" add i)+2);
          set("CardVal" add j,Eval("Number" add i)+41);
          break;
      case 3:                  //スーツ(クローバ×ハート)
          set("CardVal" add i,Eval("Number" add i)+15);
          set("CardVal" add j,Eval("Number" add i)+28);
          break;
       case 4:                  //スーツ(クローバ×スペード)
          set("CardVal" add i,Eval("Number" add i)+15);
          set("CardVal" add j,Eval("Number" add i)+41);
          break;
       case 5:                  //スーツ(ハート×スペード)
          set("CardVal" add i,Eval("Number" add i)+28);
          set("CardVal" add j,Eval("Number" add i)+41);
          break;
    }
    //カードロック状態を未ロックにする・・・・・・④
    set("CardLook" add i, 0);
    set("CardLook" add j, 0);
}
//場に並ぶカードを切る・・・・・・⑤
for(i=0;i<20;i++){
    idx1 = Random( 8);
    idx2 = Random( 8);
    temp = Eval("CardVal" add idx1);
    set("CardVal" add idx1,Eval("CardVal" add  idx2));
    set("CardVal" add idx2,temp);
}
//各種フラグの初期化・・・・・・⑥
selectCard1 = -1;   //1枚目にめくったカードのインデックス
selectCard2 = -1;   //2枚目にめくったカードのインデックス
sameCount = 0;      //揃った回数
missCount = 0;      //ミスした回数
targetIndex = 0;    //選択候補カードのインデックス

List1をご覧いただけばわかるように,このフレームで行っている処理は大きく6つのブロックに分けることができるリスト内①~⑥)。ここで④と⑥は,カードのシャッフルには直接関係ない処理なので後回しとし,残る4つのブロックを順に解説することにしよう。

著者プロフィール

西村直樹(にしむらなおき)

クリエイティブスタジオ Studio無限界 代表。アニメーターを経て,ゲームクリエイターとなる。ゲーム制作では,企画シナリオ,ディレクション,絵関連など幅広くこなし,ゲームクリエイターとして現在で19年となる。また,ゲームスクール,アミューズメントメディア総合学院にて,創立年から企画系講師を行い,クリエイター育成にも携わっている。現在は,マネジメントを行いつつ,コンシューマゲーム,ケータイコンテンツ,書籍執筆,その他様々なプロジェクトを進めている。

Studio無限界
URLhttp://www.mugenkai.com/


藤田和久(ふじたかずひさ)

プログラマ/テクニカルスーパーバイザー。メインフレームと呼ばれる大型コンピュータのシステム開発から,WebサイトのCGI,そしてケータイFlashに至るまで様々な環境のプログラミングに携わる。現在はStudio無限界の活動の傍ら,都内複数の専門学校において講師として,ゲーム制作,Webサイト制作,システムエンジニアリングなどの授業を担当。 また,Studio無限界とは別にFMS(個人)として,システムエンジニアリングの分野でも 活動している。

Studio無限界
URLhttp://www.mugenkai.com/

コメント

コメントの記入