(57)【要約】【課題】シューティングゲームにおいて、敵機の行動アルゴリズムをより知的にする。【解決手段】本発明によれば、モード判定手段（１０１）が、ある方向に直進する敵機が、その敵機の進行方向に回りこんで攻撃をする自機に撃墜される場合には、防御モード・囲い込みモードと判定する。ある方向に直進する敵機が、その敵機の進行方向に回りこんで攻撃をする自機に撃墜されない場合には、攻撃モードと判定する。防御モード・囲い込みモードにおいては、敵機の速度を遅くして、自機の移動を制限する敵機の攻撃弾の壁を作りやすくすると同時に、自機がいない方向に移動して自機の攻撃を避ける。攻撃モードにおいては、敵機の速度を速くして、敵機が様々な角度から自機に向けて攻撃弾を発射できるようにする。  【選択図】図１
2007330535.tif 000002
【特許請求の範囲】
【請求項１】
画面上に自機と敵機を表示し、Ｗ種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理方法であって、
モード判定手段が、ある方向に直進する敵機が、その敵機の進行方向に回りこんで攻撃をする自機に撃墜されるかどうかを判定するモード判定過程と、
敵機速度決定手段が、上記モード判定過程において、上記敵機が上記自機に撃墜されると判定された場合には、上記方向への敵機の移動速度を遅くし、上記敵機が上記自機に撃墜されないと判定された場合には、上記方向への敵機の移動速度を速くする敵機速度決定過程と、
を有することを特徴とするシューティングゲーム処理方法。
【請求項２】
請求項１に記載のシューティングゲーム処理方法において、
自機が攻撃弾を発射する方向をＹ軸、自機が攻撃弾を発射する方向と垂直な方向をＸ軸とし、
上記モード判定過程は、自機の現在位置のＸ座標と敵機の現在位置のＸ座標の差の絶対値を、自機のＸ軸方向への最大移動速度で割った値（以下、Ａ値とする。）を求め、自機の現在位置のＹ座標と敵機の現在位置のＹ座標の差の絶対値を、敵機のＹ軸方向への最大移動速度と自機のＹ軸方向への最大移動速度との差の絶対値で割った値（以下、Ｂ値とする。）を求め、Ａ値とＢ値を比較し、Ｂ値の方が大きい場合には、上記敵機が上記自機に撃墜されると判定し、Ａ値の方が大きい場合には、上記敵機が上記自機に撃墜されないと判定する過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項３】
請求項１又は２に記載のシューティングゲーム処理方法において、
上記敵機速度決定過程は、更に、上記モード判定過程において、上記敵機が上記自機に撃墜されると判定された場合には、上記方向と垂直な方向で自機がいない方向への敵機の移動速度を０以上にし、上記敵機が上記自機に撃墜されないと判定された場合には、上記方向と垂直な方向で自機がいる方向への敵機の移動速度を０以上にする過程を含む、
ことを特徴とするシューティングゲーム処理方法。
【請求項４】
請求項３に記載のシューティングゲーム処理方法において、
自機が攻撃弾を発射する方向をＹ軸、自機が攻撃弾を発射する方向と垂直な方向をＸ軸とし、
更に、
自機移動パターン生成手段が、所定の時間（以下、行動単位時間Ｔとする。）だけ移動する行動をＤ回行う自機の各移動先の候補を生成する自機移動パターン生成過程と、
衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定過程と、
自機移動範囲決定手段が、上記衝突判定過程において衝突しないと判定された位置のＸ座標の最小値と最大値を決定する自機移動範囲決定過程と、
位置判定手段が、敵機の現在位置のＸ座標が、上記Ｘ座標の最小値と最大値の間にあるかどうかを判定する位置判定過程と、
を有し、
上記敵機速度決定過程は、更に、
（１）上記モード判定過程において上記敵機が上記自機に撃墜されると判定され、かつ、上記位置判定過程において敵機の現在位置のＸ座標が上記Ｘ座標の最小値と最大値の間にないと判定された場合には、上記方向と垂直な方向への敵機の移動速度を０にする過程と、
（２）上記モード判定過程において上記敵機が上記自機に撃墜されると判定され、かつ、上記位置判定過程において敵機の現在位置のＸ座標が上記Ｘ座標の最小値と最大値の間にあると判定された場合には、上記方向と垂直な方向で自機がいない方向への敵機の移動速度を０より大きくする過程と、
を含む、
ことを特徴とするシューティングゲーム処理方法。
【請求項５】
請求項１〜３の何れかに記載のシューティングゲーム処理方法において、
更に、
自機移動パターン生成手段が、所定の時間（以下、行動単位時間Ｔとする。）だけ移動する行動をＤ回行う自機の各移動先の候補を生成する自機移動パターン生成過程と、
衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定過程と、
自機移動範囲決定手段が、上記衝突判定過程において衝突しないと判定された位置のＸ座標の最小値と最大値を決定する自機移動範囲決定過程と、
到達時間差計算手段が、上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算過程と、
攻撃目標位置判定手段が、上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定過程と、
攻撃弾発射手段が、上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃発射過程と、
を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項６】
請求項４に記載のシューティングゲーム処理方法において、
更に、
到達時間差計算手段が、上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算過程と、
攻撃目標位置判定手段が、上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定過程と、
攻撃弾発射手段が、上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃発射過程と、
を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項７】
請求項５又は６に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根に近い各枝経路から順に、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により、攻撃目標位置を探索する、
ことを特徴とするシューティングゲーム処理方法。
【請求項８】
請求項５又は６に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根から限界深さに至る各行動パターンを予め決めた順に、その行動パターンにおける各経路において、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により攻撃目標位置を探索する
ことを特徴とするシューティングゲーム処理方法。
【請求項９】
請求項５〜８の何れかに記載のシューティングゲーム処理方法において、
上記攻撃目標位置判定過程は、更に、攻撃目標位置が複数存在する場合には、自機が最も短い時間で到達することができる攻撃目標位置を決定する過程、を更に有し、
上記攻撃発射過程は、上記自機が最も短い時間で到達することができる攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項１０】
請求項５〜９の何れかに記載のシューティングゲーム処理方法において、
上記到達時間差計算過程は、上記攻撃目標位置判定過程において攻撃目標位置が見つかったときには、上記攻撃目標位置に自機が移動する時間よりも、上記攻撃目標位置以外の衝突しないと判定された位置に自機が移動する時間の方が短い場合のみ、自機がその衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾がその衝突しないと判定された位置へ移動するのに必要な時間との上記差の絶対値を計算する過程であり、
上記到達時間差計算過程は、更に、最後に見つかった攻撃目標位置のみを攻撃目標位置とする過程を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項１１】
請求項５〜１０の何れかに記載のシューティングゲーム処理方法において、
上記所定の値は、自機の大きさと敵機が新たに発射する攻撃弾の大きさの和の半分をその攻撃弾の速さで割った値である、
ことを特徴とするシューティングゲーム処理方法。
【請求項１２】
請求項５〜１１の何れかに記載のシューティングゲーム処理方法において、更に、
行動単位時間設定手段が、上記モード判定過程において、上記敵機が上記時期に撃墜されると判定された場合には、上記行動単位時間Ｔを長くし、上記敵機が上記時期に撃墜されないと判定された場合には、上記行動単位時間Ｔを短くする行動単位時間設定過程を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項１３】
請求項５〜１２の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記所定の値をより大きな値に変更して、上記の各過程を再度実行する、
ことを特徴とするシューティングゲーム処理方法。
【請求項１４】
請求項５〜１２の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記攻撃弾発射過程は、自機の現在位置にあるランダムな変位を与えた位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項１５】
請求項５〜１２の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記ＤをＤ＋１として、攻撃目標位置が見つかるまで、上記の各過程を再度実行する、
ことを特徴とするシューティングゲーム処理方法。
【請求項１６】
請求項１５に記載のシューティングゲーム処理方法において、
上記Ｄが一定の値になったら、上記の各過程を実行するのを止める、
ことを特徴とするシューティングゲーム処理方法。
【請求項１７】
画面上に自機と敵機を表示し、Ｗ種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理装置であって、
ある方向に直進する敵機が、その敵機の進行方向に周りこんで攻撃をする自機に撃墜されるかどうかを判定するモード判定手段と、
上記モード判定過程において、上記敵機が上記自機に撃墜されると判定された場合には、上記方向への敵機の移動速度を遅くし、上記敵機が上記自機に撃墜されないと判定された場合には、上記方向への敵機の移動速度を速くする敵機速度決定手段と、
を有することを特徴とするシューティングゲーム処理装置。
【請求項１８】
請求項１〜１６の何れかに記載のシューティングゲーム処理方法の各過程をコンピュータに実行させるためのシューティングゲーム処理プログラム。
【請求項１９】
請求項１８記載のシューティングゲーム処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画面上に自機と敵機を表示し、自機をＷ種類の行動によって所定の時間だけ移動させる操作を行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの処理方法、その装置、そのプログラム及びその記録媒体に関する。
【背景技術】
【０００２】
シューティングゲームの処理方法、特に敵機の動作を制御する方法としては、自機の位置を考慮しないアルゴリズム、例えば、自機の位置とは無関係に敵機が一定方向に下降し続けるアルゴリズムや、自機の位置とは無関係に敵機が静止し続けるアルゴリズムを採用する方法があった。また、自機の位置を考慮するアルゴリズムとしては、例えば、自機の位置に近づくように敵機が動くアルゴリズムや、常に自機との位置を一定距離・方向に保つように敵機が動くアルゴリズムがあった。
また、敵機の攻撃弾発射動作を制御する方法としては、例えば、自機の位置とは無関係に敵機が一定方向に攻撃弾を発射するアルゴリズムや、ランダムな方向に攻撃弾を発射するアルゴリズムがあった。また、自機の位置を考慮するアルゴリズムとしては、例えば、攻撃弾発射時点の自機の位置に向けて攻撃弾を発射するアルゴリズムがあった。
【０００３】
また、チェス、オセロ、将棋といった非アクションの思考ゲームにおいては、人工知能の技術を導入したアルゴリズムの研究が行われている（例えば、非特許文献１参照）。
【非特許文献１】Jonathan Schaeffer,H.Jaap van den Herik,“Games,computers,and artificial intelligence”,Artificial Intelligence,2002,Vol.134,p1-7
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、従来技術による敵機の動作を制御アルゴリズム、敵機の攻撃弾発射アルゴリズムは、単純であり、プレイヤーに飽きられやすいという問題があった。
例えば、自機の攻撃弾が縦方向に飛ぶ、いわゆる縦型シューティングゲームにおいては、ゲーム画面が縦型であることが比較的多く、敵機が画面の上方から出現して、画面の下方に位置する自機を攻撃することが多い。このような縦型シューティングゲームにおいては、ゲーム画面が縦型であるため、敵機の攻撃が自機に対して脅威を与え得るほどの近距離まで、敵機が自機に近づくことは難しく、敵機が自機の攻撃により早々に撃墜されるケースが多い。また、ゲームの難易度のバランスを考えると、敵機のスピードを過剰に大きくすることは適切ではない。このため、多くの縦型シューディングゲームにおいては、画面上方から出現した敵機は早々に撃墜されてしまうため、敵機の行動制御アルゴリズムを工夫するメリットが小さいという問題があった。
【０００５】
このような問題を解くためには、人工知能の技術を導入するのが有効であると考えられるが、現在人工知能におけるゲームの研究は、チェス、オセロ、将棋といった非アクションの思考ゲームが中心であり、人工知能の技術をシューティングゲームのようなアクションゲームに応用する試みはなかった。
また、チェス、オセロ、将棋といった思考ゲームを解くための人工知能技術の研究は、効率的に深い探索計算を行うための手法の開発に集中している（例えば、非特許文献１参照。）。もちろん、シューティングゲームにおいても、知的な敵機の動作アルゴリズムを開発するためには、探索技術は重要である。しかし、シューティングゲームにおいて、探索の深さに関する要求は低く、むしろ、いかにしてアクションゲームにおいて求められているレベルの実時間性を実現するかが大事である。しかし、そのような要求を満たす技術はなかった。
また、敵機の制御には、従来のように、全ての敵機の動きを監視する方式の中央制御では不十分である。なぜなら、ゲーム画面上に出現する敵機の状況は時々刻々と変化をし、それらの全ての状況を考慮した中央制御アルゴリズムの開発は事実上不可能であるからである。
【課題を解決するための手段】
【０００６】
本発明によれば、画面上に自機と敵機を表示し、Ｗ種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理方法において、モード判定手段が、ある方向に直進する敵機が、その敵機の進行方向に回りこんで攻撃をする自機に撃墜されるかどうかを判定する。敵機速度決定手段が、上記モード判定過程において、上記敵機が上記自機に撃墜されると判定された場合には、上記方向への敵機の移動速度を遅くし、上記敵機が上記自機に撃墜されないと判定された場合には、上記方向への敵機の移動速度を速くする。
【発明の効果】
【０００７】
ある方向に直進する敵機が、敵機の進行方向に回り込んで攻撃をしてくる自機に撃墜される可能性がある場合、すなわち、自機と敵機の距離が離れている場合には、その方向への敵機の移動速度を遅くすることにより、敵機が発射する攻撃弾により自機の移動をさえぎる壁（図６参照）を作りやすくなり、敵機の防御力が増す。また、ある方向に直進する敵機が、敵機の進行方向に回り込んで攻撃をしてくる自機に撃墜される可能性がない場合、すなわち、自機と敵機の距離が近い場合には、その方向への敵機の移動速度を速くすることにより、敵機が自機の周りを速い速度で移動しながら、八方から囲むようにして自機に向けて攻撃弾を発射することができるため、敵機の攻撃力が増す。
この結果、敵機の攻撃がより知的になる。また、個々の敵機が上記のアルゴリズムに従って行動することにより、敵機同士間で連携が生まれるため、全体としてよりゲーム性の増したシューティングゲームを実現することができる。
【発明を実施するための最良の形態】
【０００８】
［理論的背景］
＜シューティングゲームの説明＞
図６に、本発明の処理の対象となるシューティングゲームを例示する。画面上には、自機１と自機１の攻撃弾３、敵機２と敵機２の攻撃弾４が表示される。攻撃弾３、敵機２、攻撃弾４は、複数存在していても良い。自機１、敵機２、攻撃弾３、攻撃弾４は、Ｘ軸とＹ軸で構成される２次元の平面上に位置するものとする。
ユーザは、自機１を操作して、敵機２と闘う。ユーザは、一回の操作で、Ｗ種類の移動速度（方向と速さ）で、行動単位時間Ｔだけ自機を移動させることができる。自機１が取り得るＷ種類の移動速度（Ｖｓｘ（ｗ），Ｖｓｙ（ｗ））は予め決められており、それぞれの移動速度（Ｖｓｘ（ｗ），Ｖｓｙ（ｗ））には、移動速度番号ｗ（ｗ＝１，…，Ｗ）が付けられているものとする。以下では、移動速度番号ｗを選択する行動のことを行動（ｗ）という。また、ユーザは、Ｗ種類の速度による移動と同時に、敵機２を攻撃するための攻撃弾３を発射する操作をすることができる。自機１から発射された攻撃弾３は、画面の上方に向かって直進する。
【０００９】
敵機２は、行動単位時間Ｔごとに、移動速度（Ｖｅｘ，Ｖｅｙ）で移動することができる。また、敵機２は移動と同時に、攻撃弾４を発射することができる。敵機２が発射した攻撃弾４は、一定速度（Ｖｂｉｋｘ（ｔ），Ｖｂｉｋｙ（ｔ））で移動するものとする。
自機１が、敵機２及び敵機２が発射する攻撃弾４と衝突した場合には、自機１は破壊され、そこでゲームオーバーとなる。逆に、自機１の攻撃弾３が敵機２に衝突した場合には、敵機２は破壊される。自機１の攻撃弾３によりすべての敵機２を破壊した場合には、ユーザは、そのゲームに勝利することになる。
以下では、自機のＸ軸方向、及び、Ｙ軸方向の移動速度の最大値をＶｓｍａｘ、敵機のＸ軸方向の移動速度の最大値をＶｅｘｍａｘとする。また、自機の現在位置を（Ｘｓ，Ｙｓ）、敵機の現在位置を（Ｘ，Ｙ）とする。そして、例えば、Ｖｅｘｍａｘ＞Ｖｓｍａｘとする。
【００１０】
＜安全行動パターンの説明＞
以下では、本発明を理解する上で必要になる「安全行動パターン」の概念について説明する。自機がＷ種類の速度による移動を所定の回数（Ｄ回）だけ行うことができるとする。このとき、自機が取り得る全行動パターンについて、自機が敵機の攻撃弾により破壊されるかどうかを調べる。すなわち、各行動の深さｄ（ｄ＝｛１，…，Ｄ｝）においてＷ種類の移動速度による移動を行うことによって自機が取り得る全行動パターンについて、自機が敵機の攻撃弾により破壊されるかどうかを調べる。全行動パターンのうち、自機が攻撃弾により破壊されない行動パターンのことを安全行動パターンとする。逆に、自機が攻撃弾により破壊されてしまう行動パターンのことを死亡行動パターンとする。全行動パターンと安全行動パターンと死亡行動パターンの間には、全行動パターン数＝安全行動パターンの総数＋死亡行動パターンの総数、という関係がある。
【００１１】
例えば、Ｗ＝３、Ｄ＝３の場合の安全行動パターンの例を図１０に示す。図１０においては、※１、※２、※３において衝突が起こるものとする。また、図１０において、実線は、各深さｄにおいて、ｗ＝１の行動を選択した場合の自機の描く軌跡を表している。破線は、各深さｄにおいて、ｗ＝２の行動を選択した場合の自機の描く軌跡を表している。一点鎖線は、各深さｄにおいて、ｗ＝３の行動を選択した場合の自機の描く軌跡を表している。枝の末端に○が示されているものが安全行動パターンであり、枝の末端に×が示されているものが死亡行動パターンである。
以下では、安全行動パターンに従って移動した位置のＸ座標の最大値をＸｍａｘ、安全行動パターンに従って移動した位置のＸ座標の最小値をＸｍｉｎとする。ＸｍａｘとＸｍｉｎは、後述するように、例えば、縦型探索、横型探索といった探索計算によって求める。
【００１２】
＜敵機の移動速度の決定＞
上記のようなシューティングゲームにおいて、以下のようにして、敵機の移動速度（Ｖｅｘ，Ｖｅｙ）を定めると良い。
まず、自機が敵機の攻撃弾により破壊されるかどうかを考慮せずに、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるかどうかを判定する（図５、ステップＳ１６１）。その後、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるものについて、自機が敵機の攻撃弾により破壊されるかどうかを考慮して、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊されるかどうかを判定する（図５、ステップＳ１６２〜ステップＳ１６６）。
例えば、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜である場合には、図１３に示すように、敵機の進行方向に自機が回り込むことができる。このため、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性がある。しかし、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜であっても、Ｘｍａｘ＜Ｘ、もしくは、Ｘ＜Ｘｍｉｎである場合には、自機が、敵機の進行方向に回り込んで敵機を破壊するのは不可能である。Ｘｍａｘ＜Ｘ、もしくは、Ｘ＜Ｘｍｉｎである場合には、自機の安全行動パターンの中に、自機が敵機の進行方向に回り込むような行動パターンがないためである。言い換えれば、Ｘｍａｘ＜Ｘ、もしくは、Ｘ＜Ｘｍｉｎである場合には、自機が、その位置（Ｘ，Ｙ）に位置する敵機の進行方向に回り込むような行動パターンは死亡行動パターンであるため、自機が、その位置（Ｘ，Ｙ）に位置する敵機の進行方向に回り込むような行動パターンを取れば、自機は敵機が既に発射した攻撃弾により破壊されてしまうためである。
【００１３】
｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜である場合には、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるため、敵機は、防御モード・自機囲い込みモードにおける敵機行動制御アルゴリズムに従って行動する（図５、ステップＳ１６２〜ステップＳ１６８）。具体的には、Ｙ軸方向には遅く動き、敵機が発射する攻撃弾によって自機を囲い込む壁を作り、敵機の防御能力を高める。例えば、敵機は、Ｙ軸方向には、Ｖｓｍａｘ／２の移動速度で移動する。また、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜であり、かつ、Ｘｍａｘ＜Ｘ、若しくは、Ｘ＜ｍｉｎである場合には、上述したように、敵機が、敵機の進行方向に回り込む自機の攻撃によって破壊されることはないため、Ｘ軸方向には移動しない。また、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜であり、かつ、Ｘｍｉｎ＜Ｘ＜Ｘｍａｘである場合には、上述したように、敵機が、敵機の進行方向に回り込む自機の攻撃によって破壊される可能性があるため、敵機は、Ｘ軸方向であって自機がいない方向に０以上の速度で移動する。例えば、Ｘｍｉｎ＜Ｘ＜Ｘｍａｘである場合には、Ｘ軸方向であって自機がいない方向に向かって、Ｖｅｘｍａｘの移動速度で移動する。
【００１４】
｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＞｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜である場合には、図１４に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性はないため、敵機は、攻撃モードにおける敵機行動制御アルゴリズムに従って行動する（図５、ステップＳ１６９〜ステップＳ１６１１）。具体的には、Ｙ軸方向に速く動き、様々な方向から自機に向けてまばらに攻撃弾が発射されるようにする。例えば、Ｙ軸方向には、Ｖｓｍａｘ×２の移動速度で移動し、また、Ｘ軸方向には移動しないか、Ｘ軸方向であって自機がいる方向に０以上の速度で移動する。
【００１５】
このように、敵機の移動速度を決めることによって、早期に行動範囲が狭められた自機を、攻撃力に優れた敵機で追い込むという戦術が可能となり、よりゲーム性が増したシューティングゲームを実現することができる。
なお、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜ではなく、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＜｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜あるかどうかを判定して、防御・囲い込みモードか、攻撃モードかを決定しても良い。また、Ｘｍｉｎ＜Ｘ＜Ｘｍａｘではなく、Ｘｍｉｎ≦Ｘ≦Ｘｍａｘかどうかで、敵機がＸ軸方向であって自機がいない方向に移動するかどうかを決定しても良い。
【００１６】
＜攻撃弾の発射の方法＞
上記の敵機の移動速度の決定方法と同時に、以下に述べるように、「安全行動パターン」の数が少なくなるように敵機に攻撃弾を発射させると効果的である。敵機が攻撃弾を発射する時点で存在している自機の取り得る「安全行動パターン」の数を減らすことができれば、敵機は自機を効率的に追い詰めているということができるためである。また、敵機の移動速度が遅い場合に、安全行動パターンの中に含まれる位置のひとつを通過するように多くの攻撃弾を狭い間隔で発射すれば、自機の移動をさえぎる壁が作りやすくなるためである。
以下では、ある位置に自機が到達するのにかかる時間と、その位置に敵機が発射する攻撃弾が到達するのにかかる時間との差の絶対値が所定の値Ｃよりも小さい場合には、その位置のことを攻撃弾の目標位置（以下、攻撃目標位置とする。）と呼ぶ。所定の値Ｃは、例えば、自機の大きさと敵機攻撃弾の大きさの和の半分をＳ、敵機の攻撃弾の速度をＶｅとすると、Ｓ／Ｖｅとすることができる。また、自機の大きさとしては、例えば、自機の形状に内接する円の直径、敵機攻撃弾の大きさとしては、敵機攻撃弾の形状に内接する円の直径を取ることができる。
【００１７】
ある位置に自機が移動するのにかかる時間と、その位置に敵機が発射する攻撃弾が移動するのにかかる時間との差の絶対値がＳ／Ｖｅよりも小さい場合には、敵機がその位置に向けて攻撃弾を発射すると、その位置に移動する行動を選択した自機が、攻撃弾とその位置において衝突するのである。
ここで、自機の攻撃目標位置への到達時間が短いほど、敵機が発射する攻撃弾によって減らすことができる自機の安全行動パターンの数は多いということができる。なぜなら、自機の移動パターンの探索木の根元の近くにある（浅い深さにある）節点を攻撃目標位置とすると、その節点から分岐する安全行動パターンのすべてをなくすことができるためである。
【００１８】
このような、自機の移動パターンの探索木の根元の近くにあり、自機が到達することができる時間が短い攻撃目標位置を見つけるために、以下に述べる第１実施形態では縦型探索を用いる。また、第２実施形態では、横型探索を用いる。これらの実施形態は一例であり、他の探索方法を用いても本発明を実施することができる。すなわち、探索の方法は、後述する縦型探索と横型探索に限定されない。
縦型探索とは、子節点を優先して探索するものである。例えば、Ｄ＝３、Ｗ＝３の場合、図１１に示すように、行動単位ごとの移動経路につけた番号の順番でそれぞれの経路を探索する手法である。以下に述べる第１実施形態では、衝突が起こった場合には、衝突が起こった箇所より後の経路を探索しない。例えば、※１（６の経路）において衝突が起こった場合には、７〜９の経路については探索しない。この場合には、６の経路を探索して衝突が発生した後に、１０の経路を探索することになる。また、ひとつでも適切な攻撃目標位置が見つかると、その攻撃目標位置に到達するまでの時間より、自機の到達時間が長い位置については探索を行わない。例えば、図５に示すように、深さｄ＝２の探索で、○（１５の経路）において適切な攻撃目標位置が見つかった場合には、自機が、現在位置から○で示された攻撃目標位置に到達するまでの時間よりも、自機の到達時間が短い位置についてのみ適切な攻撃目標位置と成り得るかどうかを調べる。
【００１９】
また、横型探索とは、ある節点から探索を開始して、その節点に接続している節点を全て調べた後、その調べた節点に接続している子節点を順番に調べて行く探索方法である。例えば、Ｄ＝３、Ｗ＝３の場合、図１２に示すように、行動単位ごとの移動経路につけた番号の順番でそれぞれの経路を探索する手法である。以下に述べる第２実施形態では、衝突が起こった場合には、衝突が起こった箇所より後の経路を探索しない。例えば、※１（５の経路）において衝突が起こった場合には、１６〜１８の経路については探索しない。この場合には、１５の経路を探索した後に、１９の経路を探索する。また、ひとつでも適切な攻撃目標位置が見つかると、その攻撃目標位置に到達する時間よりも、自機の到達時間が長い位置については探索を行わない。例えば、図１２に示すように、深さｄ＝２の探索で、○（７の経路）において適切な攻撃目標位置が見つかった場合には、自機が、現在位置から○で示された攻撃目標位置に到達するまでの時間よりも、自機の到達時間が短い位置についてのみ適切な攻撃目標位置と成り得るかどうかを調べる。
【実施例１】
【００２０】
図１、２を参照して、本発明の第１実施形態（縦型探索）によるシューティングゲーム処理方法を実施するためのシューティングゲーム処理装置１０００を説明する。図１は、シューティングゲーム処理装置１０００の機能構成例を示す図である。図２は、シューティングゲーム処理装置１０００の処理例を示す図である。
シューティングゲーム処理装置１０００は、例えば、自機移動パターン生成部１０、攻撃弾位置推定部２０、衝突判定部３０、攻撃目標位置判定部４０、攻撃目標位置バッファ５０、自機移動パターンバッファ５１、敵機攻撃弾状態バッファ５２、自機移動範囲バッファ５４、攻撃弾発射部６０、自機移動範囲決定部７０、敵機速度決定部８０から構成される。
自機移動パターン生成部１０は、例えば、初期化部１０１、制御部１０２、バッファ１０３、位置更新部１０４、記憶部１０５から構成される。
攻撃弾位置推定部２０は、例えば、記憶部２０１、位置取得部２０２から構成される。
攻撃目標位置判定部４０は、例えば、到達時間差計算部４０１を含む。
敵機速度決定部８０は、例えば、モード判定部８０１と位置判定部８０２から構成される。
【００２１】
＜準備＞
自機の行動の回数（探索の深さ）Ｄ、自機の取り得る行動ｗの種類の数Ｗ、各行動ｗを取ったときの自機の速度（Ｖｘｗ，Ｖｙｗ）、行動単位時間Ｔは予め設定され、自機移動パターン生成部１０の記憶部１０５に格納されているものとする。
例えば、Ｄ＝５、Ｗ＝９に設定することができる。また、各行動ｗを取ったときの自機の速度（Ｖｘｗ，Ｖｙｗ）としては、例えば、Ｗ＝９の場合、（Ｖｘ１，Ｖｙ１）＝（０，１）、（Ｖｘ２，Ｖｙ２）＝（１，１）、（Ｖｘ３，Ｖｙ３）＝（１，０）、（Ｖｘ４，Ｖｙ４）＝（１，−１）、（Ｖｘ５，Ｖｙ５）＝（０，−１）、（Ｖｘ６，Ｖｙ６）＝（−１，−１）、（Ｖｘ７，Ｖｙ７）＝（−１，０）、（Ｖｘ８，Ｖｙ８）＝（−１，１）、（Ｖｘ９，Ｖｙ９）＝（０，０）とすることができる。
また、行動単位時間Ｔの長さは、自機の大きさが０でないとした場合、自機が移動によって掃く領域がカバーすることができない領域が各深さの移動において発生しないようにすることが重要である。自機が移動によって掃く領域がカバーすることができない領域が存在すれば、求まったＸｍａｘ，Ｘｍｉｎは、実際に自機が移動することができる領域の一部については考慮していないことになるからである。このため、より適切な攻撃目標位置を見つけるためには、例えば、自機の形状に内接する円の直径を自機の速度で割った値を、上記行動単位時間Ｔとして設定する。
敵機の攻撃弾の速度（Ｖｂｉｋｘ（ｔ），Ｖｂｉｋｙ（ｔ））は、予め設定され攻撃弾位置推定部２０の記憶部２０１に格納されているものとする。
以下では、ｔを自機が行動を開始してからの経過時間、時刻ｔでの自機の位置を（Ｘｓ（ｔ），Ｙｓ（ｔ））、敵機ｉの発射したｋ番目の攻撃弾の時刻ｔでの位置を（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））とする。ここで、ｔは、処理単位時間τごとに離散的な時間を取るものとする。
【００２２】
＜ステップＳ１＞
自機移動パターン生成部１０の初期化部１０１は、ｔ＝０，ｄ＝１、Ｄｂ＝Ｄ，ｔｂ＝Ｄ×Ｔとして、これらをバッファ１０３に格納する。また、初期化部１０１は、時刻ｔにおける自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））を自機の現在位置に設定して、これを自機移動パターンバッファ５１に格納する。
＜ステップＳ２＞
自機移動パターン生成部１０の制御部１０２は、ｗ（ｄ）＝１とする。ここで、ｗ（ｄ）は、深さｄにおける自機の移動速度番号ｗである。
＜ステップＳ３＞
自機移動パターン生成部１０の制御部１０２は、ｗ（ｄ）と（Ｘｓ（ｔ），Ｙｓ（ｔ））の値を、それぞれ自機移動パターンバッファ５１に格納する。また、自機移動パターン生成部１０の制御部１０２は、時刻ｔにおける攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を、敵機攻撃弾状態バッファ５２に格納する。
【００２３】
＜ステップＳ４＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３からｔを読み出し、ｔをインクリメント幅τだけインクリメントする。インクリメントされたｔは、バッファ１０３に格納される。ｔのインクリメント幅τは、行動単位時間Ｔより小さい値、好ましくはＴを複数等分する値であれば、どのような値でも良い。例えば、Ｔを０．３秒〜１秒としたとき、このＴを１０等分する時間間隔である０．０３秒〜０．１秒をτに設定することができる。
また、自機移動パターン生成部１０の位置更新部１０４は、自機の移動速度（Ｖｘ（ｗ（ｄ）），Ｖｙ（ｗ（ｄ））でｔのインクリメント幅τだけ移動した後の自機の位置を計算する。具体的には、位置更新部１０４は、（τ×Ｖｘ（ｗ（ｄ）），τ×Ｖｙ（ｗ（ｄ）））を計算して、位置の変位量を求め、これに（Ｘｓ（ｔ−τ），Ｙｓ（ｔ−τ））を加算することにより、自機の位置を更新する。インクリメント幅τでインクリメントした後の自機の位置、すなわち、更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））は、衝突判定部３０に出力される。
【００２４】
＜ステップＳ５＞
攻撃弾位置推定部２０は、攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を更新する。すなわち、τ時間経過後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を計算する。
具体的には、記憶部２０１に記憶された攻撃弾の速度（Ｖｂｉｋｘ（ｔ），Ｖｂｉｋｙ（ｔ））を読み出し、これをτ倍したものを、位置取得部２０２が取得した更新前の攻撃弾の位置（Ｘｂｉｋ（ｔ−τ），Ｙｂｉｋ（ｔ−τ））に加算することにより、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を求める。
更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））は、記憶部２０１に記憶される。また、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））は、衝突判定部３０と自機移動パターン生成部１０に出力される。
【００２５】
＜ステップＳ６＞
衝突判定部３０は、自機と攻撃弾が衝突したかどうかを判定する。衝突したかどうかは、予め設定され、図示していない衝突判定部３０内の記憶部に記憶された自機の形状、攻撃弾の形状と、自機移動パターン生成部１０から出力された更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））、攻撃弾位置推定部２０から出力された更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））とから判断される。
例えば、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の攻撃弾の形状が重なった場合には、自機と攻撃弾が衝突したと判定することができる。
衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部１０と自機移動範囲決定部７０に出力される。その後、ステップＳ７ａの処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部１０に出力される。その後、ステップＳ１２の処理を行う。
【００２６】
＜ステップＳ７ａ＞
ステップＳ７ａは、自機が敵機の攻撃弾に撃墜されないで移動することができるＸ軸方向の移動範囲の最大値・最小値を求めるための過程である。ステップＳ７ａは、図３に示すように、ステップＳ７１〜ステップＳ７４から構成される。
≪ステップＳ７１≫（図３）
衝突がなかった旨の信号を受け取った自機移動範囲決定部７０は、自機移動範囲バッファ５４に格納されているＸｍａｘを読み出し、Ｘｓ（ｔ）との大小関係を比較する。
Ｘｍａｘ＜Ｘｓ（ｔ）であれば、ステップＳ７２の処理を行う。
Ｘｓ（ｔ）≦Ｘｍａｘであれば、ステップＳ７３の処理を行う。
なお、自機移動範囲バッファ５４にＸｍａｘが格納されていない場合には、自機移動範囲決定部７０は、Ｘｓ（ｔ）をＸｍａｘとして自機移動範囲バッファ５４に格納して、ステップＳ８（図２）の処理を行う。
【００２７】
≪ステップＳ７２≫
自機移動範囲決定部７０は、Ｘｍａｘ＜Ｘｓ（ｔ）の場合には、Ｘｓ（ｔ）を新たなＸｍａｘとして、自機移動範囲バッファ５４に格納する。その後、ステップＳ８（図２）の処理を行う。
【００２８】
≪ステップＳ７３≫
自機移動範囲決定部７０は、Ｘｓ（ｔ）≦Ｘｍａｘの場合には、自機移動範囲バッファ５４に格納されているＸｍｉｎを読み出し、Ｘｓ（ｔ）との大小関係を比較する。
Ｘｓ（ｔ）＜Ｘｍｉｎであれば、ステップＳ７４の処理を行う。
Ｘｍｉｎ≦Ｘｓ（ｔ）であれば、ステップＳ８（図２）の処理を行う。
なお、自機移動範囲バッファ５４にＸｍｉｎが格納されていない場合には、自機移動範囲決定部７０は、Ｘｓ（ｔ）をＸｍｉｎとして自機移動範囲バッファ５４に格納して、ステップＳ８（図２）の処理を行う。
【００２９】
≪ステップＳ７４≫
自機移動範囲決定部７０は、Ｘｓ（ｔ）＜Ｘｍｉｎの場合には、Ｘｓ（ｔ）を新たなＸｍｉｎとして、自機移動範囲バッファ５４に格納する。その後、ステップＳ８（図２）の処理を行う。
＜ステップＳ８＞
自機移動パターン生成部１０の制御部１０２は、ステップＳ３のときから、行動単位時間Ｔが経過したかどうかを判定する。すなわち、バッファから読み出したｔがｄ×Ｔよりも大きいかどうか、つまり、ｔ≧ｄ×Ｔかどうかを判定する。
ｔ＜ｄ×Ｔであれば、ステップＳ４の処理を行う。すなわち、ｔがステップＳ３の時から行動単位時間Ｔを経過するまで、ステップＳ４〜Ｓ８を繰り返す。
ｔ≧ｄ×Ｔであれば、ステップＳ９の処理を行う。
＜ステップＳ９＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｄを１だけインクリメントする。インクリメントされたｄは、バッファ１０３に格納される。
＜ステップＳ１０＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｄが、バッファ１０３から読み出したＤｂより大きいかどうかを判定する。すなわち、Ｄｂ＜ｄかどうかを判定する。
Ｄｂ≧ｄであると判定された場合には、制御部１０２は、ステップＳ２の処理を行う。
Ｄｂ＜ｄであると判定された場合には、制御部１０２は、ステップＳ１１の処理を行う。
【００３０】
＜ステップＳ１１＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｄを、１だけデクリメントする。デクリメントされたｄは、バッファ１０３に格納される。
＜ステップＳ１２＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｔを（ｄ−１）Ｔに設定する。（ｄ−１）Ｔに設定されたｔは、バッファ１０３に格納される。また、自機移動パターンバッファ５１に格納されたｗ（ｄ）を読み出し、１だけインクリメントする。インクリメントされたｗ（ｄ）は、自機移動パターンバッファ５１に格納される。
＜ステップＳ１３＞
自機移動パターン生成部１０の制御部１０２は、記憶部１０５から読み出したＷと、自機移動パターンバッファ５１から読み出したｗ（ｄ）の大小関係を比較する。
Ｗ＜ｗ（ｄ）であれば、自機移動パターン生成部１０の制御部１０２は、ステップＳ１５の処理を行う。Ｗ≧ｗ（ｄ）であれば、自機移動パターン生成部１０の制御部１０２は、ステップＳ１４の処理を行う。
＜ステップＳ１４＞
自機移動パターン生成部１０の制御部１０２は、自機移動パターンバッファ５１から、時刻ｔにおける自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））を読み出す。また、敵機攻撃弾状態バッファ５２から、時刻ｔにおける攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を読み出す。その後、ステップＳ３の処理の処理を行う。
【００３１】
＜ステップＳ１５＞
ステップＳ１３においてＷ＜ｗ（ｄ）であると判定された場合には、自機移動パターン生成部１０の制御部１０２は、ｄ＝１か否かを判定する。
ｄ≠１と判定された場合には、ステップＳ１１の処理を行う。
ｄ＝１と判定された場合には、ステップＳ１６ａの処理を行う。
＜ステップＳ１６ａ＞
ステップＳ１５において、ｄ＝１と判定された場合には、自機のＸ軸方向の移動範囲の最大値Ｘｍａｘ、最小値Ｘｍｉｎを求める探索を終了する。そして、敵機速度決定部８０が、自機のＸ軸方向の移動範囲の最大値Ｘｍａｘ、最小値Ｘｍｉｎを基にして、敵機の移動速度を決定する。ステップＳ１６ａは、図５に示すように、ステップＳ１６１〜ステップ１６１１から構成される。
【００３２】
≪ステップＳ１６１≫（図５）
まず、敵機速度決定部８０のモード判定部８０１が、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜かどうかを判定する。
｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜である場合には、図１３に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるので、敵機速度決定アルゴリズムは、防御モード・自機囲い込みモードに移行する。具体的には、ステップＳ１６２〜ステップＳ１６８の処理を行う。
【００３３】
｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＞｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜である場合には、図１４に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性がないので、敵機速度決定アルゴリズムは、攻撃モードに移行する。具体的には、ステップＳ１６９〜ステップＳ１６１１の処理を行う。
≪ステップＳ１６２≫
敵機速度決定部８０の位置判定部８０２は、自機移動範囲バッファ５４から読み出したＸｍａｘと敵機の現在位置のＸ座標（Ｘ）との大小関係を比較する。
【００３４】
Ｘｍａｘ＜Ｘであれば、ステップＳ１６３の処理を行う。
Ｘ≦Ｘｍａｘであれば、ステップＳ１６４の処理を行う。
≪ステップＳ１６３≫
Ｘｍａｘ＜Ｘのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はＸ軸方向には移動しない。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝０、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００３５】
≪ステップＳ１６４≫
敵機速度決定部８０の位置判定部８０２は、自機移動範囲バッファ５４から読み出したＸｍｉｎと敵機の位置のＸ座標（Ｘ）との大小関係を比較する。
Ｘ＜Ｘｍｉｎであれば、ステップＳ１６５の処理を行う。
Ｘｍｉｎ≦Ｘであれば、ステップＳ１６６の処理を行う。
【００３６】
≪ステップＳ１６５≫
Ｘ＜Ｘｍｉｎのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はＸ軸方向には移動しない。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝０、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００３７】
≪ステップＳ１６６≫
敵機速度決定部８０の位置判定部８０２は、自機の現在位置のＸ座標の値Ｘｓと敵機の現在位置のＸ座標（Ｘ）との大小関係を比較する。
Ｘｓ＜Ｘであれば、ステップＳ１６７の処理を行う。
Ｘ≦Ｘｓであれば、ステップＳ１６８の処理を行う。
【００３８】
≪ステップＳ１６７≫
ステップＳ１６４とステップＳ１６５において、Ｘｍｉｎ＜Ｘ＜Ｘｍａｘと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、Ｘ軸方向であって自機がいない方向に向かって移動する。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００３９】
≪ステップＳ１６８≫
ステップＳ１６４とステップＳ１６５において、Ｘｍｉｎ＜Ｘ＜Ｘｍａｘと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が、敵機の進行方向に回り込んで攻撃をする自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、Ｘ軸方向であって自機がいない方向に向かって移動する。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝−Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００４０】
≪ステップＳ１６９≫
敵機速度決定部８０の位置判定部８０２は、自機の現在位置のＸ座標の値Ｘｓと敵機の現在位置のＸ座標の値Ｘとの大小関係を比較する。
Ｘ＜Ｘｓであれば、ステップＳ１６１０の処理を行う。
Ｘｓ≦Ｘであれば、ステップＳ１６１１の処理を行う。
≪ステップＳ１６１０≫
ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＞｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、攻撃モードにあるため、敵機はＹ軸方向には速く移動する。また、Ｘ軸方向には移動しないか、もしくは、Ｘ軸方向であって自機がいる方向にむかって移動する。例えば、Ｖｅｘ＝Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ×２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００４１】
≪ステップＳ１６１１≫
ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＞｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、攻撃モードにあるため、敵機はＹ軸方向には速く移動する。また、Ｘ軸方向には移動しないか、もしくは、Ｘ軸方向であって自機がいる方向にむかって移動する。例えば、Ｖｅｘ＝−Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ×２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
上記の処理を、一定時間（例えば、行動単位時間Ｔ）ごとに行う。
以上が、第１実施形態によるシューティングゲーム処理装置１０００の概要である。
【実施例２】
【００４２】
図７〜９を参照して、本発明の第２実施形態（横型探索）によるシューティングゲーム処理方法を実施するためのシューティングゲーム処理装置１００１を説明する。図７は、シューティングゲーム処理装置１００１の機能構成例を示す図である。図８、９は、シューティングゲーム処理装置１００１の処理例を示す図である。
シューティングゲーム処理装置１００１は、自機移動パターン生成部１１が順列作成部１０６と順列獲得部１０７を有する点、自機移動パターン生成部１１の制御部１１２の動作が、シューティングゲーム処理装置１０００の自機移動パターン生成部１０の制御部１０２の動作と異なる点、順列データバッファ５３を有する点で、図１に示したシューティングゲーム処理装置１０００と異なる。シューティングゲーム処理装置１００１の他の機能構成は、シューティングゲーム処理装置１０００の機能構成と同じである。
【００４３】
＜準備＞
第１実施形態と同様に、自機の行動の回数（探索の深さ）Ｄ、自機の取り得る行動ｗの種類の数Ｗ、各行動ｗを取ったときの自機の速度（Ｖｘｗ，Ｖｙｗ）、行動単位時間Ｔは予め設定され、自機移動パターン生成部の記憶部１０５に格納されているものとする。
また、敵機の攻撃弾の速度（Ｖｂｉｋｘ（ｔ），Ｖｂｉｋｙ（ｔ））は、予め設定され攻撃弾位置推定部２０の記憶部２０１に格納されているものとする。
以下では、ｔを自機が行動を開始してからの経過時間、時刻ｔでの自機の位置を（Ｘｓ（ｔ），Ｙｓ（ｔ））、敵機ｉの発射したｋ番目の攻撃弾の時刻ｔでの位置を（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））、ｄを現在評価している自機行動順列の要素の総数、ｊを現時点で評価している自機行動順列番号、ｄｅを現時点で評価している自機行動順列の要素番号、ｗ（ｄ，１，ｊ），…，ｗ（ｄ，ｄｅ，ｊ），…，ｗ（ｄ，ｄ，ｊ），ｊ番目の自機行動順列とし、各ｗ（ｄ，ｄｅ，ｊ）には自機の移動速度番号が定められているものとする。また、ｔｂを攻撃目標位置が見つかった時刻、Ｄｂを攻撃目標位置が見つかった場合の探索の深さとする。ここで、ｔは、処理単位時間τごとに離散的な時間を取るものとする。
【００４４】
＜ステップＳ１＞
自機移動パターン生成部１１の初期化部１０１は、ｄ＝１，ｋ＝１，Ｄｂ＝Ｄ，ｔｂ＝Ｄ×Ｔとして、これらをバッファ１０３に格納する。また、初期化部１０１は、時刻ｔにおける自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））を自機の現在位置に設定して、これを自機移動パターンバッファ５１に格納する。
【００４５】
＜ステップＳ２＞
自機移動パターン生成部１１の順列作成部１０６は、すべての、ｊとｄｅについて、自機行動順列ｗ（ｄ，１，ｊ），…，ｗ（ｄ，ｄｅ，ｊ），…，ｗ（ｄ，ｄ，ｊ）を作成し、これを順列データバッファ５３に格納する。また、ｊ＝１としてバッファ１０３に格納する。上記自機行動順列は、自機が取り得る移動速度番号の順列である。
例えば、ｄ＝１の場合、順列作成部１０６は、すべてのｊとｄｅについて、以下のような９（＝９の１乗）個の自機行動順列ｗ（ｄ，１，ｊ），…，ｗ（ｄ，ｄｅ，ｊ），…，ｗ（ｄ，ｄ，ｊ）を作ることができる。
ｊ＝１：｛ｗ（１，１，１）＝１｝
ｊ＝２：｛ｗ（１，１，２）＝２｝
…
ｊ＝８：｛ｗ（１，１，２）＝８｝
ｊ＝９：｛ｗ（１，１，９）＝９｝
また、例えば、ｄ＝２の場合、すべてのｊとｄｅについて、以下のような８１（＝９の２乗）個の自機行動順列ｗ（ｄ，１，ｊ），…，ｗ（ｄ，ｄｅ，ｊ），…，ｗ（ｄ，ｄ，ｊ）を作ることができる。
ｊ＝１：｛ｗ（２，１，１）＝１，ｗ（２，２，１）＝１｝
ｊ＝２：｛ｗ（２，１，２）＝１，ｗ（２，２，２）＝２｝
…
ｊ＝８０：｛ｗ（２，１，８０）＝９，ｗ（２，２，８０）＝８｝
ｊ＝８１：｛ｗ（２，１，８１）＝９，ｗ（２，２，８１）＝９｝
さらに、例えば、ｄ＝３の場合、すべてのｄとｄｅとｊについて、以下のような７２９（＝９の３乗）個の自機行動順列ｗ（ｄ，１，ｊ），…，ｗ（ｄ，ｄｅ，ｊ），…，ｗ（ｄ，ｄ，ｊ）を作ることができる。
ｊ＝１：｛ｗ（３，１，１）＝１，ｗ（３，２，１）＝１，ｗ（３，３，１）＝１｝
ｊ＝２：｛ｗ（３，１，２）＝１，ｗ（３，２，２）＝１，ｗ（３，３，２）＝２｝
…
ｊ＝７２８：｛ｗ（３，１，７２８）＝９，ｗ（３，２，７２８）＝９，ｗ（３，３，７２８）＝８｝
ｊ＝７２９：｛ｗ（３，１，７２９）＝９，ｗ（３，２，７２９）＝９，ｗ（３，３，７２９）＝９｝
【００４６】
＜ステップＳ３＞
自機移動パターン生成部１１の制御部１１２は、ｄｅ＝１，ｔ＝０としてバッファ１０３に格納する。また、自機が選択すべき移動速度番号をｗ（ｄ，ｄｅ，ｊ）とする。
＜ステップＳ４＞
自機移動パターン生成部１１の制御部１１２は、バッファ１０３から読み出したｄがｄ＝１かどうかを判定する。ｄ＝１であれば、ステップＳ５の処理を行う。ｄ＝１でなければ、ステップＳ１８の処理を行う。
＜ステップＳ５＞
自機移動パターン生成部１１の制御部１１２は、バッファ１０３からｔを読み出し、ｔをインクリメント幅τだけインクリメントする。インクリメントされたｔは、バッファ１０３に格納される。ｔのインクリメント幅τは、行動単位時間Ｔより小さい値、好ましくはＴを複数等分する値であれば、どのような値でも良い。例えば、Ｔを０．３秒〜１秒としたとき、このＴを１０等分する時間間隔である０．０３秒〜０．１秒をτに設定することができる。
また、自機移動パターン生成部１１の位置更新部１０４は、自機の移動速度（Ｖｘ（ｗ（ｄ，ｄｅ，ｊ）），Ｖｙ（ｗ（ｄ，ｄｅ，ｊ））でｔのインクリメント幅τだけ移動した後の自機の位置を計算する。具体的には、位置更新部１０４は、（τ×Ｖｘ（ｗ（ｄ，ｄｅ，ｊ）），τ×Ｖｙ（ｗ（ｄ，ｄｅ，ｊ）））を計算して、位置の変位量を求め、これに（Ｘｓ（ｔ−τ），Ｙｓ（ｔ−τ））を加算することにより、自機の位置を更新する。インクリメント幅τでインクリメントした後の自機の位置、すなわち、更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））は、衝突判定部３０に出力される。
【００４７】
＜ステップＳ６＞
攻撃弾位置推定部２０は、攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を更新する。すなわち、τ時間経過後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を計算する。
具体的には、記憶部２０１に記憶された攻撃弾の速度（Ｖｂｉｋｘ（ｔ），Ｖｂｉｋｙ（ｔ））を読み出し、これをτ倍したものを、位置取得部２０２が取得した更新前の攻撃弾の位置（Ｘｂｉｋ（ｔ−τ），Ｙｂｉｋ（ｔ−τ））に加算することにより、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を求める。
更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））は、記憶部２０１に記憶される。また、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））は、衝突判定部３０と自機移動パターン生成部１１に出力される。
【００４８】
＜ステップＳ７＞
衝突判定部３０は、自機と攻撃弾が衝突したかどうかを判定する。衝突したかどうかは、予め設定され、図示していない衝突判定部３０内の記憶部に記憶された自機の形状、攻撃弾の形状と、自機移動パターン生成部１１から出力された更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））、攻撃弾位置推定部２０から出力された更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））とから判断される。
例えば、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の攻撃弾の形状が重なった場合には、自機と攻撃弾が衝突したと判定することができる。
衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部１１と自機移動範囲決定部７０に出力される。その後、ステップＳ７ａの処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部１１に出力される。その後、ステップＳ１７ａの処理を行う。
【００４９】
＜ステップＳ７ａ＞
ステップＳ７ａは、自機が敵機の攻撃弾に撃墜されないで移動することができるＸ軸方向の移動範囲の最大値・最小値を求めるための過程である。ステップＳ７ａは、図３に示すように、ステップＳ７１〜ステップＳ７４から構成される。
【００５０】
≪ステップＳ７１≫（図３）
衝突がなかった旨の信号を受け取った自機移動範囲決定部７０は、自機移動範囲バッファ５４に格納されているＸｍａｘを読み出し、Ｘｓ（ｔ）との大小関係を比較する。
Ｘｍａｘ＜Ｘｓ（ｔ）であれば、ステップＳ７２の処理を行う。
Ｘｓ（ｔ）≦Ｘｍａｘであれば、ステップＳ７３の処理を行う。
なお、自機移動範囲バッファ５４にＸｍａｘが格納されていない場合には、自機移動範囲決定部７０は、Ｘｓ（ｔ）をＸｍａｘとして自機移動範囲バッファ５４に格納して、ステップＳ１１（図８）の処理を行う。
【００５１】
≪ステップＳ７２≫
自機移動範囲決定部７０は、Ｘｍａｘ＜Ｘｓ（ｔ）の場合には、Ｘｓ（ｔ）を新たなＸｍａｘとして、自機移動範囲バッファ５４に格納する。その後、ステップＳ１１（図８）の処理を行う。
【００５２】
≪ステップＳ７３≫
自機移動範囲決定部７０は、Ｘｓ（ｔ）≦Ｘｍａｘの場合には、自機移動範囲バッファ５４に格納されているＸｍｉｎを読み出し、Ｘｓ（ｔ）との大小関係を比較する。
Ｘｓ（ｔ）＜Ｘｍｉｎであれば、ステップＳ７４の処理を行う。
Ｘｍｉｎ≦Ｘｓ（ｔ）であれば、ステップＳ１１（図８）の処理を行う。
なお、自機移動範囲バッファ５４にＸｍｉｎが格納されていない場合には、自機移動範囲決定部７０は、Ｘｓ（ｔ）をＸｍｉｎとして自機移動範囲バッファ５４に格納して、ステップＳ１１（図８）の処理を行う。
【００５３】
≪ステップＳ７４≫
自機移動範囲決定部７０は、Ｘｓ（ｔ）＜Ｘｍｉｎの場合には、Ｘｓ（ｔ）を新たなＸｍｉｎとして、自機移動範囲バッファ５４に格納する。その後、ステップＳ１１（図８）の処理を行う。
＜ステップＳ１１＞
自機移動パターン生成部１１の制御部１１２は、ステップＳ３のときから、行動単位時間Ｔが経過したかどうかを判定する。すなわち、バッファ１０３から読み出したｔがｄe×Ｔよりも大きいかどうか、つまり、ｔ≧ｄｅ×Ｔかどうかを判定する。
ｔ＜ｄ×Ｔであれば、ステップＳ５の処理を行う。すなわち、ｔがステップＳ３の時から行動単位時間Ｔを経過するまで、ステップＳ５〜Ｓ１１の処理を繰り返す。
ｔ≧ｄ×Ｔであれば、ステップＳ１２の処理を行う。
＜ステップＳ１２＞
自機移動パターン生成部１１の制御部１１２は、現ｄ，ｊ，ｄｅ値での自機位置（Ｘｓ（ｄ，ｄｅ，ｊ），Ｙｓ（ｄ，ｄｅ，ｊ））のデータを、自機移動パターンバッファ５１に格納する。また、自機移動パターン生成部１１の制御部１０２は、現ｄ，ｊ，ｄｅ値での敵機の攻撃弾の位置（Ｘｂｉｋ（ｄ，ｄｅ，ｊ），Ｙｂｉｋ（ｄ，ｄｅ，ｊ））のデータを、敵機攻撃弾状態バッファ５２に格納し、図９に示すステップＳ１３の処理を行う。
【００５４】
＜ステップＳ１３＞（図９）
自機移動パターン生成部１１の制御部１１２は、バッファ１０３から読み出した自機行動順列番号ｊを１だけインクリメントする。インクリメントされた自機行動順列番号ｊは、バッファ１０３に格納される。
＜ステップＳ１４＞
自機移動パターン生成部１１の制御部１１２は、バッファ１０３から読み出した自機行動順列番号ｊが、ｊ＝ｗのｄ乗かどうかを判定する。
ｊ≠ｗのｄ乗であれば、ステップＳ３（図８）の処理を行う。すなわち、すべての自機行動順列番号ｊについて、ステップＳ３〜Ｓ１２の処理が繰り返されることになる。
ｊ＝ｗのｄ乗であれば、ステップＳ１５の処理を行う。
＜ステップＳ１５＞
自機移動パターン生成部１１の制御部１１２は、バッファ１０３から読み出したｄを１だけインクリメントする。インクリメントされたｄは、バッファ１０３に格納される。
＜ステップＳ１６＞
自機移動パターン生成部１１の制御部１１２は、バッファ１０３から読み出したｄが、バッファ１０３から読み出したＤｂより大きいかどうかを判定する。すなわち、Ｄｂ＜ｄかどうかを判定する。
【００５５】
Ｄｂ≧ｄであると判定された場合には、制御部１１２は、図８に示すステップＳ２の処理を行う。
Ｄｂ＜ｄであると判定された場合には、本実施形態による横型探索は終了し、制御部１１２は、ステップＳ１６ａ（図５）の処理を行う。
＜ステップＳ１７＞（図８）
ステップＳ７の処理において、自機と敵機の攻撃弾が衝突していると判定された場合には、自機移動パターン生成部１１の制御部１１２は、現在のｄをｄｃ（ｋ）、現在のｊをｊｃ（ｋ）として、自機移動パターンバッファ５１に格納する。そして、バッファ１０３から読み出したｋを１だけインクリメントして、このインクリメントしたｋをバッファ１０３に格納する。
【００５６】
ステップＳ１７の処理が終わった後は、図９に示すステップＳ１３の処理を行う。
＜ステップＳ１８＞（図８）
順列獲得部１０７は、順列データバッファ５３を検索して、現在評価している自機行動順列の要素と同じ要素を持つ順列の自機行動順列の深さｄｓとその順列番号ｊｓを獲得する。
例えば、図１５に示すように、ｄ＝２，ｊ＝１の自機行動順列が｛ｗ（２，１，１）＝１，ｗ（２，２，１）＝１｝であり、ｄ＝１，ｊ＝１の自機行動順列が｛ｗ（１，１，１）＝１｝である場合には、ｗ（２，１，１）＝１とｗ（１，１，１）＝１の部分で、自機行動順列の要素が一致するため、ｄｅ＝１の部分で同じ要素を持つということができる。したがって、ｄ＝２，ｊ＝１の自機行動順列｛ｗ（２，１，１）＝１，ｗ（２，２，１）＝１｝についてのｄｓは１となり、ｊｓは１となる。すなわち、（ｄｓ，ｊｓ）＝（１，１）となる。
【００５７】
また、例えば、ｄ＝３，ｊ＝１の自機行動順列が｛ｗ（３，１，１）＝１，ｗ（３，２，１）＝１，ｗ（３，３，１）＝１｝であり、ｄ＝２，ｊ＝１の自機行動順列が｛ｗ（２，１，１）＝１，ｗ（２，２，１）＝１｝であり、ｄ＝1，ｊ＝１の自機行動順列が｛ｗ（１，１，１）＝１｝である場合には、ｄ＝３，ｊ＝１の自機行動順列とｄ＝２，ｊ＝１の自機行動順列のうち、｛ｗ（３，１，１）＝１，ｗ（３，２，１）＝１｝と｛ｗ（２，１，１）＝１，ｗ（２，２，１）＝１｝の部分で、自機行動順列の要素が一致する。また、ｄ＝３，ｊ＝１の自機行動順列とｄ＝１，ｊ＝１の自機行動順列のうち、ｗ（２，１，１）＝１とｗ（１，１，１）＝１の部分で自機行動順列の要素が一致する。したがって、ｄ＝３，ｊ＝１の自機行動順列｛ｗ（３，１，１）＝１，ｗ（３，２，１）＝１，ｗ（３，３，１）＝１｝についてのｄｓとｊｓは、（ｄｓ，ｊｓ）＝｛（１，１），（２，１）｝となる。
【００５８】
＜ステップＳ１９＞
自機移動パターン生成部１１の制御部１１２は、ｄｃ（ｋ）＝ｄｓ，ｊｃ（ｋ）＝ｊｓとなるｋが存在するかどうか自機移動パターンバッファ５１を検索する。（ｄｓ，ｊｓ）の組が複数ある場合には、それぞれの（ｄｓ，ｊｓ）の組について、ｄｃ（ｋ）＝ｄｓ，ｊｃ（ｋ）＝ｊｓとなるｋが存在するかどうかを検索する。
ｄｃ（ｋ）＝ｄｓ，ｊｃ（ｋ）＝ｊｓとなるｋが存在する場合には、図９に示したステップＳ１３の処理を行う。
ｄｃ（ｋ）＝ｄｓ，ｊｃ（ｋ）＝ｊｓとなるｋが存在しない場合には、ステップＳ２０の処理を行う。
【００５９】
＜ステップＳ２０＞
自機移動パターン生成部１１の制御部１１２は、ｄｃ（ｋ）＝ｄｓ，ｊｃ（ｋ）＝ｊｓとなるｋが存在しない場合には、ステップＳ１８で求まった（ｄｓ，ｊｓ）の組のうちｄｓの値が最大である（ｄｓ，ｊｓ）を求める。そして、上記ｄｓの値が最大である（ｄｓ，ｊｓ）に従って移動を行った結果の自機位置（Ｘｓ（ｄｓ，ｄｓ，ｊｓ），Ｙｓ（ｄｓ，ｄｓ，ｊｓ））と攻撃弾位置（Ｘｂｉｋ（ｄｓ，ｄｓ，ｊｓ），Ｙｂｉｋ（ｄｓ，ｄｓ，ｊｓ））を、自機移動パターンバッファ５１から読み込む。また、ｔ＝Ｔ×（ｄ−１）、ｄｅ＝ｄとして、このｔとｄｅをそれぞれバッファ１０３に格納する。
【００６０】
＜ステップＳ１６ａ＞（図９）
ステップＳ１６において、Ｄｂ＜ｄと判定された場合には、自機のＸ軸方向の移動範囲の最大値Ｘｍａｘ、最小値Ｘｍｉｎを求める探索を終了する。そして、敵機速度決定部８０が、自機のＸ軸方向の移動範囲の最大値Ｘｍａｘ、最小値Ｘｍｉｎを基にして、敵機に移動速度を決定する。ステップＳ１６ａは、図５に示すように、ステップＳ１６１〜ステップ１６１１から構成される。
≪ステップＳ１６１≫（図５）
まず、敵機速度決定部８０のモード判定部８０１が、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜かどうかを判定する。
｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜である場合には、図１３に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるので、敵機速度決定アルゴリズムは、防御モード・自機囲い込みモードに移行する。具体的には、ステップＳ１６２〜ステップＳ１６８の処理を行う。
｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＞｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜である場合には、図１４に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性がないので、敵機速度決定アルゴリズムは、攻撃モードに移行する。具体的には、ステップＳ１６９〜ステップＳ１６１１の処理を行う。
【００６１】
≪ステップＳ１６２≫
敵機速度決定部８０の位置判定部８０２は、自機移動範囲バッファ５４から読み出したＸｍａｘと敵機の現在位置のＸ座標の値Ｘとの大小関係を比較する。
Ｘｍａｘ＜Ｘであれば、ステップＳ１６３の処理を行う。
Ｘ≦Ｘｍａｘであれば、ステップＳ１６４の処理を行う。
≪ステップＳ１６３≫
Ｘｍａｘ＜Ｘのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はＸ軸方向には移動しない。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝０、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００６２】
≪ステップＳ１６４≫
敵機速度決定部８０の位置判定部８０２は、自機移動範囲バッファ５４から読み出したＸｍｉｎと敵機の位置のＸ座標（Ｘ）との大小関係を比較する。
Ｘ＜Ｘｍｉｎであれば、ステップＳ１６５の処理を行う。
Ｘｍｉｎ≦Ｘであれば、ステップＳ１６６の処理を行う。
≪ステップＳ１６５≫
Ｘ＜Ｘｍｉｎのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はＸ軸方向には移動しない。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝０、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００６３】
≪ステップＳ１６６≫
敵機速度決定部８０の位置判定部８０２は、自機の現在位置のＸ座標の値Ｘｓと敵機の現在位置のＸ座標（Ｘ）との大小関係を比較する。
Ｘｓ＜Ｘであれば、ステップＳ１６７の処理を行う。
Ｘ＜Ｘｓであれば、ステップＳ１６８の処理を行う。
≪ステップＳ１６７≫
ステップＳ１６４とステップＳ１６５において、Ｘｍｉｎ＜Ｘ＜Ｘｍａｘと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、Ｘ軸方向であって自機がいない方向に向かって移動する。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００６４】
≪ステップＳ１６８≫
ステップＳ１６４とステップＳ１６５において、Ｘｍｉｎ＜Ｘ＜Ｘｍａｘと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、Ｘ軸方向であって自機がいない方向に向かって移動する。また、ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ≦｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、防御モード・自機囲い込みモードにあるため、敵機はＹ軸方向にはゆっくりと進む。このため、例えば、Ｖｅｘ＝−Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ／２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００６５】
≪ステップＳ１６９≫
敵機速度決定部８０の位置判定部８０２は、自機の現在位置のＸ座標の値Ｘｓと敵機の現在位置のＸ座標（Ｘ）との大小関係を比較する。
Ｘ＜Ｘｓであれば、ステップＳ１６１０の処理を行う。
Ｘｓ＜Ｘであれば、ステップＳ１６１１の処理を行う。
≪ステップＳ１６１０≫
ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＞｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、攻撃モードにあるため、敵機はＹ軸方向には速く移動する。また、Ｘ軸方向には移動しないか、もしくは、Ｘ軸方向であって自機がいる方向にむかって移動する。例えば、Ｖｅｘ＝Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ×２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
【００６６】
≪ステップＳ１６１１≫
ステップＳ１６１において、｜Ｘｓ−Ｘ｜／Ｖｓｍａｘ＞｜Ｙｓ−Ｙ｜／｜Ｖｅｘｍａｘ−Ｖｓｍａｘ｜と判定されており、攻撃モードにあるため、敵機はＹ軸方向には速く移動する。また、Ｘ軸方向には移動しないか、もしくは、Ｘ軸方向であって自機がいる方向にむかって移動する。例えば、Ｖｅｘ＝−Ｖｅｘｍａｘ、Ｖｅｙ＝−Ｖｓｍａｘ×２とする。敵機速度決定部８０は、この移動速度に従って敵機を移動させる。
上記の処理を、一定時間（例えば、行動単位時間Ｔ）ごとに行う。
以上が、第２実施形態によるシューティングゲーム処理装置１００１の概要である。
【実施例３】
【００６７】
上記実施形態では、敵機の移動方向しか定めていないが、敵機の移動方向を定めると同時に、敵機に攻撃弾を発射させるようにしても良い。本発明による敵機の移動速度の決定の処理と、以下に説明する攻撃弾発射の処理を同時に行うことにより、防御モード・囲い込みモード時においては、より効果的に自機を囲い込み、敵機の防御力を上げることができ、攻撃モード時においては、より効果的に自機を攻撃することができる。具体的には、第１実施形態においては、ステップＳ１７ａとステップＳ１８ａを設ける（図２）。第２実施形態においても、ステップＳ１７ａ（図８）とステップＳ１８ａ（図９）を設ける。
以下、第１実施形態におけるステップＳ１７ａとステップＳ１８ａの処理について説明する。
【００６８】
＜ステップＳ１７ａ＞
ステップＳ１７ａは、敵機が攻撃弾を発射する目標位置、すなわち、攻撃弾発射位置を求めるステップである。ステップＳ１７ａは、図４に示すように、ステップＳ１７１〜ステップＳ１７３から構成される。
≪ステップＳ１７１≫
衝突がなかった旨の信号を受け取った自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｔとｔｂの大小関係を比較する。
ｔ＜ｔｂであれば、ステップＳ１７２の処理を行う。ｔ≧ｔｂであれば、ステップＳ８（図２）の処理を行う。なお、ｔ≧ｔｂであれば、第２実施形態の場合は、ステップＳ１１（図８）の処理を行う。
【００６９】
＜ステップＳ１７２＞
攻撃目標位置判定部４０の到達時間差計算部４０１は、敵機の現在位置（Ｘ，Ｙ）に位置する敵機が、（Ｘｓ（ｔ），Ｙｓ（ｔ））を目標位置として攻撃弾を発射したときに、その攻撃弾が（Ｘｓ（ｔ），Ｙｓ（ｔ））に到達するのに要するＴｎを計算する。そして、自機が上記目標位置（Ｘｓ（ｔ），Ｙｓ（ｔ））に到達するのに要する時間ｔと上記到達所要時間Ｔｎの差の絶対値を計算する。
攻撃目標位置判定部４０は、上記到達所要時間Ｔｎとｔの差の絶対値が、記憶部１０５から読み出した所定の値Ｃよりも小さいかどうかを判定する。所定の値Ｃは、例えば、自機の大きさと敵機攻撃弾の大きさの和の半分をＳ、敵機の攻撃弾の速度をＶｅとすると、Ｓ／Ｖｅとすることができる。また、自機の大きさとしては、例えば、自機の形状に内接する円の直径、敵機攻撃弾の大きさとしては、敵機攻撃弾の形状に内接する円の直径を取ることができる。
Ｓ／Ｖｅ＞｜ｔ−Ｔｎ｜であれば、（Ｘｓ（ｔ），Ｙｓ（ｔ））を攻撃目標位置とすることができる。敵機が（Ｘｓ（ｔ），Ｙｓ（ｔ））を目標位置として攻撃弾を発射すれば、自機を破壊することができる可能性があるからである。この場合、ステップＳ１７３の処理を行う。
【００７０】
Ｓ／Ｖｅ＜｜ｔ−Ｔｎ｜であれば、（Ｘｓ（ｔ），Ｙｓ（ｔ））を攻撃目標位置とすることはできない。この場合、ステップＳ８（図２）の処理を行う。この場合、第２実施形態では、ステップＳ１１（図８）の処理を行う。
＜ステップＳ１７３＞
Ｓ／Ｖｅ＞｜ｔ−Ｔｎ｜であれば、（Ｘｓ（ｔ），Ｙｓ（ｔ））を攻撃目標位置とすることができるため、攻撃目標位置判定部４０は、（Ｘｓ（ｔ），Ｙｓ（ｔ））を、攻撃目標位置（Ｘｄｅｓ，Ｙｄｅｓ）として攻撃目標位置バッファ５０に格納する。また、ｔｂ＝ｔとして新たにｔｂを設定し、これをバッファ１０３に格納する。その後、ステップＳ８（図２）の処理を行う。第２実施形態では、その後、ステップＳ１１（図８）の処理を行う。
以上が、ステップＳ１７ａの説明である。次に、ステップＳ１８ａについて説明する。
【００７１】
＜ステップＳ１８ａ＞（図４）
ステップＳ１８ａは、ステップＳ１７ａで求めた攻撃目標位置に向けて敵機に攻撃弾を発射させるステップである。具体的には、攻撃弾発射部６０が、攻撃目標位置バッファ５０から読み出した攻撃目標位置（Ｘｄｅｓ，Ｙｄｅｓ）に向けて、敵機に攻撃弾を発射させる。
上記実施形態による探索では、一度攻撃目標位置が見つかった後は、自機がその攻撃目標位置に到達するよりも短い時間で到達することができる位置についてのみ（ｔ＜ｔｂ，ステップＳ１７１）、攻撃弾の目標位置となり得るかどうかを探索している。そして、新たな攻撃弾の目標位置が見つかった場合には（ステップＳ１７２）、その新たな攻撃弾の目標位置で、攻撃目標位置バッファ５０が更新される（ステップＳ１７３）。このため、上記実施形態による探索を終えたときに、攻撃目標位置バッファ５０に格納されている攻撃目標位置（Ｘｄｅｓ，Ｙｄｅｓ）が、自機が最も短い時間で到達することができる攻撃目標位置となるのである。
以上が、ステップＳ１８ａの説明である。
【実施例４】
【００７２】
行動単位時間Ｔの設定方法としは、以下のようなものがある。
例えば、自機移動パターン生成部１０と自機移動パターン生成部１１の操作履歴記録部１０８が、プレイヤーの操作履歴についてのデータを取っているものとする。行動単位時間設定部１０９は、操作履歴記録部１０８に記録された操作履歴データから、自機が移動方向を変更した時間の間隔の平均値を計算し、この計算結果を行動単位時間Ｔとして設定することができる。
これにより、プレイヤーの癖を考慮した攻撃弾の発射が可能となる。
【実施例５】
【００７３】
また、攻撃目標位置の探索において、自機の行動の度ごとに行動単位時間Ｔを変更することができる。例えば、自機の行動の回数が多くなるほど、言い換えれば、探索の深さｄが深くなるほど、行動単位時間Ｔの長さを指数関数的に大きくすることができる。探索の深さｄが深くなるほど、行動単位時間Ｔを長くすることにより、限られた深さの探索においても、より未来の状態まで考慮した探索を行うことができる。このために、例えば、行動単位時間設定部１０９は、第１実施形態におけるステップＳ９（図２）の処理において、または、第２実施形態におけるステップＳ１５（図９）の処理において、ｄをインクリメントした後に、Ａｅｘｐ（ｄ）を計算し、この計算結果を行動単位時間Ｔに設定する。ここで、Ａは１より大きい任意の実数である。
【実施例６】
【００７４】
また、自機が現在速度を未来において一定時間Ｔｃだけ継続してから、攻撃目標位置を求める探索をするようにしても良い。探索計算を実質的に一段深く行うことができるためである。すなわち、自機が現在速度を未来において一定時間Ｔｃだけ継続したと仮定した後に、Ｄ＝５の探索を行う場合には、実質的にＤ＝６の探索を行ったのと同じ探索を行うことができる。
ユーザが画面に表示された自機、敵機、攻撃弾を見てから、自機の行動を決めて、その行動を入力するには、行動単位時間Ｔ以上の時間がかかることが普通である。したがって、自機が現在速度を未来において一定時間Ｔｃだけ継続したとして、攻撃目標位置を求める探索を行うようにしても問題は生じない。また、自機と敵機の行動選択のタイミングが同時ではない場合、すなわち、敵機が行動を選択する場合に、自機が移動中である場合においても、自機が現在速度を未来において一定時間Ｔｃだけ継続したとして探索を行うことにより、敵機が行動を選択することができる。
【００７５】
第１実施形態において、自機が現在速度を未来において一定時間Ｔｃだけ継続した後に、探索を行うために、第１実施形態のステップＳ１又は第２実施形態のステップＳ１おける処理において、初期化部１０１は、時刻ｔ＝０における自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））を、自機が現在速度を一定時間Ｔｃだけ移動した位置に設定する。また、第１実施形態のステップＳ５又は第２実施形態のステップＳ６の処理において、攻撃弾位置推定部２０は、位置取得部２０２が取得した敵機が既に発射した攻撃弾の現在位置から、その攻撃弾が一定時間Ｔｃだけ移動した位置を計算することにより、更新前の攻撃弾の位置（Ｘｂｉｋ（ｔ−τ），Ｙｂｉｋ（ｔ−τ））を求める。また、ステップＳ１７２の処理において、攻撃目標位置判定部４０は、Ｓ／Ｖｅ＞｜ｔ−Ｔｎ｜かどうかではなく、Ｓ／Ｖｅ＞｜ｔ＋Ｔｃ−Ｔｎ｜かどうかを判定する。
その他の処理は、上記各実施形態と同じである。なお、上記一定時間Ｔｃには、例えば、実施例１で説明した自機が移動方向を変更した時間の間隔の平均値を設定することができる。
【実施例７】
【００７６】
第１実施形態のステップＳ１８もしくは第２実施形態のステップ２１において、攻撃弾発射部６０は、攻撃目標位置バッファ５０に攻撃目標位置が格納されていない場合には、攻撃弾発射部６０は、自機の現在位置に向けて攻撃弾を発射するようにすることができる。
【実施例８】
【００７７】
また、ステップＳ１８ａにおいて、攻撃弾発射部６０は、攻撃目標位置バッファ５０に攻撃目標位置が格納されていない場合には、攻撃弾発射部６０は、自機の現在位置に、あるランダムな変位を与えた位置に向けて攻撃弾を敵機に発射させることができる。
例えば、攻撃弾発射部６０の乱数発生部６１が、Ｘ軸方向の変位量とＹ軸方向の変位量のそれぞれについてのランダムな値を生成する。攻撃弾発射部６０が、自機の現在位置に上記生成されたＸ軸方向の変位量とＹ軸方向の変位量を加算した位置に向けて攻撃弾を敵機に発射させる。
具体的には、自機の形状に内接する円の直径をＭとすると、Ｘ軸方向の変位量，Ｙ軸方向の変位量の幅を、−３Ｍ〜３Ｍ程度にすると良い。例えば、自機の形状の大きさが３０ドットの場合には、Ｘ軸方向の変位量，Ｙ軸方向の変位量としては、それぞれ、−５０〜５０の値をランダムに取ることができるようにすると良い。
【実施例９】
【００７８】
ステップＳ１８ａにおいて、攻撃弾発射部６０は、攻撃目標位置バッファ５０に攻撃目標位置が格納されていない場合には、攻撃弾目標位置が見つかっていない旨の信号を自機移動パターン生成部１０に出力するようにしてもよい。
上記信号を受け取った自機移動パターン生成部１０は、自機が現在の速度を維持すると仮定して、自機が現在の速度を維持する行動を取り続ける場合の自機の移動先を生成する。攻撃目標位置判定部４０は、その移動先に至るまでの各位置について、適切な攻撃弾目標位置と成り得るかどうかを判定する。すなわち、その移動先に至るまでの各位置について、その位置に自機が移動する時間と敵機が発射する攻撃弾がその位置に移動する時間の差の絶対値が、所定の値Ｃよりも小さいかどうかを判定する。所定の値Ｃよりも小さい場合には、その位置を攻撃目標位置とすることができる。攻撃弾発射部６０は、その攻撃目標位置に向けて攻撃弾を発射する。
【実施例１０】
【００７９】
また、実施例９で述べたように、ステップＳ１８ａにおいて、攻撃弾発射部６０は、攻撃目標位置バッファ５０に攻撃目標位置が格納されていない場合には、攻撃弾目標位置が見つかっていない旨の信号を自機移動パターン生成部１０に出力する。
上記信号を受け取った自機移動パターン生成部１０の制御部１０２は、記憶部１０５に格納された所定の値Ｃを読み出し、所定の値Ｃをより大きな値に設定しなおして記憶部１０５に格納する。そして、上記シューティングゲーム処理装置の処理を再度実行するようにしてもよい。その際、自機の移動範囲決定ステップＳ７ａと敵機の速度決定ステップＳ１６ａの処理は省略することができる。
【実施例１１】
【００８０】
また、実施例９で述べたように、ステップＳ１８ａにおいて、攻撃弾発射部６０は、攻撃目標位置バッファ５０に攻撃目標位置が格納されていない場合には、攻撃弾目標位置が見つかっていない旨の信号を自機移動パターン生成部１０に出力する。
攻撃目標位置が見つかっていない旨の信号を受け取った自機移動パターン生成部１０の制御部１０２は、記憶部１０５に格納された探索の深さＤを読み出し、１だけインクリメントしたＤ＋１の値を新たなＤとして記憶部１０５に格納する。そして、上記シューティングゲーム処理装置の処理を再度実行するようにしてもよい。その際、自機の移動範囲決定ステップＳ７ａと敵機の速度決定ステップＳ１６ａの処理は省略することができる。
制御部１０２は、インクリメントしたＤ＋１が一定の値Ｄｃになったら、探索を終了する。すなわち、インクリメントしたＤ＋１が一定の値Ｄｃになった場合には、各処理を停止する。
【実施例１２】
【００８１】
上記実施形態では、自機が最も短い時間で到達することができる攻撃目標位置についてのみ攻撃弾を発射したが、攻撃目標位置が見つかるごとに、攻撃弾発射部６０が、その攻撃目標位置に向けて攻撃弾を敵機に発射させるようにしてもよい。
【実施例１３】
【００８２】
行動単位時間Ｔを、自機と敵機の距離の長さに応じて長くしても良い。具体的には、行動単位時間設定部１０９が、各実施形態におけるステップＳ１の処理を実行する前に、自機の現在位置と敵機の現在位置の距離を計算し、その距離が長ければ長いほど、行動単位時間Ｔを長く設定して、記憶部１０５に格納する。
自機と敵機の距離が長いほど行動単位時間Ｔを長くすることにより、言い換えれば、自機と敵機の距離が短いほど行動単位時間Ｔを短くすることにより、自機と敵機の距離が短くより緊迫感が増す接近戦において、敵機の動作をより精密に制御することが可能になりよりゲーム性が増す。また、自機と敵機の距離が長く、敵機の行動についての精密な制御が必要でない場合には、行動単位時間Ｔを長くすることにより、シューティングゲーム処理装置における処理の負担を軽減することができる。
【００８３】
その他の実施例・変形例について
上記の実施例を組み合わせて行っても良い。
また、上記シューティングゲーム処理装置の処理機能をコンピュータによって実現することができる。この場合、シューティングゲーム処理装置の処理機能の内容はプログラムによって記述される。そして、このプログラムを、図１６に示すようなコンピュータで実行することにより、上記シューティングゲーム処理装置の処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【００８４】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００８５】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、ユーザ端末を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
以上の各実施形態の他、本発明であるシューティングゲーム処理方法、その装置等は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【図面の簡単な説明】
【００８６】
【図１】シューティングゲーム処理装置１０００の機能構成を例示した図。
【図２】シューティングゲーム処理装置１０００の処理を例示した図。
【図３】自機移動範囲決定ステップＳ７ａの処理を例示した図。
【図４】攻撃弾発射位置判定ステップＳ１７ａの処理を例示した図。
【図５】敵機移動速度決定ステップＳ１６ａの処理を例示した図。
【図６】シューティングゲームの模式図。
【図７】シューティングゲーム処理装置１００１の機能構成を例示した図。
【図８】シューティングゲーム処理装置１００１の処理を例示した図（１）。
【図９】シューティングゲーム処理装置１００１の処理を例示した図（２）。
【図１０】安全行動パターンを示す図。
【図１１】縦型探索の探索順序を示す図。
【図１２】横型探索の探索順序を示す図。
【図１３】防御モード・囲い込みモードの状況を表わす図。
【図１４】攻撃モードの状況を表わす図。
【図１５】自機行動順列の要素の一致の例を説明するための図。
【図１６】シューティングゲーム難易度判定装置をコンピュータにより実行するときの機能構成を例示した図。
【符号の説明】
【００８７】
１：自機，２：敵機，３：攻撃弾，４：攻撃弾，５：ＣＰＵ，６：ＲＡＭ，７：出力部，８：補助記憶部，９：入力部，９’：バス，１０：自機移動パターン生成部，１１：自機移動パターン生成部，２０：攻撃弾位置推定部，３０：衝突判定部，４０：攻撃目標位置判定部，５０：攻撃目標位置バッファ，５１：自機移動パターンバッファ，５２：敵機攻撃弾状態バッファ，５３：順列データバッファ，５４：自機移動範囲バッファ，６０：攻撃弾発射部，６１：乱数発生部，７０：自機移動範囲決定部，８０：敵機速度決定部，１０１：初期化部，１０２：制御部，１０３：バッファ，１０４：位置更新部，１０５：記憶部，１０６：順列作成部，１０７：順列獲得部，１０８：操作履歴記録部，１０９：行動単位時間設定部，１１２：制御部，２０１：記憶部，２０２：位置取得部，４０１：到達時間差計算部，８０１：モード判定部，８０２：位置判定部，１０００：シューティングゲーム処理装置，１００１：シューティングゲーム処理装置
【図１】
2007330535.tif 000003
【図２】
2007330535.tif 000004
【図３】
2007330535.tif 000005
【図４】
2007330535.tif 000006
【図５】
2007330535.tif 000007
【図６】
2007330535.tif 000008
【図７】
2007330535.tif 000009
【図８】
2007330535.tif 000010
【図９】
2007330535.tif 000011
【図１０】
2007330535.tif 000012
【図１１】
2007330535.tif 000013
【図１２】
2007330535.tif 000014
【図１３】
2007330535.tif 000015
【図１４】
2007330535.tif 000016
【図１５】
2007330535.tif 000017
【図１６】
2007330535.tif 000018