● プロローグ
10月5日に開催されたApple Eventで新型のiMacが発表されました。私が新型iMacで一番感激したのは「冷却ファンがない」という点です。Appleのデスクトップパソコンでいえば、Macintosh Plus以来の快挙であります。家庭や学校で使うパソコンの騒音減少が、CPUのクロックアップなどよりはるかに重要だと認識している私にとっては、この仕様だけで「花丸」を差し上げたいと思います。またAirePortはもちろん、吸い込みタイプのCD-ROMやDVD-ROMも気に入りました。旧機種はCDの挿入がやっかいでしたから、おちびちゃんには難しかったと思います。逆に今回は何でもかんでもつっこまれそうで、お父さんやお母さんにとっては少々危険かもしれません(笑)。それにしても、こうした点に目を配るAppleのセンスは「サスガ」と言えるのではないでしょうか?
●ゲームのシナリオを考える
前回は、自動スクロールや自作数値フォントなど、ゲーム開発に欠かせないユニークな機能についてお話しました。今回は、ゲームのシナリオを完成させて、それに必要なキャラクター(マスコット)を作成し、とりあえずオリジナルゲーム(β版)で遊べるところまで到達したいと思います。
ゲーム利用者を魅了するには格好良いキャラクターを登場させることが必要条件です。しかし残念ながら、私の本職はキャラクターデザイナーではないので、魅力的なキャラクターの創造はバツです。こうした場合には、キャラクター作りが得意な人に手伝ってもらうのがベストですが、今回はとりあえず、今まで連載で活躍してきたマスコット達に登場してもらうことにします。まずはメインキャラクターにボンダイiMac(ボンダイ)、サブキャラクターにストロベリーiMac(ストロベリー)を任命します。(図1)ボンダイの任務は広大な平原を探索し、ストロベリーにプレゼントするための恐竜の卵を集めることです。(どっかで聞いた話だなぁ)卵を探索できる時間には制限があり、ゲーム画面の上部にそれが表示されます。この表示がゼロになった時点で探索失敗、ゲームオーバーとなります。当然スコア(得点)はゼロのままです。幾つかの卵を拾いストロベリーを見つけてタッチ(重なる)すると、残り時間と拾った卵の数を加味してスコアが決まります。また卵の中には特別な物があり、それを拾うと探索時間が増えるボーナスを得ることができます。
メインキャラクターの任務を妨害するキャラクターもゲームには必須です。今回は4種類の恐竜キャラクターを用意して平原に配置することにします。恐竜は「コリトサウルス」「デイメドロン」「ステゴザウルス」「チラノザウルス」の4種類とします。(図2)各恐竜にはそれぞれ個性があります。ステゴザウルスはあまり動かなく、ボンダイの進行を邪魔するだけですが、平原内には沢山配置されています。デイメドロンはボンダイとぶつかると、せっかく拾った卵を割ってしまいます。チラノザウルスは、火を噴いてボンダイを攻撃してきます。(図3)これに当たると今まで集めた卵が「すべてパー」となってしまいます。さて、最後のコリトサウルスはどうしましょうか?とりあえず任務を妨害する恐竜ばかりではボンダイが可哀想なので、こいつにはボンダイを助ける役割を与えることにします。割れた卵を補充するとか?時間を延長させるとか?これを含めてゲームに沢山の隠れ機能を盛り込むと面白いのですが、それは次回までの宿題として残しておくことにします。また、ゲームのシナリオは普遍である必要はありませ。開発途中で面白いアイデアが湧いたらどんどん追加することにします。
●ゲーム環境とキャラクター操作
ボンダイが動き回る平原のサイズは、探索を難しくするために2048X2048ドットと広大にします。本当はこのサイズの「画像背景」を用意すると美しいのですが、これだけ広い画像を使うと消費メモリも膨大になります。メモリ消費量が最小限の「単色背景」が良いのですが、こちらはスクロールが分かりにくい欠点があります。よって、今回は「パタン背景」を使うことで妥協することにします。(図4)ゲーム開始時には、現在のハイスコアと獲得者を表示するタイトル画面をオープンすることにします。タイトル画面には、ダイアログボックスのように「ゲーム開始」と「ゲーム終了」のふたつのボタンを付けて、ユーザのマウスクリックで処理を分岐させます。ゲームは第1ステージ(1面)をクリアするとスコアが表示されてタイトル画面に戻ります。スコアがハイスコアならば、タイトル画面に戻る前に、獲得者の名前といっしょにゲームに保存できるようにします。
キャラクタを編集する前に、ゲームで利用する背景やセルの階調(色数)も決めておきます。今回はセル画像をフルカラー(1600万色)で作成してみます。ただし、起動アプリのメモリ消費量を少なくしたい方は、プログラムメニューの「圧縮設定...」で背景もマスコットも「3万2千色」に制限しておくと良いでしょう(図5)また、前回ではゲーム実行時にマックのモニターを真っ暗にする表示方法を利用していましたが、実は、私はこの方法が好きではありません。どう見ても「マックライク」じゃないんですね(笑)ですから、今回は、ゲーム画面を独立したウィンドウ上に表示します。ウィンドウはドラッグできますし、メニューからは終了やポーズ、サウンドのON/OFFも可能です。アップルメニューからはアバウトの表示もできます。ウィンドウを別ウィンドウの裏に回せば、ゲームで遊んでいることを即座にカムフラージュすることもできます!ただし、この表示方法では動作スピードの「超高速」は利用できませんので注意してください。
前回はメインキャラクターの操作にアルファベットキーを割り付けていました。ところが、使ってみると非常に使いにくいことが判明しました。そこで、その操作を上下左右の矢印キーに割り付け直すことにします。これに伴い、メインキャラクターの斜め移動は廃止し、上下左右4方向のみ移動可能とします。(図6)古いマックのADBキーボードには、矢印キーの配置が一列(十字配列でない)のバージョンがあります。そうしたキーボドをご利用の方は、申し訳ないですが、ドキュメントを編集して移動をテンキーに割付けてください。前回、キャラクター操作に用いていたマウスムーブイベントは、ウィンドウをインアクティブにしても発生してしまいますので、利用を止めることにします。加えてマウスカーソルは、ボタンクリックやメニュー選択といった操作が必要なので、表示したままです。ウィンドウ上にゲーム画面を表示する場合には、マウスカーソルを消すオプションは利用できません。
●変数とタイトル画面
さっそくゲームのタイトル画面を編集してみることにします。タイトル画面はゲームの顔ですので素敵なグラフィックを用意したいところです。しかし今回は勉強の意味合いが強いですから「単色背景」上にマスコット++の機能だけで表現してみます。まずはゲームで利用する「変数」をいくつか用意します。タイトル画面に表示する文字列は、先んじて変数に代入しておくと便利です。ゲーム進行に必要な変数は「時間」「卵の個数」「スコア」「獲得者」「ハイスコア」「位置初期化」「ポーズ」の7つです。それ以外に表示用の文字列を保存しておくための変数をいくつか用意します。変数は後からの作業で追加される可能性もあります。(図7)「時間」はゲームの制限時間が保存されています。「卵の個数」は拾った卵の個数を記録します。「スコア」はゲームで獲得した得点が入ります。「獲得者」と「ハイスコア」はハイスコアを出した人の名前とその得点を保存します。残りの文字列用の変数には「現在のハイスコア:」や「ポイント」といった表示用の固定文字列を保存しておきます。
タイトル画面に使う「単色背景」を作成し、そのサイズをウィンドウサイズと同じにします。続いて「予定フォルダ」に予定セルをひとつ作成し、タイトル表示開始のタイミングでプログラムを実行するように設定します。プログラムで行う処理は、タイトル画面へのハイスコアや文字列の表示と、いくつかの変数の初期化です。(図8)通常変数はカラムに代入された値で起動時に初期化されます。しかし今回は、ハイスコアを保存するために、ゲーム終了時に変数の内容をすべてアプリに保存します。よって、最初に初期化を行わないと、新規ゲームに前回の「時間」や「卵の個数」が反映されてしまい、大変まずいことになります。以前は制限時間を減らしていく処理も予定セルで実行していましたが、今回利用する予定セルはこれひとつだけです。残りの処理は「黒子マスコット」というマスコットを作成し、そちらにすべて任せてしまいます。この黒子マスコット関しては後ほど詳しく解説いたします。
ゲームの開始と終了はタイトル画面上の2つのボタンで選択できます。このボタン形状のマスコットは、何らかのダイアログボックスを表示しき、画面キャプチャー(コマンド+シフト+「3」キー)でPICTファイルに保存した画像を使うと便利です。(図9)タイトル画面上ではボンダイや恐竜などの登場キャラクターを動かしてゲームの雰囲気を盛り上げます。これらのキャラクターはゲームで実際に使用するのとは別個に作成しておきます。特にタイトル用ボンダイは、ゲーム開始時と終了時に異なった処理を実行させるのに活用します。この仕組みには「コマンド送信」イベントを使います。「ゲーム開始」ボタンはクリックされると「start」というコマンドをボンダイへ送ります。それを受け取ったボンダイは、現在表示しているすべての文字列を消去し、背景やサウンドをゲーム用に切り替えます。ゲーム画面への切り替えにはビジュアルエフェクトを利用すると効果的です。一方「ゲーム終了」ボタンがクリックされると「quit」というコマンドがボンダイへ送られます。それを受け取ったボンダイは、ちょっとしたアクションを実行してからゲームを終了させます。(図10)
●黒子とエイリアスマスコット
先ほどちょっとお話した「黒子マスコット」についてお話をしておきます。このマスコットは直接ゲーム画面には登場しませんが(だから黒子なんですね)ゲームのスケジュールを管理する重要な役目を担います。そのうち一番重要な役目が定期的に「時間」変数を減らして画面上に表示することです。またゲームオーバや強制終了、ポーズ、ハイスコア獲得者の名称入力、メッセージ表示なども行います。(図11)例えばポーズ処理ですが、これはゲームのウィンドウを別ウィンドウの後ろ側へ回した時に、時間の減少とサウンドを止める処理です。再度ゲームのウィンドウを選択すれば、ポーズは解除されゲームも再開します。ハイスコア獲得者の名称入力では、文字列入力用のダイアログを表示し、名称の入力を促します。ゲームオーバの処理では、ゲーム画面に表示されている文字列を消去し、背景やサウンドをタイトル用に切り替えます。
ゲームに登場するキャラクターは黒子マスコットを含めて、全部で7種類となります。それに加えて、卵やチラノザウルスの火の玉などの小物キャラクターが数種類必要となります。(図12)また、ゲーム画面に登場していないキャラクター(タイトルで使う物など)は、表示をOFFにしておくことを忘れないでください。火の玉など、あるタイミングでしか表示されないキャラクターも同様です。すべてのキャラクターは情報ウィンドウで「マウスドラッグ禁止」をチェックしておきます。キャラクター以外でゲーム画面に表示されるのは、残り時間と拾った卵の数です。前回は、残り時間は自作フォントで、得点をマスコットで表示していました。今回は両方とも自作フォントで表示してみます。こちらの方が、変数内容を比較してマスコットを表示するより簡単に実現できます。ただし、この自作フォントを使う方法では、拾った卵を9個までしか表示できない制限が付きます。(図13)
全キャラクターをすべて作成し終わったら、背景上に順次配置していきます。黒子マスコットは表示エリア外に配置します。ほとんど機能を持たないステゴザウルスは「エイリアスマスコット」として複数体用意してセル容量を節約します。エイリアスとは、セル画像や挙動がまったく同じマスコットを、別の場所に複数置きたい場合に利用する機能です。(図14)エイリアスマスコットの場合、マスコットフォルダに上向きの矢印(Finderのエイリアス同様)が付き、各メニューでのマスコットタイトル表示が斜体となります。ゲームを面白くするためには、プログラムでランダム値を発生させ、キャラクター(卵など)を毎回違う場所に置くといった演出も考えられます。しかし逆に置かれる場所が一カ所に集中するとゲームが面白くなくなります。それを防ぐにはランダム値の発生方法をひと工夫する必要があります。今回はプログラムを簡単にするために、1体しか登場しないストロベリーにのみ、この方法を適用してみることにします。ストロベリーは記述されたプログラムにより、自分の配置位置を自分で決定します。(図15)
●ゲームの開始と終了
すべての編集が終了したら、さっそく起動アプリにしてみます。このとき「アプリ作成」ダイアログで「アプリ終了時に変数を保存する」を必ずチェックしておいてください。でないとハイスコアーがアプリ自身に保存されません。それ以外のオプションはチェックする必要はありません。(図16)アプリ作成が完了したら、起動してゲームを楽しんでみましょう。この時点でウィンドウ内のマスコットや文字の表示が異常ならば、アプリに割り当てられているメモリが不足している可能性があります。(初期値はマスコット++が自動に割り当てる)Finderの「ファイル」メニューの「情報を見る」から「メモリ」を選択して、メモリの使用サイズを増やしてください。タイトル画面が問題なく表示されたら、「ゲーム開始」ボタンをクリックしてゲームをスタートします。(図17)できれば、低速なマシンを使ってキャラクターの反応速度などをチェックし微調整しておくと利用者に対して親切です。
ゲーム終了には3つのケースが考えられます。まず、ファイルメニューから「終了」を選択した場合。これは強制終了、つまりゲームの途中放棄と見なされます。次は、制限時間がオーバーした場合。残念ながらスコアはゼロのままでのゲームオーバーです。どの処理も黒子マスコットに表記されたプログラムが対処します。最後は、ボンダイがストロベリーを見つけてタッチした場合。スコアが計算されて表示されます。スコアが得られても得られなくても、ゲーム終了時には画面上に何らかのメッセージを表示するのがベストです。もし、スコアーがハイスコアより高ければ、ゲーム実行者の名称を入力するダイアログが表示されます。(図18)ボンダイとの衝突イベントを受け取ったストロベリーは、スコア計算後に黒子マスコットへ「end」コマンドを送ります。それを受け取った黒子マスコットが、この処理をプログラムにより実行します。その後タイトル画面に切り替え、ハイスコアと獲得者の名前を表示し、ユーザが再挑戦するかどうか判断するまで待機状態となります。(図19)
●エピローグ
最近パソコンの世界でも3Dグリグリ映像のアクションゲームが大流行です。しかし、こうして簡単なゲームを開発をしてみると、結局基本的なアーキテクチャは大して変わらないのかなぁ?と思ったりもします(笑)みなさんはどんな感想をお持ちになりましたか?さて次回は「マスコットでゲームにチャレンジ!-その4」という題目で、各キャラクターを制御しているプログラムをざっと解説しながらゲームの完成度を上げていきます。最初のステージをクリアーしたら次のステージへ切り替える仕組みも導入します。いよいよ本連載も次回で最終回となります。お見逃し無く!
copyright 2001 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact Us: koike@ottimo.co.jp