(57)【特許請求の範囲】
【請求項１】
仮想空間内に地形オブジェクトを配置する地形配置部と、
プレイヤの操作に基づいて、キャラクタオブジェクトを前記仮想空間内において移動させるキャラクタ移動制御部と、
前記キャラクタオブジェクトの位置から相対的に設定される複数の位置から、立体形状を有する複数の判定領域をそれぞれ所定のルールに従って決定された方向に移動させた場合に、当該判定領域が前記地形オブジェクトと衝突する衝突位置をそれぞれ算出する算出部と、
前記複数の衝突位置の分布から、前記キャラクタオブジェクトの位置から所定範囲内の前記地形オブジェクトの地形を判定する地形判定部と、
前記地形判定部によって判定された地形に応じて所定のゲーム処理を行うゲーム処理部を備える、ゲーム装置。
【請求項２】
前記判定領域は球形状を有する、請求項１記載のゲーム装置。
【請求項３】
前記キャラクタ移動制御部は、前記プレイヤの操作に基づいて前記キャラクタオブジェクトの向きをさらに制御し、
前記算出部は、前記判定領域を、前記キャラクタオブジェクトの位置に関連付けて設定される開始位置から、前記キャラクタオブジェクトの進行方向側に決定される目標位置に向かって移動させる場合の前記衝突位置を算出する、請求項１または２記載のゲーム装置。
【請求項４】
前記算出部は、所定の前記判定領域に関して算出される前記衝突位置から前記キャラクタオブジェクトの進行方向側に次の判定領域の目標位置を決定することで、前記複数の判定領域のそれぞれを移動させた場合の衝突位置をそれぞれ算出する、請求項３記載のゲーム装置。
【請求項５】
前記算出部は、前記衝突位置から、前記衝突位置における前記地形オブジェクトの法線方向とは逆向きに前記判定領域を第１所定量移動させた位置から、前記法線方向に垂直かつ前記キャラクタオブジェクトの進行方向となる向きにさらに第２所定量移動させた位置を次の判定領域の目標位置として決定する、請求項４記載のゲーム装置。
【請求項６】
前記算出部は、前記衝突位置から、前記衝突位置における前記地形オブジェクトの法線方向に垂直かつ前記キャラクタオブジェクトの進行方向となる向きに第１所定量移動させた位置から、鉛直下方向へさらに第２所定量移動させた位置を次の判定領域の目標位置として決定する、請求項４記載のゲーム装置。
【請求項７】
前記法線方向は、前記地形オブジェクトの法線方向と前記キャラクタオブジェクトの前記進行方向の真横方向との外積に基づいて再計算される、請求項５または６記載のゲーム装置。
【請求項８】
前記地形判定部は、前記複数の衝突位置の分布に基づいて、少なくとも前記地形の傾きを算出し、
前記ゲーム処理部は、前記地形判定部によって判定された地形の傾きに応じたアニメーションをするよう前記キャラクタオブジェクトを制御するゲーム処理を行う、請求項１ないし７のいずれかに記載のゲーム装置。
【請求項９】
前記地形判定部は、前記複数の衝突位置の分布を主成分分析し、当該主成分分析に基づいて地形の傾きを算出する、請求項８記載のゲーム装置。
【請求項１０】
前記地形判定部は、前記複数の衝突位置の分布に基づいて回帰直線を算出し、当該直線から地形の傾きを算出する、請求項８記載のゲーム装置。
【請求項１１】
前記算出部は、前記判定領域を前記開始位置から前記目標位置に向かって移動させた場合の処理結果が所定の条件を満たす場合に、前記キャラクタオブジェクトの前記進行方向に当該キャラクタオブジェクトから見下ろす地形が在るかどうかを判断する、請求項３記載のゲーム装置。
【請求項１２】
前記算出部は、前記判定領域が前記開始位置から前記目標位置に向かって移動させた場合に前記地形に衝突する位置が無い場合に、当該目標位置を次の判定領域の開始位置として決定し、当該次の判定領域の開始位置から真下方向に次の目標位置を決定する、請求項１１記載のゲーム装置。
【請求項１３】
前記算出部は、前記次の判定領域の開始位置から前記次の目標位置に向かって当該次の判定領域を移動させた場合に前記地形に衝突する位置が無い場合に、前記見下ろす地形の側面を判定する第１判定処理を実行する、請求項１２記載のゲーム装置。
【請求項１４】
前記算出部は、前記複数の判定領域を移動させた場合に算出された前記複数の衝突位置のうち、前記キャラクタオブジェクトとの位置関係が所定の関係を有するとき、前記見下ろす地形の側面を判定する第２判定処理を実行する、請求項１１記載のゲーム装置。
【請求項１５】
仮想空間内に地形オブジェクトを配置する地形配置部と、プレイヤの操作に基づいて、キャラクタオブジェクトを前記仮想空間内において移動させるキャラクタ移動制御部を備えるゲーム装置のゲーム制御方法であって、
（ａ）前記キャラクタオブジェクトの位置から相対的に設定される複数の位置から、立体形状を有する複数の判定領域をそれぞれ所定のルールに従って決定された方向に移動させた場合に、当該判定領域が前記地形オブジェクトと衝突する衝突位置をそれぞれ算出するステップと、
（ｂ）前記複数の衝突位置の分布から、前記キャラクタオブジェクトの位置から所定範囲内の前記地形オブジェクトの地形を判定するステップと、
（ｃ）前記ステップ（ｂ）において判定した地形に応じて所定のゲーム処理を行うステップを含む、ゲーム制御方法。
【請求項１６】
コンピュータによって実行されるゲームプログラムであって、
前記コンピュータを、
仮想空間内に地形オブジェクトを配置する地形配置部と、
プレイヤの操作に基づいて、キャラクタオブジェクトを前記仮想空間内において移動させるキャラクタ移動制御部と、
前記キャラクタオブジェクトの位置から相対的に設定される複数の位置から、立体形状を有する複数の判定領域をそれぞれ所定のルールに従って決定された方向に移動させた場合に、当該判定領域が前記地形オブジェクトと衝突する衝突位置をそれぞれ算出する算出部と、
前記複数の衝突位置の分布から、前記キャラクタオブジェクトの位置から所定範囲内の前記地形オブジェクトの地形を判定する地形判定部と、
前記地形判定部によって判定された地形に応じて所定のゲーム処理を行うゲーム処理部として機能させる、ゲームプログラム。
【請求項１７】
前記判定領域は球形状を有する、請求項１６記載のゲームプログラム。
【請求項１８】
前記キャラクタ移動制御部は、前記プレイヤの操作に基づいて前記キャラクタオブジェクトの向きをさらに制御し、
前記算出部は、前記判定領域を、前記キャラクタオブジェクトの位置に関連付けて設定される開始位置から、前記キャラクタオブジェクトの進行方向側に決定される目標位置に向かって移動させる場合の前記衝突位置を算出する、請求項１６または１７記載のゲームプログラム。
【請求項１９】
前記算出部は、所定の前記判定領域に関して算出される前記衝突位置から前記キャラクタオブジェクトの進行方向側に次の判定領域の目標位置を決定することで、前記複数の判定領域のそれぞれを移動させた場合の衝突位置をそれぞれ算出する、請求項１８記載のゲームプログラム。
【請求項２０】
前記算出部は、前記衝突位置から、前記衝突位置における前記地形オブジェクトの法線方向とは逆向きに前記判定オブジェクトを第１所定量移動させた位置から、前記法線方向に垂直かつ前記キャラクタオブジェクトの進行方向となる向きにさらに第２所定量移動させた位置を次の判定領域の目標位置として決定する、請求項１９記載のゲームプログラム。
【請求項２１】
前記算出部は、前記衝突位置から、前記衝突位置における前記地形オブジェクトの法線方向に垂直かつ前記キャラクタオブジェクトの進行方向となる向きに第１所定量移動させた位置から、鉛直下方向へさらに第２所定量移動させた位置を次の判定領域の目標位置として決定する、請求項１９記載のゲームプログラム。
【請求項２２】
前記法線方向は、前記地形オブジェクトの法線方向と前記キャラクタオブジェクトの前記進行方向の真横方向との外積に基づいて再計算される、請求項２０または２１記載のゲームプログラム。
【請求項２３】
前記地形判定部は、前記複数の衝突位置の分布に基づいて、少なくとも前記地形の傾きを算出し、
前記ゲーム処理部は、前記地形判定部によって判定された地形の傾きに応じたアニメーションをするよう前記キャラクタオブジェクトを制御するゲーム処理を行う、請求項１６ないし２２のいずれかに記載のゲームプログラム。
【請求項２４】
前記地形判定部は、前記複数の衝突位置の分布を主成分分析し、当該主成分分析に基づいて地形の傾きを算出する、請求項２３記載のゲームプログラム。
【請求項２５】
前記地形判定部は、前記複数の衝突位置の分布に基づいて回帰直線を算出し、当該直線から地形の傾きを算出する、請求項２３記載のゲームプログラム。
【請求項２６】
前記算出部は、前記判定領域を前記開始位置から前記目標位置に向かって移動させた場合の処理結果が所定の条件を満たす場合に、前記キャラクタオブジェクトの前記進行方向に当該キャラクタオブジェクトから見下ろす地形が在るかどうかを判断する、請求項１８記載のゲームプログラム。
【請求項２７】
前記算出部は、前記判定領域が前記開始位置から前記目標位置に向かって移動させた場合に前記地形に衝突する位置が無い場合に、当該目標位置を次の判定領域の開始位置として決定し、当該次の判定領域の開始位置から真下方向に次の目標位置を決定する、請求項２６記載のゲームプログラム。
【請求項２８】
前記算出部は、前記次の判定領域の開始位置から前記次の目標位置に向かって当該次の判定領域を移動させた場合に前記地形に衝突する位置が無い場合に、前記見下ろす地形の側面を判定する第１判定処理を実行する、請求項２７記載のゲームプログラム。
【請求項２９】
前記算出部は、前記複数の判定領域を移動させた場合に算出された前記複数の衝突位置のうち、前記キャラクタオブジェクトとの位置関係が所定の関係を有するとき、前記見下ろす地形の側面を判定する第２判定処理を実行する、請求項２６記載のゲームプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はゲーム装置、ゲーム制御方法およびゲームプログラムに関し、特にたとえば、ディスプレイに表示されるゲーム画像を生成する、ゲーム装置、ゲーム制御方法およびゲームプログラムに関する。
【背景技術】
【０００２】
背景技術の一例が特許文献１に開示される。この特許文献１に開示のビデオゲーム装置では、プレイヤオブジェクトがすべき動作を示す動作コード、地形ポリゴンの種類を示す種類コードなどを含む制御コードが、地形オブジェクトを構成するすべてのポリゴンデータ中に予め設定されている。したがって、プレイヤオブジェクトの現在位置における地形オブジェクトに設定された動作コードが検出され、プレイヤオブジェクトのアニメーションが変化される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−１５３０６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この特許文献１に開示されたビデオゲーム装置では、制御データが地形オブジェクトを構成するすべてのポリゴンデータ中に設定されるため、仮想空間に設定されるゲーム世界ないしゲームフィールドがかなり広い場合には、このような制御データを設定するために、多大な労力が必要であり、作業コストがかかる。また、制御データは予め設定されるため、動く地形には対応することができない。
【０００５】
それゆえに、この発明の主たる目的は、新規な、ゲーム装置、ゲーム制御方法およびゲームプログラムを提供することである。
【０００６】
また、この発明の他の目的は、地形を自動的に判定できる、ゲーム装置、ゲーム制御方法およびゲームプログラムを提供することである。
【課題を解決するための手段】
【０００７】
第１の発明は、地形配置部と、キャラクタ移動制御部と、算出部と、地形判定部と、ゲーム処理部を備える、ゲーム装置である。地形配置部は、仮想空間内に地形オブジェクトを配置する。地形オブジェクトは、たとえば、背景オブジェクトとも呼ばれ、平坦面、坂（斜面）、床、壁、崖、木などの各種のオブジェクトを意味する。キャラクタ移動制御部は、プレイヤの操作に基づいて、キャラクタオブジェクトを仮想空間内において移動させる。算出部は、キャラクタオブジェクトの位置から相対的に設定される複数の位置から、立体形状を有する複数の判定領域をそれぞれ所定のルールに従って決定された方向に移動させた場合に、当該判定領域が地形オブジェクトと衝突する衝突位置をそれぞれ算出する。ただし、判定領域は仮想空間において実際に移動させる必要は無く、移動したと仮定した場合に地形オブジェクトを衝突するかどうかが判断され、衝突する場合に衝突位置が算出（取得）される。地形判定部は、複数の衝突位置の分布から、キャラクタオブジェクトの位置から所定範囲内の地形オブジェクトの地形を判定する。ゲーム処理部は、地形判定部によって判定された地形に応じて所定のゲーム処理を行う。たとえば、キャラクタオブジェクトのアニメーションを地形に応じて切り替える。また、キャラクタオブジェクトの移動速度を変化させる。さらに、キャラクタオブジェクトに実行させるアクションを選択するためのグラフィカル・ユーザ・インターフェイスの表示を制御する。
【０００８】
第１の発明によれば、複数の判定領域が地形オブジェクトに衝突する衝突位置から地形オブジェクトの地形を判定するので、地形オブジェクトを構成するポリゴンに動作データを記憶せずに、自動で地形を判定することができる。
【０００９】
第２の発明は、第１の発明に従属し、判定領域は球形状を有する。
【００１０】
第２の発明によれば、判定領域は球形状を有するので、たとえば判定領域を移動させる経路において判定領域の半径の長さに相当する位置に地形オブジェクトが在るかどうかを判定するだけであり、判定処理が簡単である。
【００１１】
第３の発明は、第１または第２の発明に従属し、キャラクタ移動制御部は、プレイヤの操作に基づいてキャラクタオブジェクトの向きをさらに制御する。算出部は、判定領域を、キャラクタオブジェクトの位置に関連付けて設定される開始位置から、キャラクタオブジェクトの進行方向側に決定される目標位置に向かって移動させる場合の衝突位置を算出する。
【００１２】
第３の発明によれば、キャラクタオブジェクトの進行方向における地形を自動的に判定するので、所定の処理を適切に実行することができる。
【００１３】
第４の発明は、第３の発明に従属し、算出部は、所定の判定領域に関して算出される衝突位置から、キャラクタオブジェクトの進行方向側に次の判定領域の目標位置を決定することで、複数の判定領域のそれぞれを移動させた場合の衝突位置をそれぞれ算出する。
【００１４】
第４の発明によれば、前回の判定領域の衝突位置を用いてキャラクタの進行方向における次回の目標位置を決定するので、地形の変化に応じて適切に目標位置を決定することができる。したがって、地形を正確に判定することができる。
【００１５】
第５の発明は、第４の発明に従属し、算出部は、衝突位置から、衝突位置における地形オブジェクトの法線方向とは逆向きに判定領域を第１所定量移動させた位置から、法線方向に垂直かつキャラクタオブジェクトの進行方向となる向きにさらに第２所定量移動させた位置を次の判定領域の目標位置として決定する。
【００１６】
第６の発明は、第４の発明に従属し、算出部は、衝突位置から、衝突位置における地形オブジェクトの法線方向に垂直かつキャラクタオブジェクトの進行方向となる向きに第１所定量移動させた位置から、鉛直下方向へさらに第２所定量移動させた位置を次の判定領域の目標位置として決定する。
【００１７】
第７の発明は、第５または第６の発明に従属し、法線方向は、地形オブジェクトの法線方向とキャラクタオブジェクトの進行方向の真横方向との外積に基づいて再計算される。
【００１８】
第７の発明によれば、キャラクタオブジェクトが進行方向に対して左右方向に傾斜する斜面に立っているような場合にもずれを解消して、進行方向に向かって目標位置を設定することができる。
【００１９】
第８の発明は、第１ないし第７の発明のいずれかに従属し、地形判定部は、複数の衝突位置の分布に基づいて、少なくとも地形の傾きを算出する。ゲーム処理部は、地形判定部によって判定された地形の傾きに応じたアニメーションをするようキャラクタオブジェクトを制御するゲーム処理を行う。
【００２０】
第８の発明によれば、地形の傾きに応じたアニメーションでキャラクタオブジェクトを表示するので、キャラクタオブジェクトの動きに違和感を覚えるのを出来る限り解消することができる。
【００２１】
第９の発明は、第８の発明に従属し、地形判定部は、複数の衝突位置の分布を主成分分析し、当該主成分分析に基づいて地形の傾きを算出する。
【００２２】
第９の発明によれば、主成分分析に基づいて地形の傾きを算出するので、簡単に大凡の地形を判定することができる。
【００２３】
第１０の発明は、第８の発明に従属し、地形判定部は、複数の衝突位置の分布に基づいて回帰直線を算出し、当該直線から地形の傾きを算出する。
【００２４】
第１０の発明によれば、回帰直線を求めることにより、地形の傾きを知ることもできる。
【００２５】
第１１の発明は、第３の発明に従属し、算出部は、判定領域を開始位置から目標位置に向かって移動させた場合の処理結果が所定の条件を満たす場合に、キャラクタオブジェクトの進行方向に当該キャラクタオブジェクトから見下ろす地形が在るかどうかを判断する。たとえば、キャラクタオブジェクトの進行方向に、キャラクタオブジェクトが見下ろすように、崖または壁が在る（配置されている）かどうかが判断される。
【００２６】
第１１の発明によれば、必要に応じて、キャラクタオブジェクトから見下ろす地形が配置されているかどうかを判断することができる。
【００２７】
第１２の発明は、第１１の発明に従属し、算出部は、判定領域が開始位置から目標位置に向かって移動させた場合に地形に衝突する位置が無い場合に、当該目標位置を次の判定領域の開始位置として決定し、当該次の判定領域の開始位置から真下方向に次の目標位置を決定する。
【００２８】
第１３の発明は、第１２の発明に従属し、算出部は、次の判定領域の開始位置から次の目標位置に向かって当該次の判定領域を移動させた場合に地形に衝突する位置が無い場合に、見下ろす地形の側面を判定する第１判定処理を実行する。
【００２９】
第１４の発明は、第１１の発明に従属し、算出部は、複数の判定領域を移動させた場合に算出された複数の衝突位置のうち、キャラクタオブジェクトとの位置関係が所定の関係を有するとき、見下ろす地形の側面を判定する第２判定処理を実行する。
【００３０】
第１５の発明は、仮想空間内に地形オブジェクトを配置する地形配置部と、プレイヤの操作に基づいて、キャラクタオブジェクトを仮想空間内において移動させるキャラクタ移動制御部を備えるゲーム装置のゲーム制御方法であって、（ａ）キャラクタオブジェクトの位置から相対的に設定される複数の位置から、立体形状を有する複数の判定領域をそれぞれ所定のルールに従って決定された方向に移動させた場合に、当該判定領域が地形オブジェクトと衝突する衝突位置をそれぞれ算出するステップと、（ｂ）複数の衝突位置の分布から、キャラクタオブジェクトの位置から所定範囲内の地形オブジェクトの地形を判定するステップと、（ｃ）ステップ（ｂ）において判定した地形に応じて所定のゲーム処理を行うステップを含む、ゲーム制御方法。
【００３１】
第１６の発明は、コンピュータによって実行されるゲームプログラムであって、コンピュータを、仮想空間内に地形オブジェクトを配置する地形配置部と、プレイヤの操作に基づいて、キャラクタオブジェクトを仮想空間内において移動させるキャラクタ移動制御部と、キャラクタオブジェクトの位置から相対的に設定される複数の位置から、立体形状を有する複数の判定領域をそれぞれ所定のルールに従って決定された方向に移動させた場合に、当該判定領域が地形オブジェクトと衝突する衝突位置をそれぞれ算出する算出部と、複数の衝突位置の分布から、キャラクタオブジェクトの位置から所定範囲内の地形オブジェクトの地形を判定する地形判定部と、地形判定部によって判定された地形に応じて所定のゲーム処理を行うゲーム処理部として機能させる、ゲームプログラムである。
【００３２】
第１５および第１６の発明においても、第１の発明と同様に、地形を自動的に判定することができる。
【発明の効果】
【００３３】
この発明によれば、キャラクタオブジェクトの現在位置に基づいて決定される開始位置から所定のルールに従って決定された目標位置に向けて判定オブジェクトを移動させることによって得られた衝突位置に基づいてキャラクタオブジェクトの進行方向における地形オブジェクトの地形を判定するので、自動的に地形を判定することができる。
【００３４】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【図面の簡単な説明】
【００３５】
【図１】図１はゲームシステムの限定しない一例の外観図である。
【図２】図２は図１に示すゲーム装置の電気的な構成の限定しない一例を示すブロック図である。
【図３】図３は図１に示す端末装置の電気的な構成の限定しない一例を示すブロック図である。
【図４】図４は仮想空間に各種のオブジェクトが配置されたシーンを仮想カメラで撮影されたゲーム画面の限定しない一例を示す図解図である。
【図５】図５（Ａ）はプレイヤオブジェクトに設定された判定オブジェクトの開始位置を説明するための図解図であり、図５（Ｂ）は判定オブジェクトの初回の目標位置の決定方法を説明するための図解図であり、図５（Ｃ）は初回の判定オブジェクトの衝突位置を説明するための図解図である。
【図６】図６（Ａ）は２回目の目標位置の決定方法を説明するための図解図であり、図６（Ｂ）は２回目の衝突位置を説明するための図解図である。
【図７】図７（Ａ）は３回目の目標位置の決定方法を説明するための図解図であり、図７（Ｂ）は３回目の衝突位置を説明するための図解図である。
【図８】図８は衝突位置をプレイヤオブジェクトの進行方向に設定した仮想の２次元平面に投射し、主成分分析した結果の一例を示す図解図である。
【図９】図９（Ａ）は平坦面の地形を判定する場合の判定方法を説明するための図解図であり、図９（Ｂ）は上り斜面の地形を判定する場合の判定方法を説明するための図解図である。
【図１０】図１０は垂直に立つ高い壁の地形を判定する場合の判定方法を説明するための図解図である。
【図１１】図１１はプレイヤオブジェクト側に傾く高い壁の地形を判定する場合の判定方法を説明するための図解図である。
【図１２】図１２は低い壁の地形を判定する場合の判定方法を説明するための図解図である。
【図１３】図１３は低い壁の地形を判定する場合の判定方法を説明するための他の図解図である。
【図１４】図１４は低い壁の地形を判定する場合の判定方法を説明するためのその他の図解図である。
【図１５】図１５（Ａ）は衝突位置の法線を修正しない場合において左右に傾斜する地面に垂直に立っているプレイヤオブジェクトを上方から見たときの衝突位置を示す図解図であり、図１５（Ｂ）は衝突位置の法線を修正しない場合において左右に傾斜する地面に垂直に立っているプレイヤオブジェクトを背面から見たときの衝突位置を示す図解図である。
【図１６】図１６（Ａ）は衝突位置の法線を修正した場合において左右に傾斜する地面に垂直に立っているプレイヤオブジェクトを上方から見たときの衝突位置を示す図解図であり、図１６（Ｂ）は衝突位置の法線を修正した場合において左右に傾斜する地面に垂直に立っているプレイヤオブジェクトを背面から見たときの衝突位置を示す図解図である。
【図１７】図１７（Ａ）はプレイヤオブジェクトが崖に立っている場合に地形判定処理を開始した当初の状況を説明するための図解図であり、図１７（Ｂ）は崖側面判定処理を実行するかどうかを判定する方法を説明するための図解図である。
【図１８】図１８（Ａ）は崖側面判定処理を開始したときの初回の判定オブジェクトの開始位置および目標位置を決定する方法を説明するための図解図であり、図１８（Ｂ）は初回における衝突位置を説明するための図解図である。
【図１９】図１９（Ａ）は図１８（Ｂ）に続いて崖側面判定処理における２回目の判定オブジェクトの開始位置および目標位置を決定する方法を説明するための図解図であり、図１９（Ｂ）は２回目における衝突位置を説明するための図解図である。
【図２０】図２０（Ａ）は拡張崖側面判定処理を実行するかどうかを判断する方法を説明するための図解図であり、図２０（Ｂ）は拡張崖側面判定処理の初回における判定オブジェクトの開始位置および目標位置を決定する方法を説明するための図解図である。
【図２１】図２１（Ａ）は拡張崖側面判定処理の２回目における判定オブジェクトの開始位置および目標位置を決定する方法を説明するための図解図であり、図２１（Ｂ）は３回目における判定オブジェクトの開始位置および目標位置を決定する方法および衝突位置を説明するための図解図である。
【図２２】図２２は４回目における判定オブジェクトの開始位置および目標位置を決定する方法および衝突位置を説明するための図解図である。
【図２３】図２３は図２に示すメインメモリのメモリマップの限定しない一例を示す図である。
【図２４】図２４は図２３に示すデータ記憶領域の限定しない一例を示す図である。
【図２５】図２５は図２に示すゲーム装置のＣＰＵの全体処理の限定しない一例を示すフロー図である。
【図２６】図２６は図２に示すゲーム装置のＣＰＵの地形判定処理の限定しない一例を示すフロー図である。
【図２７】図２７は図２に示すゲーム装置のＣＰＵの地形表面情報取得処理の限定しない一例の一部を示すフロー図である。
【図２８】図２８は図２に示すゲーム装置のＣＰＵの地形表面情報取得処理の他の一部であって、図２７に後続するフロー図である。
【図２９】図２９は図２に示すゲーム装置のＣＰＵの地形表面情報取得処理のその他の一部であって、図２７に後続するフロー図である。
【図３０】図３０は図２に示すゲーム装置のＣＰＵの崖側面判定処理の限定しない一例を示すフロー図である。
【図３１】図３１は図２に示すゲーム装置のＣＰＵの拡張崖側面判定処理の限定しない一例の一部を示すフロー図である。
【図３２】図３２は図２に示すゲーム装置のＣＰＵの拡張崖側面判定処理の他の一部であって、図３１に後続するフロー図である。
【発明を実施するための形態】
【００３６】
以下、図面を参照して、本発明の一実施例に係るゲームシステム１０について説明する。図１に示すゲームシステム１０は、据置型のゲーム装置１２および可搬型の端末装置１４を含む。また、ゲームシステム１０は、テレビジョン受像器等に代表される据置型のディスプレイ装置（以下、「テレビ」と記載する）１６を含み、接続コードを介して、ゲーム装置１２とテレビ１６が接続される。このゲームシステム１０は、端末装置１４を用いたゲーム操作に基づいて、ゲーム装置１２においてゲーム処理を実行し、ゲーム処理によって得られるゲーム画像をテレビ１６および／または端末装置１４に表示するものである。
【００３７】
図示は省略するが、ゲーム装置１２には、当該ゲーム装置１２に対して交換可能に用いられる情報記憶媒体の一例である光ディスクが脱着可能に挿入される。光ディスクには、ゲーム装置１２において実行されるための情報処理プログラム（典型的にはゲームプログラムのようなアプリケーションプログラム）が記憶されている。ゲーム装置１２は、光ディスクに記憶されている情報処理プログラムを読み出して実行することによって情報処理（ゲーム処理）を実行する。
【００３８】
テレビ１６は、ゲーム装置１２において実行されるゲーム処理によって得られるゲーム画像を表示する。テレビ１６はスピーカ１６ａ（図２）を有しており、スピーカ１６ａは、上記ゲーム処理の結果得られるゲーム音声を出力する。
【００３９】
なお、他の実施例では、ゲーム装置１２と据置型の表示装置とは一体となっていてもよい。また、ゲーム装置１２とテレビ１６との通信は無線通信であってもよい。
【００４０】
端末装置１４は、少なくとも、ゲーム装置１２との間でデータを送受信する。ユーザ（プレイヤ）は、端末装置１４を手に持って動かしたり、端末装置１４を自由な位置に配置したりして使用することが可能である。端末装置１４は、タッチパネル５６、アナログスティック５８および操作ボタン６０のような入力手段と、ＬＣＤ６２のような表示手段を備える。たとえば、Ｂｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いた無線通信によってゲーム装置１２と通信可能である。ただし、端末装置１４とゲーム装置１２とは有線で接続されてもよい。端末装置１４は、ゲーム装置１２で生成された画像（たとえばゲーム画像）のデータをゲーム装置１２から受信し、受信した画像をＬＣＤ６２に表示する。また、端末装置１４は、自機に対して行われた操作の内容を表す操作データをゲーム装置１２に送信する。
【００４１】
図２は、ゲーム装置１２の電気的な構成を示すブロック図である。ゲーム装置１２は、ＣＰＵ２０、システムＬＳＩ２２、外部メインメモリ２６、ＲＯＭ／ＲＴＣ２８、およびＡＶ−ＩＣ３６等を有する。
【００４２】
ＣＰＵ２０は、光ディスクに記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ２０は、システムＬＳＩ２２に接続される。このシステムＬＳＩ２２には、ＣＰＵ２０の他、外部メインメモリ２６、ＲＯＭ／ＲＴＣ２８およびＡＶ−ＩＣ３６が接続される。システムＬＳＩ２２は、それに接続される各構成要素間におけるデータ転送の制御、表示すべき画像の生成、外部情報処理装置からのデータの取得等の処理を行う。
【００４３】
揮発性の外部メインメモリ２６は、光ディスクから読み出されたゲームプログラムや、フラッシュメモリ２４から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ２０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ２８は、ゲーム装置１２の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ）とを有する。
【００４４】
なお、光ディスクから読み出されたプログラムデータやテクスチャデータ等は、後述する内部メインメモリ２２ｅまたは外部メインメモリ２６に書き込まれる。
【００４５】
システムＬＳＩ２２には、入出力プロセッサ（Ｉ／Ｏプロセッサ）２２ａ、ＧＰＵ２２ｂ、ＤＳＰ２２ｃ、ＶＲＡＭ２２ｄ、および内部メインメモリ２２ｅが設けられる。図示は省略するが、これらの構成要素２２ａ−２２ｅは内部バスによって互いに接続される。
【００４６】
ＧＰＵ２２ｂは、描画手段の一部を形成し、ＣＰＵ２０からのグラフィクスコマンド（作画命令）に従って画像データを生成する。ただし、ＶＲＡＭ２２ｄに、メインメモリ（２２ｅ、２６）から読み出したポリゴンデータやテクスチャデータ等のデータが記憶され、ＧＰＵ２２ｂは、そのデータを用いて画像データを生成する。この実施例においては、ゲーム装置１２は、テレビ１６に表示するゲーム画像（以下、「テレビ用ゲーム画像」と呼ぶ）の画像データを生成する。
【００４７】
ＤＳＰ２２ｃは、オーディオプロセッサとして機能し、内部メインメモリ２２ｅや外部メインメモリ２６に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。なお、この実施例においては、ゲーム装置１２は、テレビ１６のスピーカ１６ａから出力するゲーム音声（以下、「テレビ用ゲーム音声」と呼ぶ）の音声データを生成する。
【００４８】
上記のように、ゲーム装置１２において生成される画像および音声のうちで、テレビ１６において出力される画像および音声（効果音や音楽なども含む。以下、同じ。）のデータは、ＡＶ−ＩＣ３６によって読み出される。ＡＶ−ＩＣ３６は、読み出した画像データを、ＡＶコネクタ３８を介してテレビ１６に出力するとともに、読み出した音声データを、テレビ１６に内蔵されるスピーカ１６ａに出力する。これによって、テレビ１６に画像が表示されるとともにスピーカ１６ａから音声が出力される。
【００４９】
入出力プロセッサ２２ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部情報処理装置からのデータのダウンロードを実行したりする。また、入出力プロセッサ２２ａは、フラッシュメモリ２４およびコーデックＬＳＩ３０に接続される。また、コーデックＬＳＩ３０は端末通信モジュール３２に接続され、端末通信モジュール３２にはアンテナ３４が接続される。
【００５０】
ＣＰＵ２０はゲームプログラムを実行することにより、フラッシュメモリ２４に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ２４には、ゲーム装置１２と外部情報処理装置との間で送受信されるデータの他、ゲーム装置１２を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５１】
なお、図示は省略するが、入出力プロセッサ２２ａは、ネットワーク通信モジュールを用いてインターネット等のネットワークに接続し、ネットワークに接続される外部情報処理装置（たとえば他のゲーム装置または各種サーバ等）と通信する（データを送受信する）ことができる。
【００５２】
また、ゲーム装置１２は、端末装置１４との間でデータを送受信することが可能である。入出力プロセッサ２２ａは、端末装置１４へデータを送信する場合、送信するデータをコーデックＬＳＩ３０へ出力する。コーデックＬＳＩ３０は、入出力プロセッサ２２ａからのデータに対して所定の圧縮処理を行う。端末通信モジュール３２は、端末装置１４との間で無線通信を行う。したがって、コーデックＬＳＩ３０によって圧縮されたデータは、端末通信モジュール３２によってアンテナ３４を介して端末装置１４へ送信される。この実施例では、コーデックＬＳＩ３０は、たとえばＨ２６４規格といった高効率の圧縮技術を用いてデータを圧縮する。
【００５３】
また、ゲーム装置１２は、端末装置１４から各種データを受信（受付）可能である。この実施例では、端末装置１４は、操作データ、画像データ、および音声データを送信する。端末装置１４から送信される各データはアンテナ３４を介して端末通信モジュール３２によって受信される。ここで、端末装置１４からの画像データおよび音声データは、ゲーム装置１２から端末装置１４に送信されるデータと同様の圧縮処理が施されている。
【００５４】
したがって、これら画像データおよび音声データについては、端末通信モジュール３２からコーデックＬＳＩ３０に送られ、コーデックＬＳＩ３０によって伸張処理が施されて入出力プロセッサ２２ａに出力される。
【００５５】
一方、端末装置１４からの操作データに関しては、画像や音声に比べてデータ量が少ないので、圧縮処理が施されていなくともよい。また、必要に応じて暗号化がされていてもよいし、されていなくともよい。操作データは、端末通信モジュール３２で受信された後、コーデックＬＳＩ３０を介して入出力プロセッサ２２ａに出力される。入出力プロセッサ２２ａは、端末装置１４から受信したデータを、内部メインメモリ２２ｅまたは外部メインメモリ２６のバッファ領域に記憶（一時記憶）する。
【００５６】
なお、ゲーム装置１２の構成は限定される必要は無い。たとえば、拡張機器を接続可能な構成とすることもできる。
【００５７】
図３は、端末装置１４の電気的な構成を示すブロック図である。図３に示すように、端末装置１４は、図１に示した構成の他、ユーザインタフェースコントローラ（ＵＩコントローラ）５０、タッチパネルコントローラ５４、コーデックＬＳＩ５２、スピーカ６６、サウンドＩＣ６４、マイク６８、無線モジュール７０、アンテナ７２、およびフラッシュメモリ７４を備える。これらの電子部品は、電子回路基板上に実装されてハウジング内に収納される。
【００５８】
ＵＩコントローラ５０は、各種の入出力部に対するデータの入出力を制御するための回路である。このＵＩコントローラ５０は、タッチパネルコントローラ５４、アナログスティック５８、および操作ボタン６０に接続される。また、ＵＩコントローラ５０は、コーデックＬＳＩ５２に接続される。
【００５９】
タッチパネルコントローラ５４は、タッチパネル５６に接続され、タッチパネル５６の制御を行う回路である。タッチパネルコントローラ５４は、タッチパネル５６からの信号に基づいて所定の形式のタッチ位置データを生成してＵＩコントローラ５０へ出力する。タッチ位置データは、タッチパネル５６の入力面において入力が行われた位置（タッチ位置）の座標を表す。
【００６０】
アナログスティック５８は、ユーザの指で操作されるスティック部がスライドした（または傾倒した）方向および量を表すスティックデータをＵＩコントローラ５０へ出力する。また、操作ボタン６０は、各種の操作ボタンないしキースイッチに対する入力状況（押下されたか否か）を表す操作ボタンデータをＵＩコントローラ５０へ出力する。
【００６１】
ＵＩコントローラ５０は、上記の各構成要素から受け取ったタッチ位置データ、スティックデータ、および操作ボタンデータを含む操作データをコーデックＬＳＩ５２に出力する。
【００６２】
コーデックＬＳＩ５２は、ゲーム装置１２へ送信するデータに対する圧縮処理、および、ゲーム装置１２から送信されたデータに対する伸張処理を行う回路である。コーデックＬＳＩ５２には、ＬＣＤ６２、サウンドＩＣ６４、無線モジュール７０、およびフラッシュメモリ７４が接続される。また、コーデックＬＳＩ５２はＣＰＵ５２ａと内部メモリ５２ｂを含む。
【００６３】
無線モジュール７０にはアンテナ７２が接続されており、無線モジュール７０はアンテナ７２を介してゲーム装置１２へ送信データを送信する。無線モジュール７０は、ゲーム装置１２の端末通信モジュール３２と同様の機能を有している。上述したように、端末装置１４からゲーム装置１２へ送信される送信データには、操作データ、画像データ、および音声データが含まれる。
【００６４】
なお、この実施例の端末装置１４は、タッチパネル５６、アナログスティック５８、および操作ボタン６０といった操作手段を備えるが、他の実施例においては、これらの操作手段に代えて、または、これらの操作手段とともに、他の操作手段を備える構成であってもよい。たとえば、端末装置１４の動き（位置や姿勢、あるいは、位置や姿勢の変化を含む）を算出するためのセンサとして、磁気センサ、加速度センサ、およびジャイロセンサの少なくとも１つを備えるようにしてよい。
【００６５】
また、端末装置１４は、カメラおよびマイク６８を備える構成であるが、他の実施例においては、カメラおよびマイク６８を備えていなくてもよく、また、いずれか一方のみを備えていてもよい。
【００６６】
情報処理装置の一例であるゲーム装置１２は、画像処理装置としても機能し、画像データを生成および出力（表示）する。簡単に説明すると、ＧＰＵ２２ｂは、ＣＰＵ２０の指示の下、３次元の仮想空間に各種のオブジェクトをモデリングする。つまり、各種のオブジェクトが仮想空間に作成ないし配置され、或る情景（シーン）が生成される。このシーンを仮想カメラで撮影した（視点から見た）画像がテレビ１６（モニタ）に表示される。具体的な画像処理について説明すると、まず、３次元（ワールド座標系）の仮想空間に或るシーンが生成され、仮想空間に生成されたシーンが仮想カメラから捉えた座標（カメラ座標）系に変換（透視変換）される。たとえば、視点から見た画像が仮想のスクリーン上に透視投影される。次に、クリッピングおよび陰面消去処理が施される。続いて、シェーディングが施されることにより、オブジェクト表面の明るさ（陰影）が表現される。さらに、シャドーイング（影付け）が施されることにより、オブジェクトによって生じる影が表現される。そして、テクスチャマッピングが施される。このようにして２次元画像が生成（描画）され、生成された２次元画像に対応する２次元画像データがＡＶ−ＩＣ３６およびＡＶコネクタ３８を介してテレビ１６に出力される。なお、３次元のデータから２次元画像データを生成することをレンダリングという。
【００６７】
図４は、この実施例の仮想のゲームのゲーム画面１００の一例を示す。このゲーム画面１００には、キャラクタオブジェクト（プレイヤオブジェクト１０２）および地形オブジェクト１０４が含まれる。図４では省略するが、ゲーム画面１００（仮想空間）には、敵オブジェクトなどの他のキャラクタオブジェクトおよびアイテムオブジェクトも含まれる。
【００６８】
プレイヤオブジェクト１０２は、プレイヤの操作に従って、仮想空間内において向きを変える、仮想空間内を移動する、武器のようなアイテムを使うなどの任意のアクションを実行する。したがって、たとえば、プレイヤオブジェクト１０２は、敵オブジェクトと闘うことがあり、また、アイテムオブジェクトを取得することもある。また、敵オブジェクトはノンプレイヤオブジェクトであり、ノンプレイヤオブジェクトは、プレイヤの操作に拘わらず、コンピュータ（ＣＰＵ２０）の制御に従って、仮想空間内を移動するなどの任意のアクションを実行する。地形オブジェクト１０４は、背景オブジェクトなどとも呼ばれ、仮想空間に配置される地形のオブジェクトである。この実施例においては、地形とは、平坦な地面、でこぼこの地面、坂、床、木、草、花、建物、階段、洞窟、崖、壁（段差）などを意味する。
【００６９】
上述したように、この実施例の仮想空間は３次元の仮想空間であり、この仮想空間には、ワールド座標系が設定されている。たとえば、ワールド座標系のＸ軸およびＹ軸により、仮想空間における２次元平面（水平面）および水平方向における位置が表現され、また、ワールド座標系のＺ軸により、仮想空間における高さ方向の位置が表現される。
【００７０】
このようなゲーム装置１２では、プレイヤオブジェクト１０２が移動する際のアニメーションを地形に応じて変化させたり、プレイヤオブジェクト１０２の周辺の地形に応じてアクションを選択させたりする。
【００７１】
たとえば、プレイヤオブジェクト１０２が平坦な地面を移動する（歩行する、走るなど）場合のアニメーションと、プレイヤオブジェクト１０２が坂を上る場合のアニメーションと、プレイヤオブジェクト１０２が坂を下る場合のアニメーションはそれぞれ異なるため、地形に応じて適切にアニメーションを選択して、プレイヤオブジェクト１０２を表示する必要がある。
【００７２】
たとえば、プレイヤオブジェクト１０２は、平坦な地面の上を移動する場合には、直立して歩く、または、少し前傾姿勢で走る。また、プレイヤオブジェクト１０２は、坂を上る場合には、前傾姿勢で歩く、または前傾姿勢で走り、坂の勾配に応じて、前傾の角度が変化される。さらに、プレイヤオブジェクト１０２は、坂を下る場合には、後傾姿勢で歩く、または、後傾姿勢で走り、坂の勾配が大きい場合には、すべり降りる、または、坂の地面（斜面）に掴まって降りる。さらにまた、プレイヤオブジェクト１０２は、壁または崖或いは木に沿って上下に移動する場合には、壁面または崖の側面或いは木に掴まって登り降りする。
【００７３】
また、プレイヤオブジェクト１０２が坂を上るまたは坂を下る場合に、坂の勾配（傾きの大小）によって、プレイヤオブジェクト１０２の移動速度を変化させる必要もある。また、地形が坂から比較的平坦な地面（水平面）に変化する場合には、その変化の前後において、アニメーションを適切に切り替える必要がある。
【００７４】
さらに、プレイヤオブジェクト１０２の進行方向に、プレイヤオブジェクト１０２が見上げるように、崖または壁がある場合には、その崖または壁を上るかどうかをプレイヤに選択させるためのグラフィカル・ユーザ・インターフェイス（ＧＵＩ）を表示する必要がある。これは、プレイヤオブジェクト１０２の前に木がある場合も同様である。また、プレイヤオブジェクト１０２の前方に、プレイヤオブジェクト１０２が見下ろすように、崖または壁がある場合には、その崖または壁を下りるかどうかをプレイヤに選択させるためのＧＵＩを表示する必要もある。
【００７５】
一般的なゲーム装置１２では、地形オブジェクト１０４を構成するポリゴンに対応してプレイヤオブジェクト１０２がすべき動作を示す動作コード、地形ポリゴンの種類を示す種類コードなどを含む制御コードを記憶しておき、記憶された制御コードを参照して、プレイヤオブジェクト１０２のアニメーションを切り替えたり、プレイヤオブジェクト１０２に崖または壁を上ることまたは下りること（プレイヤオブジェクト１０２のアクション）を選択させるためのＧＵＩを表示したりするようにしてある。
【００７６】
しかし、地形オブジェクト１０４を構成するポリゴンに対応して上記の制御データを記憶する場合には、その作業が面倒であり、仮想空間に生成されるゲームフィールド（マップ）が比較的大きい場合には、多大な労力および作業コストを要する。また、メモリ容量が膨大になる。また、このような場合には、動く地形に対応することができなという問題がある。たとえば、大きな木が立っている場合には、プレイヤオブジェクト１０２の進行方向に壁があると判断することができるが、この木が倒れた場合に、プレイヤオブジェクト１０２の進行方向に壁が無いと判断することができない。
【００７７】
そこで、この実施例では、プレイヤオブジェクト１０２の進行方向の地形を所定のアルゴリズムに従って判定するようにしてある。つまり、プレイヤオブジェクト１０２の進行方向における地面の傾きおよび高さが算出される。また、プレイヤオブジェクト１０２の進行方向において、プレイヤオブジェクト１０２が見下ろす崖（壁）の有無が判定される。
【００７８】
以下、明細書においては、プレイヤオブジェクト１０２の前方に、プレイヤオブジェクト１０２が乗り越える比較的低い壁ないし段差が在る場合、または、プレイヤオブジェクト１０２が見上げる崖、壁または木が在る場合には、単に、プレイヤオブジェクト１０２の前方（進行方向）に壁が在ると説明する。また、プレイヤオブジェクト１０２の前方に、プレイヤオブジェクト１０２から見下ろすように崖または壁が在る（配置される）場合には、単に、プレイヤオブジェクト１０２の前方（進行方向）に崖が在ると説明する。
【００７９】
また、この明細書において、進行方向とは、プレイヤオブジェクト１０２が移動している方向、プレイヤオブジェクト１０２が停止しているときにプレイヤオブジェクト１０２またはプレイヤオブジェクト１０２の顔が向いている方向、または、ゲームの制約などによりプレイヤオブジェクト１０２が進むべき方向を意味する。
【００８０】
ただし、後述するように、地形を判定する場合には、判定オブジェクト１２０が地形オブジェクト１０４と衝突した位置に基づいて移動方向が推測される場合もある。
【００８１】
たとえば、プレイヤオブジェクト１０２が少し起伏のある地面の上を移動する場合において、図５−図７を用いて、地形を判定する方法を説明する。以下、具体的に説明するが、地形を判定するためのオブジェクト（以下、「判定オブジェクト１２０」と呼ぶ）１２０は、３次元の仮想空間において球の形状を有している。ただし、図５−図７（他の図も同様）は、プレイヤオブジェクト１０２を右側面方向から見た図であるため、判定オブジェクト１２０は円で示される。
【００８２】
この実施例では、判定オブジェクト１２０は、後述する崖側面判定処理および拡張崖側面判定処理を除いて、所定回数投げられる。以降、地形を判定のために判定オブジェクト１２０を移動させた場合の衝突位置の計算を行うことを、投げると称することとする。また、判定オブジェクト１２０が投げられる場合の開始位置は、各回において異なる。さらに、判定オブジェクト１２０は、開始位置から目標位置に向けて投げられるが、初回の目標位置は、初回の開始位置に対して固定的に決定され、２回目以降の目標位置は、基本的に、少なくとも前回の衝突位置に基づいて決定される。
【００８３】
図５（Ａ）は、プレイヤオブジェクト１０２に設定される判定オブジェクト１２０の開始位置Ｐｍ（ｍ＝１，２，３，４，５）を示す。ただし、変数ｍは、判定オブジェクト１２０を投げる回数および順番を示す。上述したように、開始位置Ｐ１−Ｐ５の各々は、予め、プレイヤオブジェクト１０２の位置（たとえば、足元の位置）から相対的に設定されている。たとえば、プレイヤオブジェクト１０２の身長、判定オブジェクト１２０の大きさおよび判定オブジェクト１２０を投げる総数に応じて、プレイヤオブジェクト１０２の下から上に向かう順番で開始位置Ｐ１−Ｐ５が設定される。
【００８４】
この実施例では、仮想空間におけるプレイヤオブジェクト１０２の身長が１８０ｃｍに設定され、判定オブジェクト１２０の直径がプレイヤオブジェクト１０２の胴周りの大きさ程度（直径が６０ｃｍ）に設定され、判定オブジェクト１２０を投げる総数は５回に設定されており、プレイヤオブジェクト１０２の足元の位置（足の裏）から高さ約４０ｃｍのところに初回の開始位置Ｐ１が設定される。他の開始位置Ｐ２−Ｐ５は、初回の開始位置Ｐ１から判定オブジェクト１２０の半径ずつ上方にずらすように設定される。ただし、開始位置Ｐ１−Ｐ５が設定される位置は一例であり、限定される必要はない。
【００８５】
このように、開始位置Ｐ１−Ｐ５が設定されるのは、この実施例では、プレイヤオブジェクト１０２の足元に近い位置から進行方向に向かって次第に離れるように、各回において判定オブジェクト１２０を移動させるようにしてあるためである。
【００８６】
以下の図面においては、判定オブジェクト１２０の開始位置はＰｍで示される円の中心であり、判定オブジェクト１２０の目標位置はＱｍで示される円の中心であり、そして、判定オブジェクト１２０が地形オブジェクト１０４（の表面）に衝突したときの判定オブジェクト１２０の位置はＲｍで示される円の中心である。ただし、判定オブジェクト１２０が地形オブジェクト１０４に衝突している位置（以下、「衝突位置」という）は、判定オブジェクト１２０の外周面と地形オブジェクト１０４の表面（ここでは、地面）が接する位置（点）であり、Ｃｍで示される。また、図５（Ｂ）−図７（Ｂ）に示す例では、簡単のため、判定オブジェクト１２０が３回投げられる場合について説明する。
【００８７】
図５（Ｂ）に示すように、初回では、プレイヤオブジェクト１０２に対して予め決定された開始位置Ｐ１に対して目標位置（終了位置）Ｑ１が決定され、開始位置Ｐ１から目標位置Ｑ１に向けて判定オブジェクト１２０が投げられる（移動される）。ただし、実際に判定オブジェクト１２０が移動される必要はなく、また、判定オブジェクト１２０が衝突することが判断されれば、その後、目標位置Ｑｍまで移動させる場合の計算は不要である。
【００８８】
初回では、目標位置Ｑ１は、開始位置Ｐ１に対して所定のルール（第１のルール）に従って設定される。具体的には、初回の目標位置Ｑ１は、開始位置Ｐ１からプレイヤオブジェクト１０２の進行方向から所定角度θ下向きに所定距離ｄ１だけ移動した位置に設定される。この実施例では、所定角度θおよび所定距離ｄ１は、シミュレーション（試験）等の結果に基づいて予め決定される。
【００８９】
開始位置Ｐ１から目標位置Ｑ１に判定オブジェクト１２０を移動させた場合に、判定オブジェクト１２０が地形オブジェクト１０４（の表面）に衝突するかどうかが判断される。判定オブジェクト１２０が地形オブジェクト１０４に衝突することが判断されると、図５（Ｂ）に示す衝突位置Ｃ１の３次元座標およびその関連情報がメモリ（２２ｅ，２６）に記憶される。以下、判定オブジェクト１２０が地形オブジェクト１０４に衝突する場合において同じである。
【００９０】
ただし、判定オブジェクト１２０が地形オブジェクト１０４に衝突するかどうかは、判定オブジェクト１２０の形状（ポリゴン）が地形オブジェクト１０４の形状（ポリゴン）に接触するかどうかで判断される。
【００９１】
また、関連情報は、衝突位置Ｃ１（他の衝突位置Ｃｍも同様）における地形オブジェクト１０４を構成するポリゴンの法線ベクトルおよび当該ポリゴンの表面情報である。表面情報は必要に応じて設定され、たとえば、プレイヤオブジェクト１０２が地形オブジェクト１０４の表面に掴まることを禁止するかどうかの情報である。ゲームの内容によっては、ゲームの進行の都合上、プレイヤオブジェクト１０２に地形オブジェクト１０４の表面を掴ませたくない場合がある。たとえば、プレイヤオブジェクト１０２が緩やかな斜面上を移動する場合に、プレイヤオブジェクト１０２が斜面を掴んで上るアニメーションで表示されるのは不自然になるため、そのようなアニメーションを避けたい場合がある。また、単に、プレイヤオブジェクト１０２に地形オブジェクト１０４の表面を掴ませたくない場合もある。したがって、表面情報を設定することにより、ゲームの演出上避けたいアニメーションを回避することができる。
【００９２】
衝突位置Ｃ１の３次元座標およびその関連情報がメモリ（２２ｅ，２６）に記憶されると、この衝突位置Ｃ１に基づいて、判定オブジェクト１２０の２回目の目標位置Ｑ２が所定のルール（第１のルールとは異なる第２のルール）に従って決定される。つまり、この実施例では、２回目以降の判定オブジェクト１２０の目標位置Ｑｍは前回の衝突位置Ｃｍ−１に基づいて決定される。
【００９３】
ただし、後で詳細に説明するように、判定オブジェクト１２０が地形オブジェクト１０４に衝突しない場合には、プレイヤオブジェクト１０２の進行方向に、プレイヤオブジェクト１０２の身長（高さ）程度の壁（段差）があるかどうかを判定するために所定のルール（第３のルール）に従って目標位置Ｑｍ決定される。または、判定オブジェクト１２０が地形オブジェクト１０４に衝突しない場合には、プレイヤオブジェクト１０２の進行方向に崖が有るかどうかを判定するための判定処理を実行するかどうかを判定するために所定のルール（第４のルール）に従って目標位置Ｑｍが決定される。
【００９４】
図６（Ａ）に示すように、判定オブジェクト１２０の２回目の目標位置Ｑ２を決定する場合には、まず、衝突位置Ｃ１から延びる地面の法線ベクトルｎが取得される。法線ベクトルｎは、地形オブジェクト１０４を構成するポリゴンに対応付けて予め記憶されており、衝突位置Ｃ１を含むポリゴンに対応する法線ベクトルｎが取得される。なお、法線ベクトルｎはポリゴンに直交する方向として算出することもできる。予め記憶する場合には、あえてポリゴンに直交しない方向を法線ベクトルとして記憶しておくことも可能である。
【００９５】
なお、図面では、法線ベクトルｎおよびこの法線ベクトルｎとは逆向きのベクトル（以下、「逆方向ベクトル」という）ｎ´を分かり易く示すために、各ベクトルの長さ（大きさ）を判定オブジェクト１２０の直径程度の長さで示してあるが、実際には、法線ベクトルｎは大きさが１の単位ベクトルである。ただし、法線ベクトルｎの大きさは、仮想空間における大きさである。
【００９６】
次に、逆方向ベクトルｎ´を算出し、算出した逆方向ベクトルｎ´の終点から、当該逆方向ベクトルｎ´に垂直であり、プレイヤオブジェクト１０２の進行方向に向かうように所定距離ｄ２だけ移動した位置が次の目標位置Ｑ２に決定される。所定距離ｄ２もまた、所定距離ｄ１と同様にシミュレーション等により経験的に決定された値である。
【００９７】
次の目標位置Ｑ２が決定されると、２回目の開始位置Ｐ２から目標位置Ｑ２に向かって、判定オブジェクト１２０が投げられる。図６（Ｂ）に示すように、判定オブジェクト１２０が位置Ｒ２で地形オブジェクト１０４（地面）に衝突する。上述したように、この衝突位置Ｃ２に基づいて次の目標位置Ｑ３が決定される。
【００９８】
図７（Ａ）に示すように、判定オブジェクト１２０の３回目の目標位置Ｑ３を決定する場合には、関連情報として取得された衝突位置Ｃ２から延びる地面の法線ベクトルｎとは逆向きの逆方向ベクトルｎ´が算出される。そして、逆方向ベクトルｎ´の終点から、当該逆方向ベクトルｎ´に垂直であり、プレイヤオブジェクト１０２の進行方向に向かうように所定距離ｄ２だけ移動した位置が次の目標位置Ｑ３に決定される。
【００９９】
ただし、３回目以降の目標位置Ｑｍを決定する場合には、後述するように、追加の開始位置Ｐｍから追加の目標位置Ｑｍに向けて判定オブジェクト１２０を移動させる場合を除いて、プレイヤオブジェクト１０２の進行方向は、前々回の衝突位置Ｃｍ−２および前回の衝突位置Ｃｍ−１から推測される方向である。具体的には、推測される進行方向は、前々回の衝突位置Ｃｍ−２（ここでは、衝突位置Ｃ１）を始点とし、前回の衝突位置Ｃｍ−１（ここでは、衝突位置Ｃ２）を終点とするベクトルが示す方向である。
【０１００】
このように推測される進行方向を使用するのは、地形の変化によって、プレイヤオブジェクト１０２の現在位置における移動方向と、プレイヤオブジェクト１０２が前進した場合の移動方向とが変化する場合があるためである。
【０１０１】
次の目標位置Ｑ３が決定されると、３回目の開始位置Ｐ３から目標位置Ｑ３に向かって、判定オブジェクト１２０が投げられる。図７（Ｂ）に示すように、判定オブジェクト１２０は位置Ｒ３で地形オブジェクト１０４（地面）に衝突する。
【０１０２】
図示および説明は省略するが、４回目および５回目についても、同様に、前回の衝突位置Ｃ３およびＣ４に基づいて目標位置Ｑ４およびＱ５が決定され、開始位置Ｐ４およびＰ５のそれぞれから判定オブジェクト１２０が投げられ、衝突位置Ｃ４およびＣ５が得られる。
【０１０３】
判定オブジェクト１２０が所定回数投げられると、検出されたすべての衝突位置（Ｃ１，Ｃ２，Ｃ３，Ｃ４，Ｃ５）に基づいて、プレイヤオブジェクト１０２の進行方向における地面の傾きおよび高さが算出される。この実施例では、図８に示すように、プレイヤオブジェクト１０２の進行方向に延びる軸をＸ軸とし、プレイヤオブジェクト１０２の上方向に延びる軸をＹ軸とする２次元平面が有ると仮定し、この２次元平面に、検出されたすべての衝突位置（Ｃ１，Ｃ２，Ｃ３，Ｃ４，Ｃ５）が投影（プロット）される。これらのプロットされた２次元の点情報から地面の傾き（角度）が算出される。
【０１０４】
この実施例では、プロットされた点（衝突位置）のＸ成分およびＹ成分における主成分分析が求められる。なお、本来、主成分分析は、多変量のデータをより低次元の情報に置き換え、新しい指標となるようデータの解釈を行うための手法である。主成分を求めるためには、プロットされた複数の点の重心Ｇを通る直線であり、各点からこの直線との距離の２乗総和が最小になる直線を決定すればよい。主成分分析の結果として、第１主成分と第２主成分が得られると、プロットした各点について、主成分スコア（Ｐｘ，Ｐｙ）という指標が得られる。この主成分スコア（Ｐｘ，Ｐｙ）は、第１主成分を横軸とし、第２主成分を縦軸とし、第１主成分の軸と第２主成分の軸とが交差する点を原点とした場合において、上記の２次元平面に投影された各点を第１主成分の軸と第２主成分の軸を基準に表現したものである。
【０１０５】
また、２次元の点のデータに対して主成分分析を行なう場合、各点に対しての傾きａを取得できることが知られている。数学的には、分散共分散行列に対する固有値分解を行なうことで主成分分析結果が得られる。傾きａは、主成分分析により算出される１次関数（ｙ＝ａｘ＋ｂ）の傾きであり、数１に示すように、各主成分スコアの比として求められる。ただし、傾きａの範囲は、−１以上１以下（−１≦ａ≦１）である。
【０１０６】
［数１］
傾きａ＝Ｐｘ／Ｐｙ
数１から分かるように、主成分スコアＰｙが０の場合には、発散するので傾きａは求められない。この場合、主成分スコアＰｘのみが高いため、傾きａが水平に近いと判断することができる。逆に、主成分スコアＰｘが０に近く、主成分スコアＰｙのみが高い場合には、傾きａが垂直に近いと判断することができる。
【０１０７】
たとえば、傾きａが０．２未満であれば、地形が平坦な地面であることが判断される。また、傾きａが０．３以上０．５未満であれば、地形が緩やかな上り坂であることが判断される。さらに、傾きａが０．５以上０．８未満であれば、地形が急な上り坂であることが判断される。さらにまた、傾きａが０．８以上であれば、地形が壁であることが判断される。ただし、傾きａがマイナスの値を示す場合には、下り坂または地形がプレイヤオブジェクト１０２側に傾斜する壁または洞窟であると判断される。
【０１０８】
なお、後述するプレイヤオブジェクト１０２の進行方向に崖が在ることが判定された場合には、傾きａが正の数であれば、プレイヤオブジェクト１０２側に崖の側面が浸食されていると判断され、傾きａが負の数であれば、断崖絶壁に近い形状または急な下り坂と判断される。
【０１０９】
また、傾きａでプロットされた複数の点の重心Ｇを通る直線がＹ軸と交差する点が切片ｂである。この切片ｂはプレイヤオブジェクト１０２に対する地面の高さ具合を示す。ただし、実際には、衝突位置Ｃｍが記憶されているため、衝突位置ＣｍのＺ座標で地面の高さを知ることができる。
【０１１０】
このように、主成分分析から、地面（地形オブジェクト１０４の表面）を１つの斜面で表現した場合の平均的な傾斜（角度）が求まる。ただし、主成分分析で算出されるのは直線であるため、たとえば極端に距離の長い分布形状を求めると実際の傾斜（角度）とはかなり異なる場合がある。したがって、この実施例の手法は、仮想空間において数メートル程度の短い区間（プレイヤオブジェクト１０２の位置から所定範囲内）に適用されるべきである。このような条件を満たすように、判定オブジェクト１２０を投げる回数、所定距離ｄ１および所定距離ｄ２は設定されている。
【０１１１】
また、第２主成分は、求められた傾きａが、どの程度「直線」であるとみなすことができるかを判断するために使用することができる。この第２主成分によって、傾きａに対するばらつき、つまり地面の凹凸具合を知ることができる。
【０１１２】
図９（Ａ）は平坦面の地形が判定される場合の目標位置Ｑｍの設定および判定オブジェクト１２０の衝突位置Ｃｍを説明するための図解図であり、図９（Ｂ）は比較的急な上り坂が判定される場合の目標位置Ｑｍの設定および判定オブジェクト１２０の衝突位置Ｃｍを説明するための図解図である。また、図１０はプレイヤオブジェクト１０２の進行方向に垂直な壁が在ることが判定される場合の目標位置Ｑｍの設定および判定オブジェクト１２０の衝突位置Ｃｍを説明するための図解図である。さらに、図１１はプレイヤオブジェクト１０２の進行方向にプレイヤオブジェクト１０２側に傾斜する壁が在ることが判定される場合の目標位置Ｑｍの設定および判定オブジェクト１２０の衝突位置Ｃｍを説明するための図解図である。
【０１１３】
図９（Ａ）に示すように、プレイヤオブジェクト１０２が平坦な地面上に存在する場合には、衝突位置Ｃｍは平坦な地面に沿って並ぶため、目標位置Ｑｍも地面に沿って並ぶ。ただし、上述したように、初回の目標位置Ｑ１は第１のルールに従ってプレイヤオブジェクト１０２の進行方向の斜め下方に決定され、２回目以降では、第２のルールに従って衝突位置Ｃｍの法線ベクトルｎの逆方向ベクトルｎ´に基づいて目標位置Ｑｍ＋１は設定されるため、目標位置Ｑｍは地中に埋まっている位置に設定される。このことは、図９（Ｂ）においても同じである。
【０１１４】
図９（Ｂ）に示すように、プレイヤオブジェクト１０２が平坦な地面上に存在するが、前方に上り斜面が在る場合には、衝突位置Ｃｍは、プレイヤオブジェクト１０２に近い位置では、平坦な平面に沿って並び、プレイヤオブジェクト１０２から離れると、斜面に沿って並ぶ。目標位置Ｑ２およびＱ３は、衝突位置Ｃ１およびＣ２が平坦な地面上であるため、この地面に沿うように設定される。目標位置Ｑ４およびＱ５は、衝突位置Ｃ３およびＣ４が斜面上であるため、この斜面に沿うように設定される。
【０１１５】
上述したように、３回目以降の目標位置Ｑ３−Ｑ５を決定する場合には、前々回の衝突位置Ｃｍ−２を始点とし、前回の衝突位置Ｃｍ−１を終点とするベクトルが示す方向が進行方向として推測される。したがって、図９（Ｂ）に示すように、目標位置Ｑ３−Ｑ５は、プレイヤオブジェクト１０２から見て上り坂に沿って斜め上方に移動するように決定される。
【０１１６】
図１０に示すように、プレイヤオブジェクト１０２が平坦な地面上に存在するが、前方にプレイヤオブジェクト１０２が見上げる壁が在る場合には、衝突位置Ｃｍは、プレイヤオブジェクト１０２に近い位置では、平坦な平面に沿って並び、プレイヤオブジェクト１０２から離れると、崖の側面（壁面）に沿って並ぶ。目標位置Ｑ２およびＱ３は、衝突位置Ｃ１およびＣ２が平坦な地面上であるため、この地面に沿うように設定される。目標位置Ｑ４およびＱ５は、衝突位置Ｃ３およびＣ４が崖の側面（壁面）上であるため、この側面（壁面）に沿うように設定される。
【０１１７】
上述したように、３回目以降の目標位置Ｑ３−Ｑ５を決定する場合には、前々回の衝突位置Ｃｍ−２を始点とし、前回の衝突位置Ｃｍ−１を終点とするベクトルが示す方向が進行方向として推測される。したがって、図１０に示すように、目標位置Ｑ４およびＱ５は、プレイヤオブジェクト１０２から見た場合に、垂直な壁に沿って上方に移動するように決定される。
【０１１８】
図１１に示すように、プレイヤオブジェクト１０２が平坦な地面上に存在するが、前方にプレイヤオブジェクト１０２が見上げるように、プレイヤオブジェクト１０２側に傾斜する崖（壁）が在る場合には、衝突位置Ｃｍは、プレイヤオブジェクト１０２に近い位置では、平坦な平面に沿って並び、プレイヤオブジェクト１０２から離れると、崖の側面（壁面）に沿って並ぶ。目標位置Ｑ２およびＱ３は、衝突位置Ｃ１およびＣ２が平坦な地面上であるため、この地面に沿うように設定される。目標位置Ｑ４およびＱ５は、衝突位置Ｃ３およびＣ４が崖の側面（壁面）上であるため、この側面（壁面）に沿うように設定される。
【０１１９】
上述したように、３回目以降の目標位置Ｑ３−Ｑ５を決定する場合には、前々回の衝突位置Ｃｍ−２を始点とし、前回の衝突位置Ｃｍ−１を終点とするベクトルが示す方向が進行方向として推測される。したがって、図１１に示すように、目標位置Ｑ４およびＱ５は、プレイヤオブジェクト１０２から見た場合に、プレイヤオブジェクト１０２側に傾斜する壁に沿って上方に移動するように決定される。
【０１２０】
図１２に示すように、比較的低い壁（段差）がプレイヤオブジェクト１０２の進行方向に在る場合には、衝突位置Ｃ１は、プレイヤオブジェクト１０２に近い位置で平坦な平面上にあり、衝突位置Ｃ２は壁面にある。３回目に判定オブジェクト１２０が投げられた場合には、この判定オブジェクト１２０は地形オブジェクト１０４に衝突しない。
【０１２１】
このような場合には、図１３に示すように、現在の目標位置（ここででは、３回目の目標位置Ｑ３）を追加の開始位置Ｐ４として決定し、この追加の開始位置Ｐ４から鉛直上方に所定距離ｄ３（この実施例では、プレイヤオブジェクトの身長（高さ））だけ移動した位置を追加の目標位置Ｑ４として決定する。つまり、第３のルールに従って目標位置Ｑ４が決定される。
【０１２２】
このように、追加の開始位置Ｐ４および追加の目標位置Ｑ４を決定するのは、たとえば、壁の一部に穴が開いている場合または壁面に凹凸がある場合に、前回の判定オブジェクト１２０が地形オブジェクト１０４に衝突しないことがあり、壁がさらに上方に続いているかどうかを判断するためである。また、前回判定オブジェクト１２０が投げられた方向が上（斜め上）向きであるため、壁または上り坂（斜面）のような地形がプレイヤオブジェクト１０２の前方（進行方向）に在ることが予測されるためである。
【０１２３】
ここでは、プレイヤオブジェクト１０２の前方にプレイヤオブジェクト１０２よりも低い壁が在るため、図１３からも分かるように、追加の開始位置Ｐ４から追加の目標位置Ｑ４に向かって投げられた判定オブジェクト１２０は地形オブジェクト１０４に衝突しない。
【０１２４】
このような場合には、図１４に示すように、追加の開始位置Ｐ４を除く、前回の開始位置Ｐ３から判定オブジェクト１２０の直径程度（この実施例では、直径）上方に次の開始位置Ｐ５が決定され、この開始位置Ｐ５から進行方向に向かって斜め下方に所定距離移動した位置が次の目標位置Ｑ５として決定する。ここでは、初回の目標位置Ｑ１が決定される場合と同様に、水平から下向きに所定角度θであり、開始位置Ｐ５から所定距離ｄ１だけ移動した位置に目標位置Ｑ５が決定される。
【０１２５】
図１４からも分かるように、開始位置Ｐ５から目標位置Ｑ５に判定オブジェクト１２０が投げられると、たとえば、衝突位置Ｃ５で示すように、判定オブジェクト１２０は壁の最上部の側面に衝突する。
【０１２６】
つまり、判定オブジェクト１２０を５回投げた結果、衝突位置Ｃ１、Ｃ２およびＣ５が取得される。これらの衝突位置Ｃ１、Ｃ２、Ｃ５から主成分分析を行った結果、プレイヤオブジェクト１０２の前方には、傾きａの壁或いは上り坂が在ることが分かる。また、各衝突位置Ｃ１、Ｃ２、Ｃ５の３次元座標から地形の高さを知ることができるため、最終的に、低い壁または短い上り坂が存在することが分かる。
【０１２７】
なお、主成分分析に代えて、回帰直線を求めるようにしてもよい。この場合、回帰直線の傾きが地面の傾きと判断される。ただし、回帰直線は、最小二乗法により、あくまでも１次関数として表現するため、複数の点（衝突位置）が水平や垂直に並んだ場合の相関関係を求めることができず、正しく地面の傾きを判定することができない場合がある。また、回帰直線は、Ｘ，Ｙの点がばらつく場合に、その傾きが水平に近づくため、直線近似すると、実際の地面の傾き（形状）よりもなだらかになってしまう。
【０１２８】
また、上述の説明においては、判定オブジェクト１２０が地形オブジェクト１０４に衝突すると、衝突位置Ｃｍにおける地面の法線ベクトルｎを用いて、次の判定オブジェクト１２０の目標位置を決定するようにしてあるが、実際には、法線ベクトルｎはプレイヤオブジェクト１０２の進行方向に対して交差する方向（左右方向）の傾斜による位置ずれを補正するために再計算するようにしてある。
【０１２９】
たとえば、図１５（Ａ）および図１５（Ｂ）は、プレイヤオブジェクト１０２の進行方向に対して交差する方向に地面が傾斜している場合の仮想空間の一例を示す図解図である。ただし、図１５（Ａ）は、プレイヤオブジェクト１０２の上方から仮想空間を見た図解図であり、図１５（Ｂ）は、プレイヤオブジェクト１０２の背後から仮想空間を見た図解図である。
【０１３０】
なお、図１５（Ａ）および図１５（Ｂ）では、地形オブジェクト１０４に衝突したときの判定オブジェクト１２０のみを示してある。このことは、図１６（Ａ）および図１６（Ｂ）も同じである。
【０１３１】
図１５（Ａ）および図１５（Ｂ）では、プレイヤオブジェクト１０２は、進行方向に対して左から右に上るように傾斜する地面に対して垂直に立っている。プレイヤオブジェクト１０２の進行方向における地面の傾斜を判定する場合には、上述したように、判定オブジェクト１２０は、各回の開始位置Ｐｍから決定された目標位置Ｑｍに向けて投げられる。ここでは、地面はプレイヤオブジェクト１０２の進行方向に対して交差する方向に傾斜するため、判定オブジェクト１２０は、その最下端の点ではなく、少しずれた点（ここでは、右斜め下の点）で地面に衝突する。
【０１３２】
このため、衝突位置Ｃｍにおける地面の法線ベクトルｎを用いて、次回の目標位置Ｑｍ＋１を決定すると、プレイヤオブジェクト１０２の進行方向からずれた位置に判定オブジェクト１２０が投げられることになる。また、図１５（Ａ）および図１５（Ｂ）からも分かるように、進行方向からのずれは、判定オブジェクト１２０を投げる回数が増えるに従って累積される。
【０１３３】
上述したように、主成分分析する場合には、プレイヤオブジェクト１０２の進行方向に仮想で設けた２次元平面に、検出した複数の衝突位置Ｃｍ（点）を投影するようにしてあるため、上記のような位置ずれを吸収できるかも知れないが、プレイヤオブジェクト１０２の進行方向における正確な傾斜を判定（検出）するために、法線ベクトルｎを再計算するようにしてある。
【０１３４】
具体的には、数２に従って法線ベクトルｎが再計算される。ただし、Ｖｘは、プレイヤオブジェクト１０２の真横方向（この実施例では、右方向）の方向ベクトルであり、Ｖｔは、衝突位置における地面の接線ベクトルであり、ｎｒは再計算（修正）された法線ベクトルである。ただし、数２においては、“×”は外積を意味する。また、再計算された法線ベクトルｎｒは正規化される。つまり、法線ベクトルｎｒは、大きさが１の単位ベクトルに変換される。
【０１３５】
［数２］
Ｖｔ＝ｎ×Ｖｘ
ｎｒ＝Ｖｔ×Ｖｘ
このように、法線ベクトルｎを再計算（修正）した法線ベクトルｎｒを用いることにより、図１６（Ａ）および図１６（Ｂ）に示すように、進行方向に対して交差する方向に傾斜する地面の上にプレイヤオブジェクト１０２が存在する場合であっても、プレイヤオブジェクト１０２の進行方向からずれることなく目標位置Ｑｍが設定される。したがって、プレイヤオブジェクト１０２の進行方向における地形を正確に判定することができる。
【０１３６】
次に崖側面判定について説明する。上述したように、判定オブジェクト１２０は、開始位置Ｐ１から所定角度θ下向きに移動させるため、崖の上から見下ろす位置または急な下り坂を見下ろす位置に、プレイヤオブジェクト１０２が存在する場合には、判定オブジェクト１２０が地形オブジェクト１０４（地面）に衝突しないと考えられる。しかし、起伏の激しい位置にプレイヤオブジェクト１０２が存在する場合にも同様に、判定オブジェクト１２０が地形オブジェクト１０４に衝突しない場合もある。したがって、以下に説明するような崖側面判定処理を実行するようにしてある。
【０１３７】
なお、崖側面判定処理においては（後述する、拡張崖側面判定処理も同じ）、以下に説明するように、他の地形を判定する場合とは、開始位置Ｐｍおよび目標位置Ｑｍの決定方法が異なる。
【０１３８】
図１７−図１９はプレイヤオブジェクト１０２の進行方向に崖が在るかどうかを判定（崖側面判定）する方法の一例を説明するための図解図である。ただし、図１７−図１９に示す例では、地形判定処理において、初回の判定オブジェクト１２０が地形オブジェクト１０４（地面）に衝突しない場合について説明する。
【０１３９】
なお、２回目以降であっても、判定オブジェクト１２０を投げた回数が所定回数に達していない場合に、下（斜め下方）向きに投げた判定オブジェクト１２０が地形オブジェクト１０４に衝突しなければ、同様の崖側面判定が実行される。
【０１４０】
図１７（Ａ）に示すように、初回では、上述したように、予め決定されている判定オブジェクト１２０の開始位置Ｐ１に対して、プレイヤオブジェクト１０２の進行方向から所定角度θ下向きに所定距離ｄ１だけ移動させた位置が目標位置Ｑ１として決定される。図１７（Ａ）に示す例では、開始位置Ｐ１から目標位置Ｑ１に向かって判定オブジェクト１２０が投げられた場合には、当該判定オブジェクト１２０は地形オブジェクト１０４（地面）に衝突しない。
【０１４１】
この場合、プレイヤオブジェクト１０２の進行方向に崖が設けられているかどうかを判定する処理（崖側面判定処理）を実行するかどうかを判定するために、さらに目標位置Ｑ１が追加の開始位置Ｐ２として決定され、この追加の開始位置Ｐ２から下方向（真下方向）に所定距離ｄ３（この実施例では、プレイヤオブジェクト１０２の身長（高さ））移動した位置に、追加の目標位置Ｑ２が決定される。つまり、第４のルールに従って目標位置Ｑ２が決定される。
【０１４２】
図１７（Ｂ）に示すように、追加の開始位置Ｐ２から追加の目標位置Ｑ２に向かって判定オブジェクト１２０が投げられた場合に、当該判定オブジェクト１２０は地形オブジェクト１０４に衝突しない。かかる場合には、崖側面判定処理を実行することが判定され、崖側面判定処理が開始される。
【０１４３】
図示は省略するが、追加の開始位置Ｐ２から追加の目標位置Ｑ２に向かって判定オブジェクト１２０を投げた場合に、当該判定オブジェクト１２０が地形オブジェクト１０４（地面）に衝突した場合には、崖側面判定処理は実行されない。この場合、判定オブジェクト１２０を投げた回数が所定回数に達していなければ、衝突位置Ｃｍの地面の法線ベクトルｎに基づいて次の目標位置Ｑｍ＋１が決定され、次の開始位置Ｐｍ＋１から目標位置Ｑｍ＋１に向かって判定オブジェクト１２０が投げられる。
【０１４４】
崖側面判定処理が開始されると、図１８（Ａ）に示すように、前回の目標位置Ｑ２が崖側面判定処理における初回の開始位置Ｐａとして決定され、プレイヤオブジェクト１０２の進行方向とは逆向きに所定距離ｄ４移動した位置に初回の目標位置Ｑａが決定される。
【０１４５】
図１８（Ｂ）に示すように、初回では、開始位置Ｐａから目標位置Ｑａに向かって投げられた判定オブジェクト１２０は、位置Ｒａで示すように、地形オブジェクト１０４の表面（崖の側面）に衝突する。ただし、開始位置Ｐａ、目標位置Ｑａおよび位置Ｒａは、参照符号で示す円の中心である。このことは、後述する開始位置Ｐｂ−Ｐｄ、目標位置Ｑｂ−Ｑｄおよび位置Ｒｂ−Ｒｄも同じである。
【０１４６】
判定オブジェクト１２０が崖の側面に衝突すると、図１９（Ａ）に示すように、崖側面判定処理における２回目の開始位置Ｐｂが、開始位置Ｐ２と初回の開始位置Ｐａの間に決定される。つまり、開始位置Ｐｂは、開始位置Ｐ２から下方向にプレイヤオブジェクト１０２の身長の半分移動した位置に決定される。また、２回目の目標位置Ｑｂは、進行方向とは逆向きに所定距離ｄ４程度移動した位置に決定される。
【０１４７】
図１９（Ｂ）に示すように、２回目では、開始位置Ｐｂから目標位置Ｑｂに向かって投げられた判定オブジェクト１２０は、位置Ｒｂで示すように、地形オブジェクト１０４の表面（崖の側面）に衝突する。
【０１４８】
このように、位置Ｒｂおよび位置Ｒｃで判定オブジェクト１２０が地形オブジェクト１０４の表面に衝突すると、プレイヤオブジェクト１０２の進行方向には、当該プレイヤオブジェクト１０２から見下ろすように崖が在ることが判定される。
【０１４９】
このような崖側面判定処理では、プレイヤオブジェクト１０２の進行方向において、プレイヤオブジェクト１０２の現在位置よりも下方において、プレイヤオブジェクト１０２の進行方向とは逆向きに判定オブジェクト１２０を移動させることにより、判定オブジェクト１２０が地形オブジェクト１０４に衝突するかどうかを判定するようにしてある。
【０１５０】
しかし、この判定結果だけでは、崖の側面の傾きが分からないため、断崖絶壁であるか、急な下り坂であるか、プレイヤオブジェクト１０２側に側面が浸食された崖であるかを判断することができない。したがって、崖側面判定処理が実行された場合であっても、判定オブジェクト１２０の衝突位置Ｃｍが主成分分析され、崖と判定された地形がさらに、断崖絶壁、急な下り坂、プレイヤオブジェクト１０２側に側面が浸食された崖のいずれかに分類される。
【０１５１】
このため、急な下り坂が在ると判定された場合に、関連情報に含まれる表面情報が掴まることを禁止していれば、プレイヤオブジェクト１０２がすべり落ちるように表示される。また、急な斜面または断崖絶壁が在ると判定された場合に、表面情報が掴まることを禁止していなければ、プレイヤオブジェクト１０２が急な斜面または崖を、急な斜面または崖の側面に掴まって降りるように表示される。さらに、プレイヤオブジェクト１０２側に浸食された崖であれば、表面情報が掴まることを禁止している場合には、プレイヤオブジェクト１０２が急な斜面または崖を降りることができないように制御される。または、かかる場合には、プレイヤオブジェクト１０２が崖に落ちた場合には、ミスとなり、ゲームオーバとなる、または、プレイヤオブジェクト１０２の残り数が１減算される。
【０１５２】
図２０−図２２には、図１７−図１９に示した崖とは少し形状の異なる崖が配置される場合に、この崖を判定する方法について説明する。図１７−図１９の崖側面判定と区別するために、以下、図２０−図２２の崖側面判定を「拡張崖側面判定」ということにする。図２０−図２２に示す崖は、プレイヤオブジェクト１０２の進行方向において崖の上面が少し下り坂になっている点である。
【０１５３】
図２０（Ａ）は、判定オブジェクト１２０を所定回数（この実施例では、５回）投げた後であり、最終回（５回目）において判定オブジェクト１２０が衝突したときの位置Ｒ５が示される。この実施例では、判定オブジェクト１２０を所定回数投げた後に、最終回で判定オブジェクト１２０が地形オブジェクト１０４に衝突した位置Ｒ５の高さ（Ｚ座標）がプレイヤオブジェクト１０２の位置（足元の位置）の高さ（Ｚ座標）よりも所定距離ｈ以上下方であるかどうかが判断される。所定距離ｈは、ゲームの開発者等が決定した値である。
【０１５４】
位置Ｒ５の高さがプレイヤオブジェクト１０２の足元の位置の高さよりも下方であるが、それらの差Ｈが所定距離ｈ未満であれば、拡張崖側面判定処理は実行されない。したがって、先に判定オブジェクト１２０を所定回数投げたときに取得された衝突位置Ｃ１−Ｃ５の主成分分析の結果等から地形が判定される。
【０１５５】
一方、位置Ｒ５の高さがプレイヤオブジェクト１０２の足元の位置の高さよりも下方であり、それらの差Ｈが所定距離ｈ以上であれば、拡張崖側面判定処理が実行される。拡張崖側面判定処理が開始されると、判定オブジェクト１２０を所定回数投げたときの最終回において判定オブジェクト１２０が衝突した位置Ｒ５が、拡張崖側面判定処理における初回の開始位置Ｐａに決定される。また、この開始位置Ｐａから進行方向に所定距離ｄ５移動した位置が初回の目標位置Ｑａに決定される。そして、開始位置Ｐａから目標位置Ｑａに向かって判定オブジェクト１２０が投げられる。
【０１５６】
判定オブジェクト１２０が開始位置Ｐａと目標位置Ｑａの間で地形オブジェクト１０４に衝突した場合には、崖では無いと判定され、拡張崖側面判定処理が終了される。かかる場合には、たとえば、起伏の大きな地面であり、プレイヤオブジェクト１０２の進行方向に比較的大きな穴または窪みがあることが考えられる。
【０１５７】
一方、判定オブジェクト１２０が開始位置Ｐａと目標位置Ｑａの間で地形オブジェクト１０４に衝突しない場合には、プレイヤオブジェクト１０２の進行方向に下り坂または崖が在ると考えられるため、目標位置Ｑａが次の開始位置Ｐｂに決定される。開始位置Ｐｂが決定された後の処理については、図１７（Ｂ）に示した２回目の判定オブジェクト１２０を投げる場合の処理以降の処理と同じである。したがって、これ以降の処理については簡単に説明することにする。
【０１５８】
次の開始位置Ｐｂが決定されると、下方向（真下方向）に所定距離（プレイヤオブジェクト１０２の身長）移動した位置に目標位置Ｑｂが決定される。図２０−図２２に示すような崖では、開始位置Ｐｂから目標位置Ｑｂに向かって判定オブジェクト１２０を投げても、判定オブジェクト１２０は地形オブジェクト１０４（地面）に衝突しない。
【０１５９】
この場合、図２１（Ａ）に示すように、目標位置Ｑｂが次の開始位置Ｐｃとして決定され、進行方向とは逆向きに所定距離ｄ４移動した位置に次の目標位置Ｑｃが決定される。図２１（Ｂ）に示すように、開始位置Ｐｃから目標位置Ｑｃに向かって投げられた判定オブジェクト１２０は、位置Ｒｃで示すように、崖の側面に衝突する。
【０１６０】
図２１（Ｂ）に示すように、判定オブジェクト１２０が崖の側面に衝突されると、図２２に示すように、次の開始位置Ｐｄが、開始位置Ｐｂと開始位置Ｐｃの間に決定される。また、目標位置Ｑｄは、進行方向とは逆向きに所定距離ｄ４程度移動した位置に決定される。
【０１６１】
図２２に示すように、開始位置Ｐｄから目標位置Ｑｄに向かって投げられた判定オブジェクト１２０は、位置Ｒｄで示すように、崖の側面に衝突される。
【０１６２】
このように、位置Ｒｃおよび位置Ｒｄで判定オブジェクト１２０が地形オブジェクト１０４に衝突すると、プレイヤオブジェクト１０２の進行方向において、坂を少し下った先には、当該プレイヤオブジェクト１０２から見下ろすように崖が在ることが判定される。
【０１６３】
図２３は、図２に示したゲーム装置１２のメインメモリ（２２ｅ，２６）のメモリマップ３００の一例を示す。図２３に示すように、メインメモリ（２２ｅ，２６）は、プログラム記憶領域３０２およびデータ記憶領域３０４を含む。プログラム記憶領域３０２には、ゲームプログラムなどの情報処理プログラムが記憶される。たとえば、ゲームプログラムは、ゲーム装置１２に電源が投入された後の適宜のタイミングで光ディスクからその一部または全部が読み込まれてメインメモリ（２２ｅ，２６）に記憶される。
【０１６４】
なお、ゲームプログラムは、光ディスクに代えて、フラッシュメモリ２４やゲーム装置１２の外部情報処理装置から（たとえばインターネットを介して）取得されてもよい。また、ゲームプログラムに含まれる一部のプログラムについては、ゲーム装置１２内に予め記憶されていてもよい。
【０１６５】
この実施例では、ゲームプログラムは、メイン処理プログラム３１０、画像生成プログラム３１２、画像表示プログラム３１４、地形判定プログラム３１６、音生成プログラム３１８、音出力プログラム３２０および操作検出プログラム３２２などによって構成される。
【０１６６】
メイン処理プログラム３１０は、仮想ゲームのメインルーチンの処理（図２５の全体処理）を実行するためのプログラムである。画像生成プログラム３１２は、ポリゴンデータやテクスチャデータなどのデータを含む画像生成データ３３４を用いて、テレビ用ゲーム画像を生成するためのプログラムである。また、画像生成プログラム３１２は、後述する地形判定プログラム３１６に従って判定された地形に応じて、プレイヤオブジェクト１０２などのキャラクタオブジェクトのアニメーションを決定および再生する。
【０１６７】
画像表示プログラム３１４は、画像生成プログラム３１２に従って生成したテレビ用ゲーム画像の画像データをＡＶ−ＩＣ３６に出力し、テレビ用ゲーム画像をテレビ１６に表示するためのプログラムである。
【０１６８】
地形判定プログラム３１６は、プレイヤオブジェクト１０２の進行方向における地形を判定するためのプログラムである。この判定結果を用いて、画像生成プログラム３１２に従って生成（再生）されるプレイヤオブジェクト１０２のアニメーションが決定される。
【０１６９】
音生成プログラム３１８は、ＣＰＵ２０の指示の下、ＤＳＰ２２ｃによって、テレビ用ゲーム音声を生成するためのプログラムである。音出力プログラム３２０は、音生成プログラム３１８に従って生成されたテレビ用ゲーム音声の音声データをＡＶ−ＩＣ３６に出力し、テレビ用ゲーム音声をテレビ１６のスピーカ１６ａから出力するためのプログラムである。
【０１７０】
操作検出プログラム３２２は、端末装置１４から入力（送信）される送信データに含まれる操作データを検出する（受け付ける）ためのプログラムである。
【０１７１】
なお、プログラム記憶領域３０２には、通信プログラムおよびバックアッププログラムなども記憶される。
【０１７２】
図２４は図２３に示したデータ記憶領域３０４の具体的な内容の一例を示す図である。
【０１７３】
データ記憶領域３０４には、受信データ３３０、送信データ３３２、画像生成データ３３４、地形情報データ３３６、アニメーションデータ３３８、衝突位置データ３４０、関連情報データ３４２および地形判定データ３４４などが記憶される。また、データ記憶領域３０４には、上方向フラグ３４６、崖側面判定有効フラグ３４８、崖とみなす条件フラグ３５０および崖隣接フラグ３５２などが設けられる。
【０１７４】
受信データ３３０は、端末装置１４から受信される各種のデータである。受信データ３３０は、操作データを含む。操作データは、端末装置１４に対するプレイヤの操作を表すデータであり、上述したように、操作ボタンデータ、スティックデータ、およびタッチ位置データを含む。ただし、操作データは、端末装置１４を操作するプレイヤの操作を表すものであればよく、上記各データのいずれか１つのみを含むものであってもよい。操作データは、端末装置１４から送信されてゲーム装置１２において取得され、メインメモリ（２２ｅ，２６）に記憶される。
【０１７５】
なお、メインメモリ（２２ｅ，２６）には、最新の（最後に取得された）ものから順に所定個数の操作データが記憶されてもよい。
【０１７６】
送信データ３３２は、端末装置１４へ送信する各種のデータである。画像生成データ３３４は、ポリゴンデータおよびテクスチャデータなど、画像を生成するために必要なデータである。地形情報データ３３６は、地形オブジェクト１０４を構成するポリゴンのそれぞれに対応する法線ベクトルおよび各ポリゴンに設定された表面情報のデータである。法線ベクトルのデータは、地形オブジェクト１０４の表面に垂直なベクトルについてのデータである。表面情報は、壁面または崖の側面を構成するポリゴンに、プレイヤオブジェクト１０２が掴まることを禁止するかどうかを示す情報である。
【０１７７】
アニメーションデータ３３８は、プレイヤオブジェクト１０２および敵オブジェクトなどのキャラクタオブジェクト（動画オブジェクト）のアニメーションについてのデータである。この実施例では、アニメーションデータ３３８には、キャラクタオブジェクトのそれぞれについて、アクション毎に予め生成されたアニメーションについてのデータが含まれる。
【０１７８】
衝突位置データ３４０は、判定オブジェクト１２０を目標位置に向けて投げた場合に、地形オブジェクト１０４と衝突することが判定された位置についてのデータである。ただし、判定オブジェクト１２０は、複数回投げられるとともに、各回で開始位置および目標位置が異なるため、回毎の衝突位置のデータが識別可能にデータ記憶領域３０４に記憶される。
【０１７９】
関連情報データ３４２は、衝突位置Ｃｍにおける地形オブジェクト１０４を構成するポリゴンの法線ベクトルのデータおよび地面情報のデータであり、当該衝突位置Ｃｍのデータに関連付けて記憶される。
【０１８０】
地形判定データ３４４は、地形判定プログラム３１６に従う地形判定処理によって判定された地形、この実施例では、プレイヤオブジェクト１０２の進行方向における地形オブジェクト１０４の表面の傾斜および高さについてのデータである。
【０１８１】
上方向フラグ３４６は、判定オブジェクト１２０を移動させる方向が上向きかどうかを判断するためのフラグである。判定オブジェクト１２０を移動させる方向が上向きである場合にオンされ、判定オブジェクト１２０を移動させる方向が下向きである場合にオフされる。この実施例では、判定オブジェクト１２０を移動させる方向が水平方向である場合には、上向きである場合に含まれる。ただし、判定オブジェクト１２０を移動させる方向が水平方向である場合には、下向きである場合に含まれるようにしてもよい。
【０１８２】
崖側面判定有効フラグ３４８は、プレイヤオブジェクト１０２が見下ろすように崖が存在するかどうかを判定する処理を実行するかどうかを判断するためのフラグである。崖側面判定有効フラグ３４８は、地形判定処理において、判定オブジェクト１２０を目標位置に向かって下向きに投げた場合に、この判定オブジェクト１２０が地形オブジェクト１０４に衝突しない場合にオンされ、それ以外においてオフされる。
【０１８３】
崖とみなす条件フラグ３５０は、プレイヤオブジェクト１０２が見下ろすように崖が存在することの条件を満たすかどうかを判断するためのフラグである。崖とみなす条件フラグ３５０は、プレイヤオブジェクト１０２が見下ろすように崖が存在することの条件を満たす場合にオンされ、それ以外でオフされる。後述するように、崖側面判定処理において、崖が在ることが判断された場合に、崖と見なす条件を満たしたことが判断される。
【０１８４】
崖隣接フラグ３５２は、プレイヤオブジェクト１０２の進行方向において、下り坂の先に、プレイヤオブジェクト１０２が見下ろすような崖が存在するかどうかを判断するためのフラグである。崖隣接フラグ３５２は、プレイヤオブジェクト１０２の進行方向において、下り坂の先に、プレイヤオブジェクト１０２が見下ろすような崖が存在する場合にオンされ、それ以外でオフされる。
【０１８５】
図示は省略するが、データ記憶領域３０４には、サウンドデータおよび音波形データなどの他のデータが記憶されたり、ゲームプログラムの実行に必要な、他のフラグおよびカウンタ（タイマ）が設けられたりする。
【０１８６】
図２５は、図２に示したゲーム装置１２に設けられるＣＰＵ２０の全体処理についてのフロー図である。なお、図２５（後述する図２６についても同様。）に示すフロー図の各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、この実施例では、基本的には、図２５および図２６に示すフロー図の各ステップの処理をＣＰＵ２０が実行するものとして説明するが、ＣＰＵ２０以外のプロセッサや専用回路が一部のステップを実行するようにしてもよい。
【０１８７】
ゲーム装置１２の電源が投入されると、全体処理の実行に先だって、ＣＰＵ２０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ（２２ｅ，２６）等の各ユニットが初期化される。そして、光ディスクに記憶されたゲームプログラムがメインメモリ（２２ｅ、２６）に読み込まれ、ＣＰＵ２０によって当該ゲームプログラムの実行が開始される。
【０１８８】
図２５に示すように、ＣＰＵ２０は、全体処理を開始すると、ステップＳ１で、初期処理を実行する。初期処理では、たとえば、ＣＰＵ２０は、ゲーム画像１５０を生成および表示するための仮想空間を構築し、この仮想空間に登場するプレイヤオブジェクト１０２等の各キャラクタないし各オブジェクトを初期位置に配置するとともに、この仮想空間に配置（存在）する地形オブジェクト１０４等の背景オブジェクトを所定の位置に配置する。さらに、ＣＰＵ２０は、ゲーム処理で用いる各種パラメータの初期値を設定したりする処理である。
【０１８９】
続いて、ＣＰＵ２０は、ステップＳ３で、端末装置１４から送信されてくる各種のデータを取得し、ステップＳ５で、ゲーム制御処理を実行する。たとえば、ＣＰＵ２０は、操作データに従って、プレイヤオブジェクト１０２を移動させ、または／およびプレイヤオブジェクト１０２に任意のアクションを実行させる。また、ＣＰＵ２０は、操作データに従わずに、敵オブジェクトを移動させ、または／および敵オブジェクトに任意のアクションを実行される。さらに、ＣＰＵ２０は、プレイヤオブジェクト１０２の勝敗または順位を判定する、または／およびゲームクリアまたはゲームオーバを判定する。
【０１９０】
次のステップＳ７では、ＣＰＵ２０およびＧＰＵ２２ｂは、テレビ１６に表示するためのテレビ用ゲーム画像の生成処理を実行する。簡単に説明すると、ＣＰＵ２０およびＧＰＵ２２ｂは、ステップＳ５のゲーム制御処理の結果を表すデータをメインメモリ（２２ｅ，２６）から読み出し、また、ゲーム画像を生成するために必要なデータをＶＲＡＭ２２ｄから読み出し、テレビ用ゲーム画像を生成する。たとえば、テレビ用ゲーム画像を生成する場合には、ＣＰＵ２０の指示の下、ＧＰＵ２２ｂは、仮想空間における現在位置にプレイヤオブジェクト１０２を配置し、敵オブジェクトのようなノンプレイヤキャラクタを配置する。さらに、ＧＰＵ２２ｂは、プレイヤオブジェクト１０２の現在位置に応じた地形オブジェクト１０４（背景オブジェクト）を配置（生成）する。また、全体処理と並行して実行される地形判定処理において判定された地形および地形判定処理において取得された表面情報に基づいて決定されたプレイヤオブジェクト１０２のアニメーションが再生される。したがって、或るシーン（情景）が生成され、このシーンを仮想カメラから見た画像（撮影画像）がテレビ用ゲーム画像として生成される。
【０１９１】
続いて、ステップＳ９では、ＣＰＵ２０は、テレビ１６のスピーカ１６ａに出力するためのテレビ用ゲーム音声を生成する。すなわち、ＣＰＵ２０は、ステップＳ５のゲーム制御処理の結果に応じたゲーム音声をＤＳＰ２２ｃに生成させる。
【０１９２】
続いて、ステップＳ１１では、ＣＰＵ２０は、テレビ１６へデータを出力する。具体的には、ＣＰＵ２０は、ＶＲＡＭ２２ｄに記憶されたテレビ用ゲーム画像の画像データと、ステップＳ９でＤＳＰ２２ｃによって生成されたテレビ用ゲーム音声の音声データとをＡＶ−ＩＣ３６へ送る。
【０１９３】
そして、ステップＳ１３では、ＣＰＵ２０は、ゲームを終了するかどうかを判断する。ステップＳ１３の判断は、たとえば、ゲームオーバになったか否か、あるいは、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ゲームオーバになったか否かは、たとえばプレイヤオブジェクト１０２の体力値または残り数が０になったか否か等によって判定される。
【０１９４】
ステップＳ１３で“ＮＯ”であれば、つまりゲームを終了しない場合には、ステップＳ３に戻る。一方、ステップＳ１３で“ＹＥＳ”であれば、つまりゲームを終了する場合には、全体処理を終了する。
【０１９５】
図２６は、図２５に示した全体処理と並行して実行されるＣＰＵ２０の地形判定処理のフロー図である。ただし、この地形判定処理は、全体処理が実行されている間は、繰り返し（毎フレーム）実行される。
【０１９６】
図２６に示すように、ＣＰＵ２０は、地形判定処理を開始すると、ステップＳ１０１で、プレイヤオブジェクト１０２の現在位置から進行方向を決定する。上述したように、プレイヤオブジェクト１０２が移動している場合および停止している場合は、通常、プレイヤオブジェクト１０２が向いている方向が進行方向であるが、地形によっては、プレイヤオブジェクト１０２が向いている方向以外の方向が進行方向であることもある。
【０１９７】
続くステップＳ１０３では、後述する地形表面情報取得処理（図２７−図２９参照）を実行する。次のステップＳ１０５では、プレイヤオブジェクト１０２の正面の２次元平面（図８のＸＹ平面）に衝突位置Ｃｍをマッピング（投影）する。続いて、ステップＳ１０７で、２次元平面にマッピングした衝突位置Ｃｍについて主成分分析処理を実行し、ステップＳ１０９で、主成分分析処理の結果から地形の傾きについての１次関数を算出する。そして、ステップＳ１１１で、地形を判定して、地形判定処理を終了する。
【０１９８】
このステップＳ１１１では、ＣＰＵ２０は、１次関数の傾きａからプレイヤオブジェクト１０２の進行方向の地面の傾き（傾斜角度）を判定するとともに、衝突位置Ｃｍからプレイヤオブジェクト１０２の進行方向の地面の高さを判定する。これらの判定方法については、上述したとおりである。
【０１９９】
また、ステップＳ１１１では、ＣＰＵ２０は、崖とみなす条件フラグ３５０がオンされていれば、傾きａに応じて、断崖絶壁、急な下り坂、または、プレイヤオブジェクト１０２側に側面が浸食された崖であることを判定する。さらに、ＣＰＵ２０は、崖隣接フラグ３５２がオンされていれば、プレイヤオブジェクト１０２の進行方向に、傾きａで決定される斜面（下り坂）の先に崖が在ることを判定する。
【０２００】
図２７−図２９は、図２６のステップＳ１０３に示した地形表面情報取得処理の限定しない一例のフロー図である。図２７に示すように、ＣＰＵ２０は、地形表面情報取得処理を開始すると、ステップＳ１５１で、変数ｉに初期値を設定する（ｉ＝１）。ただし、変数ｉは、判定オブジェクト１２０を開始位置から目標位置（終了位置）に向かって投げた（移動させた）回数をカウントするための変数である。図示は省略するが、ここでは、各種フラグ（３４６−３５２）も初期化（オフ）される。
【０２０１】
次のステップＳ１５３では、プレイヤオブジェクト１０２の現在位置から開始位置Ｐ１および目標位置Ｑ１を設定（決定）する。上述したように、判定オブジェクト１２０の開始位置Ｐ１はプレイヤオブジェクト１０２の位置（足元の位置）に対して予め決定されており、第１のルールに従って、プレイヤオブジェクト１０２の進行方向に所定角度θ下向きに所定距離ｄ１だけ移動した位置に目標位置Ｑ１が設定される。
【０２０２】
続いて、ステップＳ１５５では、判定オブジェクト１２０を所定回数投げたかどうかを判断する。ここでは、変数ｉが最大値（この実施例では、５）を超えているかどうかを判断する。ステップＳ１５５で“ＹＥＳ”であれば、つまり、判定オブジェクト１２０を所定回数投げた場合には、後述する図２９のステップＳ１８７に進む。一方、ステップＳ１５５で“ＮＯ”であれば、つまり、判定オブジェクト１２０を投げた回数が所定回数に達していない場合には、ステップＳ１５７で、開始位置Ｐｍから目標位置Ｑｍに向かって判定オブジェクト１２０を投げる（移動させる）。
【０２０３】
次のステップＳ１５９では、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ここでは、判定オブジェクト１２０が地形オブジェクト１０４の形状（ポリゴン）に衝突したかどうかが判定される（通常の当たり判定）が実行される。以下、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する場合について、同様である。
【０２０４】
ステップＳ１５９で“ＮＯ”であれば、つまり、判定オブジェクト１２０が地形オブジェクト１０４に衝突していなければ、図２９に示すステップＳ１７３に進む。一方、ステップＳ１５９で“ＹＥＳ”であれば、つまり、判定オブジェクト１２０が地形オブジェクト１０４に衝突すれば、ステップＳ１６１で、衝突位置Ｃｍ（３次元座標）および関連情報を記憶する。ここでは、ｉ番目の判定オブジェクト１２０の識別情報に対応して、当該判定オブジェクト１２０が地形オブジェクト１０４に衝突した衝突位置Ｃｍ（３次元座標）のデータを含む（追加した）衝突位置データ３４０がメインメモリ（２２ｅ、２６）のデータ記憶領域３０４に記憶（上書き）される。同様に、ｉ番目の判定オブジェクト１２０の識別情報に対応して、当該判定オブジェクト１２０が地形オブジェクト１０４に衝突した衝突位置Ｃｍにおける地形の法線ベクトルのデータおよび表面情報のデータを地形情報データ３３６から取得し、取得したデータを含む（追加した）関連情報データ３４２がメインメモリ（２２ｅ、２６）のデータ記憶領域３０４に記憶（上書き）される。
【０２０５】
次のステップＳ１６３では、衝突位置Ｃｍ−１と地面（または壁面）の法線ベクトルｎｒから次の目標位置Ｑｍを決定する。ただし、上述したように、３回目以降の目標位置Ｑｍを決定する場合には、プレイヤオブジェクト１０２の進行方向は、前々回の衝突位置Ｃｍ−２を始点とし、前回の衝突位置Ｃｍ−１を終点とするベクトルが示す方向に推測される。また、法線ベクトルｎｒは、上述したように、プレイヤオブジェクト１０２の進行方向に対する真横方向（右方向）の方向ベクトルＶｘと実際の地面の法線ベクトルｎとの外積に基づいて算出し直した（修正した）ものである。
【０２０６】
図２８に示すように、続くステップＳ１６５では、ステップＳ１６３で算出した目標位置Ｑｍが次の判定オブジェクト１２０の開始位置Ｐｍよりも上方かどうかを判断する。ここでは、ＣＰＵ２０は、次の判定オブジェクト１２０の目標位置ＱｍのＺ座標が次の判定オブジェクト１２０の開始位置Ｐ１のＺ座標以上であるかを判断する。
【０２０７】
ステップＳ１６５で“ＹＥＳ”であれば、つまり、目標位置Ｑｍが開始位置Ｐｍよりも上方であれば、ステップＳ１６７で、上方向フラグ３４６をオンして、ステップＳ１７１に進む。一方、ステップＳ１６５で“ＮＯ”であれば、つまり、目標位置Ｑｍが開始位置Ｐｍよりも下方であれば、ステップＳ１６９で、上方向フラグ３４６をオフして、ステップＳ１７１に進む。ステップＳ１７１では、変数ｉを１加算して（ｉ＝ｉ＋１）、図２７に示したステップＳ１５５に戻る。つまり、次の判定オブジェクト１２０が地形オブジェクト１０４に衝突するかどうかが判断される。
【０２０８】
上述したように、ステップＳ１５９で判定オブジェクト１２０が地形オブジェクト１０４に衝突していないと判断された場合には、図２９に示すように、ステップＳ１７３で、上方向フラグ３４６がオンであるかどうかを判断する。つまり、判定オブジェクト１２０が地形オブジェクト１０４に衝突していないと判断されたときに、当該判定オブジェクト１２０を投げた方向が上方向であるかどうかが判断される。
【０２０９】
ステップＳ１７３で“ＹＥＳ”であれば、つまり、上方向フラグ３４６がオンであれば、ステップＳ１７５で、現在の目標位置Ｑｍから所定距離ｄ３（この実施例では、プレイヤオブジェクト１０２の身長（高さ））だけ上方向（真上）に追加（次）の目標位置Ｑｍ＋１を設定して、追加の開始位置Ｐｍ＋１から目標位置Ｑｍ＋１に判定オブジェクト１２０を投げて、ステップＳ１７９に進む。ただし、追加の開始位置Ｐｍ＋１は、現在の目標位置Ｑｍである。
【０２１０】
一方、ステップＳ１７３で“ＮＯ”であれば、つまり、上方向フラグ３４６がオフであれば、ステップＳ１７７で、現在の目標位置Ｑｍから所定距離ｄ３（この実施例では、プレイヤオブジェクト１０２の身長（高さ））だけ下方向（真下）に追加（次）の目標位置Ｑｍ＋１を設定して、追加の開始位置Ｐｍ＋１から目標位置Ｑｍ＋１に判定オブジェクト１２０を投げて、ステップＳ１７９に進む。ただし、追加の開始位置Ｐｍ＋１は、現在の目標位置Ｑｍである。
【０２１１】
そして、ステップＳ１７９では、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ステップＳ１７９で“ＹＥＳ”であれば、図２７に示したステップＳ１６１に戻る。一方、ステップＳ１７９で“ＮＯ”であれば、ステップＳ１８１で、上方向フラグ３４６がオンであるかどうかを判断する。
【０２１２】
ステップＳ１８１で“ＹＥＳ”であれば、ステップＳ１８５で、追加の開始位置（ここでは、開始位置Ｐｍ＋１）を除く、前回の開始位置（ここでは、開始位置Ｐｍ）から判定オブジェクト１２０の直径分上方を次の開始位置（ここでは、開始位置Ｐｍ＋２）に決定し、次の開始位置Ｐｍ＋２から前方の斜め下方向に次の目標位置（ここでは、目標位置Ｒｍ＋２）を決定して、図２７に示したステップＳ１５５に戻る。一方、ステップＳ１８１で“ＮＯ”であれば、ステップＳ１８３で、崖側面判定有効フラグ３４８をオンし、ステップＳ１８７で、崖側面判定有効フラグ３４８がオンであるかどうかを判断する。
【０２１３】
ステップＳ１８７で“ＹＥＳ”であれば、つまり、崖側面判定有効フラグ３４８がオンであれば、ステップＳ１８９で、後述する崖側面判定処理（図３０参照）を実行して、地形判定処理にリターンする。一方、ステップＳ１８７で“ＮＯ”であれば、つまり、崖側面判定有効フラグ３４８がオフであれば、ステップＳ１９１で、プレイヤオブジェクト１０２の足元から所定距離ｈ以上下側に地面があるかどうかを判断する。より具体的には、ＣＰＵ２０は、判定オブジェクト１２０を所定回数投げて検出した衝突位置Ｃｍのうち、プレイヤオブジェクト１０２の足元よりも下方であり、この足元からの差Ｈが所定距離ｈ以上である衝突位置Ｃｍが有るかどうかを判断する。
【０２１４】
ステップＳ１９１で“ＮＯ”であれば、つまり、プレイヤオブジェクト１０２の足元から所定距離ｈ以上下側に地面が無い場合には、そのまま地形判定処理にリターンする。一方、ステップＳ１９１で“ＹＥＳ”であれば、つまり、プレイヤオブジェクト１０２の足元から所定距離ｈ以上下側に地面が有る場合には、後述する拡張崖側面判定処理（図３１および図３２参照）を実行して、地形判定処理にリターンする。
【０２１５】
図３０は図２９のステップＳ１８９の崖側面判定処理の限定しない一例を示すフロー図である。図３０に示すように、ＣＰＵ２０は、崖側面判定処理を開始すると、ステップＳ３０１で、地形表面情報取得処理で、最後に決定した目標位置から進行方向とは逆向きに判定オブジェクト１２０を投げる。
【０２１６】
次のステップＳ３０３では、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ステップＳ３０３で“ＮＯ”であれば、そのまま崖側面判定処理を終了して、地形表面情報取得処理にリターンする。一方、ステップＳ３０３で“ＹＥＳ”であれば、ステップＳ３０５で、衝突位置Ｃｍおよび関連情報を記憶し、ステップＳ３０７で、下方向に判定オブジェクト１２０を投げたときの開始位置と目標位置との中間位置から進行方向とは逆向きに判定オブジェクト１２０を投げる。
【０２１７】
そして、ステップＳ３０９で、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ステップＳ３０９で“ＮＯ”であれば、プレイヤオブジェクト１０２の進行方向に崖は無いと判断して、そのまま地形表面情報取得処理にリターンする。一方、ステップＳ３０９で“ＹＥＳ”であれば、プレイヤオブジェクト１０２の進行方向に崖があると判断して、ステップＳ３１１で、崖と見なす条件フラグ３５０をオンしてから、地形表面情報取得処理にリターンする。
【０２１８】
図３１および図３２は、図２９のステップＳ１９３の拡張崖側面判定処理の限定しない一例を示すフロー図である。図３１に示すように、ＣＰＵ２０は、拡張崖側面判定処理を開始すると、ステップＳ３５１で、プレイヤオブジェクト１０２よりも一定距離下方向にある地面接触位置から進行方向に判定オブジェクト１２０を投げる。つまり、ＣＰＵ２０は、判定オブジェクト１２０を所定回数投げて検出した衝突位置Ｃｍのうち、プレイヤオブジェクト１０２の足元よりも下方であり、この足元からの差Ｈが所定距離ｈ以上である衝突位置Ｃｍを拡張崖側面判定処理における初回の開始位置Ｐａに決定する。また、この開始位置Ｐａから進行方向に所定距離ｄ５だけ移動した位置を目標位置Ｑａとして決定する。そして、判定オブジェクト１２０が開始位置Ｐａから目標位置Ｑａに向かって投げられる。
【０２１９】
次のステップＳ３５３では、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ステップＳ３５３で“ＹＥＳ”であれば、プレイヤオブジェクト１０２の進行方向に崖は無いと判断し、拡張崖側面判定処理を終了して、地形表面情報取得処理にリターンする。一方、ステップＳ３５３で“ＮＯ”であれば、ステップＳ３５５で、判定オブジェクト１２０を水平に投げたときの目標位置Ｑａから一定距離下方向に判定オブジェクト１２０を投げる。つまり、目標位置Ｑａを２回目の開始位置Ｐｂに決定し、開始位置Ｐｂから所定距離ｄ３だけ下方（真下）に移動した位置を目標位置Ｑｂとして決定する。そして、判定オブジェクト１２０が開始位置Ｐｂから目標位置Ｑｂに向かって投げられる。
【０２２０】
さらに、ステップＳ３５７で、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ステップＳ３５７で“ＹＥＳ”であれば、図３２に示すように、そのまま地形表面情報取得処理にリターンする。ステップＳ３５７で“ＮＯ”であれば、ステップＳ３５９で、最後に衝突しなかった目標位置から進行方向とは逆向きに判定オブジェクト１２０を投げる。つまり、目標位置Ｑｂを３回目の開始位置Ｐｃに決定し、この開始位置Ｐｃから所定距離ｄ４だけ進行方向とは逆向きに移動した位置を目標位置Ｑｃとして決定する。そして、判定オブジェクト１２０が開始位置Ｐｃから目標位置Ｑｃに向かって投げられる。
【０２２１】
続くステップＳ３６１では、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ステップＳ３６１で“ＮＯ”であれば、そのまま地形表面情報取得処理にリターンする。一方、ステップＳ３６１で“ＹＥＳ”であれば、図３２に示すステップＳ３６３で、下方向に判定オブジェクト１２０を投げたときの開始位置と目標位置の中間位置から進行方向とは逆向きに判定オブジェクト１２０を投げる。つまり、開始位置Ｐｂと目標位置Ｑｂの中間位置を開始位置Ｐｄとして決定し、この開始位置Ｐｄから所定距離ｄ４だけ進行方向とは逆向きに移動した位置を目標位置Ｑｄとして決定する。そして、判定オブジェクト１２０が開始位置Ｐｄから目標位置Ｑｄに向かって投げられる。
【０２２２】
そして、ステップＳ３６５で、判定オブジェクト１２０が地形オブジェクト１０４に衝突したかどうかを判断する。ステップＳ３６５で“ＮＯ”であれば、そのまま地形表面情報取得処理にリターンする。一方、ステップＳ３６５で“ＹＥＳ”であれば、ステップＳ３６７で、崖隣接フラグ３５２をオンして、地形表面情報取得処理にリターンする。
【０２２３】
この実施例によれば、プレイヤオブジェクトの進行方向に、予め決定された初回の目標位置およびその後に所定のルールに従って決定される目標位置に順次判定オブジェクトを投げることにより、当該判定オブジェクトが地形オブジェクトと衝突する位置を検出し、複数の衝突位置に基づいて地面の傾きおよび高さを算出するので、プレイヤオブジェクトの進行方向における地形に応じて、プレイヤオブジェクトのようなキャラクタオブジェクトのアニメーションを適切に決定するとともに、キャラクタオブジェクトのアクションを決定するためのＧＵＩを適切に表示することができる。
【０２２４】
また、この実施例によれば、地形の傾斜を計算するため、地形を構成する各ポリゴンに対応して地形の傾き情報を記憶させる必要がない。このため、作業コストを低減することができ、メモリ容量を増大させることもない。
【０２２５】
なお、この実施例では、球の形状の判定オブジェクト１２０を用いるようにしたが、判定オブジェクト１２０の形状は他の立体的形状であってもよい。たとえば、楕円球または正多面体の判定オブジェクト１２０を用いるようにしてもよい。
【０２２６】
また、この実施例では、次の目標位置Ｑｍを決定する場合に、前回の衝突位置Ｃｍ−１における法線ベクトルｎの逆方向ベクトルｎ´を用いて算出するようにしたが、これに限定される必要はない。
【０２２７】
別の方法では、前回の衝突位置Ｃｍ−１における法線ベクトルｎに垂直であり、プレイヤオブジェクト１０２の進行方向に所定距離Ｌ１だけ移動した位置から鉛直下向きに所定距離Ｌ２だけ移動した位置に、次の目標位置Ｑｍが決定されてもよい。ただし、所定距離Ｌ１およびＬ２はシミュレーション等によって経験的に予め決定される。
【０２２８】
さらに、この実施例で示したゲームシステムの構成は一例であり、これに限定される必要は無く、他の構成を採用することが可能である。たとえば、携帯型ゲーム装置に適用することもできる。また、ゲーム機能を備える、モニタが接続されたデスクトップのＰＣ、ノート型ＰＣ、タブレットＰＣまたはスマートフォンにも適用することができる。
【０２２９】
さらにまた、この実施例では、テレビ用ゲーム画像に対して画像処理を行ったが、端末装置で表示されるゲーム画像に対して画像処理を行うようにしてもよい。
【０２３０】
また、この実施例で示した具体的な数値およびゲーム画面（仮想空間）は一例であり、実際の製品に応じて適宜変更可能である。
【符号の説明】
【０２３１】
１０  …ゲームシステム
１２  …ゲーム装置
１４  …端末装置
１６  …テレビ
２０，５２ａ  …ＣＰＵ
２２  …システムＬＳＩ
２２ａ  …入出力プロセッサ
２２ｅ  …内部メインメモリ
２６  …外部メインメモリ
５６  …タッチパネル
５８  …アナログスティック
６０  …操作ボタン
６２  …ＬＣＤ
【図１】
0006483056.tif 000002
【図２】
0006483056.tif 000003
【図３】
0006483056.tif 000004
【図４】
0006483056.tif 000005
【図５】
0006483056.tif 000006
【図６】
0006483056.tif 000007
【図７】
0006483056.tif 000008
【図８】
0006483056.tif 000009
【図９】
0006483056.tif 000010
【図１０】
0006483056.tif 000011
【図１１】
0006483056.tif 000012
【図１２】
0006483056.tif 000013
【図１３】
0006483056.tif 000014
【図１４】
0006483056.tif 000015
【図１５】
0006483056.tif 000016
【図１６】
0006483056.tif 000017
【図１７】
0006483056.tif 000018
【図１８】
0006483056.tif 000019
【図１９】
0006483056.tif 000020
【図２０】
0006483056.tif 000021
【図２１】
0006483056.tif 000022
【図２２】
0006483056.tif 000023
【図２３】
0006483056.tif 000024
【図２４】
0006483056.tif 000025
【図２５】
0006483056.tif 000026
【図２６】
0006483056.tif 000027
【図２７】
0006483056.tif 000028
【図２８】
0006483056.tif 000029
【図２９】
0006483056.tif 000030
【図３０】
0006483056.tif 000031
【図３１】
0006483056.tif 000032
【図３２】
0006483056.tif 000033