図面を参照して、本発明の一実施形態に係る情報処理プログラムを実行する情報処理装置について説明する。本発明の情報処理プログラムは、表示装置に表示可能な任意のコンピュータシステムで実行されることによって適用することができるが、情報処理装置の一例としてゲーム装置1で実行されるゲームプログラムに含まれる情報処理プログラムを用いて説明する。なお、図1は、本発明のゲームプログラムを実行するゲーム装置1の外観図である。ここでは、ゲーム装置1の一例として、携帯ゲーム装置を示す。
図1において、ゲーム装置1は、第1のLCD(Liquid Crystal Display:液晶表示装置)11および第2のLCD12を含む。ハウジング13は、上側ハウジング13aと下側ハウジング13bとによって構成されている。第1のLCD11は、上側ハウジング13aに収納され、第2のLCD12は、下側ハウジング13bに収納される。第1のLCD11および第2のLCD12の解像度は、いずれも256dot×192dotである。なお、本実施形態では表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置等、他の任意の表示装置を利用することができる。また、第1のLCD11および第2のLCD12は、任意の解像度のものを利用することができる。
上側ハウジング13aには、後述する1対のスピーカ(図2の30a、30b)からの音を外部に放出するための音抜き孔18aおよび18bが形成されている。
下側ハウジング13bには、入力装置として、十字スイッチ14a、スタートスイッチ14b、セレクトスイッチ14c、Aボタン14d、Bボタン14e、Xボタン14f、Yボタン14g、電源スイッチ14h、Lボタン14L、およびRボタン14Rが設けられている。なお、Lボタン14LおよびRボタン14Rは、下側ハウジング13bの上部側面に設けられており、図1に示す上側ハウジング13aの背後に配置されているため、図示されていない。また、さらなる入力装置として、第2のLCD12の画面上にタッチパネル15が装着されている。また、下側ハウジング13bには、メモリカード17やスティック16を収納するための挿入口(図1では、一点鎖線で示している)も設けられている。
タッチパネル15としては、例えば抵抗膜方式や光学式(赤外線方式)や静電容量結合式等、任意の方式のものを利用することができる。タッチパネル15は、その表面をスティック16で触れると、その接触位置に対応する座標データを出力する機能を有するポインティングデバイスの一例である。なお、以下ではプレイヤがタッチパネル15をスティック16でタッチ操作するものとして説明を行うが、スティック16の代わりにペン(スタイラスペン)や指でタッチパネル15をタッチ操作することももちろん可能である。本実施形態では、タッチパネル15として、第2のLCD12の解像度と同じく256dot×192dotの解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル15の解像度と第2のLCD12との解像度が一致している必要はない。
メモリカード17は、ゲームプログラム等を記録した記録媒体であり、下部ハウジング13bに設けられた挿入口に着脱自在に装着される。
次に、図2を参照して、ゲーム装置1の内部構成を説明する。なお、図2は、ゲーム装置1の内部構成を示すブロック図である。
図2において、ハウジング13に収納される電子回路基板20には、CPUコア21が実装される。CPUコア21には、バス22を介して、コネクタ23が接続されるとともに、入出力インターフェース回路(図面ではI/F回路と記す)25、第1GPU(Graphics Processing Unit)26、第2GPU27、RAM24、LCDコントローラ31、およびワイヤレス通信部33が接続される。コネクタ23には、メモリカード17が着脱自在に接続される。メモリカード17は、ゲームプログラムを記憶するROM17aと、バックアップデータを書き換え可能に記憶するRAM17bを搭載する。メモリカード17のROM17aに記憶されたゲームプログラムは、RAM24にロードされ、RAM24にロードされたゲームプログラムがCPUコア21によって実行される。RAM24には、ゲームプログラムの他にも、適宜、CPUコア21がプログラムを実行して得られる一時的なデータを生成するためのデータ等が記憶される。I/F回路25には、タッチパネル15、右スピーカ30a、左スピーカ30b、および図1の十字スイッチ14aやAボタン14d等から成る操作スイッチ部14が接続される。右スピーカ30aおよび左スピーカ30bは、音抜き孔18aおよび18bの内側にそれぞれ配置され、CPUコア21が生成したサウンド出力情報に応じたサウンドを再生する。
第1GPU26には、第1VRAM(Video RAM)28が接続され、第2GPU27には、第2VRAM29が接続される。第1GPU26は、CPUコア21からの指示に応じて、RAM24に記憶されている表示画像を生成するためのデータに基づいて第1の表示画像を生成し、第1VRAM28に描画する。第2GPU27は、同様にCPUコア21からの指示に応じて第2の表示画像を生成し、第2VRAM29に描画する。第1VRAM28および第2VRAM29は、LCDコントローラ31に接続されている。
LCDコントローラ31は、レジスタ32を含む。レジスタ32は、CPUコア21からの指示に応じて0または1の値を記憶する。LCDコントローラ31は、レジスタ32の値が0の場合は、第1VRAM28に描画された第1のゲーム画像を第1のLCD11に出力し、第2VRAM29に描画された第2のゲーム画像を第2のLCD12に出力する。また、レジスタ32の値が1の場合は、第1VRAM28に描画された第1のゲーム画像を第2のLCD12に出力し、第2VRAM29に描画された第2のゲーム画像を第1のLCD11に出力する。
ワイヤレス通信部33は、他のゲーム装置のワイヤレス通信部33との間で、ゲーム処理に利用されるデータやその他のデータをやりとりする機能を有しており、一例としてIEEE802.11の無線LAN規格に則った無線通信機能を提供する。そして、ワイヤレス通信部33は、受信したデータをCPUコア21に出力する。また、ワイヤレス通信部33は、CPUコア21から指示されたデータを他のゲーム装置へ送信する。
なお、本発明のゲームプログラム(情報処理プログラム)は、メモリカード17等の外部記憶媒体を通じてコンピュータシステムに供給されるだけでなく、有線または無線の通信回線を通じてコンピュータシステムに供給されてもよい。また、ゲームプログラムは、コンピュータシステム内部の不揮発性記憶装置に予め記録されていてもよい。なお、ゲームプログラムを記憶する情報記憶媒体としては、上記不揮発性半導体メモリに限らず、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体でもよい。
次に、図3〜図6を参照して、ゲーム装置1で実行されるゲームプログラムによる具体的な処理動作を説明する前に、当該処理動作によって第1のLCD11および第2のLCD12に表示される表示形態例や処理例等について説明する。なお、図3は、第1のLCD11および第2のLCD12に表示される画面表示例を示す図である。図4は、第2のLCD12に表示されるゲーム画像に対してタッチ操作される位置とプレイヤキャラクタPCの移動との関係を説明するための図である。図5は、タッチパネル15に対してタッチ操作中において、プレイヤキャラクタPCの移動および画面スクロール状態の一例を説明するための図である。図6は、タッチパネル15に対してタッチオフされた直後において、プレイヤキャラクタPCの移動および画面スクロール状態の一例を説明するための図である。
図3において、ゲーム装置1の第1のLCD11および第2のLCD12には、それぞれゲーム画像が表示される。具体的には、第1のLCD11には、プレイヤキャラクタPCが移動可能な仮想ゲーム世界全体の様子が表示されるとともに、当該仮想ゲーム世界におけるプレイヤキャラクタPCの位置が表示される。また、第2のLCD12には、プレイヤキャラクタPCの位置を中心とする上記仮想ゲーム世界全体における一部が表示される。
図3に示した仮想ゲーム世界の一例は、プレイヤキャラクタPCが移動可能な2次元平面をマップ状に表している。そして、ゲーム装置1のプレイヤは、第2のLCD12の表面に設けられたタッチパネル15をタッチ操作することによって、プレイヤキャラクタPCを上記2次元平面上を移動させるゲームを楽しむ。ここで、プレイヤキャラクタPCは、上記2次元平面における道路(図3〜図6では、白抜き領域で示す)に沿って移動することができるゲームオブジェクトとして設定されている。一方、上記2次元平面においてプレイヤキャラクタPCが進入できない領域を斜線領域等のパターン領域で示している。なお、以下の説明では、このパターン領域を「障害物」と記載することがある。
図4において、プレイヤがタッチパネル15をタッチ操作したとき、当該タッチ操作におけるタッチ位置と重なる仮想ゲーム世界の位置(指示座標P0)が算出される。そして、プレイヤキャラクタPCは、指示座標P0に向かって上記2次元平面上を移動する(図示矢印A)。ここで、本ゲーム例では、プレイヤキャラクタPCが第2のLCD12の所定位置(例えば、第2のLCD12の中央位置)に表示されるように、仮想ゲーム世界における表示位置が制御される。つまり、プレイヤキャラクタPCが上記2次元平面上を移動すると、当該移動方向の逆方向(図示矢印B)に当該2次元平面が移動(スクロール)して表現される。
例えば、図5Aに示すように、プレイヤキャラクタPCが上記2次元平面上の現在位置座標P1に配置されており、第2のLCD12の中央位置に表示されている。この状態においてプレイヤがタッチ操作して指示座標P0が算出されたとき、現在位置座標P1から指示座標P0に向かう上記2次元平面上における途中の目標座標P2が算出される。そして、プレイヤキャラクタPCは、目標座標P2に向かって上記2次元平面上を移動する。
ここで、図5Bに示すように、プレイヤキャラクタPCが目標座標P2に向かって上記2次元平面上を移動する際(図示破線矢印)、プレイヤキャラクタPCが常に第2のLCD12の中央位置に表示されるように、仮想ゲーム世界における表示位置が制御される。つまり、第2のLCD12では、プレイヤキャラクタPCが移動せずに上記2次元平面がプレイヤキャラクタPCの移動方向と逆方向(図示白抜き矢印)に移動するように表現される。また、プレイヤがタッチパネル15に対してタッチ位置を移動させた場合や、または同じ位置をタッチ操作している場合であっても、上述した2次元平面のスクロールに応じて、タッチ位置と重なる当該2次元平面の位置が移動して、新たな指示座標P0が算出される。例えば、図5Bに示すように、プレイヤキャラクタPCが現在位置座標P1に配置されていたときは指示座標P0oが算出され、プレイヤキャラクタPCが目標座標P2に移動したときは新たな指示座標P0が算出される。つまり、プレイヤがタッチ位置を移動させる場合だけでなく、同じ位置をタッチ操作していたとしても、プレイヤキャラクタPCの移動に応じて指示座標P0が更新されるため、タッチオンを継続するタッチ操作を行うことによってプレイヤキャラクタPCの移動方向を常に指示しているような操作感覚となる。
また、図6Aに示すように、プレイヤがタッチパネル15からスティック16を離す(タッチオフ)したとき、指示座標P0の更新が終了する。この場合、プレイヤキャラクタPCは、タッチオフ直前に算出された指示座標P0に向かって上記2次元平面上の移動を継続する(図示矢印)。
図6Bに示すように、プレイヤキャラクタPCがタッチオフ直前に算出された指示座標P0に向かって上記2次元平面上を移動する際も、プレイヤキャラクタPCが常に第2のLCD12の中央位置に表示されるように、仮想ゲーム世界における表示位置が制御される。つまり、第2のLCD12では、タッチオフ時においてもプレイヤキャラクタPCが移動せずに上記2次元平面がプレイヤキャラクタPCの移動方向と逆方向(図示白抜き矢印)に移動するように表現される。これによって、プレイヤは、タッチオフした直前のタッチ位置と重なる上記2次元平面上の位置までプレイヤキャラクタPCを移動させることができる。つまり、プレイヤは、プレイヤキャラクタPCに対する移動方向の制御と最終到達位置の指定とを、一連の同じタッチ操作によって指示することができる。
次に、図7〜図10を参照して、ゲーム装置1で実行されるゲームプログラムによる具体的な処理動作について説明する。なお、図7は、ゲームプログラムを実行することに応じて、RAM24に記憶される各種データの一例を示す図である。図8は、当該ゲームプログラムを実行することによってゲーム装置1がゲーム処理を行うフローチャートである。図9は、図8におけるステップ57のプレイヤキャラクタ位置決定処理の詳細な動作を示すサブルーチンである。図10は、図8におけるステップ58のスクロール処理の詳細な動作を示すサブルーチンである。なお、これらの処理を実行するためのプログラムは、ROM17aに格納されたゲームプログラムに含まれており、ゲーム装置1の電源がオンになったときに、ROM17aからRAM24に読み出されて、CPUコア21によって実行される。
図7において、RAM24には、ROM17aから読み出されたプログラムやゲーム処理において生成される一時的なデータが記憶される。図7において、RAM24のデータ記憶領域には、タッチ座標データDa、指示座標データDb、移動速度データDc、プレイヤキャラクタ位置座標データDd、移動目標座標データDe、キャラクタ表示位置データDf、スクロールカウンタデータDg、表示可能範囲データDh、カウンタ移動可能範囲データDi、および画像データDj等が格納される。
タッチ座標データDaは、タッチパネル15をプレイヤがタッチしている画面座標系のタッチ位置を示すタッチ座標TPを示すデータが格納される。例えば、タッチ座標TPは、ゲーム装置1がゲーム処理する時間単位(例えば、1/60秒)毎に取得され、当該取得に応じてタッチ座標データDaに格納されて更新される。
指示座標データDbは、タッチ座標TPと重なる仮想ゲーム世界の位置を示す座標データであり、上述した指示座標P0を示すデータである。例えば、指示座標P0は、タッチ座標TPを仮想ゲーム世界に透視変換することによって得られ、一例としてタッチ座標TPと重なって表示される上記2次元平面上の位置を算出することによって得られる。
移動速度データDcは、仮想ゲーム世界においてプレイヤキャラクタPCが移動する速度Vを示すデータである。プレイヤキャラクタ位置座標データDdは、仮想ゲーム世界におけるプレイヤキャラクタPCの現在位置(現在位置座標Ppc)を示すデータである。移動目標座標データDeは、仮想ゲーム世界においてプレイヤキャラクタPCが移動する目標となる位置(目標座標Pm)を示すデータである。キャラクタ表示位置データDfは、プレイヤキャラクタPCを、第2のLCD12に表示する位置(キャラクタ表示位置Dc)を示すデータであって、通常は画面上の所定位置、例えば前述のように画面の中央とする。スクロールカウンタデータDgは、仮想ゲーム世界における、第2のLCD12に表示される表示範囲の位置(スクロールカウンタSc)を示すためのデータである。表示可能範囲データDhは、仮想ゲーム世界において、第2のLCD12に表示させることが可能な範囲(表示可能範囲Wlmt)を示すデータである。カウンタ移動可能範囲データDiは、表示可能範囲Wlmtに対応して、後述のスクロールカウンタScが取り得る範囲(カウンタ移動可能範囲Dlmt)を示すためのデータである。画像データDjは、背景画像データDj1およびプレイヤキャラクタ画像データDj2等を含んでいる。背景画像データDj1は、仮想ゲーム世界における背景画像(例えば、上記マップ状の2次元平面)をゲーム画面に表示するための画像データである。プレイヤキャラクタ画像データDj2は、仮想ゲーム世界におけるプレイヤキャラクタPCをゲーム画面に表示するための画像データである。
まず、ゲーム装置1の電源(図示せず)がONされると、CPUコア21によってブートプログラム(図示せず)が実行され、これによりメモリカード17に格納されているゲームプログラムがRAM24にロードされる。そして、当該ロードされたゲームプログラムがCPUコア21で実行されることによって、図8〜図10に示すステップ(図8〜図10では「S」と略称する)が実行される。
図8において、CPUコア21は、ゲームの初期設定を行って(ステップ51)、処理を次のステップに進める。例えば、CPUコア21がステップ51で行う初期設定として、仮想ゲーム世界に2次元平面を設定し、当該2次元平面に後述するスクロール規制範囲を設定する。そして、CPUコア21は、現在位置座標Ppcおよび目標座標Pmを上記2次元平面上の所定位置に初期設定する。また、CPUコア21は、タッチ座標TP、指示座標P0、および移動速度V等の各ゲームパラメータを初期化(例えば、各数値を0に初期化)する。
次に、CPUコア21は、プレイヤがタッチパネル15をタッチ操作しているか否か、すなわちタッチオンか否かを判断する(ステップ52)。そして、CPUコア21は、タッチオンの場合、次のステップ53に処理を進める。一方、CPUコア21は、プレイヤがタッチパネル15をタッチ操作していない、すなわちタッチオフの場合、次のステップ56に処理を進める。
ステップ53において、CPUコア21は、タッチパネル15をタッチしている画面座標系のタッチ位置を示すタッチ座標TPを取得して、処理を次のステップに進める。例えば、CPUコア21は、取得したタッチ座標TPを用いて、タッチ座標データDaに記憶されたタッチ座標TPを更新する。
次に、CPUコア21は、取得されたタッチ座標TPに応じた仮想ゲーム世界の指示座標P0を算出して(ステップ54)、処理を次のステップに進める。例えば、指示座標P0は、タッチ座標TPを仮想ゲーム世界に透視変換することによって得られる。一例として。指示座標P0は、タッチ座標TPと重なって第2のLCD12に表示される上記2次元平面上の位置を算出することによって得られる。そして、CPUコア21は、算出された指示座標P0を示すデータを用いて、指示座標データDbを更新する。
次に、CPUコア21は、取得されたタッチ座標TPに応じて移動速度Vを決定して移動速度データDcを更新し(ステップ55)、次のステップ57に処理を進める。例えば、図11に示すように、タッチパネル15を複数の領域に分割し、上記タッチ座標TPが属する領域に応じて移動速度Vが決定される。図11に示した例は、タッチパネル15がその外縁部の高速領域とその中央部の低速領域とに分割されている。この場合、CPUコア21は、タッチ座標TPが低速領域内に属するとき、移動速度Vを低速に設定する。一方、CPUコア21は、タッチ座標TPが高速領域内に属するとき、移動速度Vを高速に設定する。なお、上記複数領域は、他の態様で分割してもかまわず、3つ以上に領域分割してもかまわないし、連続的な変化をするように設定されていてもよい。CPUコア21が、分割された各領域に応じて移動速度Vを設定すれば、様々な設定が可能であることは言うまでもない。このように移動速度Vを設定することによって、移動方向を指示しながら移動速度の指示も行うことが可能である。また、上記ステップ55の処理においては、必要に応じて、予め設定された固定値に移動速度Vが決定されてもかまわない。
一方、上記ステップ52の判定がタッチオフ状態の場合、CPUコア21は、移動速度Vを予め設定された所定速度に設定して移動速度データDcを更新し(ステップ56)、次のステップ57に処理を進める。
ステップ57において、CPUコア21は、プレイヤキャラクタPCの現在位置座標Ppcを決定する処理を行い、処理を次のステップに進める。以下、図9を参照して、プレイヤキャラクタ位置決定処理について説明する。
図9において、CPUコア21は、現在位置座標Ppc、指示座標P0、および移動速度Vを用いて、目標座標Pmを算出して移動目標座標データDeを更新し(ステップ71)、処理を次のステップに進める。例えば、CPUコア21は、現在位置座標Ppcから指示座標P0に向かって、移動速度Vに比例した変位だけ上記2次元平面上を移動した目標座標Pmを算出する(例えば、図5Aに示す点P2参照)。
次に、CPUコア21は、現在位置座標Ppcから目標座標Pmまでの上記2次元平面上に障害物があるか否かを判断する(ステップ72)。ここで、障害物とは、プレイヤキャラクタPCが上記2次元平面上を移動する際に障害となる領域や物体であり、上述したプレイヤキャラクタPCが進入できないパターン領域等に相当する。そして、CPUコア21は、障害物がある場合、次のステップ73に処理を進める。一方、CPUコア21は、障害物がない場合、次のステップ74に処理を進める。
ステップ73において、CPUコア21は、上記ステップ72で存在が確認された障害物の手前に目標座標Pmを変更して移動目標座標データDeを更新し、次のステップ74に処理を進める。ここで、障害物の手前とは、現在位置座標Ppcから目標座標Pmまでのルートにおいて、当該障害物と交差する現在位置座標Ppc側の交点であってもよいし、座標系ごとに処理を行って、x座標またはy座標のいずれかのみを障害物手前の座標に変更するようにしてもよい。また、障害物に沿った位置で目標座標Pmに最も近い位置に変更するようにして、障害物に沿った移動が可能なようにしてもよい。
ステップ74において、CPUコア21は、現在の目標座標Pmを現在位置座標Ppcとしてプレイヤキャラクタ位置座標データDdを更新して、当該サブルーチンによる処理を終了する。
図8に戻り、CPUコア21は、上記ステップ57におけるプレイヤキャラクタPCの現在位置座標Ppcを決定する処理の後、スクロール処理を行い(ステップ58)、処理を次のステップに進める。以下、図10を参照して、スクロール処理について説明する。
図10において、CPUコア21は、移動目標座標データDeに格納されている目標座標Pmを取得し(ステップ81)、当該目標座標PmからスクロールカウンタScを算出してスクロールカウンタデータDgに格納する(ステップ82)。そして、CPUコア21は、当該スクロールカウンタScがカウンタ移動可能範囲Dlmt内か否かを判定する(ステップ83)。CPUコア21は、スクロールカウンタScがカウンタ移動可能範囲Dlmt内である場合には、次のステップ84に処理を進める。一方、CPUコア21は、スクロールカウンタScがカウンタ移動可能範囲Dlmt外である場合には、次のステップ86に処理を進める。
ここで、図12に示すように、仮想ゲーム世界に設定された上記2次元平面Sには、表示可能範囲Wlmtが設定されている。すなわち、仮想ゲーム世界において、当該表示可能範囲Wlmt内のみを第2のLCD12に表示するものとして設定される。また、表示可能範囲Wlmtは、仮想ゲーム世界において、プレイヤキャラクタPCが移動可能な範囲でもある。図示するように、表示範囲は、プレイヤキャラクタPCの位置を中央として含む所定領域として設定される。この表示領域が、プレイヤキャラクタPCの移動に伴って移動可能であって、その移動可能範囲が表示可能範囲Wlmtとなる。ただし、他の実施形態において、プレイヤキャラクタPCの表示位置が画面中央以外の所定位置とする場合には、プレイヤキャラクタPCの表示位置が対応する所定位置となるように設定される。スクロールカウンタScは、当該表示範囲の位置を示すものであって、本実施例では、例えば仮想ゲーム世界における、表示範囲の左上にあたる位置を示すものである。ここで、表示範囲中央から左上までの変位は、予め固定された所定のベクトルとして設定できる。したがって、上記ステップ82において、スクロールカウンタScは、図12に図示するように目標座標Pmから当該ベクトル分だけ移動した位置として算出される。
また、上記表示範囲の移動可能な範囲が表示可能範囲Wlmtであるので、スクロールカウンタScが表示範囲の左上に設定される場合、スクロールカウンタScの移動可能範囲は、図12で網掛け領域として図示されるカウンタ移動可能範囲Dlmtとなる。したがって、上記ステップ83において、CPUコア21は、上記ステップ82で算出されたスクロールカウンタScが、カウンタ移動可能範囲Dlmtに含まれているか否かを判定する。
上記ステップ83において、スクロールカウンタScが、カウンタ移動可能範囲Dlmtに含まれると判定された場合は、プレイヤキャラクタPCを、そのまま画面中央(すなわち、表示範囲の中央)に表示可能であるということである。したがって、ステップ84において、CPUコア21は、スクロールカウンタScをそのまま確定して、次のステップ85に処理を進める。
ステップ85において、CPUコア21は、プレイヤキャラクタPCを、第2のLCD12のどの位置に表示させるかを決定する。具体的には、CPUコア21は、画面中央にプレイヤキャラクタPCを表示するため、上記ステップ84で確定されたスクロールカウンタScから設定される表示範囲の中央をキャラクタ表示位置Cdに設定して、キャラクタ表示位置データDfに格納する。
一方、上記ステップ83において、スクロールカウンタScが、カウンタ移動可能範囲Dlmtに含まれないと判定された場合は、表示範囲が表示可能範囲Wlmtを逸脱しているということである。したがって、ステップ86において、CPUコア21は、当該表示範囲の境界の何れか1辺が表示可能範囲Wlmtの境界に接する位置、すなわちスクロールカウンタScがカウンタ移動可能範囲Dlmtの境界上となる位置までスクロールカウンタScを移動させてスクロールカウンタデータDgに格納し、次のステップ87へ処理をすすめる。
ステップ87において、CPUコア21は、キャラクタ表示位置Cdの設定にあたり、上述のステップ86におけるスクロールカウンタScの移動方向および移動量と反対になるようにキャラクタ表示位置Cdを移動させ、キャラクタ表示位置データDfに格納する。すなわち、仮想ゲーム空間の表示範囲が移動したため、プレイヤキャラクタPCを表示する画面上の位置を逆に移動させることで、目標座標Pmに対応する位置にプレイヤキャラクタPCが表示されることを維持させる。すなわち、表示のスクロールができない状態でプレイヤキャラクタPCの位置が移動した場合に限っては、プレイヤキャラクタPCは、画面中央から外れた位置に表示されることになる。CPUコア21は、上記ステップ85または上記ステップ87の処理の実行後、メインのフローへ処理を戻す。
図8に戻り、上記ステップ58のスクロール処理の後、CPUコア21は、表示処理を行い(ステップ59)、処理を次のステップに進める。具体的には、CPUコア21は、上記スクロールカウンタScによって示される表示範囲の仮想ゲーム空間を第2のLCD12に表示し、さらに上述のキャラクタ表示位置CdにプレイヤキャラクタPCを表示させる。言い換えると、プレイヤキャラクタ位置座標データDdに格納された現在位置座標PpcにプレイヤキャラクタPCを配置することになる。また、CPUコア21は、現在位置座標PpcにプレイヤキャラクタPCが配置された上記2次元平面全体の画像を第1のLCD11に表示する処理を行う。
次に、CPUコア21は、ゲームを終了するか否かを判断する(ステップ60)。例えば、ゲームを終了する条件としては、ゲームを成功または失敗したことが決定されたときやプレイヤがゲームを終了する操作を行ったとき等がある。そして、CPUコア21は、ゲームを終了する場合、当該フローチャートによる処理を終了する。一方、CPUコア21は、ゲームを継続する場合、上記ステップ52に戻って処理を繰り返す。
上述したゲーム処理では、プレイヤのタッチオン操作に応じてプレイヤキャラクタPCの移動処理および画面スクロール処理が行われ、タッチオフ操作に応じてプレイヤキャラクタPCの移動処理および画面スクロール処理が継続して行われる例を用いたが、本発明を実現するための処理は他の態様の処理でもかまわない。以下、図14を参照してゲーム処理の第1の変形例を説明する。なお、図14は、本発明のゲームプログラムを実行することによってゲーム装置1が第1の変形例のゲーム処理を行うフローチャートである。なお、これらの処理を実行するためのプログラムも、ROM17aに格納されたゲームプログラムに含まれており、ゲーム装置1の電源がオンになったときに、ROM17aからRAM24に読み出されて、CPUコア21によって実行される。
図14において、CPUコア21は、ゲームの初期設定を行って(ステップ91)、処理を次のステップに進める。例えば、CPUコア21がステップ91で行う初期設定として、仮想ゲーム世界に2次元平面を設定し、現在位置座標Ppcおよび目標座標Pmを上記2次元平面上の所定位置に初期設定する。また、CPUコア21は、タッチ座標TP、指示座標P0、および移動速度V等の各ゲームパラメータを初期化(例えば、各数値を0に初期化)する。
次に、CPUコア21は、タッチオンか否かを判断する(ステップ92)。そして、CPUコア21は、タッチオンの場合、次のステップ93に処理を進める。一方、CPUコア21は、タッチオフの場合、次のステップ96に処理を進める。
ステップ93において、CPUコア21は、タッチパネル15をタッチしている画面座標系のタッチ位置を示すタッチ座標TPを取得して、処理を次のステップに進める。例えば、CPUコア21は、取得したタッチ座標TPを用いて、タッチ座標データDaに記憶されたタッチ座標TPを更新する。
次に、CPUコア21は、第2のLCD12の画面中央からタッチ座標TPへのベクトルMを算出する(ステップ94)。そして、CPUコア21は、ベクトルMに応じたスクロール処理を行い(ステップ95)、次のステップ99へ処理を進める。例えば、上記ステップ95では、第2のLCD12の表示画面に表示される仮想ゲーム世界全体が、ベクトルMの方向に移動するようにその表示範囲を移動させる。ここで、ベクトルMは、画面中央からタッチ位置まで方向を示しているため、プレイヤがタッチパネル15をタッチ操作する位置に応じた画面スクロール処理が行われることになる。
一方、ステップ96において、CPUコア21は、最後に取得されたタッチ座標TPを取得し、処理を次のステップに進める。ここで、最後に取得されたタッチ座標TPとは、タッチオフ直前に取得されたタッチ座標TPを示しており、CPUコア21は、当該時点でタッチ座標データDaに記憶されたタッチ座標TPを取得する。
次に、CPUコア21は、上記ステップ96で取得したタッチ座標TPに応じた仮想ゲーム世界の指示座標P0を算出して(ステップ97)、処理を次のステップに進める。なお、上記ステップ97における指示座標P0の算出は、上述したステップ54と同様であるため、詳細な説明を省略する。
次に、CPUコア21は、プレイヤキャラクタPCの現在位置座標Ppcを決定する処理を行い(ステップ98)、次のステップ99に処理を進める。なお、上記ステップ98におけるプレイヤキャラクタ位置決定処理は、移動速度Vが所定速度に設定されて処理されるが、上述したステップ57の処理と同様である。したがって、ここではステップ98のプレイヤキャラクタ位置決定処理の詳細な説明を省略する。
ステップ99において、CPUコア21は、表示処理と行い、処理を次のステップに進める。具体的には、CPUコア21は、プレイヤキャラクタ位置座標データDdに格納された現在位置座標PpcにプレイヤキャラクタPCを配置し、上記ステップ95で設定された表示範囲を第2のLCD12に表示する処理を行う。また、CPUコア21は、現在位置座標PpcにプレイヤキャラクタPCが配置された上記2次元平面全体の画像を第1のLCD11に表示する処理を行う。
次に、CPUコア21は、ゲームを終了するか否かを判断する(ステップ100)。例えば、ゲームを終了する条件としては、ゲームを成功または失敗したことが決定されたときやプレイヤがゲームを終了する操作を行ったとき等がある。そして、CPUコア21は、ゲームを終了する場合、当該フローチャートによる処理を終了する。一方、CPUコア21は、ゲームを継続する場合、上記ステップ92に戻って処理を繰り返す。
このように、第1の変形例におけるゲーム処理では、プレイヤのタッチオン操作に応じて画面スクロール処理が行われ、タッチオフ操作に応じてプレイヤキャラクタPCの移動処理が行われる。
以下、図15を参照してゲーム処理の第2の変形例を説明する。なお、図15は、本発明のゲームプログラムを実行することによってゲーム装置1が第2の変形例のゲーム処理を行うフローチャートである。なお、これらの処理を実行するためのプログラムも、ROM17aに格納されたゲームプログラムに含まれており、ゲーム装置1の電源がオンになったときに、ROM17aからRAM24に読み出されて、CPUコア21によって実行される。
図15において、CPUコア21は、ゲームの初期設定を行って(ステップ111)、処理を次のステップに進める。例えば、CPUコア21がステップ111で行う初期設定として、仮想ゲーム世界に2次元平面を設定し、現在位置座標Ppcおよび目標座標Pmを上記2次元平面上の所定位置に初期設定する。また、CPUコア21は、タッチ座標TP、指示座標P0、および移動速度V等の各ゲームパラメータを初期化(例えば、各数値を0に初期化)する。
次に、CPUコア21は、タッチオンか否かを判断する(ステップ112)。そして、CPUコア21は、タッチオンの場合、次のステップ113に処理を進める。一方、CPUコア21は、タッチオフの場合、次のステップ116に処理を進める。
ステップ113において、CPUコア21は、タッチパネル15をタッチしている画面座標系のタッチ位置を示すタッチ座標TPを取得する。そして、CPUコア21は、第2のLCD12の画面中央からタッチ座標TPへのベクトルMを算出し(ステップ114)、処理を次のステップに進める。なお、上記ステップ113およびステップ114の処理は、上述したステップ93およびステップ94の処理と同様であるため、詳細な説明を省略する。
次に、CPUコア21は、ベクトルMに応じて目標座標Pmを算出し(ステップ115)、次のステップ119へ処理を進める。例えば、上記ステップ115では、現在位置座標PpcおよびベクトルMを用いて、目標座標Pmを算出して移動目標座標データDeを更新する。例えば、CPUコア21は、ベクトルMの方向および大きさを仮想ゲーム世界に変換し、当該方向および大きさを仮想ゲーム世界における移動方向および移動量とする。そして、CPUコア21は、現在位置座標Ppcから上記移動方向に向かって、上記移動量に応じた変位だけ上記2次元平面上を移動した点を目標座標Pmとして算出する。
一方、ステップ116において、CPUコア21は、最後に取得されたタッチ座標TPを取得する。次に、CPUコア21は、上記ステップ116で取得したタッチ座標TPに応じた仮想ゲーム世界の指示座標P0を算出する(ステップ117)。そして、CPUコア21は、プレイヤキャラクタPCの現在位置座標Ppcを決定する処理を行い(ステップ118)、次のステップ119に処理を進める。なお、上記ステップ116〜ステップ118の処理は、上述したステップ96〜ステップ98の処理と同様であるため、詳細な説明を省略する。
ステップ119において、CPUコア21は、表示処理と行い、処理を次のステップに進める。具体的には、CPUコア21は、プレイヤキャラクタ位置座標データDdに格納された現在位置座標PpcにプレイヤキャラクタPCを配置し、仮想ゲーム世界に対する所定の表示範囲を第2のLCD12に表示する処理を行う。また、CPUコア21は、現在位置座標PpcにプレイヤキャラクタPCが配置された上記2次元平面全体の画像を第1のLCD11に表示する処理を行う。
次に、CPUコア21は、ゲームを終了するか否かを判断する(ステップ120)。例えば、ゲームを終了する条件としては、ゲームを成功または失敗したことが決定されたときやプレイヤがゲームを終了する操作を行ったとき等がある。そして、CPUコア21は、ゲームを終了する場合、当該フローチャートによる処理を終了する。一方、CPUコア21は、ゲームを継続する場合、上記ステップ112に戻って処理を繰り返す。
このように、第2の変形例におけるゲーム処理では、プレイヤのタッチオン操作に応じた方向および移動量でプレイヤキャラクタPCが移動する処理が行われ、タッチオフ操作に応じてタッチオフ直前の位置にプレイヤキャラクタPCが移動する処理が行われる。
なお、上述した第2の変形例では、画面スクロール処理が行われない一例を示したが、タッチ操作に応じて画面スクロール処理を行ってもかまわない。例えば、図16に示すように、第2のLCD12(タッチパネル15)の上下左右端部領域に、それぞれスクロール領域SCを設けてもかまわない。具体的には、第2のLCD12の上端部領域に、上方向の画面スクロールが行われる上方向スクロール領域SCuが設けられる。第2のLCD12の下端部領域に、下方向の画面スクロールが行われる下方向スクロール領域SCdが設けられる。第2のLCD12の左端部領域に、左方向の画面スクロールが行われる左方向スクロール領域SClが設けられる。そして、第2のLCD12の右端部領域に、右方向の画面スクロールが行われる右方向スクロール領域SCrが設けられる。プレイヤは、タッチオン時に上述したプレイヤキャラクタPCを移動させる操作を行いながら、何れかのスクロール領域SCと重なる領域をタッチ操作することによって、タッチされたスクロール領域SCに応じた画面スクロールを実現することができる。なお、図16から明らかなように、各スクロール領域SCは、画面スクロール方向に応じた位置に設定されているため、プレイヤが画面スクロールさせる方向が理解しやすい。また、タッチオン時にプレイヤキャラクタPCを移動させる方向と画面スクロール方向とが一致するため、操作性がよくなる。
このように、上述したゲーム装置1による処理では、タッチパネル15をタッチすることによる座標入力を用いてオブジェクトを移動させる操作において、より直感的な操作が可能となる。具体的には、本発明では、一連のタッチ操作におけるタッチオン時の操作とタッチオフ時の操作とを用いて、複数の操作入力を可能としている。例えば、タッチオン時に表示画面に表示される仮想ゲーム世界の表示範囲を移動させる操作と、タッチオフ時にオブジェクトの移動先を指定する操作とを行うことができる操作方法を実現している。また、タッチオン時にオブジェクトの移動方向および移動量を制御する操作と、タッチオフ時にオブジェクトの移動先を指定する操作とを行うことができる操作方法を実現している。
なお、上述したゲーム処理では、仮想ゲーム世界に設定された2次元平面上をプレイヤキャラクタPCが移動するゲームを用いたが、本発明は3次元空間をプレイヤキャラクタPCが移動するゲームにも適用することができる。この場合、タッチ座標TPと重なる3次元空間内の位置を3次元座標として算出して他のパラメータも3次元で算出すれば、上述した処理と同様に本発明を実現することができることは言うまでもない。また、上述の第1および第2の変形例については、タッチオン時には画面中央からタッチ座標TPへのベクトルMを用いた処理を行うので、3次元的空間内で連続的な移動の入力を行うのに適しており、かつ、タッチオフ時点のタッチ座標TPと重なる3次元空間内の位置を正確に指示することが可能である。
また、上述した画面スクロール処理は、仮想ゲーム世界に設定された2次元平面に対する表示範囲を、当該2次元平面に沿って移動、すなわち2次元的に表示範囲を移動させる例を用いたが、他の態様で表示範囲の移動を行ってもかまわない。例えば、仮想ゲーム世界において設定された立体(例えば、球体)上をプレイヤキャラクタPCが移動する場合、仮想カメラに対して当該立体をタッチ座標TPに応じて回転させる処理を行って、表示範囲を移動させてもかまわない。また、上記立体を固定して、タッチ座標TPに応じて仮想カメラを当該立体の周りで移動させる処理を行って、表示範囲を移動させてもかまわない。
また、上述した実施形態では、2画面分の液晶表示部の一例として、物理的に分離された第1のLCD11および第2のLCD12を互いに上下に配置した場合(上下2画面の場合)を説明した。しかしながら、2画面分の表示画面の構成は、他の構成でもかまわない。例えば、下側ハウジング13bの一方主面に第1のLCD11および第2のLCD12を左右に配置してもかまわない。また、第2のLCD12と横幅が同じで縦の長さが2倍のサイズからなる縦長サイズのLCD(すなわち、物理的には1つで、表示サイズが縦に2画面分あるLCD)を下側ハウジング13bの一方主面に配設して、上記2つのゲーム画像を上下に表示(すなわち上下の境界部分無しに隣接して表示)するように構成してもよい。また、第2のLCD12と縦幅が同じで横の長さが2倍のサイズからなる横長サイズのLCDを下側ハウジング13bの一方主面に配設して、横方向に2つのゲーム画像を左右に表示(すなわち左右の境界部分無しに隣接して表示)するように構成してもよい。すなわち、物理的に1つの画面を2つに分割して使用することにより2つのゲーム画像を表示してもかまわない。いずれの画像の形態に対しても、上述した第2のLCD12に表示していたゲーム画像が表示される画面上にタッチパネル15を配設すれば、同様に本発明を実現することができる。また、物理的に1つの画面を2つに分割して使用することにより上記2つのゲーム画像を表示する場合、当該画面全面にタッチパネル15を配設してもかまわない。
また、上述した実施例では、ゲーム装置1にタッチパネル15が一体的に設けられているが、ゲーム装置とタッチパネルとを別体にして構成しても、本発明を実現できることは言うまでもない。また、第1のLCD11の上面にタッチパネル15を設けて第1のLCD11に上述した第2のLCD12に表示していたゲーム画像を表示しても良い。さらに、上記実施例では表示画面を2つ(第1のLCD11、第2のLCD12)を設けたが、表示画面は1つであってもかまわない。すなわち、上記実施例において、第1のLCD11設けず単に第2のLCD12のみを表示画面としてタッチパネル15を設けるように構成してもよい。また、上記実施例において、第2のLCD12を設けずに第1のLCD11の上面にタッチパネル15を設けて、上述した第2のLCD12に表示していたゲーム画像を第1のLCD11に表示しても良い。
また、上記実施例では、座標入力を実現するゲーム装置1の入力手段としてタッチパネル15を用いたが、他のポインティングデバイスを用いてもかまわない。ここで、ポインティングデバイスは、画面上での入力位置や座標を指定する入力装置であり、例えば、マウス、トラックパッド、トラックボールなどを入力手段として使用し、入力手段から出力される出力値から計算された画面座標系の位置情報を用いれば、本発明を同様に実現することができる。
この場合、上記画面座標系の位置情報を上述した処理におけるタッチ座標TPとして取り扱えば本発明を実現することが可能である。ただし、上述した処理におけるタッチオンまたはタッチオフの判定については、上記位置情報の入力とは異なった上記入力手段からの他の入力の有無や変化によって代用する。例えば、上記入力手段に設けられた操作ボタンの押下(例えば、マウスの右クリック中または左クリック中)しているか否かによって、上記タッチオンまたはタッチオフの判定を代用する。
また、ゲームコントローラをプレイヤが把持してゲームを楽しむ据置型のゲーム装置の場合、他の態様のポインティングデバイスも考えられる。例えば、ゲームコントローラのハウジングに固設されたカメラを、上記ポインティングデバイスとして利用することも可能である。この場合、ゲームコントローラのハウジングで指し示した位置の変化に応じてカメラが撮像する撮像画像が変化する。したがって、この撮像画像を解析することにより、表示画面に対して上記ハウジングで指し示した座標を算出することができる。
この場合、上記ハウジングで指し示した座標を上述した処理におけるタッチ座標TPとして取り扱えば本発明を実現することが可能である。ただし、上述した処理におけるタッチオンまたはタッチオフの判定については、上記座標入力とは異なった上記ゲームコントローラからの他の入力の有無や変化によって代用する。第1の例として、上記ゲームコントローラに設けられた操作ボタンの押下(例えば、Aボタンを押下しているときタッチオン)しているか否かによって、上記タッチオンまたはタッチオフの判定を代用する。第2の例では、上記ゲームコントローラが2つのハウジングで構成されている。そして、これら2つのハウジングは、上記カメラが搭載されている一方ハウジングと、他方のハウジングの動きに応じた信号を出力する加速度センサ等の検出部が固設された当該他方のハウジングとで構成される。この場合、他方のハウジングの動き(例えば、ハウジングを所定方向に傾けているときにタッチオン)に応じて、上記タッチオンまたはタッチオフの判定を代用する。第3の例では、上記ゲームコントローラのハウジングにマイク等の音声入力手段が設けられている。この場合、プレイヤが所定の音声を発したときにタッチオンおよびタッチオフが切り替わる判定で代用する。
なお、ゲームコントローラをプレイヤが把持してゲームを楽しむ据置型のゲーム装置におけるポインティングデバイスは、ゲームコントローラのハウジングの外部に別設されてもよい。一例として、カメラでハウジングの外部から当該ハウジングを撮影し、撮像画像内に撮像されたハウジングの画像を解析することにより、表示画面に対してハウジングで指し示している座標を算出することが可能である。さらに、ハウジングに固設されたユニットとハウジング外部に別設されたユニットとの協働によるシステムを用いてもよい。この例としては、ハウジング外部に発光ユニットを別設し、ハウジングに固設されたカメラで発光ユニットからの光を撮影する。このカメラで撮像された撮像画像を解析することにより、表示画面に対してハウジングが指し示している座標を算出することができる。
また、上記実施例では、携帯型のゲーム装置1や据置型のゲーム装置を用いて説明したが、一般的なパーソナルコンピュータ等の情報処理装置で本発明の情報処理プログラムを実行して、本発明を実現してもかまわない。