アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » ケータイFlashゲーム制作レクチャー » 第8回 カードゲームレクチャー(2) スクリプトを仕込む!!

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

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

魔法の呪文!? 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/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス