(57)【特許請求の範囲】
【請求項１】
自機移動パターン生成手段と、衝突判定手段と、到達時間差計算手段と、攻撃目標位置判定手段と、攻撃弾発射手段とを備えたコンピュータが、画面上に自機と敵機を表示し、Ｗ種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲームの処理を行う方法であって、  自機移動パターン生成手段が、所定の時間（以下、行動単位時間Ｔとする。）だけ移動する行動をＤ回行う自機の各移動先の候補を生成する自機移動パターン生成過程と、  衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中の各位置において、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定過程と、  到達時間差計算手段が、上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突判定過程において衝突しないと判定された上記自機の各移動先の候補へ移動する途中の位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算過程と、  攻撃目標位置判定手段が、上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定過程と、  攻撃弾発射手段が、上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃弾発射過程と、  を有することを特徴とするシューティングゲーム処理方法。
【請求項２】
請求項１に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根に近い各枝経路から順に、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により、攻撃目標位置を探索する、
ことを特徴とするシューティングゲーム処理方法。
【請求項３】
請求項１に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根から限界深さに至る各行動パターンを予め決めた順に、その行動パターンにおける各経路において、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により攻撃目標位置を探索する
ことを特徴とするシューティングゲーム処理方法。
【請求項４】
請求項１〜３の何れかに記載のシューティングゲーム処理方法において、  上記攻撃目標位置判定過程は、更に、攻撃目標位置が複数存在する場合には、自機が最も短い時間で到達することができる攻撃目標位置を決定する過程、を更に有し、  上記攻撃弾発射過程は、上記自機が最も短い時間で到達することができる攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる過程である、  ことを特徴とするシューティングゲーム処理方法。
【請求項５】
請求項１〜４の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程とを繰り返し、
上記到達時間差計算過程は、既に行われた攻撃目標位置判定過程において攻撃目標位置が見つかったときには、上記攻撃目標位置に自機が移動する時間よりも、上記攻撃目標位置以外の衝突しないと判定された位置に自機が移動する時間の方が短い場合のみ、自機がその衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾がその衝突しないと判定された位置へ移動するのに必要な時間との上記差の絶対値を計算する過程であり、
上記到達時間差計算過程は、更に、最後に見つかった攻撃目標位置のみを攻撃目標位置とする過程を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項６】
請求項１〜５の何れかに記載のシューティングゲーム処理方法において、
上記所定の値は、自機の大きさと敵機が新たに発射する攻撃弾の大きさの和の半分をその攻撃弾の速さで割った値である、
ことを特徴とするシューティングゲーム処理方法。
【請求項７】
請求項１〜６の何れかに記載のシューティングゲーム処理方法において、
ゲームプレイヤーの自機操作履歴における自機移動方向変更時間間隔の平均値を、上記行動単位時間Ｔとする、
ことを特徴とするシューティングゲーム処理方法。
【請求項８】
請求項１〜６の何れかに記載のシューティングゲーム処理方法において、更に、
行動単位時間設定手段が、上記行動単位時間Ｔを、自機の行動の回数が多くなるほど大きくする行動単位時間設定過程を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項９】
請求項１〜８の何れかに記載のシューティングゲーム処理方法において、
上記自機移動パターン生成過程は、自機位置の現在速度を自機が未来において一定時間Ｔｃ継続した後に、行動単位時間Ｔだけ移動する行動をＤ回行う自機の各移動先の候補を生成する過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項１０】
請求項１〜９の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記攻撃弾発射過程は、自機の現在位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項１１】
請求項１〜９の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記攻撃弾発射過程は、自機の現在位置にあるランダムな変位を与えた位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項１２】
画面上に自機と敵機を表示し、Ｗ種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理装置であって、  所定の時間（以下、行動単位時間Ｔとする。）だけ移動する行動をＤ回行う自機の各移動先の候補を生成する自機移動パターン生成手段と、  自機が、上記自機の各移動先の候補へ移動する途中の各位置において、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定手段と、  上記衝突判定手段において衝突しないと判定された場合には、自機が上記衝突判定過程において衝突しないと判定された上記自機の各移動先の候補へ移動する途中の位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算手段と、  上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定手段と、  上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃弾発射手段と、  を有することを特徴とするシューティングゲーム処理装置。
【請求項１３】
画面上に自機と敵機を表示し、Ｗ種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理プログラムであって、  所定の時間（以下、行動単位時間Ｔとする。）だけ移動する行動をＤ回行う自機の各移動先の候補を生成する自機移動パターン生成過程と、  自機が、上記自機の各移動先の候補へ移動する途中の各位置において、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定過程と、  上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突判定過程において衝突しないと判定された上記自機の各移動先の候補へ移動する途中の位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算過程と、  上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定過程と、  上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃弾発射過程と、  をコンピュータに実行させるためのシューティングゲーム処理プログラム。
【請求項１４】
請求項１３記載のシューティングゲーム処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画面上に自機と敵機を表示し、自機をＷ種類の行動によって所定の時間だけ移動させる操作を行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの処理方法、その装置、そのプログラム及びその記録媒体に関する。
【背景技術】
【０００２】
シューティングゲームの処理方法、特に敵機の攻撃弾発射動作を制御する方法としては、例えば、自機の位置とは無関係に敵機が一定方向に攻撃弾を発射するアルゴリズムや、ランダムな方向に攻撃弾を発射するアルゴリズムがあった。また、自機の位置を考慮するアルゴリズムとしては、例えば、攻撃弾発射時点の自機位置に向けて攻撃弾を発射するアルゴリズムがあった。
また、チェス、オセロ、将棋といって非アクションの思考ゲームにおいては、人工知能の技術を導入したアルゴリズムの研究が行われている（例えば、非特許文献１参照）。
【非特許文献１】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）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００９５】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、ユーザ端末を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【００９６】
以上の各実施形態の他、本発明であるシューティングゲーム処理方法、その装置等は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【図面の簡単な説明】
【００９７】
【図１】シューティングゲーム処理装置１０００の機能構成を例示した図。
【図２】シューティングゲーム処理装置１０００の処理を例示した図。
【図３】シューティングゲームの模式図。
【図４】安全行動パターンを説明するための図。
【図５】縦型探索の探索順序を示す図。
【図６】横型探索の探索順序を示す図。
【図７】シューティングゲーム処理装置１００１の機能構成を例示した図。
【図８】シューティングゲーム処理装置１００１の処理を例示した図（１）。
【図９】シューティングゲーム処理装置１００１の処理を例示した図（２）。
【図１０】シューティングゲーム処理装置１００１の処理を例示した図（３）
【図１１】自機行動順列の要素の一致の例を説明するための図。
【図１２】シューティングゲーム難易度判定装置をコンピュータにより実行するときの機能構成を例示した図。
【符号の説明】
【００９８】
１  自機
２  敵機
３  攻撃弾
４  攻撃弾
５  ＣＰＵ
６  ＲＡＭ
７  出力部
８  補助記憶部
９  入力部
９’  バス
１０  自機移動パターン生成部
１１  自機移動パターン生成部
２０  攻撃弾位置推定部
２１  ステップ
３０  衝突判定部
４０  攻撃目標位置判定部
４１  到達時間差計算部
５０  攻撃目標位置バッファ
５１  自機移動パターンバッファ
５２  敵機攻撃弾状態バッファ
５３  順列データバッファ
６０  攻撃弾発射部
６１  乱数発生部
１０１  初期化部
１０２  制御部
１０３  バッファ
１０４  位置更新部
１０５  記憶部
１０６  順列作成部
１０７  順列獲得部
１０８  操作履歴記録部
１０９  行動単位時間設定部
１１２  制御部
２０１  記憶部
２０２  位置取得部
４０１  到達時間差計算部
１０００  シューティングゲーム処理装置
１００１  シューティングゲーム処理装置
【図１】
0004804230.tif 000002
【図２】
0004804230.tif 000003
【図３】
0004804230.tif 000004
【図４】
0004804230.tif 000005
【図５】
0004804230.tif 000006
【図６】
0004804230.tif 000007
【図７】
0004804230.tif 000008
【図８】
0004804230.tif 000009
【図９】
0004804230.tif 000010
【図１０】
0004804230.tif 000011
【図１１】
0004804230.tif 000012
【図１２】
0004804230.tif 000013