(第1の実施形態)
以下、本発明の第1の実施形態に係るゲーム装置の構成および動作を説明する。
図1は、本発明の一実施形態に係るゲーム装置の外観図である。図1において、ゲーム装置10は、第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:電界発光)を利用した表示装置など、他の任意の表示装置を利用することができる。また任意の解像度のものを利用することができる。
上側ハウジング13aには、後述する1対のスピーカ(図2の30a、30b)からの音を外部に放出するための音抜き孔18a、18bが形成されている。
下側ハウジング13bには、入力装置として、十字スイッチ14a、スタートスイッチ14b、セレクトスイッチ14c、Aボタン14d、Bボタン14e、Xボタン14f、Yボタン14g、Lボタン14LおよびRボタン14Rが設けられている。また、さらなる入力装置として、第2のLCD12の画面上にタッチパネル15が装着されている。また、下側ハウジング13bには、電源スイッチ19や、メモリカード17やスティック16を収納するための挿入口も設けられている。
タッチパネル15としては、例えば抵抗膜方式や光学式(赤外線方式)や静電容量結合式など、任意の方式のものを利用することができる。タッチパネル15は、その表面をスティック16で触れると、その接触位置に対応する座標データを出力する機能を有している。なお、以下ではプレイヤがタッチパネル15をスティック16で操作するものとして説明を行うが、スティック16の代わりにペン(スタイラスペン)や指でタッチパネル15を操作することももちろん可能である。本実施形態では、タッチパネル15として、第2のLCD12の解像度と同じく256dot×192dotの解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル15の解像度と第2のLCD12の解像度が一致している必要はない。
メモリカード17はゲームプログラムを記録した記録媒体であり、下部ハウジング13bに設けられた挿入口に着脱自在に装着される。
次に、図2を参照してゲーム装置10の内部構成を説明する。図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の内側にそれぞれ配置される。
第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から指示されたデータを他のゲーム装置へ送信する。なお、TCP/IP(Transmission Control Protocol/Internet Protocol)等のプロトコルや所定のブラウザをワイヤレス通信部33やゲーム装置10内の記憶部に実装することによって、ゲーム装置10は、ワイヤレス通信部33を介してインターネット等のネットワークとの接続が可能となる。そして、ゲーム装置10は、ネットワーク上で公開されている文書や画像等のデータを第1のLCD11および第2のLCD12で閲覧することができる。
なお、上記のようなゲーム装置10の構成は単なる一例に過ぎず、本発明は、ポインティングデバイス(タッチパネル、マウス、タッチパッド等)と少なくとも1つの表示装置を有する任意のコンピュータシステムに適用することができる。また、本発明のゲームプログラムは、メモリカード17などの外部記憶媒体を通じてコンピュータシステムに供給されるだけでなく、有線または無線の通信回線を通じてコンピュータシステムに供給されてもよいし、さらにはコンピュータシステム内部の不揮発性記憶装置に予め記録されていてもよい。
次に、図3〜図18を用いて、本実施形態で想定するゲームの概要について説明する。図3は、本実施形態で想定するゲームの画面の一例である。本ゲームでは、画面上に散らばっているプレイヤキャラクタ41のうち、任意のプレイヤキャラクタ41を操作対象として指定する操作を行う。この指定操作には2パターンあり、単一のプレイヤキャラクタ41を指定する場合と、複数のプレイヤキャラクタ41を指定する場合とがある。単一のプレイヤキャラクタを指定する場合は、図4に示すように、指定したいプレイヤキャラクタ41を直接スティック16(または指)で指示する操作を行う。一方、複数のプレイヤキャラクタを指定するときは、指定したいプレイヤキャラクタ群をスティック16で囲む操作を行う。具体的には、図5に示すように、プレイヤは、タッチパネル15上において、スティック16を移動させる操作を行う。このとき、プレイヤは、スティック16を移動させた軌跡が任意のプレイヤキャラクタ41を囲むような操作を行う。この軌跡は、タッチパネル15上においてプレイヤによる入力が行われた位置を示すものであり、以下、この軌跡を入力軌跡と呼ぶ。そして、任意のプレイヤキャラクタ群を囲むと、囲まれたプレイヤキャラクタ群は、好ましくは一箇所に寄り集まり、隊列を構成する。このとき、図6に示すように、当該プレイヤキャラクタ群は、赤い円61(以下、指示待ち円と呼ぶ)で囲まれた状態で表示される。以下、この状態にあるプレイヤキャラクタ41を、フォーカスキャラと呼ぶ。また、これは単一のプレイヤキャラクタ41を指定した場合も同様である。すなわち、単一のプレイヤキャラクタ41を指定した場合は、図7に示すように、プレイヤキャラクタ41が1匹だけの隊列が構成されることになる。そして、この隊列にプレイヤがタッチすると、プレイヤがタッチパネル15からスティック16を離すまでの間、上記指示待ち円61が黄色の円71(以下、操作円と呼ぶ)に変わる。これは、当該隊列を移動操作中であることを示すものである。同時に、プレイヤがタッチパネル15に触れていることを示すものでもある。以下、当該操作円71が表示された状態を操作中状態と呼ぶ。そして、この操作中状態においてタッチパネル15に触れたままスティック16を移動させると、スティック16の接触位置(より正確には、スティック16の接触位置に対応するゲーム世界中の地点)を移動目標として、当該移動目標に向かって各フォーカスキャラが各々の速度で移動を開始する。このようにしてプレイヤは、図8および図9に示すように、当該隊列を引っ張るようにして移動させることができる。そして、当該隊列を画面上のいろんな場所に移動させて、隊列を組んでいるフォーカスキャラ群に様々な行動(以下「仕事」と呼ぶ)を行わせる。この「仕事」の内容としては、例えば、敵キャラクタ43を攻撃することや、落ちている食料42を基地(図示せず)に運ぶことや、隊列に入っていないプレイヤキャラクタ41を隊列に加えること等がある。本ゲームは、上記のような操作を繰り返して、プレイヤキャラクタ41をゲーム内の世界で生活させ、育成等するゲームである。
また、本実施形態では、上記「仕事」を行わせるに際して、画面上の様々なオブジェクトのうち、どのオブジェクトに対して「仕事」を行うか、すなわち、仕事を行う対象(以下、仕事対象と呼ぶ)を指定する必要がある。この仕事対象の指定の方法として、本実施形態では、明示的な指定操作を行わずに指定する方法と、直接仕事対象を指定する操作を行うという方法とがある。まず、明示的な指定操作を行わずに指定する場合について、図10〜図15を用いて説明する。まず、隊列の移動を行っているとき、スティック16の接触位置がゲーム世界に存在する所定のオブジェクトに接近すると、図10に示すように、当該オブジェクト(食料42)が緑色の円81(以下、照準円と呼ぶ)で囲まれて表示(マーキング)される。この照準円81は、当該オブジェクトが仕事対象として指定(ロックオン)されていることを示すものである。以下、この照準円81で囲まれているオブジェクトの状態をロックオン状態と呼ぶ。そして、ロックオン状態にあるときに、スティック16をタッチパネルから離す(以下、タッチオフ操作と呼ぶ)と、隊列(を構成するフォーカスキャラ群)が当該ロックオン状態のオブジェクトに対して所定の行動を起こす。図11は、ロックオンした食料42をプレイヤキャラクタの基地(図11の例では画面外に存在)に持ち帰ろうとする様子を示した図である。また、図12は、敵キャラクタ43をロックオンしたときの様子を示す図である。この場合は、タッチオフ操作が行われると、図13に示すように、隊列を組んでいたフォーカスキャラが当該敵キャラクタ43に対して攻撃をしかける。また、図14および図15は、一匹のみで隊列を構成している場合におけるロックオンおよび攻撃の様子を示す図である。
次に、仕事対象を直接指定する場合について、図16〜図18を用いて説明する。図16は、上述したような移動中の状態を示す図である。この状態から、タッチパネルに触れたままスティック16で所定のオブジェクトを囲む操作を行うと、そのオブジェクトに対して所定の「仕事」が開始されるものである。図17は、タッチパネルに触れたままスティック16で敵キャラクタ43を囲む操作を示す図である。この場合は、図18に示すように、タッチオフ操作を行わなくても、敵キャラクタ43に対して攻撃が開始されることになる。
このように、本実施形態では、仕事対象の指定について、タッチオフ操作を契機に「仕事」を開始させるパターンと、隊列移動中に直接仕事対象を囲むことで指定して「仕事」を開始させるパターンとの2つのパターンを併用している。
また、ゲーム画像には、入力軌跡を示す入力軌跡表示51が表示される(図5に示す太線)。入力軌跡は、タッチパネル15に対して入力が行われた位置に対応する表示画面上の位置に表示される。つまり、タッチパネル15上においてプレイヤが指を実際に移動させた位置に入力軌跡表示51が表示される。図5においては、入力軌跡が円に近い形状であることが分かる。入力軌跡表示51によって、プレイヤは自身の入力操作による入力軌跡を明確且つ直感的に知ることができる。従って、プレイヤは、プレイヤキャラクタ41等をうまく囲めているか否かを即座に知ることができる。
次に、ゲーム処理の際にRAM24に記憶されるデータについて説明する。図19は、図2に示したRAM24のメモリマップを示す図解図である。図19において、RAM24は、ゲームプログラム記憶領域240およびデータ記憶領域250を含む。ゲームプログラム記憶領域240は、CPUコア21によって実行されるゲームプログラムを記憶し、このゲームプログラムは、ゲームメイン処理プログラム241と、ゲーム画像生成プログラム242と、ゲーム画像表示プログラム243と、タッチ入力検出プログラム244などによって構成される。
ゲームメイン処理プログラム241は、上述したようなゲームのメインルーチンを処理するためのプログラムである。ゲーム画像生成プログラム242は、後述する画像データ251を用いて、プレイヤキャラクタ41、敵キャラクタ43、敵キャラクタ以外のノンプレイヤキャラおよび背景オブジェクトなどのゲーム画像を生成するためのプログラムである。ゲーム画像表示プログラム243は、ゲーム画像生成プログラム242によって生成されたゲーム画像をLCD11およびLCD12に表示するためのプログラムである。
タッチ入力検出プログラム244は、プレイヤによるタッチ入力があるか否かを一定時間(本実施形態では、1フレーム)毎に検出して、後述のタッチ入力フラグ254の成立(オン)/不成立(オフ)を制御する。更に、タッチ入力があるときは、当該タッチ入力による検出座標に対応する座標データを入力座標リスト252(図20参照)に時系列に従って記憶(一時記憶)するためのプログラムである。ここで、タッチ入力があるか否かは、タッチ入力による検出座標に対応する座標データがタッチパネル15から入力されるか否かで判断される。
なお、図示は省略するが、ゲームプログラム記憶領域240には、音再生プログラムやバックアッププログラムなども記憶される。音再生プログラムは、音データを用いて、ゲームに必要な音を再生するためのプログラムである。また、バックアッププログラムは、ゲームの進行に従って発生するデータ(ゲームの途中データや結果データ)をプレイヤの指示や所定のタイミング(イベント)に従ってメモリカード17のRAM24に記憶(セーブ)するためのプログラムである。
データ記憶領域250には、画像データ251、入力座標リスト252、仕事内容決定テーブル253などのデータが記憶されるとともに、タッチ入力フラグ254、フォーカスフラグ255、操作中フラグ256、ロックフラグ257などのフラグも記憶される。
画像データ251は、ゲーム画像(プレイヤキャラクタ、ノンプレイヤキャラクタ(敵キャラクタを含む)、背景オブジェクト、所定のキャラクタ)を生成するためのデータ(ポリゴンデータやテクスチャデータなど)である。
入力座標リスト252は、入力順番と上記座標データとの組の集合である。本実施形態では、プレイヤによって入力された座標データは、所定の単位時間間隔で検出される。座標データは、プレイヤの入力が連続している間(プレイヤの指等がタッチパネルから離れていない間)、図20に示すように、1つのリストとしてRAM24に記憶される。
仕事内容決定テーブル253は、ロックオンしたオブジェクトの種類に基づいて実際に行う仕事の内容を決定するためのテーブルである。図21に示すように、仕事内容決定テーブル253は、オブジェクトの種類と仕事の処理内容との組の集合から成る。
タッチ入力フラグ254は、タッチ入力のオン/オフの状態を示すフラグであり、タッチ入力検出プログラム244に従ってオン/オフが切替えられる。本実施形態では、タッチ入力フラグ254は、1ビットのレジスタで構成され、タッチ入力がオンのときは、レジスタのデータ値が「1」に設定され、タッチ入力がオフのときは、レジスタのデータ値が「0」に設定される。
フォーカスフラグ255は、画面上に表示される複数のプレイヤキャラクタ41のうち、フォーカスキャラ、すなわち、プレイヤの操作に従って行動するキャラクタを示すフラグである。そのため、当該フラグは、各プレイヤキャラクタ毎に設定されている。プレイヤに指定された状態のときはオンになり、指定されていないときはオフになる。また、当該フラグがオンのキャラクタ群が隊列を構成することになる。すなわち、フォーカスフラグがオンのキャラクタは、隊列を構成して、指示待ち円61で囲まれることになる。
操作中フラグ256は、上記フォーカスキャラに対して何らかの操作を行っている状態か否かを示すフラグである。当該フラグがオンのときは、指示待ち円61の代わりに操作円71が表示されることになる。当該フラグがオフのときは、プレイヤはフォーカスキャラの操作を行っていないことを示す。
ロックフラグ257は、上記フォーカスキャラと所定の位置にいるオブジェクトが仕事対象として指定(ロックオン)されていることを示すフラグである。そのため、当該フラグは、各オブジェクト毎に設定されている。当該フラグは、ロックオンされているときはオンになり、ロックオンされていないときはオフになる。
なお、図22は、上記各フラグの内容をまとめた表である。また、図示は省略するが、データ記憶領域250には、ゲームに必要な音を出力するための音データや、ゲームの進行に伴って発生するデータ(ゲームの途中データ、結果データ)やフラグ(イベントフラグ)なども記憶される。
次に、ゲーム装置10において実行されるゲーム処理の流れを図23〜図27を用いて説明する。図23は、ゲーム装置10において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置10の電源が投入されると、ゲーム装置10のCPUコア21は、図示しないブートROMに記憶されている起動プログラムを実行し、RAM24等の各ユニットが初期化される。そして、メモリカード17に格納されたゲームプログラムがRAM24に読み込まれ、当該ゲームプログラムの実行が開始される。その結果、第1GPU26を介して第1LCD11にゲーム画像が表示されることによって、ゲームが開始される(ステップS1)。なお、図23に示すゲーム処理のスキャンタイムは1フレームであるとする。また、フレームレートは30fpsであるとする。
次に、ステップS2において、タッチ入力を検出する。すなわち、タッチパネル15から入力される座標データを検出する。その結果、タッチ入力が無ければ(ステップS2でNO)、後述のタッチオフ処理(ステップS18)を行う。一方、タッチ入力を検出すれば(ステップS2でYES)、更に、タッチ入力位置(以下、入力座標位置と呼ぶ)を入力座標リスト252に格納する。つまり、タッチパネル15から入力された座標データを時系列に従って入力座標リスト252に一時記憶する。そして、続くステップS3において、タッチ入力フラグがONか否か、つまり、タッチパネルを押しつづけている状態(以下、継続入力)か、押し初めの状態(以下、新規入力)かを判定する。
ステップS3の判定の結果、新規入力であれば(ステップS3でNO)、続くステップS4において、画面に表示されているプレイヤキャラクタ41の何れかが指定されたか否かを判定する。なお、ここでは説明を分かりやすくするため、単一のプレイヤキャラクタを指定する場合を想定して、以下説明を続ける。ステップS4においては、入力座標位置が何れかのプレイヤキャラクタ41の当たり判定領域内であるか否かで、当該指定がされたか否かを判定する。なお、当該当たり判定領域については、上記初期化処理において設定されているものとする。
ステップS4の判定の結果、何れのプレイヤキャラクタ41も指定されてないときは(ステップS4でNO)、ステップS10の画面スクロール処理が行われる。ステップS10においては、当該入力座標位置が画面の中心に位置するように、画面をスクロールする処理が行われる。
一方、ステップS4の判定の結果、何れかのプレイヤキャラクタ41が指定されたとき(ステップS4でYES)、続くステップS5において当該プレイヤキャラクタ41をフォーカスキャラにするためのフォーカス処理が行われる。図24は、上記ステップS5で示したフォーカス処理の詳細を示すフローチャートである。ここでは、フォーカスフラグ255をオンにすることで、当該プレイヤキャラクタ41をフォーカスキャラとする処理が行われる。
図24において、まず、上記指定されたプレイヤキャラのフォーカスフラグ255がONか否かを判定する(ステップS41)。その結果、フォーカスフラグがオフであれば(ステップS41でNO)、ステップS42において、全てのプレイヤキャラクタ41のフォーカスフラグをOFFにする。これはすなわち、既にフォーカスフラグ255がオンのキャラがいるときを想定して、一旦全プレイヤキャラクタ41のフォーカスフラグ255をオフ、すなわち、指定状態を解除するものである。次に、ステップS43において、上記指定されたプレイヤキャラクタ41のフォーカスフラグ255をオンにする。これにより、以前、他のプレイヤキャラクタ41が指定状態になっていても、今回指定したプレイヤキャラクタ41にフォーカスが移り、指定状態とすることができる。一方、上記ステップS41の判定の結果、既にフォーカスフラグ255がオンであれば(ステップS41でYES)、そのまま当該フォーカス処理を終了する。
図23に戻り、次に、ステップS6において、上記フォーカスキャラを操作中であることを示す操作円71を表示する処理を行う。図25は、上記ステップS6で示した操作円表示処理の詳細を示すフローチャートである。図25において、まず、操作中フラグ256をONにする(ステップS51)。次に、上記フォーカスキャラを中心とする操作円71を生成する(ステップS52)。以上で、操作円表示処理は終了する。
図23に戻り、ステップS6の処理の次に、ロックオン処理が行われる(ステップS7)。本処理は、図14に示すように、スティック16の接触位置と所定距離にあるオブジェクトを仕事対象として指定(ロックオン)する処理である。図26は、上記ステップS7で示したロックオン処理の詳細を示すフローチャートである。図26において、まず、操作中フラグ256がオンか否かを判断する(ステップS61)。その結果、操作中フラグ256がオフであれば(ステップS61でNO)、プレイヤはタッチパネル15に触れていない、すなわち何の指示も出していないことになるため、そのままロックオン処理を終了する。換言すれば、あるオブジェクトがフォーカスキャラと所定距離にあっても、プレイヤが操作中でなければ、ロックオンはされないことになる。
一方、操作中フラグ256がオンであれば(ステップS61でYES)、続くステップS62で、画面上に表示されている各オブジェクト(敵・NPCも含む)と、スティック16の接触位置との距離を計算する。当該距離の計算については、入力座標リスト252(図20参照)のn番目の座標データ(以下、最終入力座標と称す)と各オブジェクトの座標とに基づいて算出すること等が考えられる。次に、最終入力座標から所定距離以下の位置にいるオブジェクトが存在するか否かを判定する(ステップS63)。その結果、所定距離以下の位置にいるオブジェクトが存在しなければ(ステップS63でNO)、ステップS68においてロックフラグ257がオンであるオブジェクトのロックフラグ257をオフにする(つまり、ロックオン解除)。併せて、後述する照準円81が表示されているときは、当該照準円81も消去する。そして、ロックオン処理を終了する。
一方、ステップS63の判定の結果、所定距離内にオブジェクトが存在すれば(ステップS63でYES)、続くステップS64において、当該オブジェクトの数が2以上か否かを判定する。その結果、オブジェクトの数が2以上であれば(ステップS64でYES)、当該オブジェクトのうち、最終入力座標に最も近い距離にいるオブジェクトのロックフラグ257をオンにする(ステップS65)。一方、2未満、すなわち当該オブジェクトの数が1であれば(ステップS64でNO)、当該オブジェクトのロックフラグ257をオン(すなわち、ロックオン)にする(ステップS66)。つまり、ロックオンされるオブジェクトは1つまでとなる。これにより、例えば、スティック16を移動させず、最終入力座標の近くにいる2体の敵キャラクタが移動することで、最終入力座標との距離関係に変化が生じたときでも、最も近い距離の敵キャラクタをロックオンすることが可能となる。つまり、一方の敵キャラクタが最も近い距離にいる状態で、当該敵キャラクタをロックオンした後、他方の敵キャラクタが近づいてくることにより、当該他方の敵キャラクタとの距離のほうが近くなったときに、当該他方の敵キャラクタにロックオンしなおすことになる。
次に、当該ロックオンしたオブジェクトを中心とする照準円81を生成する(ステップS67)。これにより、図14に示すように、ロックオン状態のオブジェクトが照準円81で囲まれて表示することができる。これによって、プレイヤは、どのオブジェクトをロックオンしたのかを視覚的に認識することができる。以上で、ロックオン処理が終了する。
図23に戻り、次に、上記ステップS3で、継続操作と判定されたときの処理について説明する。この場合は、まず、最終入力座標と、その直前に検出された入力座標とを比較して、スティック16を動かしたか否かを判定する。これは、入力座標リスト252のn番目の座標データとn−1番目の座標データとが異なる座標であるか否かで判定する(ステップS11)。その結果、入力座標に変化が無ければ(ステップS11でNO)、操作中フラグ256のオン、オフを判定する(ステップS12)。その結果、操作中フラグ256がオンでなければ(ステップS12でNO)、当該入力座標位置が画面の中心にくるように画面のスクロール処理が行われる(ステップS10)。一方、操作中フラグ256がオンであれば(ステップS12でYES)、上述のステップS6に進む。
一方、ステップS11の判定の結果、入力座標に変化があったときは(ステップS11でYES)、操作中フラグ256のオン、オフを判定する(ステップS13)。その結果、操作中であれば(ステップS13でYES)、フォーカスキャラの移動処理が行われる(ステップS14)。この処理は、図9に示すように、フォーカスキャラを最終入力座標へ向けて移動させる処理である。その後、移動中において、何らかのオブジェクトを囲む操作による直接指定があったか否かを判定して所定の処理(隊列を構成する処理等)を行う囲み判定処理(ステップS15)が行われる。その後、上述したステップS7のロックオン処理へ進む。
一方、ステップS13の判定の結果、操作中でなければ(ステップS13でNO)、入力座標を中心とするような画面スクロール処理(ステップS16)が行われる。その後、何らかのオブジェクトを囲む操作による直接指定したか否かを判定して所定の処理を行う囲み判定処理が行われる(ステップS17)。その後、上述したステップS7のロックオン処理へ進む。なお、ステップS15、S17における囲み判定処理の内容は、本発明と直接関係しないので、詳細な説明を省略する。
図23に戻り、ステップS7におけるロックオン処理が終われば、次に、ステップS8において画面描画処理が行われる。これにより、各オブジェクト等が移動後の位置で表示され、また、上記操作円71や照準円81等が表示されることになる。その後、ステップS9において、ゲーム終了か否かが判定される。ゲーム終了条件が満たされていないときは(ステップS9でYES)、ゲーム終了と判定されるまで、上記ステップS2〜S17、および次に述べるステップS18の処理が繰り返される。一方、ゲーム終了条件が満たされているときは(ステップS9でNO)、当該ゲーム処理は終了する。
次に、上記ステップS2において、タッチ入力がなかったとき(ステップS2でNO)の処理(ステップS18)について説明する。本処理は、タッチパネル15からスティック16を離したとき、すなわちタッチオフしたときに行われる処理である。図27は、上記ステップS18で示したタッチオフ処理の詳細を示すフローチャートである。図27において、まず、タッチ入力フラグ254がオンか否かが判定される(ステップS71)。その結果、タッチ入力フラグ254がオフであれば(ステップS71でNO)、タッチオフ処理は終了する。これはすなわち、タッチパネル15にはずっと触れられていない状況が該当する。
一方、タッチ入力フラグ254がオンであれば(ステップS71でYES)、操作中フラグがオンか否か判定する(ステップS72)。これは、今までタッチパネル15に触れていた状態からタッチオフした直後の状態に該当する。その結果、操作中フラグがオン、すなわちフォーカスキャラを移動中であれば(ステップS72でYES)、ロックフラグ257がオンのオブジェクトが存在するか否か、つまり、既にロックオンしたオブジェクトがいる否かを判定する(ステップS73)。その結果、既にロックオンしたオブジェクトが存在していれば(ステップS73でYES)、仕事内容決定テーブル253を参照し、当該ロックオンしたオブジェクトの種類に応じた仕事処理が開始される(ステップS74)。ここで、仕事処理とは、当該ロックオンしたオブジェクトとフォーカスキャラとの間において、何れか一方が他方に何らかの影響を及ぼす処理のことをいう。換言すれば、ロックオンしたオブジェクトの方向にフォーカスキャラが向きを変えるだけ等の、ロックオンしたオブジェクトに何ら変化が生じないような処理は、当該仕事処理には含まれない。具体的な仕事処理の内容としては、例えば、図14に示すように、ロックオンしたキャラが敵キャラクタ43であれば、フォーカスキャラが当該敵キャラクタ43への攻撃を行う処理が該当する。これはすなわち、フォーカスキャラが敵キャラクタ43のパラメータ値(体力値など)を減少させるという影響を及ぼすことである。また、敵キャラクタ43がフォーカスキャラに攻撃を行う処理も該当する。つまり、敵キャラクタ43がフォーカスキャラのパラメータ値を減少させるという影響を及ぼすことに該当する。その他、例えば、ロックオンしたオブジェクトが食料42であれば、フォーカスキャラが当該食料42を基地に運ぶ処理、すなわち、フォーカスキャラが食料42を移動する処理(食料42の存在する座標値が変化する)が仕事処理に該当する。また、フォーカスキャラ以外のプレイヤキャラクタ41であれば、当該プレイヤキャラクタのフォーカスフラグ255をオンにし、隊列に加える処理が仕事処理に該当する。
仕事処理が開始されれば、続くステップS75において、操作中フラグ256をオフにする。更に、ステップS76において、全キャラのフォーカスフラグ255をオフにする。これは、仕事処理が開始されれば、隊列を構成していたフォーカスキャラは、プレイヤの指揮下から開放されることを意味する。その結果、例えば敵キャラクタ43を倒した後、特に指示を行わなくても、隊列を構成していたプレイヤキャラクタ41が敵キャラクタ43の死骸を基地に運ぶという処理が実現できる。次に、ステップS77において、タッチ入力フラグ254をオフにする。すなわち、タッチパネル15からスティック16が離れたことを示すものである。そして、続くステップS78において、入力座標リスト252をクリアする。
一方、ステップS73において、ロックオンしたオブジェクトが存在しないとき(ステップS73でNO)、操作中フラグ256をオフにする(ステップS79)。これは、タッチパネル15からスティック16が離れたため、操作円71を表示しないようにするためである。そして、続くステップS80において、操作円71に置き換える形で、指示待ち円61を生成する。続いて、ステップS81において、指示待ち円61に向かってプレイヤキャラクタ41を移動させる処理が行われる。これは、例えば、隊列が複数のプレイヤキャラクタ41で構成されていたときで、隊列内のあるプレイヤキャラクタ41が、移動中に岩などに引っかかって他のキャラからはぐれてしまったときに、このはぐれたプレイヤキャラクタ41を隊列の位置に移動させるための処理である。その後、上記ステップS77およびS78の処理が行われる。
次に、上記ステップS72において、操作中でないとき(ステップS72でNO)の処理について説明する。このときは、まず、フォーカスフラグ255がオンのキャラ(フォーカスキャラ)が存在するか否かを判定する(ステップS82)。フォーカスキャラが存在すれば(ステップS82でYES)、上述したステップS80の処理に進む。一方、フォーカスキャラが存在しなければ(ステップS82でNO)、上述したステップS81の処理に進む。以上で、図23のステップS18におけるタッチオフ処理が終了する。
図23に戻り、タッチオフ処理が終われば、次に、上述したようにステップS8の画面描画処理が行われる。続いて、ステップS9において、ゲーム終了条件が満たされているか否かが判定される。ゲーム終了条件が満たされていないときは(ステップS9でYES)、ゲーム終了と判定されるまで、上記ステップS2〜S18の処理が繰り返される。一方、ゲーム終了条件が満たされているときは(ステップS9でNO)、当該ゲーム処理は終了する。以上で、第1の実施形態に係るゲーム処理は終了する。
以上、本実施形態によれば、ポインティングデバイス等によるプレイヤキャラクタの操作中において、敵キャラクタ等を指定するための別個の操作を行わずとも、攻撃等を行いたい対象を指定することができる。そして、ポインティングデバイス等から指を離す、タッチパネルから指を離すなどの自然な操作が行われたタイミングで、指定した対象に影響を及ぼす処理をプレイヤキャラクタに開始させることができる。そのため、例えば攻撃ボタンやコマンド決定ボタンなどの、プレイヤキャラクタに行動を開始させるための別個の操作を行う必要がなくなり、プレイヤの操作性を向上させることができる。また、ロックオンについても、プレイヤキャラクタの操作中でなければロックオンは行われないため、プレイヤの意図しない対象指定を防ぐことができる。
なお、図26を用いて説明したロックオン処理において、最終入力座標の代りにフォーカスキャラの座標を用いて仕事対象を指定するようにしても良い。すなわち、上記ステップS62の処理において、画面上に表示されている各オブジェクト(敵・NPCも含む)とフォーカスキャラとの距離を、当該フォーカスキャラの座標と各オブジェクトの座標とに基づいて算出する。そして、ステップS63において、フォーカスキャラから所定距離以下の位置にいるオブジェクトが存在するか否かを判定すればよい。なお、このとき、隊列中に複数のフォーカスキャラが存在するとき(すなわち、複数のプレイヤキャラクタ41で隊列が構成されているとき)は、当該隊列の中で最初にフォーカスフラグがオンになったプレイヤキャラクタ41を基準として、上記距離を計算するようにしてもよい。
また、上述したステップS7におけるロックオン処理について、本実施形態では、最終入力座標の近くに複数のオブジェクトがいるときは、最も近いオブジェクトをロックオンしている(図26のステップS64〜S65)。そのため、例えば、フォーカスキャラの近くに敵キャラクタ43が2体いて、当該2体の敵キャラクタ43のみが移動することにより、最終入力座標との距離関係が変化した場合、常に至近距離にいる敵キャラクタ43のみがロックオンされる。しかし、ロックオンの方法はこれに限らず、上記のような状況において、一旦至近距離の敵キャラクタ43をロックオンしたときは、その後、敵キャラクタ43の移動により最終入力座標との距離関係に変化が生じても、例えばスティック16を動かしていなければ、ロックオン対象は変化しないようにしてもよい。これにより、フォーカスキャラの近くに多数のオブジェクトが存在するときに、頻繁にロックオン対象が切り替わることによるプレイヤの混乱を防ぐことが可能となる。
(第2の実施形態)
次に、図28から図32を参照して、本発明の第2の実施形態について説明する。上述の第1の実施形態では、操作中のフォーカスキャラについて、タッチオフしたタイミングで、ロックオンしたオブジェクトに対して仕事を開始している。これに対して、第2の実施形態では、操作中のスティック16の入力軌跡のベクトルを示す第1のベクトルデータを算出し、当該ベクトルの延長線上にオブジェクトが存在すれば、ロックオンしていなくても、当該オブジェクトに対して上述した仕事処理を開始するものである。換言すれば、図28に示すように、スティック16の一連の入力先に当たる方向にオブジェクトが存在していれば、スティック16の接触位置との距離が離れていても、タッチオフのタイミングで当該オブジェクトに対してフォーカスキャラに仕事処理を開始させるものである。なお、当該実施形態に係るゲーム装置10は、上述した第1の実施形態と同様であるため、同一の参照符号を付して詳細な説明を省略する。また、本実施形態にかかるゲーム処理についても、タッチオフ処理を除けば上述した第1の実施形態で図23を用いて説明したゲーム処理と同様であるため、当該タッチオフ処理以外の処理については、詳細な説明は省略する。
図29は、第2の実施形態に係るタッチオフ処理(図23のステップS18に相当)の詳細を示すフローチャートである。当該実施形態に係るタッチオフ処理は、上述した第1の実施形態で図27を用いて説明したタッチオフ処理にステップS83およびS84を加えたものに相当し、他のステップは、第1の実施形態における処理と同様である。従って、ステップS83およびS84以外のステップについては同一の参照符号を付して詳細な説明を省略する。また、ここでは説明を分かりやすくするため、図30(A)に示すような入力操作が行われたものとして説明する。図30(A)において、ベクトルデータa〜fは、隣接する検出点同士を結ぶベクトルである。
図29において、ステップS73の処理でロックオンしたオブジェクトが存在するか否かを判定した結果、存在しなかったとき、スティック16を動かした先にオブジェクトが存在するか否かを判定するための遠隔ターゲット判定処理(ステップS83)が行われる。
図31は、上記ステップS83で示した遠隔ターゲット判定処理の詳細を示すフローチャートである。図31において、まず、スティック16を動かした先にオブジェクトが存在するか否かを示すために用いる遠隔フラグをオフにする(ステップS91)。次に、ステップS92において、入力座標リスト252を遡って参照していくために用いる変数mを1にする。続いて、ステップS93において、入力座標リスト252(図20参照)の、n−m番目の座標データを始点とし、n番目の座標データ(最終入力座標)を終点とするベクトルデータA(図30(A)のfに相当)を算出する。ここで、ベクトルデータAは、図32(A)に示すように、向き311および距離312からなるデータである。距離312について、距離1は、タッチパネル15上の数ドット(例えば、2ドット)に相当する長さである。また、向き311については、説明の便宜上、図32(B)に示すような8種類の方向に数字の「0」〜「7」を対応させて定義してあるものとする。
次に、n−(m+1)番目の座標データを始点とし、(n−m)番目の座標データを終点とするベクトルデータB(図30(A)のeに相当)を算出する(ステップS94)。なお、ベクトルデータBもベクトルデータAと同様の構成を有する(図32(A)参照)。
次に、ステップS95において、ベクトルデータAとBとの向き311が同一か否かを判定する。その結果、同じであれば(ステップS95でYES)、ベクトルデータBの距離312をベクトルデータAの距離312に加算する。続くステップS97で、mに1を加算して、ステップS94の処理に戻る。つまり、入力座標リスト252を遡る形でベクトルデータを算出していく。そして、同じ向きのベクトルデータを1つにまとめていくものである。その結果、図30(B)に示すように、ベクトルf〜dが一つのベクトルデータにまとまる。
一方、ステップS95の判定の結果、ベクトルデータAとBとの向き311が異なっているときは(ステップS95でNO)、ベクトルデータAについての入力速度を検出する。この入力速度の検出については、例えば、Sを入力速度とし、ベクトルデータAの距離をLとして、以下の式で算出することが考えられる。
S=m/L
なお、入力速度の検出については、これに限らず、例えば、タッチパネル15における入力検出時間を随時記録しておき、その時間差をみて検出する等してもよい。
次に、ステップS99において、Sが所定値以上か否かを判定する。これは、入力速度が一定の速度以上のときにのみ、以下に述べるロックオン処理を行うためである。ステップS99の判定の結果、Sが所定値以上、つまり一定の速度以上であれば、続くステップS100において、ベクトルデータAの距離312を例えば2倍にする(図30(C)参照)。
次に、ステップS101において、最終入力座標(すなわち、入力座標リスト252のn番目の座標データ)を始点とするベクトルデータAに相当する座標上にオブジェクトが存在するか否かを判定する。その結果、何らかのオブジェクトが存在すれば(ステップS101でYES)、ステップS102において、当該オブジェクトのロックフラグ257をオンにする。なお、該当するオブジェクトが複数存在するときは、最終入力座標に最も近い位置にいるオブジェクトのみのロックフラグ257をオンにする。併せて、当該オブジェクトを中心とする照準円81を生成する。そして、続くステップS103において、遠隔フラグをオンにする。
一方、ステップS101の判定の結果、ベクトルデータA上にオブジェクトが存在しなければ(ステップS101でNO)、そのまま遠隔ターゲット判定処理を終了する。このように、ステップS91〜103の処理によって、例えば、あたかもマッチを擦るような操作でスティック16でタッチパネル15を擦るように入力すれば、遠くにいるオブジェクトについてロックオンすることが可能となり、操作性を向上させることが可能となる。
図29に戻り、ステップS84において、遠隔フラグがオンか否かを判定する。その結果、遠隔フラグがオンであれば(ステップS84でYES)、何らかのオブジェクトをロックオンしているため、処理をステップS74に進める。一方、遠隔フラグがオフのときは(ステップS84でNO)、処理をステップS79に進める。以降の処理は、図27を用いて説明した第1の実施形態におけるタッチオフ処理を同様であるので、詳細な説明は省略する。
このように、第2の実施形態によれば、遠くにいるオブジェクトについても、スティック16をタッチパネルから離すタイミングでロックオンすることが可能となる。また、所定の入力速度以上がなければ、ロックオンしないようにしている。そのため、例えばプレイヤが単にフォーカスキャラを移動させたつもりであるにも関わらず、ロックオンが行われて所定の仕事が開始されてしまうという、プレイヤの意図しない動作を防止することができる。