"神経衰弱"ついに完成!
めくった2枚のカードが同じナンバーだった時の処理
前回見ていただいたように、めくった2枚のカードが同じナンバーだった時は、phase4aに処理が移る。Phase4aでは、"GoodJob!!"のメッセージを表示し、全て揃い場にカードがなくなったか否かをチェックする。
(1)"GoodJob!!"メッセージの表示
"GoodJob!!"メッセージ自体はイメージシンボルとして作成し、それをモーション・トゥイーンで拡大する。
(2)確認ボタンの押下時のアクション
"GoodJob!!"メッセージ表示後、次のフェーズに移行するために、確認ボタンを置き、オブジェクト・アクションを記述する。
List1についてポイントとなる所に項番を付した。この順に解説していこう。
① 2枚のカードのナンバーが揃った回数を保存するカウンター変数sameCountに1を加算する。
② Cardxx1とCardxx2(xx1とxx2はともにめくられたカードのインデックス)の表示ヘッドを、何もイメージのないNULLフレームに移動する。これにより、見かけ上、場よりカードが消える。
③ めくられたカードのインデックスを保存する変数SelectCard1および2の値を-1にて初期化する。
④ 式sameCount<4の解が真であれば、場にまだカードが残っているという事である。この場合、gotoAndPlayにて、次に再生するフレームを"phase3"と登録し、次の候補インデックスを検索する。これは、前回の「選択候補枠移動の仕掛け」にて解説した同処理と同じロジックである。
⑤ 逆に場にもうカードが残っていない場合、再生ヘッドは"phase5a"に移す。この時、忘れずに選択枠を非表示にすること。
めくった2枚のカードが異なるナンバーだった時の処理
めくった2枚のカードが異なるナンバーだった時は、phase4bに処理が移る。Phase4bでは、"TooBad!!"のメッセージを表示後、ミスマークを付加。ミスの回数が3回を超えていないかをチェックする。
(1)"TooBad!!"メッセージの表示
"TooBad!!"メッセージも"GoodJob!!"メッセージ同様イメージシンボルとして作成し、それをモーション・トゥイーンでアニメーションする。
(2)確認ボタンの押下時のアクション
"TooBad!!"メッセージ表示後、次のフェーズに移行するために、確認ボタンを置き、オブジェクト・アクションを記述する。
List2についてもポイントとなる所に付した項番の順に解説していこう。
① ミスした回数を保存するカウンター変数missCountに1を加算する。
② ミスした回数が4回未満の時は、めくったカードを裏に戻し、再びカードがめくれるようにロック状態を解除。1枚目の候補枠を表示状態に戻す。
③ ミスマークムービークリップは、1~4フレームに順に0~3個の×マークが描かれ、ロード時は1フレーム目でstopされている。したがって、ミスするごとにnextFrameを掛けていけば、ミスマークが増えていくのである。
④ ミスが4回になってしまったら、再生ヘッドを"phase5b"に移す。
プレイ結果の表示~そして完成!!
phase5aおよびphase5bでは、プレイ結果をモーション・トゥイーンでアニメーション表示する。これでゲームは完成となる。
さて、今回は、皆が比較的良く知っているカードゲームということで、トランプを使った神経衰弱を取り扱ったが、いかがだったろうか?
同じトランプを扱ったゲームなら他にもポーカーやブラックジャックなんていうものもある。また、トレーディングカードや麻雀なんていうのも、公式にはカードゲームの一種だ。
いろいろあるが、取りあえずカードを扱う上でのテクニックは、皆共通している。このレクチャーを参考に、是非いろいろなカードゲームの制作に取り組んで欲しいと思う。
レクチャー補足
『Eval( ) → eval( ) 関数利用について』
今回のレクチャーで使用したサンプルゲームでは、変数の値を返す関数evalについてはEvalと表記し使用している。これは、FlashLite1.xの元となったスクリプトがFlash4仕様のものであり、Flash4のスクリプトではEvalと表記するのが普通だったので、その名残りとして使っていたのだが、今回CS3において、Eval表記を行なうと次の現象を生じることが筆者らの調べで確認された。
- 現象
- tellTargetブロック内でEval関数を利用した際にシンタックスチェックを行なうと、Eval関数を利用した文がtellTargetブロックの外に
はじき出されてしまう。
上記の現象はシンタックスチェックを行わなければ発生しないのだが、同様の現象はeval関数では起きていない。したがって、変数の値を調べるための関数は、Evalではなくevalを使用のこと、念のため記すこととした。ご注意を。