図1は、この実施例のゲーム装置10の外観を示す。ゲーム装置10は、折り畳み式のゲーム装置であり、図1は開状態におけるゲーム装置10の正面を示す。ゲーム装置10は、図1に示されるように、互いに回動可能に連結された上側ハウジング10Aおよび下側ハウジング10Bを備え、上側ハウジング10Aの正面には、裸眼3D表示に対応した立体LCD12、内側カメラ18a、3D調整スイッチ20、3Dランプ20A、ならびに左右のスピーカ22aおよび22bなどが設けられる。下側ハウジング10Bの正面には、タッチパネル16付きの下LCD14、A,B,X,Yボタン24a−24d、十字キー(ボタン)24g、ホーム,セレクト,スタートボタン24h−24j、電源ボタン24k、アナログパッド26、およびマイク30が設けられる。図面を省略するが、ゲーム装置10の左側面から背面に跨ってLボタン24eが設けられ、右側面から背面に跨ってRボタン24fが設けられる。
立体LCD12は、視差バリア(パララックスバリア)方式による3D液晶であり、裸眼で立体視が可能な画像(裸眼立体視画像)を表示する。立体LCD12では、液晶による視差バリアをOFFすることで、平面画像の表示も可能である。なお、視差バリア方式に限らず、凹凸付のシート(レンチキュラレンズ)を利用するレンチキュラ方式や、その他の裸眼3D方式を採用してもよい。
内側カメラ18aは平面画像(2D画像)を撮影し、外側カメラ18bおよび18c(図2参照)は立体視画像(3D画像)を撮影する。プレイヤないしユーザ(以下、単に「プレイヤ」という。)を撮影した2Dまたは3Dの画像は、ゲームプログラムのようなアプリケーションプログラム(情報処理プログラム)への画像入力として利用可能である。内側カメラ18aによる2D画像はまた、下LCD14に表示可能であり、外側カメラ18bおよび18cによる3D画像はまた、立体LCD12に表示可能である。
3D調整スイッチ20は、立体LCD12の表示に関して、3Dおよび2Dの間の切り替えを手動で行い、さらには、3Dでの立体感の手動調整をも行うためのスライドスイッチである。
なお、詳細な説明は省略するが、このような3Dの立体感の変化は、仮想空間内に配置された左右の仮想カメラ(図示せず)の間の距離(カメラ間距離D)を変化させることによって実現される。つまり、3D調整スイッチ20の動作に応じて、カメラ間距離Dが調整される。そして、カメラ間距離Dは、手動調整されるだけでなく、情報処理プログラムによる自動調整も受ける。
3Dランプ20Aは、立体LCD12の表示状態を示すランプであり、3Dでは点灯し、2Dでは消灯する。なお、単に点灯よび消灯するだけでなく、3Dの程度(立体感の大小)に応じて輝度や色を変化させてもよい。
タッチパネル16や、A,B,X,Yボタン24a−24d、十字キー(ボタン)24g、ホーム,セレクト,スタートボタン24h−24j、あるいはアナログパッド26への操作は、情報処理プログラムへのタッチ/ボタン/パッド入力として利用される。電源ボタン24kは、ゲーム装置10の電源をオン/オフするために用いられる。電源ランプ42aは、電源のオン/オフと連動して点灯/消灯する。
マイク30は、プレイヤの発話音声や環境音などを音声データに変換する。音声データは、情報処理プログラムへの音声入力として利用可能である。この場合、情報処理プログラムは、音声認識を行うことで、プレイヤの発話音声を検出し、検出結果に応じた処理を実行する。マイク30による音声データはまた、NAND型フラッシュメモリ48(図2参照)などに記録可能である。
スピーカ22aおよび22bは、音楽(BGМ)、ゲーム音声やマイク音声などの音を出力する。ヘッドホン端子36には、図示しないヘッドホンが接続される。音量調整スイッチ32は、スピーカ22aおよび22bの音量またはヘッドホン端子36の出力を調整するためのスライドスイッチである。
図2には、ゲーム装置10の電気的構成が示される。ゲーム装置10は、CPU、GPU、VRAMおよびDSPなどで構成されたSoC(System-on-a-Chip)44を含む。SoC44には、上述した立体LCD12、下LCD14、内側カメラ(Inカメラ)18a、左右の外側カメラ(OCAM−LおよびOCAM−R)18bおよび18c、A,B,X,Y,L,Rボタン24a−24f、十字ボタン24g、SDカードスロット34、ゲームカードスロット38、および赤外線受発光部(IR)40が接続される。SoC44にはまた、マイコン56を介して、上述した3D調整スイッチ(3D Vol)20、3Dランプ20A、ホーム,セレクト,スタートボタン24h−24j、電源ボタン(Power)24k、無線スイッチ(WiFi)28、音量調整スイッチ(音量Vol)32,および電源,無線ランプ42a,42bが接続される。SoC44にはさらに、IF回路58を介して、上述したタッチパネル16、左右のスピーカ22aおよび22b、アナログパッド26、マイク(Mic)30およびヘッドホン端子36が接続される。
また、SoC44には、上述した以外の要素として、無線モジュール46、NAND型フラッシュメモリ48およびメインメモリ50が接続される。無線モジュール46は、無線LANに接続する機能を有する。したがって、図示は省略するが、ゲーム装置10は、他のゲーム装置10やコンピュータと直接またはネットワークを介して通信することができる。NAND型フラッシュメモリ48は、カメラ画像,マイク音声など保存用のデータを記憶する。メインメモリ50は、SoC44に作業領域を提供する。すなわち、メインメモリ50には、ゲームなどのアプリケーション(情報処理)で用いられる各種のデータやプログラムが記憶され、SoC44はメインメモリ50に記憶されたデータやプログラムを利用して作業を行う。
マイコン56には、電源管理IC52および加速度センサ54が接続される。電源管理IC52はゲーム装置10の電源管理を行い、加速度センサ54はゲーム装置10の3軸方向の加速度を検出する。加速度センサ54の検出結果は、情報処理プログラムへの動き入力として利用可能である。この場合、情報処理プログラムは、検出結果に基づいてゲーム装置10自体の動きを計算し、計算結果に応じた処理を実行する。また、マイコン56は、RTC(リアルタイムクロック)56aを含み、RTC56aで時間をカウントしてSoC44に供給する。
図3には、立体LCD12とSoC44の一部とで構成される立体LCD制御部12Aが示される。立体LCD12は、LCDコントローラ12a、バリア液晶12bおよび上LCD12cを含む。バリア液晶12bは、縦(列)方向に伸びる複数の液晶スリットを含み、バックライトからの光を複数の液晶スリットで交互に遮ることによって、右目および左目に上LCD12cの異なる列の画素を通過した光が見えるようにする。上LCD12cは、下LCD14と同様、普通の(2D表示用の)液晶でよい。LCDコントローラ12aは、GPU44bひいてはCPU44aの制御下で、上LCD12cに描画を行い、かつバリア液晶12b(への印加電圧)をON/OFFする。バリア液晶12bをOFFすると、右目および左目には、上LCD12cのどの列の画素を通過した光も見えるようになる。
なお、図3には、立体LCD12に対応して、LCDコントローラ12a、GPU44bおよびVRAM44cが設けられるように示してあるが、当然に、下LCD14に対応して、LCDコントローラ、GPUおよびVRAMが設けられている。図3を参照して分かるように、下LCD14に対応するGPUもまた、CPU44aと信号を送受信可能に接続され、下LCD14に対応するGPUとVRAMとは信号を送受信可能に接続される。そして、CPU44a、下LCD14に対応するGPU、およびVRAMのそれぞれが、下LCD14に対応するLCDコントローラと信号を送受信可能に接続され、このLCDコントローラに下LCD14が接続されるのである。
このようなゲーム装置10は、他のゲーム装置10と通信することにより、通信ゲームを実行する。図4(A)に示すように、ゲーム装置10は、他のゲーム装置10と直接通信(無線通信)することにより、通信ゲームシステム70を構成する。ただし、ゲーム装置10は、他のゲーム装置10と有線で接続されてもよい。また、他の通信ゲームシステム70では、図4(B)に示すように、ゲーム装置10は、インターネットやLANなどのネットワーク72を介して他のゲーム装置10と通信する。
なお、この実施例では、2台のゲーム装置10で通信ゲームを実行する場合について説明するが、3台以上のゲーム装置10で通信ゲームを実行することも可能である。
図5は、図4(A)または図4(B)に示した通信ゲームシステム70において、通信ゲームを実行する場合に、各ゲーム装置10の立体LCD12に表示されるゲーム画面100の一例を示す。つまり、この実施例の通信ゲーム(仮想ゲーム)では、通信ゲームの各プレイヤが操作する各ゲーム装置10において、同じゲーム画面100が表示される。
図5(A)に示すように、ゲーム画面100には、第1プレイヤオブジェクト102、第2プレイヤオブジェクト104および敵オブジェクト106が表示される。また、ゲーム画面100には、背景画像110が表示される。この背景画像110には、最背面に壁面や風景など(図示せず)が表示され、その前面にブロックオブジェクト112、土管オブジェクト114および地面(または床面)オブジェクト116のような背景オブジェクトが表示される。さらに、第1プレイヤオブジェクト102の上方には、指示画像120が表示される。
第1プレイヤオブジェクト102は、2台のゲーム装置10の一方の操作者(プレイヤ)によって操作され、第2プレイヤオブジェクト104は、他方のプレイヤによって操作される。第1プレイヤオブジェクト102および第2プレイヤオブジェクト104は、それぞれ、プレイヤの操作に応じて、仮想空間に設けられたコースないしゲームフィールドを移動したり、任意の動作(アクション)を行ったりする。この実施例では、移動や動作には、歩く、走る、ジャンプ、泳ぐ、飛ぶ、昇降(エレベータ、ツル、ロープ、梯子、階段)、落下、攻撃(パンチ、キック、踏む、ヒップドロップ、飛び道具の使用)、ボタン(スイッチ)オブジェクトを踏む、扉オブジェクトの開閉、土管オブジェクト114や大砲オブジェクトへの出入り、アイテムの取得などが含まれる。
なお、ヒップドロップとは、プレイヤオブジェクト(102、104)がジャンプするなどにより空中に居る状態から鉛直下向きに尻部から落下する動作をいう。たとえば、尻部が敵オブジェクト106に当たると、当該敵を倒すことができ、また、尻部がブロックオブジェクト112に当たると、当該ブロックオブジェクト112を叩いたり破壊したりすることができる。
また、第1プレイヤオブジェクト102および第2プレイヤオブジェクト104は、所定のアイテムを取得することにより、状態が変化(変身)する。この実施例では、変身していないデフォルトの状態(初期の状態)では、プレイヤオブジェクト(102、104)は、4つの段階の大きさのうちの2番目に小さい大きさで、ブロックオブジェクト112を叩くことはできるが、壊すことができない。また、プレイヤオブジェクト(102、104)は、所定のオブジェクトを取得することにより、取得した所定のオブジェクトの種類に応じて、様々な状態に変身することができる。具体的には、最小の大きさでジャンプ力がデフォルトの状態よりも大きい状態(最小状態)、デフォルトの状態よりも1段階大きい大きさで、ブロックオブジェクト112を叩くことにより壊すことができる状態(拡大状態)、デフォルトの状態よりも2段階大きい大きさ(最大の大きさ)で、触れるだけでブロックオブジェクト112や土管オブジェクト114を破壊する(蹴散らす)ことができる状態(巨大化状態)、所定の飛び道具を使用可能な状態、飛行可能な状態、または無敵の状態に変身することができる。以下、この実施例においては、変身していないデフォルトの状態を含めて、これらの状態を「変身状態」と呼ぶことにする。
なお、無敵の状態は、プレイヤオブジェクト(102、104)が触れるだけで敵オブジェクト106を倒すことができるが、触れるだけではブロックオブジェクト112や土管オブジェクト114を破壊することができない状態であり、後述する防御状態とは異なる。また、無敵の状態では、プレイヤオブジェクト(102、104)は、プレイヤの操作に応じて、移動したり、任意のアクションを実行したりする。これに対して、防御状態では、基本的には、プレイヤオブジェクト(102、104)を操作することができない。簡単に説明すると、プレイヤの操作に拘わらず、プレイヤオブジェクト(102、104)は所定の方向に移動され、任意のアクションは実行されない。ただし、プレイヤの操作に応じて、移動の速度は変化される。防御状態の詳細については後述する。さらに、上記の変身状態の種類および数は単なる一例であり、限定されるべきでなく、その内容および数は任意に変更可能である。
また、巨大化状態および無敵の状態は所定時間継続し、その後、プレイヤオブジェクト(102、104)は、それらの状態に変身する前の状態に戻る。さらに、プレイヤオブジェクト(102、104)が最小状態またはデフォルトの状態でミスすると、他のプレイヤオブジェクト(102、104)がミスしていない場合には、防御状態で仮想ゲームに復帰される。このときの変身状態は、デフォルトの状態である。また、プレイヤオブジェクト(102、104)が拡大状態でミスすると、デフォルトの状態に戻り、プレイヤオブジェクト(102、104)が所定の飛び道具を使用可能な状態または飛行可能な状態でミスすると、拡大状態(または、デフォルトの状態)に戻る。
ブロックオブジェクト112、土管オブジェクト114および地面オブジェクト116のような背景オブジェクトは、仮想空間内の所定位置に配置され、当該仮想空間内にコースないしゲームフィールドが生成される。それぞれの配置位置は、仮想ゲームの開発者ないしプログラマ(デザイナ)によって予め決定される。
この実施例の仮想ゲームでは、第1プレイヤオブジェクト102および第2プレイヤオブジェクト104がコースのスタート位置からゴール位置まで移動すると、当該コースのクリアとなる。仮想ゲームの実行中では、プレイヤの操作に応じて、プレイヤオブジェクト(102、104)は、コースに存在する様々な種類の複数の敵オブジェクト(106)を倒したり、それを避けたりするとともに、所定のオブジェクト(アイテム)を取得したり、所定のオブジェクト(112)を動かしたり、壊したりして、当該コースを進行する。
たとえば、所定のオブジェクト(アイテム)は、プレイヤオブジェクト(102、104)の残機数を増加させるためのコインオブジェクトやキノコオブジェクト、プレイヤオブジェクト(102、104)の変身状態を変化させるための別のキノコオブジェクト、フラワーオブジェクト、木の葉オブジェクトおよびスターオブジェクトなどである。たとえば、所定のオブジェクト(アイテム)は、プレイヤオブジェクト(102、104)が所定のブロックオブジェクト112を叩くことによりコース内に出現したり、コース内の所定位置に配置されていたりする。
図5(B)に示すように、仮想空間200内に所定のコース210が生成される。このコース210の一部の範囲(表示範囲)220についての画像がゲーム画面100として立体LCD12に表示される。ただし、簡単のため、図5(B)では、コース210内の各種オブジェクト(102、104、106、112、114,116)および背景画像110などは省略してある。また、表示範囲220には斜線を付してある。
なお、この実施例では、3次元の仮想空間200に3次元のオブジェクトが描画され、それを仮想カメラ(図示せず)で撮影することにより、2次元のように見えるゲーム画面100を表示するようにしてある。ただし、2次元の仮想空間に2次元のオブジェクトが描画され、それを仮想カメラで撮影するようにしてもよい。
仮想ゲームの実行中では、指示画像120で指示されるプレイヤオブジェクト(102、104)の移動に従って表示範囲220が移動される。つまり、ゲーム画面100がスクロールされる。この実施例の仮想ゲームでは、基本的には、ゲーム画面100は横方向にスクロールするが、コース210の一部において、縦方向にスクロールする場合もある。また、縦方向にスクロールするコース210もある。
また、この実施例の仮想ゲームでは、指示画像120で指示されたプレイヤオブジェクト(102、104)またはそれを操作するプレイヤが、表示範囲220を移動させること、すなわち、立体LCD12に表示された画面(ゲーム画面100)をスクロールさせることについての主導権または権限(以下、「スクロール権限」という。)を有しているのである。また、後述するように、スクロール権限は、プレイヤオブジェクト(102、104)間で移動される。
これは、第1プレイヤオブジェクト102および第2プレイヤオブジェクト104の両方の移動に従って表示範囲220を移動させるようにすると、第1プレイヤオブジェクト102および第2プレイヤオブジェクト104が異なる方向に進行する場合に表示範囲220を適切に移動させることができないからである。また、一方のプレイヤオブジェクト(102、104)のみの移動に従って表示範囲220を移動させるようにすると、他方のプレイヤオブジェクト(104または102)のプレイヤは当該一方のプレイヤオブジェクト(102、104)の移動に従うように操作する必要があり、不公平であり、また、操作感が損なわれるからでもある。
ただし、表示範囲220は、仮想カメラの画角によって決まる撮影範囲であり、仮想カメラの位置が変化されることにより、移動される。
たとえば、図5(A)に示すような状態において、スクロール権限を有する第1プレイヤオブジェクト102を右方向に移動させた場合には、表示範囲220が右に移動し、図6(A)に示すように、ゲーム画面100が右方向にスクロールする。一方、図5(A)に示すような状態において、スクロール権限を有していない第2プレイヤオブジェクト104を右方向に移動させた場合には、図6(B)に示すように、ゲーム画面100はスクロールしない。これは、指示画像120で指示された、すなわちスクロール権限を有する第1プレイヤオブジェクト102が静止した状態だからである。
図示は省略するが、他の方向(左方向、上方向、下方向)にゲーム画面100をスクロールさせる場合についても同様である。ただし、ゲーム画面100のスクロール(表示範囲220の移動)は、スクロール権限を有するプレイヤオブジェクト(102、104)の移動方向および現在位置(位置座標)に基づいて制御される。
ただし、スクロール権限を有するプレイヤオブジェクト(102、104)が静止している場合には、当該プレイヤオブジェクト(102、104)の顔の向いている方向が移動方向である。
この実施例では、画面をスクロールさせるかどうかを判断するための基準となる4本の線(以下、「スクロール制御ライン」と呼ぶことにする。)が表示範囲220に対応して設定されている。具体的には、図7に示すように、表示範囲220に対して、スクロール制御ライン250、252、254、256が設定される。ただし、スクロール制御ライン250−256は、立体LCD12(ゲーム画面100)に表示されることはない。
ただし、上述したように、表示範囲220は、仮想カメラの位置および撮影範囲で決まるため、実際には、4本のスクロール制御ラインは仮想カメラの位置に応じて設定されているのである。
この実施例では、スクロール権限を有するプレイヤオブジェクト(102、104)は、スクロール制御ライン250−256で囲まれた範囲内から出ないように、ゲーム画面100のスクロールが制御される。たとえば、スクロール権限を有するプレイヤオブジェクト(102、104)の移動方向が右向きである場合には、スクロール制御ライン250が当該プレイヤオブジェクト(102、104)の左端に接する(重なる)ように、表示範囲220が右に移動される。したがって、ゲーム画面100が、スクロール権限を有するプレイヤオブジェクト(102、104)の移動速度と同じまたは略同じ速度で右にスクロールされる。つまり、スクロール権限を有するプレイヤオブジェクト(102、104)の移動方向が右向きである場合には、当該プレイヤオブジェクト(102、104)がスクロール制御ライン250を超えて左側に位置することはない。
また、上記のように、ゲーム画面100が右にスクロールしている場合に、スクロール権限を有するプレイヤオブジェクト(102、104)が移動方向を右向きから左向きに変えると、スクロール制御ライン252が当該プレイヤオブジェクト(102、104)の右側に接触する(重なる)まで、当該プレイヤオブジェクト(102、104)の移動速度以上の速度でゲーム画面100を左にスクロールさせる。つまり、スクロール権限を有するプレイヤオブジェクト(102、104)の移動方向が左向きである場合には、当該プレイヤオブジェクト(102、104)がスクロール制御ライン252を超えて右側に位置することはない。
仮想空間200には、座標系が設定されており、図7(A)に示すように、横方向と平行な軸がX軸であり、縦方向と平行な軸がY軸である。また、図7(A)の右方向すなわち進行方向(図5(B)参照)がX軸のプラス方向であり、図7(A)の上方向がY軸のプラス方向である。簡単に説明するために、奥行き方向(Z軸)については省略してある。
したがって、スクロール権限を有するプレイヤオブジェクト(102、104)が右向きに移動している場合には、スクロール制御ライン250の位置を規定するX座標が当該プレイヤオブジェクト(102、104)の左端の点のX座標と一致するように、その移動に従って表示範囲220が右に移動される。
なお、スクロール制御ライン250を表示範囲220の中央よりも左側に設定しているのは、プレイヤオブジェクト(102、104)が右方向に移動する場合において、コース210の進行方向側の様子をプレイヤにより多く提示する(見せる)ためである。したがって、他のスクロール制御ライン252、254および256も同様の理由に基づく位置に設定される。
また、スクロール権限を有するプレイヤオブジェクト(102、104)が左向に移動している場合には、スクロール制御ライン252の位置を規定するX座標が当該プレイヤオブジェクト(102、104)の右端の点のX座標と一致するように、その移動に従って表示範囲220が左に移動される。したがって、スクロール権限を有するプレイヤオブジェクト(102、104)の移動に従ってゲーム画面100が左にスクロールされる。
さらに、スクロール権限を有するプレイヤオブジェクト(102、104)が上向きに移動している場合には、スクロール制御ライン256の位置を規定するY座標が当該プレイヤオブジェクト(102、104)の下端の点のY座標と一致するように、その移動に従って表示範囲220が上に移動される。したがって、スクロール権限を有するプレイヤオブジェクト(102、104)の移動に従ってゲーム画面100が上にスクロールされる。
さらにまた、スクロール権限を有するプレイヤオブジェクト(102、104)が下向きに移動している場合には、スクロール制御ライン254の位置を規定するY座標が当該プレイヤオブジェクト(102、104)の上端の位置のY座標と一致するように、その移動に従って表示範囲220が下に移動される。したがって、スクロール権限を有するプレイヤオブジェクト(102、104)の移動に従ってゲーム画面100が下にスクロールされる。
なお、上述したように、この実施例の仮想ゲームでは、基本的には、ゲーム画面100は横方向にスクロールされるため、上方向や下方向にスクロールする必要がない場合には、スクロール制御処理自体を実行しなかったり、上方向や下方向にスクロールすることが判定されてもゲーム画面100をスクロールしなかったりするのである。
また、ゲーム画面100のスクロールの方法は一例であり、スクロール権限を有するプレイヤオブジェクト(102、104)の移動に応じてスクロールされるのであれば、他の方法が採用されてよい。たとえば、スクロール制御ライン250−256とスクロール権限を有するプレイヤオブジェクト(102、104)の位置関係を判定する点(座標)を変えてもよい。具体的には、スクロール権限を有するプレイヤオブジェクト(102、104)が右向きに移動している場合に、当該プレイヤオブジェクト(102、104)の右端に、スクロール制御ライン250を一致させるようにスクロール制御してもよい。この場合、スクロール権限をプレイヤオブジェクト(102、104)が左向きに移動している場合に、当該プレイヤオブジェクト(102、104)の左端に、スクロール制御ライン252を一致させるようにスクロール制御してもよい。また、上方向にスクロール権限を有すプレイヤオブジェクト(102、104)が移動する場合に、スクロール制御ライン256をその上端に一致するようにスクロール制御し、下方向にスクロール権限を有すプレイヤオブジェクト(102、104)が移動する場合に、スクロール制御ライン254をその下端に一致するようにスクロール制御してもよい。
また、スクロール権限を有するプレイヤオブジェクト(102、104)の中心位置の座標と各スクロール制御ライン250−256の位置を規定する座標が一致するように、スクロール制御してもよい。
また、この実施例では、スクロール権限は所定の条件を満たすことに応じて他のプレイヤオブジェクト(102、104)に移動される場合がある。所定の条件は、プレイヤの操作、仮想ゲームの進行、プレイヤオブジェクト(102、104)の動作、位置および状態に基づいて満たされる。以下、具体的に説明するが、仮想ゲームは、プレイヤの操作に応じて進行されることがあり、また、プレイヤオブジェクト(102、104)は、プレイヤの操作に応じて、動作を行ったり、移動したり(位置の変位)、変身状態を変化されたり、防御状態に変化されたりして、所定の条件が満たされるため、所定の条件を満たす要因(原因)については、厳密に区別される必要はない。
たとえば、プレイヤの操作により、スクロール権限を有していないプレイヤオブジェクト(102、104)がスクロール権限を有するプレイヤオブジェクト(102、104)に所定の動作(ヒップドロップなど)を行うと、スクロール権限が移動する。
なお、所定の動作としては、スクロール権限を有していないプレイヤオブジェクト(102、104)がスクロール権限を有するプレイヤオブジェクト(102、104)を投げたり、スクロール権限を有していないプレイヤオブジェクト(102、104)とスクロール権限を有するプレイヤオブジェクト(102、104)とが衝突したりすることであってもよい。
また、ゲーム画面100(シーン)が切り替わる場合には、ゲーム画面100を切り替えるための動作を行ったプレイヤオブジェクト(102、104)にスクロール権限が移動する。ただし、シーンが切り替わる場合には、スクロール制御ライン250−256を用いたスクロール制御によらずに、プレイヤオブジェクト(102、104)が何らかの仕掛けに触れたり、何らかの仕掛けを作動させたりすることにより、強制的にゲーム画面100がスクロールされる場合も含まれる。
たとえば、図8(A)に示すように、第1プレイヤオブジェクト102がスクロール権限を有している場合に、スクロール権限を有していない第2プレイヤオブジェクト104が先に土管オブジェクト114に入ると、図8(B)に示すように、地上のシーンから地下のシーンに切り替わる。このとき、スクロール権限が第1プレイヤオブジェクト102から第2プレイヤオブジェクト104に移動する。同様に、出入り口を通ることにより、屋内のシーンから屋外のシーンに切り替わったり、屋外のシーンから屋内のシーンに切り替わったりする場合にも、先に出入り口を通ったプレイヤオブジェクト(102、104)にスクロール権限が移動する。また、プレイヤオブジェクト(102、104)が、ジャンプ台でジャンプしたり、飛行したり、ツルを登ったりすることにより、地上のシーンから空中のシーンに切り替わったり、落下することにより、空中のシーンから地上のシーンに切り替わったりする場合も同様である。かかる場合には、地上のシーンから空中のシーンに切り替わる位置や空中のシーンから地上のシーンに切り替わる位置に、先に到達したプレイヤオブジェクト(102、104)にスクロール権限が移動する。
ただし、上記いずれの場合にも、スクロール権限が移動されるべきプレイヤオブジェクト(102、104)が既にスクロール権限を有している場合には、そのスクロール権限が移動されることはない。
また、ミスやプレイヤの操作によって防御状態に変化されると、防御状態に変化されたプレイヤオブジェクト(102、104)から防御状態に変化されていないプレイヤオブジェクト(102、104)にスクロール権限が移動する。ここで、防御状態とは、プレイヤオブジェクト(102、104)がシャボン玉オブジェクト130に含まれ(覆われ)、敵オブジェクト106や敵オブジェクト106の攻撃が当ることが無く、ブロックオブジェクト112、土管オブジェクト114および地面オブジェクト116などの背景オブジェクトにも当ることが無く、それらをすり抜けて、所定のプレイヤオブジェクト(102、104)に向けて移動する状態を意味する。この実施例では、所定のプレイヤオブジェクト(102、104)は、防御状態でないプレイヤオブジェクト(102、104)である。ただし、この実施例では、第1プレイヤオブジェクト102と第2プレイヤオブジェクト104が存在し、一方のプレイヤオブジェクト(102、104)が防御状態である場合には、他方の防御状態でない所定のプレイヤオブジェクト(102、104)は、スクロール権限を有する。したがって、防御状態のプレイヤオブジェクト(102、104)は、スクロール権限を有するプレイヤオブジェクト(102、104)に近づくように移動されると言うこともできる。
なお、防御状態でないプレイヤオブジェクト(102、104)では、上記の変身状態が変化されることがあるが、防御状態であるプレイヤオブジェクト(102、104)では、上記の変身状態が変化されることはない。
また、この実施例では、シャボン玉オブジェクト130で覆うことにより、それに含まれるプレイヤオブジェクト(102、104)が敵オブジェクト106からの攻撃を受けない防御状態であることが示される。このため、防御状態であることが分かり易い。
さらに、プレイヤオブジェクト(102、104)の変身状態が所定の状態になると、当該所定の状態になったプレイヤオブジェクト(102、104)にスクロール権限が移動する。ここで、所定の状態は、プレイヤオブジェクト(102、104)が巨大化状態である。この所定の状態には、同時に複数のプレイヤオブジェクト(102、104)が変身することができないため、当該所定の状態に変化したプレイヤオブジェクト(102、104)にスクロール権限が移動されるようにしてある。
また、プレイヤオブジェクト(102、104)は、先にゴールに到達したり、先に通過ポイント(セーブポイント)を通過したりした場合には、当該プレイヤオブジェクト(102、104)にスクロール権限が移動される。つまり、プレイヤオブジェクト(102、104)の位置と特定位置との関係が所定の条件を満たす場合に、スクロール権限が移動される。ここでは、先に特定位置に到達ないし通過したプレイヤオブジェクト(102、104)にスクロール権限が移動されるが、プレイヤオブジェクト(102、104)が特定位置に到達ないし通過する度に、スクロール権限が移動されてもよい。また、プレイヤオブジェクト(102,104)がボスの敵オブジェクト106を倒したり、ボスの敵オブジェクト106を倒すための仕掛けを作動させたり(ボタンないしスイッチのオブジェクトを押したり)した場合にも、当該プレイヤオブジェクト(102、104)にスクロール権限が移動される。このようにするのは、仮想ゲームの進行上、ゴールしたり、通過ポイントを通過したり、ボスを倒したりしたことを表現する演出を、ゲーム画面100を通してプレイヤに見せるようにするためである。
図7(B)に戻って、この実施例では、表示範囲220に対応してプレイヤオブジェクト(102、104)が移動可能な範囲(以下、「移動可能範囲」という。)230が設定される。図7(B)に示すように、この実施例では、移動可能範囲230は、表示範囲220を相似拡大した形状であり、表示範囲220の外周を均等に広げた大きさを有している。たとえば、表示範囲220の外周の各辺を外側に移動させる(広げる)長さは、ブロックオブジェクト112を8個並べた場合の長さ(8ユニット=128dotsの長さに相当する。)である。ただし、移動可能範囲230の形状および大きさは限定される必要はない。たとえば、横方向にしかスクロールしない場合には、表示範囲220の上方および下方に移動可能な領域を設ける必要はない。
したがって、スクロール権限の無いプレイヤオブジェクト(102、104)は、ゲーム画面100(表示範囲220)の外に移動したり、ゲーム画面100の外に居たりすることができる。つまり、仮想空間200において、プレイヤオブジェクト(102、104)は移動可能範囲230のような第1範囲で移動し、この第1範囲よりも狭い第2範囲すなわち表示範囲220についての画像がゲーム画面100として立体LCD12に表示される。
なお、移動可能範囲230および表示範囲220は、第1範囲および第2範囲の一例であり、限定されるべきでない。たとえば、第1範囲はコースないしゲームフィールドの全範囲でもよく、第2範囲はプレイヤオブジェクトの移動可能範囲でもよい。また、第1範囲と第2範囲とは、同じ範囲でもよく、また、互いに異なる形状でもよい。さらに、第2範囲と表示範囲220とが一致する必要は無く、第2範囲の一部を表示範囲220としてもよいし、第2範囲を含む範囲(第1範囲よりは狭い。)を表示範囲220としてもよい。
このように、移動可能範囲230を表示範囲220よりも大きく設定するのは、表示範囲220と移動可能範囲230を同じにすると、技量の劣るプレイヤが操作するプレイヤオブジェクト(102、104)が、技量の高いプレイヤが操作するプレイヤオブジェクト(102、104)から遅れることにより、表示範囲220の端と背景オブジェクト(112、114)の間に挟まれて、ミスになってしまったり、表示範囲220の端に押されるように移動されてしまったりして、操作感を損なうからである。また、移動可能範囲230は表示範囲220を相似拡大した形状であるため、表示範囲220外の見えないプレイヤオブジェクト(102、104)であっても、推測して操作することができる。
ただし、スクロール権限の有るプレイヤオブジェクト(102、104)は、上述したように、スクロール制御ライン250−256で囲まれる範囲内で移動されるようにスクロール制御されるため、表示範囲220の外に出ることはない。つまり、スクロール権限の有るプレイヤオブジェクト(102、104)は、表示範囲220内に必ず含まれるのである。したがって、スクロール権限の有るプレイヤオブジェクト(102、104)を操作するプレイヤは、当該プレイヤオブジェクト(102、104)およびその周囲の様子を見ながら操作することができる。
また、上述したように、スクロール権限の無いプレイヤオブジェクト(102、104)は、表示範囲220よりも広い移動可能範囲230内で移動可能である。しかし、スクロール権限の無いプレイヤオブジェクト(102、104)がスクロール権限を有するプレイヤオブジェクト(102、104)から離れ過ぎてしまうと、ゲーム画面100外のような見えない場所において、移動可能範囲230の端と背景オブジェクト(112、114)の間に挟まれて、ミスになってしまうことがある。
そこで、この実施例では、スクロール権限の無いプレイヤオブジェクト(102、104)が表示範囲220外に居る場合には、2つの条件(上記の所定の条件とは異なる。)のうちのいずれか一方を満たす場合に、強制的に表示範囲220内に移動させる(戻す)ようにしてある。つまり、プレイヤオブジェクト(102、104)が表示範囲220外に居る時間や行動範囲が制限される。ただし、この実施例では、プレイヤオブジェクト(102、104)を表示範囲220に強制的に戻す場合には、当該プレイヤオブジェクト(102、104)は防御状態に変化される。このように、表示範囲220外に居るプレイヤオブジェクト(102、104)を防御状態で表示範囲220内に強制的に戻すので、たとえば、他のプレイヤオブジェクト(102、104)から遅れている場合に、安全を確保して、或る程度追いつかせることができる。このため、技量の異なるプレイヤ同士でも一緒に仮想ゲームをプレイすることができる。
1つ目の条件は、プレイヤオブジェクト(102、104)が表示範囲220外に居る時間が所定時間(たとえば、180フレーム)を越えたことである。ただし、フレームは画面更新単位時間であり、1フレームは1/60秒である。2つ目の条件は、プレイヤオブジェクト(102、104)が移動可能範囲230外に出ようとしたことである。ただし、(1)プレイヤオブジェクト(102、104)のプレイヤの操作に応じて、または、(2)他のプレイヤオブジェクト(102、104)が移動されることに応じて、或いは、(3)その両方に応じて、当該プレイヤオブジェクト(102、104)が移動可能範囲230外に出ようとすることがある。(2)の場合について具体的に説明すると、スクロール権限を有する他のプレイヤオブジェクト(102、104)の移動に伴ってスクロール制御されることにより、表示範囲220および移動可能範囲230が移動され、プレイヤオブジェクト(102、104)が移動可能範囲230から出ようとする場合である。
たとえば、図9(A)に示すように、スクロール権限の無い第2プレイヤオブジェクト104が、表示範囲220の外に出て、当該表示範囲220の外に居る時間が所定時間を超えると、第2プレイヤオブジェクト104は防御状態に変化される。この実施例では、図9(B)に示すように、防御状態に変化されると、シャボン玉オブジェクト130で覆われる。つまり、第2プレイヤオブジェクト104は、シャボン玉オブジェクト130の内部に表示される。
なお、当然のことではあるが、ゲーム画面100の外枠で規定される範囲が表示範囲220である。
詳細な説明は省略するが、第1条件または第2条件を満たすことにより、プレイヤオブジェクト(102、104)が防御状態に変化される場合には、当該プレイヤオブジェクト(102、104)の変身状態は維持される。したがって、防御状態を解除されると、元の変身状態に戻る。
また、プレイヤオブジェクト(102、104)は、防御状態になると、防御状態でないプレイヤオブジェクト(102、104)に近づくように移動される。ただし、この実施例では、防御状態のプレイヤオブジェクト(102、104)を表示範囲220内に戻すとき、当該プレイヤオブジェクト(102、104)が表示範囲220を出た位置から戻すようにしてある。
したがって、図10(A)に示すように、防御状態の第2プレイヤオブジェクト104は、土管オブジェクト114の上側に出現するように、表示範囲220内に戻される。そして、表示範囲220内に戻された防御状態の第2プレイヤオブジェクト104は、防御状態でない第1プレイヤオブジェクト102に近づくように移動される。
なお、防御状態のプレイヤオブジェクト(102、104)は、防御状態でないプレイヤオブジェクト(102、104)に近づくだけであり、防御状態のプレイヤオブジェクト(102、104)の移動のみによって、防御状態のプレイヤオブジェクト(102、104)(厳密には、シャボン玉オブジェクト130)が防御状態でないプレイヤオブジェクト(102、104)に接触することはない。後述するように、この実施例では、防御状態のプレイヤオブジェクト(102、104)は、防御状態でないプレイヤオブジェクト(102、104)によって防御状態を解除されるからである。
たとえば、表示範囲220内では、シャボン玉オブジェクト130がふわふわと飛ぶように、当該シャボン玉オブジェクト130とともに第2プレイヤオブジェクト104は移動される。ただし、移動の仕方は何ら限定されるべきでなく、直線的に移動しても良いし、ランダムに決定した経路に従って移動しても良い。
このように、防御状態のプレイヤオブジェクト(102、104)を防御状態でないプレイヤオブジェクト(102、104)に近づけるようにするのは、防御状態のプレイヤオブジェクト(102、104)は、防御状態でないプレイヤオブジェクト(102、104)に防御状態を解除してもらう必要があるからである。また、技量の異なるプレイヤ同士が仮想ゲームをプレイする場合であっても、技量の劣るプレイヤを技量の高いプレイヤに追いつかせるためでもある。また、防御状態のプレイヤオブジェクト(102、104)は、防御状態でないプレイヤオブジェクト(102、104)すなわちスクロール権限を有するプレイヤオブジェクト(102、104)に近づけられるため、ゲーム画面100の比較的見易い位置に移動させることができる。
また、この実施例では、防御状態のプレイヤオブジェクト(102、104)は、防御状態でないプイレヤオブジェクト(102、104)の動作に基づいて、その防御状態を解除される。たとえば、防御状態でないプレイヤオブジェクト(102、104)が防御状態のプレイヤオブジェクト(102、104)を覆うシャボン玉オブジェクト130を割ると、防御状態が解除される。より具体的には、防御状態でないプレイヤオブジェクト(102、104)がシャボン玉オブジェクト130に触れたり、防御状態でないプレイヤオブジェクト(102、104)が投げた飛び道具(たとえば、ファイヤーボールのオブジェクト)に当ったりすると、シャボン玉オブジェクト130は割れる。
このように、防御状態でないプレイヤオブジェクト(102、104)は、防御状態のプレイヤオブジェクト(102、104)に接触することにより、防御状態でないプレイヤオブジェクト(102、104)自身の近くでその防御状態を解除することができる。また、飛び道具を用いる場合には、遠くから(離れていても)防御状態を解除することができる。
したがって、防御状態のプレイヤオブジェクト(102、104)を覆うシャボン玉オブジェクト130は、防御状態でないプレイヤオブジェクト(102,104)およびそれが動作することにより移動されるオブジェクトとだけ当り判定される。
したがって、たとえば、図10(B)に示すように、防御状態の第2プレイヤオブジェクト104はシャボン玉オブジェクト130に覆われた状態でふわふわと飛びながら、防御状態でない第1プレイヤオブジェクト102に近づくように移動する。そして、第1プレイヤオブジェクト102が、シャボン玉オブジェクト130に触れることにより、当該シャボン玉オブジェクト130を割り、したがって、第2プレイヤオブジェクト104の防御状態が解除される。
上述したように、ミスやプレイヤの操作により、プレイヤオブジェクト(102、104)が防御状態になる場合もある。
簡単に説明すると、プレイヤオブジェクト(102、104)は、敵オブジェクト106に倒されたり、穴に落ちてコース210外に出てしまったりすると、ミスとなり、他方のプレイヤオブジェクト(102、104)がミスしていない場合には、防御状態で仮想ゲームに復帰される。ミスすると、プレイヤオブジェクト(102、104)は仮想空間から消滅(消去)され、その後に仮想ゲームに復帰される際には、プレイヤオブジェクト(102、104)は、デフォルトの状態で生成され、仮想ゲームの進行方向側(この実施例では、表示範囲220の右端)の中央(中央でなくてもよい。)から表示範囲220内に出現される。
なお、ミスした場合に、仮想ゲームの進行方向側から出現させるのは、ミスしたことにより防御状態に変化されたことをプレイヤに示すためである。
また、ミスしたことに応じて、プレイヤオブジェクト(102、104)が防御状態に変化されるのは、他のプレイヤオブジェクト(102、104)がミスしていない場合である。したがって、たとえば、他のすべてのプレイヤオブジェクト(102、104)が防御状態である場合に、防御状態でないプレイヤオブジェクト(102、104)がミスすると、防御状態に変化されずに、コース210のスタート位置または通過ポイントからデフォルトの状態で仮想ゲームが再開される。ただし、残基数が無い(0である)場合には、ゲームオーバとなる。
また、たとえば、プレイヤがタッチパネル16を操作することにより、防御状態になることを指示すると、対応するプレイヤオブジェクト(102、104)は、現在位置において、変身状態を維持したままで防御状態になる。ただし、タッチパネル16以外の所定のボタンを操作することにより、防御状態に変化させるようにしてもよい。
図11は、図2に示したメインメモリ50のメモリマップ500の一例を示す図解図である。ここでは、1台のゲーム装置10におけるメモリマップ500について説明するが、通信ゲームを行う他のゲーム装置10におけるメモリマップ500も同様である。
図11に示すように、メインメモリ50は、プログラム記憶領域502およびデータ記憶領域504を含む。プログラム記憶領域502は、ゲームプログラムのような情報処理プログラムを記憶し、情報処理プログラムは、メイン処理プログラム502a、操作取得プログラム502b、画像生成プログラム502c、画像表示プログラム502d、スクロール権限切替プログラム502e、スクロール制御プログラム502fなどによって構成される。
メイン処理プログラム502aは、この実施例の仮想ゲームのメインルーチンを処理するためのプログラムである。操作取得プログラム502bは、各プレイヤからの操作入力を受け付けて、入力された操作入力(操作データ)を取得するためのプログラムである。この実施例では、操作取得プログラム502bは、通信ゲーム(仮想ゲーム)をプレイする、自機の操作データおよび他機の操作データを受け付け、受け付けることにより取得した操作データを後述する操作データバッファ504aに記憶する。
画像生成プログラム502cは、立体LCD12にゲーム画面100を表示したり、下LCD14に画面を表示したりするための画像(ゲーム画像)を生成するためのプログラムである。この画像生成プログラム502cは、後述する画像データ504bを用いて、仮想空間200に各種のオブジェクト(102、104,106、110、112、114、120、130など)を描画(生成)する。
画像表示プログラム502dは、画像生成プログラム502cによって生成された画像を立体LCD12や下LCD14に表示(出力)するためのプログラムである。したがって、上述したゲーム画面100などの画面が立体LCD12や下LCD14に表示される。
スクロール権限切替プログラム502eは、所定の条件を満たすかどうかを判断し、所定の条件を満たす場合に、スクロール権限を有するプレイヤオブジェクト(102、104)を切り替えるためのプログラムである。スクロール制御プログラム502fは、画面表示プログラム502dによって立体LCD12に表示される仮想空間200の一部である表示範囲220(実際には、仮想カメラ)の移動を制御するとともに、この表示範囲220に対応して移動可能範囲230を設定するためのプログラムである。ただし、移動可能範囲230は、表示範囲220に対応して設定されるため、スクロール制御プログラム502fは、移動可能範囲230の移動を制御していると言うこともできる。
図示は省略するが、プログラム記憶領域502には、音出力プログラムやバックアッププログラムなどの他のプログラムも記憶される。
データ記憶領域504には、操作データバッファ504aが設けられる。操作データバッファ504aには、操作取得プログラム502bに従って取得された自機の操作データおよび他機の操作データが記憶される。操作データバッファ504aでは、最新の操作データが記憶されるときに、前に記憶されている操作データに上書きされる。
また、データ記憶領域504には、画像データ504b、スクロール権限データ504c、仮想カメラ位置データ504d、スクロール制御ラインデータ504e、第1プレイヤオブジェクトデータ504f、第2プレイヤオブジェクトデータ504gおよび枠上位置データ504hが記憶される。
画像データ504bは、画像生成プログラム502cが画像を描画(生成)する際に使用するポリゴンデータやテクスチャデータなどのデータおよびプレイヤオブジェクト(102、104)や敵オブジェクト106などに所定の動作を実行させるためのアニメーションデータである。
スクロール権限データ504cは、スクロール権限を有するプレイヤオブジェクト(102、104)を判断するためのフラグデータである。たとえば、スクロール権限データ504cは、同時に通信プレイすることができるプレイヤオブジェクト(102、104)の数と同じビット数(この実施例では、「2」である。)のレジスタで構成される。そして、各ビットは、各プレイヤオブジェクト(102、104)に対応する。レジスタの各ビットでは、対応するプレイヤオブジェクト(102、104)がスクロール権限を有する場合に、データ値「1」が設定され、スクロール権限を有しない場合に、データ値「0」が設定される。
仮想カメラ位置データ504dは、仮想空間200における仮想カメラの位置の座標データである。この仮想カメラの位置に応じて表示範囲220が決定される。ただし、表示範囲220の大きさは、仮想カメラの画角で決定される。スクロール制御ラインデータ504eは、表示範囲220に対応して設定されるスクロール制御ライン250−256のそれぞれを規定する座標データである。上述したように、表示範囲220は仮想カメラの位置に応じて決定されるため、実際には、スクロール制御ラインデータ504eは仮想カメラ位置データ504dに対応して設定される。
第1プレイヤオブジェクトデータ504fは、第1プレイヤオブジェクト102についてのデータである。図12に示すように、第1プレイヤオブジェクトデータ504fは、向きおよび位置データ5040、変身状態データ5042、表示範囲外フラグ5044および防御状態フラグ5046を含む。
向きおよび位置データ5040は、プレイヤオブジェクト102の移動方向、現在位置および接触判定位置のデータである。ただし、この実施例では、移動方向は左、右、上、下のいずれかで表され、現在位置および接触判定位置は座標で表される。ただし、接触判定位置は、スクロール制御の際にスクロール制御ライン250−256と接触(一致)するかどうかを判定するための第1プレイヤオブジェクト102の右端のX座標、左端のX座標、上端のY座標および下端のY座標を意味する。
変身状態データ5042は、第1プレイヤオブジェクト102の変身状態(デフォルトの状態を含む。)を示すデータである。上述したように、この実施例では、変身状態は、デフォルトの状態、最小状態、拡大状態、巨大化状態、飛び道具を使用可能な状態、飛行可能な状態、無敵の状態を含む。したがって、たとえば、変身状態データ5042は、7ビットのレジスタで構成され、各ビットは上記の各状態に対応する。たとえば、第1プレイヤオブジェクト102が飛行可能な状態であれば、対応するビットにデータ値「1」が設定され、それ以外のビットにデータ値「0」が設定される。また、たとえば、第1プレイヤオブジェクト102が拡大状態であり、かつ無敵の状態である場合には、拡大状態および無敵の状態に対応するそれぞれのビットにデータ値「1」が設定され、それら以外のビットにデータ値「0」が設定される。説明は省略するが、他の場合についても同様である。
表示範囲外フラグ5044は、第1プレイヤオブジェクト102が表示範囲220外に存在するかどうかを判断するためのフラグであり、1ビットのレジスタで構成される。たとえば、第1プレイヤオブジェクト102が表示範囲220外に存在する場合には、表示範囲外フラグ5044はオンであり、レジスタにデータ値「1」が設定される。一方、第1プレイヤオブジェクト102が表示範囲220内に存在する場合には、表示範囲外フラグ504はオフであり、レジスタにデータ値「0」が設定される。
防御状態フラグ5046は、第1プレイヤオブジェクト102が防御状態であるかどうかを判断するためのフラグであり、1ビットのレジスタで構成される。たとえば、第1プレイヤオブジェクト102が防御状態であれば、防御状態フラグ5046はオンであり、レジスタにデータ値「1」が設定される。一方、第1プレイヤオブジェクト102が防御状態でなければ、防御状態フラグ5046はオフであり、レジスタにデータ値「0」が設定される。
図11に戻って、第2プレイヤオブジェクトデータ504gは、第2プレイヤオブジェクト104についてのデータである。第2プレイヤオブジェクトデータ504gは、第1プレイヤオブジェクトデータ504fと同様であり、向きおよび位置データ、変身状態データ、表示範囲外フラグおよび防御状態フラグを含む。重複した説明は省略することにする。
枠上位置データ504hは、プレイヤオブジェクト(102、104)が表示範囲220外に出たときの当該表示範囲220を規定する枠上の位置についての座標データである。たとえば、表示範囲220を規定する枠にローカル座標が設定され、プレイヤオブジェクト(102、104)が表示範囲220外に出たときに通過した位置のローカル座標の座標データが枠上位置データ504hとして記憶されるのである。この枠上位置データ504hを記憶するのは、上述したように、プレイヤオブジェクト(102、104)が表示範囲220外に出たことにより、当該プレイヤオブジェクト(102、104)が防御状態になった場合に、防御状態のプレイヤオブジェクト(102、104)を表示範囲220内に戻すときに、表示範囲220を出た位置から戻すようにするためである。また、表示範囲220の枠のローカル座標を記憶するのは、表示範囲220が移動した場合に、元に戻す位置がずれてしまうからである。
また、データ記憶領域504には、タイマ504iが設けられる。このタイマ504iは、プレイヤオブジェクト(102、104)が表示範囲220の外に居る時間をカウントするために設けられる。
なお、上述したように、ゲーム装置10が3台以上、すなわちプレイヤが3人以上の場合には、総プレイヤ数から1減算した数のタイマを設ける必要がある。これは、スクロール権限を有していない複数のプレイヤオブジェクトが表示範囲220の外に居る時間を個別にカウントするためである。
また、データ記憶領域504には、この実施例の仮想ゲームのゲームプログラムを実行するために必要な他のデータが記憶されたり、他のタイマ(カウンタ)やフラグが設けられたりする。
図13は図2および図3に示したCPU44aによって実行されるゲーム全体処理を示すフロー図である。なお、このゲーム全体処理は、通信ゲームを行うゲーム装置10の各々で実行される。詳細な説明は省略するが、各ゲーム装置10では、通信時間等が考慮され、ゲーム装置10間における操作データの同期が取られている。また、図13(後述する図14−図20についても同様。)に示すフロー図の各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判断ステップで利用される閾値も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、この実施例では、図13−図20に示すフロー図の各ステップの処理をCPU44aが実行するものとして説明するが、CPU44a以外のプロセッサや専用回路が一部のステップを実行するようにしてもよい。
図13に示すように、CPU44aは、ゲーム全体処理を開始すると、ステップS1で、操作データを取得する。ここでは、CPU44aは、自機および他機の操作入力を受け付け、これに応じて入力された自機の操作データおよび他機の操作データを取得し、操作データバッファ504aに記憶する。ただし、自機または/および他機の操作データが取得されない場合もある。
次のステップS3では、後述するプレイヤオブジェクト制御処理(図14−図16参照)を実行する。ただし、プレイヤオブジェクト制御処理は、それぞれのプレイヤオブジェクト(102、104)について実行される。続いてステップS5では、敵オブジェクト制御処理を実行する。ここでは、CPU44aは、ゲームプログラムに従って、敵オブジェクト106を仮想空間200に配置したり(発生させたり)、プレイヤオブジェクト(102、104)の攻撃に応じて敵オブジェクト106を消滅させたり、敵オブジェクト106を移動させたり、敵オブジェクト106に任意の動作を実行させたりする。
続いて、ステップS7では、描画処理を実行する。ここでは、CPU44aおよびGPU44bは、画像データ504bを用いて、第1プレイヤオブジェクト102、第2プレイヤオブジェクト104、敵オブジェクト106および背景画像110(背景オブジェクト112、114、116を含む。)を描画する。また、このとき、第1プレイヤオブジェクト102または第2プレイヤオブジェクト104が防御状態である(防御状態フラグ(5046)がオンである。)場合には、防御状態のプレイヤオブジェクト(102、104)を覆うように、シャボン玉オブジェクト130を描画する。
次のステップS9では、後述するスクロール権限切替処理(図17参照)を実行し、ステップS11で、後述するスクロール制御処理(図18−図20参照)を実行し、そして、ステップS13で、画面表示を行う。ここでは、仮想空間200において仮想カメラで撮影される画像、すなわち表示範囲220の画像がゲーム画面10として立体LCD12に表示される。
続いて、ステップS15では、ゲームクリアかどうかを判断する。ここでは、CPU44aは、現在のコース210のゴールに到達したかどうかを判断する。ステップS15で“YES”であれば、つまりゲームクリアであれば、ステップS17で、ゲームクリア処理を実行する。ここでは、CPU44aは、たとえば、ゲームクリア(ゴール)したことを演出するゲーム画面100を表示するとともに、そのことを演出する音(音楽)を再生する。その後、ステップS19で、次のコース210に移動して、ステップS1に戻る。ただし、最後のコース210をクリアした場合には、ゲーム終了となり、ゲーム全体処理を終了する。
一方ステップS15で“NO”であれば、つまりゲームクリアでなければ、ステップS21で、ゲームオーバかどうかを判断する。ここでは、CPU44aは、プレイヤオブジェクト(102、104)の残基数が0になったかどうかを判断する。ステップS21で“NO”であれば、つまりゲームオーバでなければ、ステップS1に戻る。一方、ステップS21で“YES”であれば、つまりゲームオーバであれば、ステップS23で、ゲームオーバ処理を実行した後に、ゲーム全体処理を終了する。ステップS23では、CPU44aは、たとえば、ゲームオーバになったことを演出するゲーム画面を表示するとともに、そのことを演出する音(音楽)を再生する。
図14−図16は、図13のステップS3に示したプレイヤオブジェクト制御処理のフロー図である。ここでは、第1プレイヤオブジェクト102についてのプレイヤオブジェクト制御処理について説明するが、第2プレイヤオブジェクト104についても同様である。
なお、図示は省略するが、仮想ゲームの開始時には、所定の位置に所定の移動方向(向き)で第1プレイヤオブジェクト102は配置され、当該所定の位置および接触判定位置の座標データおよび当該所定の移動方向についてのデータが向きおよび位置データ5040としてデータ記憶領域504に記憶される。
図14に示すように、CPU44aは、プレイヤオブジェクト制御処理を開始すると、ステップS31で、防御状態フラグ5046がオンであるかどうかを判断する。ステップS31で“YES”であれば、つまり防御状態フラグ5046がオンであれば、図16に示すステップS71に進む。一方、ステップS31で“NO”であれば、つまり防御状態フラグ5046がオフであれば、ステップS33で移動の指示かどうかを判断する。ここでは、CPU44aは、操作データバッファ504aを参照して、十字キー24gなどの所定のキーないしボタンが操作されることにより、歩く、走る、登る(昇る)または降りる(下りる)が指示されたかどうかを判断する。
ステップS33で“YES”であれば、つまり移動の指示があれば、図15に示すステップS43に進む。一方、ステップS33で“NO”であれば、つまり移動の指示がなければ、ステップS35で、防御の指示があるかどうかを判断する。ここでは、CPU44aは、操作データバッファ504aを参照して、タッチパネル16が操作されることにより防御状態になることが指示されたかどうかを判断する。
ステップS35で“YES”であれば、つまり防御の指示があれば、ステップS37で、防御状態フラグ5046をオンして、ゲーム全体処理にリターンする。プレイヤの操作により防御状態になる場合には、ゲーム全体処理において、第1プレイヤオブジェクト102は、現在位置において、防御の指示の直前の変身状態を維持して、シャボン玉オブジェクト130に覆われる。
一方、ステップS35で“NO”であれば、つまり防御の指示がなければ、ステップS39で、所定のアクションの指示があるかどうかを判断する。ここでは、CPU44aは、操作データバッファ504aを参照して、所定のアクション(動作)を実行するための所定のボタン(たとえば、A,B,X,Yボタン24a−24d)が操作されたかどうかを判断する。
ステップS39で“NO”であれば、つまり所定のアクションの指示がなければ、何ら指示がないと判断して、そのまま図15に示すステップS65に進む。一方、ステップS39で“YES”であれば、つまり所定のアクションの指示があれば、ステップS41で、第1プレイヤオブジェクト102は指示された所定のアクションを実行して、ステップS65に進む。この実施例では、ステップS41の処理によって、第1プレイヤオブジェクト102は、たとえば、ジャンプしたり、飛んだり、しゃがんだり、ヒップドロップしたり、パンチしたり、キックしたり、回転(旋回)したりする。
上述したように、移動の指示があれば、ステップS33で“YES”となり、図15に示すように、ステップS43で、第1プレイヤオブジェクト102は移動する。ここでは、第1プレイヤオブジェクト102は、指示された方向に指示された量だけ(速さ)で移動する。図示は省略するが、このとき、移動される方向および移動後の現在位置に応じて向きおよび位置データ5040が更新される。以下、第1プレイヤオブジェクト102が移動される場合について同様である。
次のステップS45では、第1プレイヤオブジェクト102が表示範囲220外に居るかどうかを判断する。ただし、第1プレイヤオブジェクト102が表示範囲220外に出たかどうかは、当該表示範囲220の枠(外周)との当り判定の判定結果によって判断される。また、第1プレイヤオブジェクト102が表示範囲220外に出た場合には、表示範囲外フラグ5044がオンされる。つまり、ステップS45では、CPU44aは、表示範囲外フラグ5044がオンであるかどうかに基づいて第1プレイヤオブジェクト102が表示範囲220外に居るかどうかを判断する。また、ステップS45では、CPU44aは、当該表示範囲外フラグ504がオフである場合には、第1プレイヤオブジェクト102と表示範囲220の枠との当り判定を行い、その判定結果に基づいて第1プレイヤオブジェクト12が表示範囲220外に出たかどうかを判断するのである。
ステップS45で“NO”であれば、つまり第1プレイヤオブジェクト102が表示範囲220内であれば、そのままステップS65に進む。一方、ステップS45で“YES”であれば、つまり第1プレイヤオブジェクト102が表示範囲220外であれば、ステップS47で、第1プレイヤオブジェクト102が移動可能範囲230外に出ようとしたかどうかを判断する。ここでは、CPU44aは、第1プレイヤオブジェクト102と移動可能範囲230の枠(外周)の当りを判定する。そして、CPU44aは、第1プレイヤオブジェクト102と移動可能範囲230の枠が当たった場合に、当該第1プレイヤオブジェクト102が移動可能範囲230外に出ようとしたと判断する。
ステップS47で“YES”であれば、つまり第1プレイヤオブジェクト102が移動範囲230外に出ようとした場合には、ステップS49で、防御状態フラグ5046をオンし、ゲーム全体処理にリターンする。このとき、変身状態は維持される。したがって、移動可能範囲230外に出ようしたことにより防御状態に変化した場合には、ゲーム全体処理において、第1プレイヤオブジェクト102は、直前の変身状態のままでシャボン玉オブジェクト130に覆われ、表示範囲220から出たときの位置から当該表示範囲220内に出現される。このことは、ステップS55において、防御状態フラグ5046がオンされる場合も同じである。
一方、ステップS47で“NO”であれば、つまり第1プレイヤオブジェクト102が移動可能範囲230外に出ようとしていなければ、ステップS51で、表示範囲外フラグ5044がオンであるかどうかを判断する。ステップS51で“YES”であれば、つまり表示範囲外フラグ5044がオンであれば、ステップS53で、所定時間を経過したかどうかを判断する。ここでは、CPU44aは、タイマ504iのカウント値を参照して、所定時間(たとえば、180フレーム)を経過したかどうかを判断する。ステップS53で“NO”であれば、つまり所定時間を経過していなければ、ステップS65に進む。一方、ステップS53で“YES”であれば、つまり所定時間を経過すれば、ステップS55で、防御状態フラグ5046をオンして、ゲーム全体処理にリターンする。
また、ステップS51で“NO”であれば、つまり表示範囲外フラグ5044がオフであれば、第1プレイヤオブジェクト102が今回表示範囲220外に出たと判断して、ステップS59で、表示範囲外フラグ5044をオンし、ステップS61で、表示範囲220外に出たときの当該表示範囲220の枠上の位置を記憶する。つまり、枠上位置データ504hがデータ記憶領域504に記憶される。次のステップS63で、タイマ504iをリセットおよびスタートして、ステップS65に進む。
ステップS65では、通常の当り判定処理を実行する。ここでは、第1プレイヤオブジェクト102と、敵オブジェクト106および背景オブジェクト(112、114、116)の当りを判定する。ただし、敵オブジェクト106には、当該敵オブジェクト106が動作することにより移動されるオブジェクト(移動オブジェクト)をも含まれる。
そして、ステップS67では、ミスかどうかを判断する。たとえば、第1プレイヤオブジェクト102が最小状態またはデフォルトの状態である場合において、当該第1プレイヤオブジェクト102の所定の部位以外に敵オブジェクト106または移動オブジェクトが当った場合に、ミスとなる。また、第1プレイヤオブジェクト102の大きさに関係なく、第1プレイヤオブジェクト102がコース210外に出てしまった場合に、ミスとなる。ただし、この実施例では、第1プレイヤオブジェクト102は、敵オブジェクト106を踏みつぶしたり、ヒップドロップしたりすることができるため、所定の部位は、第1プレイヤオブジェクト102の脚部またはヒップドロップ時の尻部である。
ステップS67で“NO”であれば、つまりミスでなければ、そのままゲーム全体処理にリターンする。一方、ステップS67で“YES”であれば、つまりミスであれば、ステップS69で、防御状態フラグ5046をオンして、ゲーム全体処理にリターンする。ミスにより防御状態に変化した場合には、ゲーム全体処理において、第1プレイヤオブジェクト102は、デフォルトの状態で、シャボン玉オブジェクト130に覆われ、表示範囲220の前方(右側)の中央から当該表示範囲220内に出現される。
また、上述したように、防御状態フラグ5046がオンである場合には、ステップS31で“YES”となり、図16に示すステップS71で、他のプレイヤオブジェクトが防御状態であるかどうかを判断する。ここでは、CPU44aは、第2プレイヤオブジェクト104の防御状態フラグがオンであるかどうかを判断する。ステップS71で“YES”であれば、つまり他のプレイヤオブジェクトが防御状態であれば、ステップS73で、ゲームを終了し、ステップS75で、防御状態フラグ5046をオフして、現在のコース210のスタート位置または通過ポイントからゲームを再開するべく、図13に示したステップS1に戻る。このとき、変身状態は維持される。
なお、詳細な説明は省略するが、3人以上のプレイヤが仮想ゲームをプレイする場合には、ステップS71では、他のすべてのプレイヤオブジェクトが防御状態であるかどうかが判断される。
一方、ステップS71で“NO”であれば、つまり他のプレイヤオブジェクトが防御状態でなければ、ステップS77で、シャボン玉オブジェクト130と、他のプレイヤオブジェクトまたは当該他のプレイヤオブジェクトの動作に応じて移動される移動オブジェクトの当りを判定する。そして、ステップS79で、当ったかどうかを判断する。
ステップS79で“YES”であれば、つまり当れば、ステップS81で、防御状態フラグ5046をオフして、ゲーム全体処理にリターンする。したがって、ゲーム全体処理において、第1プレイヤオブジェクト102を覆うシャボン玉オブジェクト130は割れて、消滅される。そして、ミスにより防御状態に変化されていた場合には、第1プレイヤオブジェクト102は、デフォルトの状態で、通常の当り判定を実行する仮想ゲームに復帰する。また、プレイヤの操作に応じて、または、所定時間以上表示範囲220外に居たり、移動可能範囲230外に出ようとしたりしたことに応じて、防御状態に変化されていた場合には、第1プレイヤオブジェクト102は、防御状態に変化される直前の変身状態を維持して、通常の当り判定を実行する仮想ゲームに復帰する(元に戻る)。
一方、ステップS79で“NO”であれば、つまり当っていなければ、ステップS83で、所定の操作があるかどうかを判断する。ここでは、CPU44aは、他のプレイヤオブジェクトに速く近づけるための操作が有る(たとえば、L,Rボタン24e,24fがオンされた)かどうかを判断する。
ステップS83で“NO”であれば、つまり所定の操作が無ければ、ステップS85で、第1プレイヤオブジェクト102を防御状態でないプレイヤオブジェクト(ここでは、第2プレイヤオブジェクト104である。ステップS87も同じ。)に第1所定距離近づくように移動させて、ゲーム全体処理にリターンする。ただし、ステップS85では、防御状態の第1プレイヤオブジェクト102が防御状態でない第2プレイヤオブジェクト104に第3所定距離まで近づいた場合には、それ以上、近づかないようにしてある。これは、防御状態の第1プレイヤオブジェクト102が防御状態でない第2プレイヤオブジェクト104に近づくだけでシャボン玉オブジェクト130が割れてしまい、防御状態が解除されるのを防止するためである。したがって、第3所定距離は、シャボン玉オブジェクト130が防御状態でないプレイヤオブジェクト(102、104)に当らない距離に設定される。このことは、ステップS87においても同じである。
一方、ステップS83で“YES”であれば、つまり所定の操作が有れば、ステップS87で、第1プレイヤオブジェクト102を防御状態でないプレイヤオブジェクトに第2所定距離(第1所定距離も大きい。)近づくように移動させて、ゲーム全体処理にリターンする。
図17は図13に示したステップS9のスクロール権限切替処理のフロー図である。図17に示すように、CPU44aは、スクロール権限切替処理を開始すると、ステップS91で、所定の条件を満たしたかどうかを判断する。この所定の条件は、上述のとおりであり、CPU44aは、上記のいずれかの所定の条件を満たしたかどうかを判断する。
ステップS91で“NO”であれば、つまり所定の条件を満たしていなければ、そのままゲーム全体処理にリターンする。一方、ステップS91で“YES”であれば、つまり所定の条件を満たせば、ステップS93で、スクロール権限を有するべきプレイヤオブジェクト(102、104)が現在スクロール権限を有しているかどうかを判断する。たとえば、上述したように、シーンが変化した場合には、当該シーンが変化する原因となる動作を最初に行ったプレイヤオブジェクト(102、104)がスクロール権限を有するべきプレイヤオブジェクト(102、104)である。ここでは、CPU44aは、スクロール権限データ504cを参照して、現在のスクロール権限を有するプレイヤオブジェクト(102、104)がスクロール権限を有するべきプレイヤオブジェクト(102、104)であるかどうかを判断する。
ステップS93で“YES”であれば、つまりスクロール権限を有するべきプレイヤオブジェクト(102、104)が現在スクロール権限を有している場合には、スクロール権限を変更する必要がないため、そのまま全体処理にリターンする。一方、ステップS93で“NO”であれば、つまりスクロール権限を有するべきプレイヤオブジェクト(102、104)が現在スクロール権限を有していない場合には、スクロール権限を移動すると判断して、ステップS95で、スクロール権限を有するべきプレイヤオブジェクト(102、104)にスクロール権限を設定して、ゲーム全体処理にリターンする。したがって、スクロール権限が移動された場合には、ゲーム全体処理において、移動されたスクロール権限を有するプレイヤオブジェクト(102、104)の上方に指示画像120が表示される。
図18ないし図20は、図13に示したステップS11のスクロール制御処理のフロー図である。図18に示すように、CPU44aは、スクロール制御処理を開始すると、ステップS111で、スクロール権限を有するプレイヤオブジェクト(以下、「当該プレイヤオブジェクト」と呼ぶことにする。)の進行方向および接触判定位置を検出する。ここでは、CPU44aは、当該プレイヤオブジェクについてのプレイヤオブジェクトデータの向きおよび位置データ5040を参照して、当該プレイヤオブジェクトの進行方向および接触判定位置(右端および左端のX座標、上端および下端のY座標)を検出する。
次のステップS113では、進行方向が左かどうかを判断する。ステップS113で“YES”であれば、つまり進行方向が左であれば、ステップS115で、当該プレイヤオブジェクトの右端と左スクロールライン(スクロール制御ライン252)の位置が第4所定距離以上離れているかどうかを判断する。ここで、第4所定距離は、スクロール権限を有するプレイヤオブジェクト(102、104)が移動方向を変えた場合のように、当該プレイヤオブジェクト(102、104)の移動速度よりも速い速度で表示範囲220および移動可能範囲230を移動させる必要がある場合の距離であり、予め決定されている。このステップS115では、CPU44aは、スクロール制御ラインデータ504eを参照して、スクロール制御ライン252の位置を規定するX座標を検出し、当該プレイヤオブジェクトの右端のX座標と第4距離以上離れているかどうかを判断する。
ステップS115で“NO”であれば、つまり当該プレイヤオブジェクトの右端と左スクロールラインの位置との距離が第4所定距離未満であれば、ステップS117で、当該プレイヤオブジェクトの右端と左スクロールラインの位置が一致するように、表示範囲220および移動可能範囲230を左に移動させて、全体処理にリターンする。つまり、当該プレイヤオブジェクトの移動に従ってゲーム画面100が左にスクロールされる。ただし、当該プレイヤオブジェクトが移動していない場合には、ステップS117の処理は実行されない(S125、S133およびS139も同様である。)。
一方、ステップS115で“YES”であれば、つまり当該プレイヤオブジェクトの右端と左スクロールラインの位置が第4所定距離以上離れていれば、プS119で、当該プレイヤオブジェクトの右端に左スクロールラインの位置を近づけるように、表示範囲220および移動可能範囲230を大きく左に移動させて、全体処理にリターンする。ここでは、当該プレイヤオブジェクトの移動速度よりも速い速度でゲーム画面100が左にスクロールされる。表示範囲220および移動可能範囲230を大きく左に移動させる場合の距離は、予め決定しておいてもよく、当該プレイヤオブジェクトの速度に応じて計算するようにしてもよい(S127、S135およびS141も同様である。)。
また、ステップS113で“NO”であれば、つまり進行方向が左でなければ、図19に示すステップS121で、進行方向が右であるかどうかを判断する。ステップS121で“YES”であれば、つまり進行方向が右であれば、ステップS123で、当該プレイヤオブジェクトの左端と右スクロールライン(スクロール制御ライン250)の位置が第4所定距離以上離れているかどうかを判断する。ここでは、CPU44aは、スクロール制御ラインデータ504eを参照して、スクロール制御ライン250の位置を規定するX座標を検出し、当該プレイヤオブジェクトの左端のX座標と第4所定距離以上離れているかどうかを判断する。
ステップS123で“NO”であれば、つまり当該プレイヤオブジェクトの左端と右スクロールラインの位置との距離が第4所定距離未満であれば、ステップS125で、当該プレイヤオブジェクトの左端と右スクロールラインの位置が一致するように、表示範囲220および移動可能範囲230を右に移動させて、全体処理にリターンする。つまり、当該プレイヤオブジェクトの移動に従ってゲーム画面100が右にスクロールされる。
一方、ステップS123で“YES”であれば、つまり当該プレイヤオブジェクトの左端と右スクロールラインの位置が第4所定距離以上離れていれば、ステップS127で、当該プレイヤオブジェクトの左端に右スクロールラインの位置を近づけるように、表示範囲220および移動可能範囲230を大きく右に移動させて、全体処理にリターンする。したがって、当該プレイヤオブジェクトの移動速度よりも速い速度でゲーム画面100が右にスクロールされる。
また、ステップS121で“NO”であれば、つまり進行方向が右でなければ、図20に示すように、ステップS129で、進行方向が上かどうかを判断する。ステップS129で“YES”であれば、つまり進行方向が上であれば、ステップS131で、当該プレイヤオブジェクトの下端と上スクロールライン(スクロール制御ライン256)の位置が第4所定距離以上離れているかどうかを判断する。ここでは、CPU44aは、スクロール制御ラインデータ504eを参照して、スクロール制御ライン256を規定するY座標を検出し、当該プレイヤオブジェクトの下端のY座標と第4所定距離以上離れているかどうかを判断する。
ステップS131で“NO”であれば、つまり当該プレイヤオブジェクトの下端と上スクロールラインの位置との距離が第4所定距離未満であれば、ステップS133で、当該プレイヤオブジェクトの下端と上スクロールラインの位置が一致するように、表示範囲220および移動可能範囲230を上に移動させて、全体処理にリターンする。つまり、当該プレイヤオブジェクトの移動に従ってゲーム画面100が上にスクロールされる。
一方、ステップS131で“YES”であれば、つまり当該プレイヤオブジェクトの下端と上スクロールラインの位置が第4所定距離以上離れていれば、ステップS135で、当該プレイヤオブジェクトの下端に上スクロールラインの位置を近づけるように、表示範囲220および移動可能範囲230を大きく上に移動させて、全体処理にリターンする。したがって、当該プレイヤオブジェクトの移動速度よりも速い速度でゲーム画面100が上にスクロールされる。
また、ステップS129で“NO”であれば、つまり進行方向が下であれば、ステップS137で、当該プレイヤオブジェクトの上端と下スクロールライン(スクロール制御ライン254)の位置が第4所定距離以上離れているかどうかを判断する。ここでは、CPU44aは、スクロール制御ラインデータ504eを参照して、スクロール制御ライン254の位置を規定するY座標を検出し、当該プレイヤオブジェクトの上端と第4所定距離以上離れているかどうかどうかを判断する。
ステップS137で“NO”であれば、つまり当該プレイヤオブジェクトの上端と下スクロールラインの位置との距離が第4所定距離未満であれば、ステップS139で、当該プレイヤオブジェクトの上端と下スクロールラインの位置が一致するように、表示範囲220および移動可能範囲230を下に移動させて、全体処理にリターンする。つまり、当該プレイヤオブジェクトの移動に従ってゲーム画面100が下にスクロールされる。
一方、ステップS137で“YES”であれば、つまり当該プレイヤオブジェクトの上端と下スクロールラインの位置が第4所定距離以上離れていれば、ステップS141で、当該プレイヤオブジェクトの上端に下スクロールラインの位置を近づけるように、表示範囲220および移動可能範囲230を大きく下に移動させて、全体処理にリターンする。したがって、当該プレイヤオブジェクトの移動速度よりも速い速度でゲーム画面100が下にスクロールされる。
なお、この実施例では、ステップS115、S123、S131およびS137の第4所定距離はすべて同じ値でもよく、一部または全部を異なる値に設定してもよい。
この実施例によれば、表示範囲外に出た場合に防御状態に変化されると、敵オブジェクトの攻撃を受けないで、安全を確保したまま表示範囲内に移動して防御状態でない他のプレイヤオブジェクトに近づけるので、技量の劣るプレイヤのプレイヤオブジェクトが遅れたとしても、技量の高いプレイヤのプレイヤオブジェクトに近づけることができる。したがって、技量の差があるプレイヤ同士であっても、同じ仮想ゲームを楽しむことができる。
また、この実施例によれば、プレイヤオブジェクトないしプレイヤに設定されたスクロール権限を所定の条件を満たす場合に切り替えるので、スクロール権限が1のプレイヤオブジェクトないし1人のプレイヤに固定されることがないため、各プレイヤは、平等に表示範囲を移動させる機会を得ることができる。したがって、各プレイヤの操作感を損なわずに、複数のオブジェクトを1つの表示画面に表示することができる。
さらに、この実施例によれば、スクロール権限を移動させる所定の条件は、プレイヤの操作に基づいて満たすことができ、ゲームの進行の度合いやゲームプレイの技量に関係しないため、技量の高いプレイヤの操作のみに応じて表示範囲が移動されることがないため、技量の劣るプレイヤと技量の高いプレイヤとが一緒にゲームプレイを楽しむことができる。
さらにまた、この実施例では、表示範囲よりも大きい移動可能範囲を設定するので、技量の低いプレイヤが技量の高いプレイヤに遅れたとしても、多少の余裕を持って操作することができ、たとえば、プレイヤオブジェクトが表示範囲と背景オブジェクトの間に挟まれてミスになることを回避することができる。
なお、この実施例では、防御状態のプレイヤオブジェクトを防御状態でないプレイヤオブジェクトと識別するために、シャボン玉オブジェクトで覆って表示するようにしたが、これに限定される必要はない。たとえば、防御状態のプレイヤオブジェクトを、半透明で表示したり、点滅表示したり、防御状態でない場合と異なる色で表示したりしてもよい。
また、この実施例では、防御状態のプレイヤオブジェクトを防御状態でないプレイヤオブジェクトに近づけるように移動させるようにしたが、これに限定される必要はない。表示範囲の中心に向けて移動させてもよいし、他のプレイヤオブジェクト以外の特定のオブジェクトに近づけるように移動させてもよい。
また、この実施例では、2台のゲーム装置(プレイヤが2人)で通信ゲームを実行する場合について説明したが、3台以上のゲーム装置で通信ゲームを実行するようにしてもよい。かかる場合には、1のプレイヤオブジェクトないし1人のプレイヤがスクロール権限を有し、所定の条件を満たすことに応じて、他のプレイヤオブジェクト(プレイヤ)にスクロール権限が移動されるようにすればよい。
さらに、この実施例では、プレイヤオブジェクトが表示範囲外に所定時間以上居る場合や表示範囲よりも広い移動可能範囲から出ようとしたときに、防御状態に変化させるようにしたが、移動可能範囲を表示範囲と一致させることにより、表示範囲外に出ようとするときに、防御状態に変化させるようにしてもよい。
さらにまた、この実施例では、防御状態のプレイヤオブジェクトをスクロール権限の有るプレイヤオブジェクトに向けて移動させるようにしたが、これに限定される必要はない。3以上のプレイヤオブジェクトが存在する場合には、スクロール権限の有無に拘わらず、防御状態でないプレイヤオブジェクトに向けて移動させるようにしてよい。または、他のプレイヤオブジェクトに拘わらず、表示範囲(ゲーム画面)の中央に向けて移動させるようにしてもよい。
また、この実施例では、2次元のゲーム画面が表示される場合について説明したが、表示画面に対して移動可能範囲を設定する方法が2次元の場合と異なるだけであり、3次元のゲーム画面が表示される場合についても適用可能である。
なお、この実施例に示したゲーム装置の構成に限定される必要はない。たとえば、タッチパネルは設けなくてもよい。また、立体LCDは使用しなくてもよい。さらに、タッチパネルを2つのLCD上にそれぞれ設けるようにしてもよい。また、ゲーム装置は、表示装置が別体で設けられた据え置き型のゲーム装置であってもよい。さらに、ゲーム装置は、一部の処理を実行する複数のコンピュータが互いに通信可能に接続されたゲームシステムとして構成されてもよい。
また、この実施例では、表示装置が一体的に設けられた複数のゲーム装置を用いて通信ゲームをプレイする場合について説明したが、表示装置が別体で設けられた据え置き型のゲーム装置を用いて複数人でプレイする場合にも適用することができる。