説明

シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体

【課題】シューティングゲームにおいて、敵機が攻撃弾を発射するアルゴリズムをより知的にする。
【解決手段】本発明によれば、所定の時間(以下、行動単位時間Tとする。)だけ移動する行動をD回行う自機の各移動先の候補を生成する(10)。自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する(30)。上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する(401)。上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする(40)。上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる(60)。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画面上に自機と敵機を表示し、自機をW種類の行動によって所定の時間だけ移動させる操作を行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの処理方法、その装置、そのプログラム及びその記録媒体に関する。
【背景技術】
【0002】
シューティングゲームの処理方法、特に敵機の攻撃弾発射動作を制御する方法としては、例えば、自機の位置とは無関係に敵機が一定方向に攻撃弾を発射するアルゴリズムや、ランダムな方向に攻撃弾を発射するアルゴリズムがあった。また、自機の位置を考慮するアルゴリズムとしては、例えば、攻撃弾発射時点の自機位置に向けて攻撃弾を発射するアルゴリズムがあった。
また、チェス、オセロ、将棋といって非アクションの思考ゲームにおいては、人工知能の技術を導入したアルゴリズムの研究が行われている(例えば、非特許文献1参照)。
【非特許文献1】Jonathan Schaeffer,H.Jaap van den Herik,“Games,computers,and artificial intelligence”,Artificial Intelligence,2002,Vol.134,p1-7
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかし、従来技術による敵機の攻撃弾発射アルゴリズムは、単純であり、プレイヤーに飽きられやすいという問題があった。
また、各プレイヤーの自機操作の癖を考慮した敵機の攻撃弾発射アルゴリズムの自動的な更新も行われていなかったため、ユーザが一度そのゲームに習熟してしまうと、ユーザがすぐにそのゲームに飽きてしまうという問題があった。
そのような問題を解くためには、人工知能の技術を導入するのが有効であると考えられるが、現在人工知能におけるゲームの研究は、チェス、オセロ、将棋といった非アクションの思考ゲームが中心であり、人工知能の技術をシューティングゲームのようなアクションゲームに応用する試みはなかった。
【0004】
また、チェス、オセロ、将棋といった思考ゲームを解くための人工知能技術の研究は、効率的に深い探索計算を行うための手法の開発に集中している(例えば、非特許文献1参照。)。もちろん、シューティングゲームにおいても、知的な敵機の動作アルゴリズムを開発するためには、探索技術は重要である。しかし、シューティングゲームにおいて、探索の深さに関する要求は低く、むしろ、いかにしてアクションゲームにおいて求められているレベルの実時間性を実現するかが大事である。しかし、そのような要求を満たす技術はなかった。
【課題を解決するための手段】
【0005】
本発明によれば、画面上に自機と敵機を表示し、W種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理方法であって、自機移動パターン生成手段が、所定の時間(以下、行動単位時間Tとする。)だけ移動する行動をD回行う自機の各移動先の候補を生成する。衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する。到達時間差計算手段が、上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する。攻撃目標位置判定手段が、上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする。攻撃弾発射手段が、上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる。
【発明の効果】
【0006】
人工知能の分野における探索計算を応用し、敵機の攻撃弾発射アルゴリズムをより知的なものにすることができる。これにより、プレイヤーに飽きられにくいシューティングゲームを作成することができる。
【発明を実施するための最良の形態】
【0007】
[理論的背景]
図3に、本発明の処理の対象となるシューティングゲームを例示する。画面上には、自機1と自機1の攻撃弾3、敵機2と敵機2の攻撃弾4が表示される。攻撃弾3、敵機2、攻撃弾4は、複数存在していても良い。自機1、敵機2、攻撃弾3、攻撃弾4は、X軸とY軸で構成される2次元の平面上に位置するものとする。
【0008】
ユーザは、自機1を操作して、敵機2と闘う。ユーザは、一回の操作で、W種類の移動速度(方向と速さ)で、行動単位時間Tだけ自機を移動することができる。自機1が取り得るW種類の移動速度(Vsx(w),Vsy(w))は予め決められており、それぞれの移動速度(Vsx(w),Vsy(w))には、移動速度番号w(w=1,…,W)が付けられているものとする。以下では、移動速度番号wを選択する行動のことを行動(w)という。また、ユーザは、W種類の速度による移動と同時に、敵機2を攻撃するための攻撃弾3を発射する操作をすることができる。
【0009】
敵機2は、行動単位時間Tごとに、K種類の移動速度(方向と速さ)で行動することができる。敵機2が取り得るK種類の移動速度(Vex(k),Vey(k))は予め決められており、それぞれの移動速度(Vex(k),Vey(k))には、移動速度番号k(k=1,…,K)が付けられているものとする。また、敵機2は移動と同時に、攻撃弾4を発射することができる。敵機が発射した攻撃弾は、一定速度(Vbikx(t),Vbiky(t))で移動するものとする。
【0010】
自機1が、敵機2及び敵機2が発射する攻撃弾4と衝突した場合には、自機1は破壊され、そこでゲームオーバーとなる。逆に、自機1の攻撃弾3が敵機2に衝突した場合には、敵機2は破壊される。自機1の攻撃弾3によりすべての敵機2を破壊した場合には、ユーザは、そのゲームに勝利することになる。
【0011】
このようなシューティングゲームにおいて、理想的な強さを持った敵機は、自機の取り得る「安全行動パターン」の数が少なくなるように攻撃弾を発射する敵機である。敵機が攻撃弾を発射する時点で存在している自機の取り得る「安全行動パターン」の数を減らすことができれば、敵機は自機を効率的に追い詰めているということができるためである。
【0012】
ここで、「安全行動パターン」は以下のように定義される。自機がW種類の速度による移動を所定の回数(D回)だけ行うことができるとする。このとき、自機が取り得る全行動パターンについて、自機が敵機の攻撃弾により破壊されるかどうかを調べる。すなわち、各行動の深さd(d={1,…,D})においてW種類の速度による移動を行うことによって自機が取り得る全行動パターンについて、自機が敵機の攻撃弾により破壊されるかどうかを調べる。全行動パターンのうち、自機が攻撃弾により破壊されない行動パターンのことを安全行動パターンとする。逆に、自機が攻撃弾により破壊されてしまう行動パターンのことを死亡行動パターンとする。全行動パターンと安全行動パターンと死亡行動パターンの間には、全行動パターン数=安全行動パターンの総数+死亡行動パターンの総数、という関係がある。
【0013】
例えば、W=3、D=3の場合の全行動パターンの例を図4に示す。図4においては、※1、※2、※3において衝突が起こるものとする。また、図4において、実線は、各深さdにおいて、w=1の行動を選択した場合の自機の描く軌跡を表している。破線は、各深さdにおいて、w=2の行動を選択した場合の自機の描く軌跡を表している。一点鎖線は、各深さdにおいて、w=3の行動を選択した場合の自機の描く軌跡を表している。枝の末端に○が示されているものが安全行動パターンであり、枝の末端に×が示されているものが死亡行動パターンである。
【0014】
以下では、ある位置に自機が移動するのにかかる時間と、その位置に敵機が発射する攻撃弾が移動するのにかかる時間との差の絶対値が所定の値Cよりも小さい場合には、その位置のことを攻撃弾の目標位置(以下、攻撃目標位置とする。)と呼ぶ。所定の値Cは、例えば、自機の大きさと敵機攻撃弾の大きさの和の半分をS、敵機の攻撃弾の速度をVeとすると、S/Veとすることができる。また、自機の大きさとしては、例えば、自機の形状に内接する円の直径、敵機攻撃弾の大きさとしては、敵機攻撃弾の形状に内接する円の直径を取ることができる。
【0015】
ある位置に自機が移動するのにかかる時間と、その位置に敵機が発射する攻撃弾が移動するのにかかる時間との差の絶対値がS/Veよりも小さい場合には、敵機がその位置に向けて攻撃弾を発射すると、その位置に移動する行動を選択した自機が、攻撃弾とその位置において衝突するのである。
【0016】
ここで、攻撃目標位置が自機の現在位置から近いほど、敵機が発射する攻撃弾によって減らすことができる自機の安全行動パターンの数は多いということができる。なぜなら、自機の移動パターンの探索木の根元の近くにある(浅い深さにある)節点を攻撃目標位置とすると、その節点から分岐する安全行動パターンのすべてをなくすことができるためである。
【0017】
このような自機の現在位置から近い攻撃目標位置を見つけるために、以下に述べる第1実施形態では縦型探索を用いる。また、第2実施形態では、横型探索を用いる。これらの実施形態は一例であり、他の探索方法を用いても本発明を実施することができる。すなわち、探索の方法は、後述する縦型探索と横型探索に限定されない。
【0018】
縦型探索とは、子節点を優先して探索するものである。例えば、D=3、W=3の場合、図5に示すように、行動単位ごとの移動経路につけた番号の順番でそれぞれの経路を探索する手法である。以下に述べる第1実施形態では、衝突が起こった場合には、衝突が起こった箇所より後の経路を探索しない。例えば、※1(6の経路)において衝突が起こった場合には、7〜9の経路については探索しない。この場合には、6の経路を探索して衝突が発生した後に、10の経路を探索することになる。また、ひとつでも適切な攻撃目標位置が見つかると、その攻撃目標位置よりも、自機の現在位置から遠い位置については探索を行わない。例えば、図5に示すように、深さd=2の探索で、○(15の経路)において適切な攻撃目標位置が見つかった場合には、自機が、現在位置から○で示された攻撃目標位置に到達するまでの時間よりも、自機の到達時間が短い位置についてのみ適切な攻撃目標位置と成り得るかどうかを調べる。
【0019】
また、横型探索とは、ある節点から探索を開始して、その節点に接続している節点を全て調べた後、その調べた節点に接続している子節点を順番に調べて行く探索方法である。例えば、D=3、W=3の場合、図6に示すように、行動単位ごとの移動経路につけた番号の順番でそれぞれの経路を探索する手法である。以下に述べる第2実施形態では、衝突が起こった場合には、衝突が起こった箇所より後の経路を探索しない。例えば、※1(5の経路)において衝突が起こった場合には、16〜18の経路については探索しない。この場合には、15の経路を探索した後に、19の経路を探索する。また、ひとつでも適切な攻撃目標位置が見つかると、その攻撃目標位置よりも、自機の現在位置から遠い位置については探索を行わない。例えば、図6に示すように、深さd=2の探索で、○(7の経路)において適切な攻撃目標位置が見つかった場合には、自機が、現在位置から○で示された攻撃目標位置に到達するまでの時間よりも、自機の到達時間が短い位置についてのみ適切な攻撃目標位置と成り得るかどうかを調べる。
【0020】
[実施形態]
第1実施形態(縦型探索)
図1、2を参照して、本発明の第1実施形態によるシューティングゲーム処理方法を実施するためのシューティングゲーム処理装置1000を説明する。図1は、シューティングゲーム処理装置1000の機能構成例を示す図である。図2は、シューティングゲーム処理装置1000の処理例を示す図である。
シューティングゲーム処理装置1000は、例えば、自機移動パターン生成部10、攻撃弾位置推定部20、衝突判定部30、攻撃目標位置判定部40、攻撃目標位置バッファ50、自機移動パターンバッファ51、敵機攻撃弾状態バッファ52、攻撃弾発射部60から構成される。
自機移動パターン生成部10は、例えば、初期化部101、制御部102、バッファ103、位置更新部104、記憶部105から構成される。
攻撃弾位置推定部20は、例えば、記憶部201、位置取得部202から構成される。
攻撃目標位置判定部40は、例えば、到達時間差計算部401を含む。
【0021】
<準備>
自機の行動の回数(探索の深さ)D、自機の取り得る行動wの種類の数W、各行動wを取ったときの自機の速度(Vxw,Vyw)、行動単位時間Tは予め設定され、自機移動パターン生成部の記憶部105に格納されているものとする。
例えば、D=5、W=9に設定することができる。また、各行動wを取ったときの自機の速度(Vxw,Vyw)としては、例えば、W=9の場合、(Vx1,Vy1)=(0,1)、(Vx2,Vy2)=(1,1)、(Vx3,Vy3)=(1,0)、(Vx4,Vy4)=(1,−1)、(Vx5,Vy5)=(0,−1)、(Vx6,Vy6)=(−1,−1)、(Vx7,Vy7)=(−1,0)、(Vx8,Vy8)=(−1,1)、(Vx9,Vy9)=(0,0)とすることができる。
【0022】
また、自機の行動を表現する行動単位の長さは、自機の大きさが0でないとした場合、自機が移動によって掃く領域がカバーできない領域が各深さの移動において発生しないようにすることが、適切な攻撃目標位置を見つけるうえにおいて重要である。攻撃弾自機が移動によって掃く領域がカバーできない領域が存在すれば、求まった攻撃目標位置は、実際に自機が移動することができる領域の一部については考慮していないことになるからである。このため、より適切な攻撃目標位置を見つけるためには、例えば、自機の形状に内接する円の直径を自機の速度で割った値を、上記行動単位時間Tとして設定する。
【0023】
敵機の攻撃弾の速度(Vbikx(t),Vbiky(t))は、予め設定され攻撃弾位置推定部20の記憶部201に格納されているものとする。
以下では、tを自機が行動を開始してからの経過時間、時刻tでの自機の位置を(Xs(t),Ys(t))、敵機iの発射したk番目の攻撃弾の時刻tでの位置を(Xbik(t),Ybik(t))とする。ここで、tは、処理単位時間τごとに離散的な時間を取るものとする。
【0024】
<ステップS1>
自機移動パターン生成部10の初期化部101は、t=0,d=1、Db=D,tb=D×Tとして、これをバッファ103に格納する。また、初期化部101は、時刻tにおける自機の位置(Xs(t),Ys(t))を自機の現在位置に設定して、これを自機移動パターンバッファ51に格納する。
【0025】
<ステップS2>
自機移動パターン生成部10の制御部102は、w(d)=1とする。ここで、w(d)は、深さdにおける自機の移動速度番号wである。
【0026】
<ステップS3>
自機移動パターン生成部10の制御部102は、w(d)と(Xs(t),Ys(t))の値を、それぞれ自機移動パターンバッファ51に格納する。また、自機移動パターン生成部10の制御部102は、時刻tにおける攻撃弾の位置(Xbik(t),Ybik(t))を、敵機攻撃弾状態バッファ52に格納する。
【0027】
<ステップS4>
自機移動パターン生成部10の制御部102は、バッファ103からtを読み出し、tをインクリメント幅τだけインクリメントする。インクリメントされたtは、バッファ103に格納される。tのインクリメント幅τは、行動単位時間Tより小さい値、好ましくはTを複数等分する値であれば、どのような値でも良い。例えば、Tを0.3秒〜1秒としたとき、このTを10等分する時間間隔である0.03秒〜0.1秒をτに設定することができる。
【0028】
また、自機移動パターン生成部10の位置更新部104は、自機の移動速度(Vx(w(d)),Vy(w(d))でtのインクリメント幅τだけ移動した後の自機の位置を計算する。具体的には、位置更新部104は、(τ×Vx(w(d)),τ×Vy(w(d)))を計算して、位置の変位量を求め、これに(Xs(t−τ),Ys(t−τ))を加算することにより、自機の位置を更新する。インクリメント幅τでインクリメントした後の自機の位置、すなわち、更新後の自機の位置(Xs(t),Ys(t))は、衝突判定部30に出力される。
【0029】
<ステップS5>
攻撃弾位置推定部20は、攻撃弾の位置(Xbik(t),Ybik(t))を更新する。すなわち、τ時間経過後の攻撃弾の位置(Xbik(t),Ybik(t))を計算する。
具体的には、記憶部201に記憶された攻撃弾の速度(Vbikx(t),Vbiky(t))を読み出し、これをτ倍したものを、位置取得部202が取得した更新前の攻撃弾の位置(Xbik(t−τ),Ybik(t−τ))に加算することにより、更新後の攻撃弾の位置(Xbik(t),Ybik(t))を求める。
更新後の攻撃弾の位置(Xbik(t),Ybik(t))は、記憶部201に記憶される。また、更新後の攻撃弾の位置(Xbik(t),Ybik(t))は、衝突判定部30と自機移動パターン生成部10に出力される。
【0030】
<ステップS6>
衝突判定部30は、自機と攻撃弾が衝突したかどうかを判定する。衝突したかどうかは、予め設定され、図示していない衝突判定部30内の記憶部に記憶された自機の形状、攻撃弾の形状と、自機移動パターン生成部10から出力された更新後の自機の位置(Xs(t),Ys(t))、攻撃弾位置推定部20から出力された更新後の攻撃弾の位置(Xbik(t),Ybik(t))とから判断される。
例えば、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の攻撃弾の形状が重なった場合には、自機と攻撃弾が衝突したと判定することができる。
衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部10に出力される。その後、ステップS7の処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部10に出力される。その後、ステップS14の処理を行う。
【0031】
<ステップS7>
衝突がなかった旨の信号を受け取った自機移動パターン生成部10の制御部102は、バッファ103から読み出したtとtbの大小関係を比較する。
t<tbであれば、ステップS8の処理を行う。t≧tbであれば、ステップS10の処理を行う。
【0032】
<ステップS8>
攻撃目標位置判定部40の到達時間差計算部41は、敵機の現在位置(X,Y)に位置する敵機が、(Xs(t),Ys(t))を目標位置として攻撃弾を発射したときの到達所要時間Tnを計算する。そして、tとTnの差の絶対値を計算する。
攻撃目標位置判定部40は、上記到達所要時間Tnとtの差の絶対値が、記憶部105から読み出した所定の値Cよりも小さいかどうかを判定する。所定の値Cは、例えば、自機の大きさと敵機攻撃弾の大きさの和の半分をS、敵機の攻撃弾の速度をVeとすると、S/Veとすることができる。また、自機の大きさとしては、例えば、自機の形状に内接する円の直径、敵機攻撃弾の大きさとしては、敵機攻撃弾の形状に内接する円の直径を取ることができる。
【0033】
S/Ve>|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることができる。敵機が(Xs(t),Ys(t))を目標位置として攻撃弾を発射すれば、自機を破壊することができる可能性があるからである。この場合、ステップS9の処理を行う。
S/Ve<|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることはできない。この場合、ステップS10の処理を行う。
【0034】
<ステップS9>
S/Ve>|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることができるため、攻撃目標位置判定部40は、(Xs(t),Ys(t))を、攻撃目標位置(Xdes,Ydes)として攻撃目標位置バッファ50に格納する。また、Db=dとして新たにDbを設定し、これをバッファ103に格納する。また、tb=tとして新たにtbを設定し、これをバッファ103に格納する。
【0035】
<ステップS10>
自機移動パターン生成部10の制御部102は、ステップS3のときから、行動単位時間Tが経過したかどうかを判定する。すなわち、バッファから読み出したtがdTよりも大きいかどうか、つまり、t≧dTかどうかを判定する。
t<dTであれば、ステップS4の処理を行う。すなわち、tがステップS3の時から行動単位時間Tを経過するまで、ステップS4〜S10を繰り返す。
t≧dTであれば、ステップS11の処理を行う。
【0036】
<ステップS11>
自機移動パターン生成部10の制御部102は、バッファ103から読み出したdを1だけインクリメントする。インクリメントされたdは、バッファ103に格納される。
【0037】
<ステップS12>
自機移動パターン生成部10の制御部102は、バッファ103から読み出したdが、バッファ103から読み出したDbより大きいかどうかを判定する。すなわち、Db<dかどうかを判定する。
Db≧dであると判定された場合には、制御部102は、ステップS2の処理を行う。
Db<dであると判定された場合には、制御部102は、ステップS13の処理を行う。
【0038】
<ステップS13>
自機移動パターン生成部10の制御部102は、バッファ103から読み出したdを、1だけデクリメントする。デクリメントされたdは、バッファ103に格納される。
【0039】
<ステップS14>
自機移動パターン生成部10の制御部102は、バッファ103から読み出したtを(d−1)Tに設定する。(d−1)Tに設定されたtは、バッファ103に格納される。また、自機移動パターンバッファ51に格納されたw(d)を読み出し、1だけインクリメントする。インクリメントされたw(d)は、自機移動パターンバッファ51に格納される。
【0040】
<ステップS15>
自機移動パターン生成部10の制御部102は、記憶部105から読み出したWと、自機移動パターンバッファ51から読み出したw(d)の大小関係を比較する。
W<w(d)であれば、自機移動パターン生成部10の制御部102は、ステップS17の処理を行う。W≧w(d)であれば、自機移動パターン生成部10の制御部102は、ステップS16の処理を行う。
【0041】
<ステップS16>
自機移動パターン生成部10の制御部102は、敵機攻撃弾状態バッファ52から、時刻tにおける攻撃弾の位置(Xbik(t),Ybik(t))を読み出す。その後、ステップS3の処理の処理を行う。
【0042】
<ステップS17>
ステップS15においてW<w(d)であると判定された場合には、自機移動パターン生成部10の制御部102は、d=1か否かを判定する。
d≠1と判定された場合には、ステップS14の処理を行う。
d=1と判定された場合には、ステップS18の処理を行う。
【0043】
<ステップS18>
ステップS17において、d=1と判定された場合には、攻撃弾の目標位置の探索を終了する。そして、攻撃弾発射部60が、攻撃目標位置バッファ50から読み出した攻撃目標位置(Xdes,Ydes)に向けて、敵機に攻撃弾を発射させる。
【0044】
本実施形態による攻撃目標位置の探索では、一度攻撃目標位置が見つかった後は、その位置よりも浅く(Db<d,ステップS12)、かつ、その位置よりも自機から近い位置についてのみ(t<tb,ステップS7)、攻撃弾の目標位置となり得るかどうかを探索している。そして、新たな攻撃弾の目標位置が見つかった場合には(ステップS8)、その新たな攻撃弾の目標位置で、攻撃目標位置バッファ50が更新される(ステップS9)。このため、ステップS17においてd=1と判定され、攻撃弾の目標位置の探索を終えたときに、攻撃目標位置バッファ50に格納されている攻撃目標位置(Xdes,Ydes)が、自機の現在位置から最も近い攻撃目標位置となるのである。
以上が、第1実施形態によるシューティングゲーム処理方法、その装置の概要である。
【0045】
第2実施形態(横型探索)
図7、8を参照して、本発明の第2実施形態によるシューティングゲーム処理方法を実施するためのシューティングゲーム処理装置1001を説明する。図7は、シューティングゲーム処理装置1001の機能構成例を示す図である。図8は、シューティングゲーム処理装置1001の処理例を示す図である。
【0046】
シューティングゲーム処理装置1001は、自機移動パターン生成部11が順列作成部106と順列獲得部107を有する点、自機移動パターン生成部11の制御部112の動作が、シューティングゲーム処理装置1000の自機移動パターン生成部10の制御部102の動作と異なる点、順列データバッファ53を有する点で、図1に示したシューティングゲーム処理装置1000と異なる。シューティングゲーム処理装置1001の他の機能構成は、シューティングゲーム処理装置1000の機能構成と同じである。
【0047】
<準備>
第1実施形態と同様に、自機の行動の回数(探索の深さ)D、自機の取り得る行動wの種類の数W、各行動wを取ったときの自機の速度(Vxw,Vyw)、行動単位時間Tは予め設定され、自機移動パターン生成部の記憶部105に格納されているものとする。
また、敵機の攻撃弾の速度(Vbikx(t),Vbiky(t))は、予め設定され攻撃弾位置推定部20の記憶部201に格納されているものとする。
【0048】
以下では、tを自機が行動を開始してからの経過時間、時刻tでの自機の位置を(Xs(t),Ys(t))、敵機iの発射したk番目の攻撃弾の時刻tでの位置を(Xbik(t),Ybik(t))、dを現在評価している自機行動順列の要素の総数、jを現時点で評価している自機行動順列番号、deを現時点で評価している自機行動順列の要素番号、w(d,1,j),…,w(d,de,j),…,w(d,d,j),j番目の自機行動順列とし、各w(d,de,j)には自機の移動速度番号が定められているものとする。また、tbを攻撃目標位置が見つかった時刻、Dbを攻撃目標位置が見つかった場合の探索の深さとする。ここで、tは、処理単位時間τごとに離散的な時間を取るものとする。
【0049】
<ステップS1>
自機移動パターン生成部11の初期化部101は、d=1,k=1,Db=D,tb=D×Tとして、これをバッファ103に格納する。また、初期化部101は、時刻tにおける自機の位置(Xs(t),Ys(t))を自機の現在位置に設定して、これを自機移動パターンバッファ51に格納する。
【0050】
<ステップS2>
自機移動パターン生成部11の順列作成部106は、すべての、jとdeについて、自機行動順列w(d,1,j),…,w(d,de,j),…,w(d,d,j)を作成し、これを順列データバッファ53に格納する。また、j=1としてバッファ103に格納する。上記自機行動順列は、自機が取り得る移動速度番号の順列である。
【0051】
例えば、d=1の場合、順列作成部106は、すべてのjとdeについて、以下のような9(=9の1乗)個の自機行動順列w(d,1,j),…,w(d,de,j),…,w(d,d,j)を作ることができる。
j=1:{w(1,1,1)=1}
j=2:{w(1,1,2)=2}

j=8:{w(1,1,2)=8}
j=9:{w(1,1,9)=9}
【0052】
また、例えば、d=2の場合、すべてのjとdeについて、以下のような81(=9の2乗)個の自機行動順列w(d,1,j),…,w(d,de,j),…,w(d,d,j)を作ることができる。
j=1:{w(2,1,1)=1,w(2,2,1)=1}
j=2:{w(2,1,2)=1,w(2,2,2)=2}

j=80:{w(2,1,80)=9,w(2,2,80)=8}
j=81:{w(2,1,81)=9,w(2,2,81)=9}
【0053】
さらに、例えば、d=3の場合、すべてのdとdeとjについて、以下のような729(=9の3乗)個の自機行動順列w(d,1,j),…,w(d,de,j),…,w(d,d,j)を作ることができる。
j=1:{w(3,1,1)=1,w(3,2,1)=1,w(3,3,1)=1}
j=2:{w(3,1,2)=1,w(3,2,2)=1,w(3,3,2)=2}

j=728:{w(3,1,728)=9,w(3,2,728)=9,w(3,3,728)=8}
j=729:{w(3,1,729)=9,w(3,2,729)=9,w(3,3,729)=9}
【0054】
<ステップS3>
自機移動パターン生成部11の制御部112は、de=1,t=0としてバッファ103に格納する。また、自機が選択すべき移動速度番号をw(d,de,j)とする。
【0055】
<ステップS4>
自機移動パターン生成部11の制御部112は、バッファ103から読み出したdがd=1かどうかを判定する。d=1であれば、ステップS5の処理を行う。d=1でなければ、ステップS18の処理を行う。
【0056】
<ステップS5>
自機移動パターン生成部11の制御部112は、バッファ103からtを読み出し、tをインクリメント幅τだけインクリメントする。インクリメントされたtは、バッファ103に格納される。tのインクリメント幅τは、行動単位時間Tより小さい値、好ましくはTを複数等分する値であれば、どのような値でも良い。例えば、Tを0.3秒〜1秒としたとき、このTを10等分する時間間隔である0.03秒〜0.1秒をτに設定することができる。
【0057】
また、自機移動パターン生成部11の位置更新部104は、自機の移動速度(Vx(w(d,de,j)),Vy(w(d,de,j))でtのインクリメント幅τだけ移動した後の自機の位置を計算する。具体的には、位置更新部104は、(τ×Vx(w(d,de,j)),τ×Vy(w(d,de,j)))を計算して、位置の変位量を求め、これに(Xs(t−τ),Ys(t−τ))を加算することにより、自機の位置を更新する。インクリメント幅τでインクリメントした後の自機の位置、すなわち、更新後の自機の位置(Xs(t),Ys(t))は、衝突判定部30に出力される。
【0058】
<ステップS6>
攻撃弾位置推定部20は、攻撃弾の位置(Xbik(t),Ybik(t))を更新する。すなわち、τ時間経過後の攻撃弾の位置(Xbik(t),Ybik(t))を計算する。
具体的には、記憶部201に記憶された攻撃弾の速度(Vbikx(t),Vbiky(t))を読み出し、これをτ倍したものを、位置取得部202が取得した更新前の攻撃弾の位置(Xbik(t−τ),Ybik(t−τ))に加算することにより、更新後の攻撃弾の位置(Xbik(t),Ybik(t))を求める。
更新後の攻撃弾の位置(Xbik(t),Ybik(t))は、記憶部201に記憶される。また、更新後の攻撃弾の位置(Xbik(t),Ybik(t))は、衝突判定部30と自機移動パターン生成部11に出力される。
【0059】
<ステップS7>
衝突判定部30は、自機と攻撃弾が衝突したかどうかを判定する。衝突したかどうかは、予め設定され、図示していない衝突判定部30内の記憶部に記憶された自機の形状、攻撃弾の形状と、自機移動パターン生成部11から出力された更新後の自機の位置(Xs(t),Ys(t))、攻撃弾位置推定部20から出力された更新後の攻撃弾の位置(Xbik(t),Ybik(t))とから判断される。
例えば、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の攻撃弾の形状が重なった場合には、自機と攻撃弾が衝突したと判定することができる。
【0060】
衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部11に出力される。その後、図9に示すステップS8の処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部11に出力される。その後、ステップS17の処理を行う。
【0061】
<ステップS8>
衝突がなかった旨の信号を受け取った自機移動パターン生成部11の制御部112は、バッファ103から読み出したtとtbの大小関係を比較する。
t<tbであれば、ステップS9の処理を行う。t≧tbであれば、ステップS11の処理を行う。
【0062】
<ステップS9>
攻撃目標位置判定部40の到達時間差計算部401は、敵機の現在位置(X,Y)に位置する敵機が、(Xs(t),Ys(t))を目標位置として攻撃弾を発射したときの到達所要時間Tnを計算する。そして、tとTnの差の絶対値を計算する。
攻撃目標位置判定部40は、上記到達所要時間Tnとtの差の絶対値が、記憶部105から読み出した所定の値Cよりも小さいかどうかを判定する。所定の値Cは、例えば、自機の大きさと敵機攻撃弾の大きさの和の半分をS、敵機の攻撃弾の速度をVeとすると、S/Veとすることができる。
【0063】
S/Ve>|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることができる。敵機が(Xs(t),Ys(t))を目標位置として攻撃弾を発射すれば、自機を破壊することができる可能性があるためである。この場合、S10の処理を行う。
S/Ve<|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることはできない。この場合、図8のステップS11の処理を行う。
【0064】
<ステップS10>
S/Ve>|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることができるため、攻撃目標位置判定部40は、(Xs(t),Ys(t))を、攻撃目標位置バッファ50に格納する。また、Db=dとして新たにDbを設定し、これをバッファ103に格納する。また、tb=tとして新たにtbを設定し、これをバッファ103に格納する。
【0065】
<ステップS11>
自機移動パターン生成部11の制御部112は、ステップS3のときから、行動単位時間Tが経過したかどうかを判定する。すなわち、バッファから読み出したtがde×Tよりも大きいかどうか、つまり、t≧de×Tかどうかを判定する。
t<dTであれば、ステップS5の処理を行う。すなわち、tがステップS3の時から行動単位時間Tを経過するまで、ステップS5〜S10の処理を繰り返す。
t≧dTであれば、ステップS12の処理を行う。
【0066】
<ステップS12>
自機移動パターン生成部11の制御部112は、現d,j,de値での自機位置(Xs(d,de,j),Ys(d,de,j))のデータを、自機移動パターンバッファ51に格納する。また、自機移動パターン生成部11の制御部102は、現d,j,de値での敵機の攻撃弾の位置(Xbik(d,de,j),Ybik(d,de,j))のデータを、敵機攻撃弾状態バッファ52に格納し、図10に示すステップS13の処理を行う。
【0067】
<ステップS13>
自機移動パターン生成部11の制御部112は、バッファ103から読み出した自機行動順列番号jを1だけインクリメントする。インクリメントされた自機行動順列番号jは、バッファ103に格納される。
【0068】
<ステップS14>
自機移動パターン生成部11の制御部112は、バッファ103から読み出した自機行動順列番号jが、j=wのd乗かどうかを判定する。
j≠wのd乗であれば、ステップS3の処理を行う。すなわち、すべての自機行動順列番号jについて、ステップS3〜S12の処理が繰り返されることになる。
j=wのd乗であれば、ステップS15の処理を行う。
【0069】
<ステップS15>
自機移動パターン生成部11の制御部112は、バッファ103から読み出したdを1だけインクリメントする。インクリメントされたdは、バッファ103に格納される。
【0070】
<ステップS16>
自機移動パターン生成部11の制御部112は、バッファ103から読み出したdが、バッファ103から読み出したDbより大きいかどうかを判定する。すなわち、Db<dかどうかを判定する。
Db≧dであると判定された場合には、制御部112は、図8に示すステップS2の処理を行う。
Db<dであると判定された場合には、本実施形態による横型探索は終了し、制御部112は、ステップS21の処理を行う。
【0071】
<ステップS17>(図8)
ステップS7の処理において、自機と敵機の攻撃弾が衝突していると判定された場合には、自機移動パターン生成部11の制御部112は、現在のdをdc(k)、現在のjをjc(k)として、自機移動パターンバッファ51に格納する。そして、バッファ103から読み出したkを1だけインクリメントして、バッファ103に再度格納する。
ステップS17の処理が終わった後は、図10に示すステップS13の処理を行う。
【0072】
<ステップS18>
順列獲得部107は、順列データバッファ53を検索して、現在評価している自機行動順列の要素と同じ要素を持つ順列の自機行動順列の深さdsとその順列番号jsを獲得する。
例えば、図11に示すように、d=2,j=1の自機行動順列が{w(2,1,1)=1,w(2,2,1)=1}であり、d=1,j=1の自機行動順列が{w(1,1,1)=1}である場合には、w(2,1,1)=1とw(1,1,1)=1の部分で、自機行動順列の要素が一致するため、de=1の部分で同じ要素を持つということができる。したがって、d=2,j=1の自機行動順列{w(2,1,1)=1,w(2,2,1)=1}についてのdsは1となり、jsは1となる。すなわち、(ds,js)=(1,1)となる。
【0073】
また、例えば、d=3,j=1の自機行動順列が{w(3,1,1)=1,w(3,2,1)=1,w(3,3,1)=1}であり、d=2,j=1の自機行動順列が{w(2,1,1)=1,w(2,2,1)=1}であり、d=1,j=1の自機行動順列が{w(1,1,1)=1}である場合には、d=3,j=1の自機行動順列とd=2,j=1の自機行動順列のうち、{w(3,1,1)=1,w(3,2,1)=1}と{w(2,1,1)=1,w(2,2,1)=1}の部分で、自機行動順列の要素が一致する。また、d=3,j=1の自機行動順列とd=1,j=1の自機行動順列のうち、w(2,1,1)=1とw(1,1,1)=1の部分で自機行動順列の要素が一致する。したがって、d=3,j=1の自機行動順列{w(3,1,1)=1,w(3,2,1)=1,w(3,3,1)=1}についてのdsとjsは、(ds,js)={(1,1),(2,1)}となる。
【0074】
<ステップS19>
自機移動パターン生成部11の制御部112は、dc(k)=ds,jc(k)=jsとなるkが存在するかどうか自機移動パターンバッファ51を検索する。(ds,js)の組が複数ある場合には、それぞれの(ds,js)の組について、dc(k)=ds,jc(k)=jsとなるkが存在するかどうかを検索する。
dc(k)=ds,jc(k)=jsとなるkが存在する場合には、図10に示したステップS13の処理を行う。
dc(k)=ds,jc(k)=jsとなるkが存在しない場合には、ステップS20の処理を行う。
【0075】
<ステップS20>
自機移動パターン生成部11の制御部112は、dc(k)=ds,jc(k)=jsとなるkが存在しない場合には、ステップS18で求まった(ds,js)の組のうちdsの値が最大である(ds,js)を求める。そして、上記dsの値が最大である(ds,js)に従って移動を行った結果の自機位置(Xs(ds,ds,js),Ys(ds,ds,js))と攻撃弾位置(Xbik(ds,ds,js),Ybik(ds,ds,js))を、自機移動パターンバッファ51から読み込む。また、t=T×(d−1)、de=dとして、このtとdeをそれぞれバッファ103に格納する。
【0076】
<ステップS21>(図10)
ステップS16において、Db<dであると判定された場合には、攻撃弾の目標位置の探索を終了する。そして、攻撃弾発射部60が、攻撃目標位置バッファ50から読み出した攻撃目標位置(Xdes,Ydes)に向けて、敵機に攻撃弾を発射させる。
以上が、第2実施形態によるシューティングゲーム処理方法、その装置の概要である。
【0077】
[変形例等]
変形例1
行動単位時間Tの設定方法としは、以下のようなものがある。
例えば、自機移動パターン生成部10と自機移動パターン生成部11の操作履歴記録部108が、プレイヤーの操作履歴についてのデータを取っているものとする。行動単位時間設定部109は、操作履歴記録部108に記録された操作履歴データから、自機が移動方向を変更した時間の間隔の平均値を計算し、この計算結果を行動単位時間Tとして設定することができる。
これにより、プレイヤーの癖を考慮した攻撃弾の発射が可能となる。
【0078】
変形例2
また、攻撃目標位置の探索において、自機の行動の度ごとに行動単位時間Tを変更することができる。例えば、自機の行動の回数が多くなるほど、言い換えれば、探索の深さdが深くなるほど、行動単位時間Tの長さを指数関数的に大きくすることができる。探索の深さdが深くなるほど、行動単位時間Tを長くすることにより、限られた深さの探索においても、より未来の状態まで考慮した探索を行うことができる。このために、例えば、行動単位時間設定部109は、第1実施形態におけるステップS11の処理において、または、第2実施形態におけるステップS15の処理において、dをインクリメントした後に、Aexp(d)を計算し、この計算結果を行動単位時間Tに設定する。ここで、Aは1より大きい任意の実数である。
【0079】
変形例3
また、自機が現在速度を未来において一定時間Tcだけ継続してから、攻撃目標位置を求める探索をするようにしても良い。探索計算を実質的に一段深く行うことができるためである。すなわち、自機が現在速度を未来において一定時間Tcだけ継続したと仮定した後に、D=5の探索を行う場合には、実質的にD=6の探索を行ったのと同じ探索を行うことができる。
【0080】
ユーザが画面に表示された自機、敵機、攻撃弾を見てから、自機の行動を決めて、その行動を入力するには、行動単位時間T以上の時間がかかることが普通である。したがって、自機が現在速度を未来において一定時間Tcだけ継続したとして、攻撃目標位置を求める探索を行うようにしても問題は生じない。また、自機と敵機の行動選択のタイミングが同時ではない場合、すなわち、敵機が行動を選択する場合に、自機が移動中である場合においても、自機が現在速度を未来において一定時間Tcだけ継続したとして探索を行うことにより、敵機が行動を選択することができる。
【0081】
第1実施形態において、自機が現在速度を未来において一定時間Tcだけ継続した後に、探索を行うために、第1実施形態のステップS1又は第2実施形態のステップS1おける処理において、初期化部101は、時刻t=0における自機の位置(Xs(t),Ys(t))を、自機が現在速度を一定時間Tcだけ移動した位置に設定する。また、第1実施形態のステップS5又は第2実施形態のステップS6の処理において、攻撃弾位置推定部20は、位置取得部202が取得した敵機が既に発射した攻撃弾の現在位置から、その攻撃弾が一定時間Tcだけ移動した位置を計算することにより、更新前の攻撃弾の位置(Xbik(t−τ),Ybik(t−τ))を求める。また、第1実施形態のステップS8又は第2実施形態のステップS9の処理において、攻撃目標位置判定部40は、S/Ve>|t−Tn|かどうかではなく、S/Ve>|t+Tc−Tn|かどうかを判定する。
その他の処理は、上記各実施形態と同じである。例えば、上記一定時間Tcには、変形例1で説明した自機が移動方向を変更した時間の間隔の平均値を設定することができる。
【0082】
変形例4
第1実施形態のステップS18もしくは第2実施形態のステップ21において、攻撃弾発射部60は、攻撃目標位置バッファ50に攻撃目標位置が格納されていない場合には、攻撃弾発射部60は、自機の現在位置に向けて攻撃弾を発射するようにすることができる。
【0083】
変形例5
また、第1実施形態のステップS18もしくは第2実施形態のステップ21において、攻撃弾発射部60は、攻撃目標位置バッファ50に攻撃目標位置が格納されていない場合には、攻撃弾発射部60は、自機の現在位置に、あるランダムな変位を与えた位置に向けて攻撃弾を敵機に発射させることができる。
【0084】
例えば、攻撃弾発射部60の乱数発生部61が、X軸方向の変位量とY軸方向の変位量のそれぞれについてのランダムな値を生成する。攻撃弾発射部60が、自機の現在位置に上記生成されたX軸方向の変位量とY軸方向の変位量を加算した位置に向けて攻撃弾を敵機に発射させる。
【0085】
具体的には、自機の形状に内接する円の直径をMとすると、X軸方向の変位量,Y軸方向の変位量の幅を、−3M〜3M程度にすると良い。例えば、自機の形状の大きさが30ドットの場合には、X軸方向の変位量,Y軸方向の変位量としては、それぞれ、−50〜50の値をランダムに取ることができるようにすると良い。
【0086】
変形例6
第1実施形態のステップS18において、攻撃弾発射部60は、攻撃目標位置バッファ50に攻撃目標位置が格納されていない場合には、攻撃弾目標位置が見つかっていない旨の信号を自機移動パターン生成部10に出力するようにしてもよい。
【0087】
上記信号を受け取った自機移動パターン生成部10は、自機が現在の速度を維持すると仮定して、自機が現在の速度を維持する行動を取り続ける場合の自機の移動先を生成する。攻撃目標位置判定部40は、その移動先に至るまでの各位置について、適切な攻撃弾目標位置と成り得るかどうかを判定する。すなわち、その移動先に至るまでの各位置について、その位置に自機が移動する時間と敵機が発射する攻撃弾がその位置に移動する時間の差の絶対値が、所定の値Cよりも小さいかどうかを判定する。所定の値Cよりも小さい場合には、その位置を攻撃目標位置とすることができる。攻撃弾発射部60は、その攻撃目標位置に向けて攻撃弾を発射する。
【0088】
変形例7
また、変形例6で述べたように、第1実施形態のステップS18において、攻撃弾発射部60は、攻撃目標位置バッファ50に攻撃目標位置が格納されていない場合には、攻撃弾目標位置が見つかっていない旨の信号を自機移動パターン生成部10に出力する。
上記信号を受け取った自機移動パターン生成部10の制御部102は、記憶部105に格納された所定の値Cを読み出し、所定の値Cをより大きな値に設定しなおして記憶部105に格納する。そして、上記ステップS1〜18の各処理を再度実行するようにしてもよい。
【0089】
変形例8
また、変形例6で述べたように、第1実施形態のステップS18において、攻撃弾発射部60は、攻撃目標位置バッファ50に攻撃目標位置が格納されていない場合には、攻撃弾目標位置が見つかっていない旨の信号を自機移動パターン生成部10に出力する。
攻撃目標位置が見つかっていない旨の信号を受け取った自機移動パターン生成部10の制御部102は、記憶部105に格納された探索の深さDを読み出し、1だけインクリメントしたD+1の値を新たなDとして記憶部105に格納する。そして、上記ステップS1〜18の各処理を再度実行するようにしても良い。
制御部102は、インクリメントしたD+1が一定の値Dcになったら、探索を終了する。すなわち、インクリメントしたD+1が一定の値Dcになった場合には、ステップS1〜18の各処理を実行するのを止める。
【0090】
変形例9
上記実施形態では、自機が最も短い時間で到達することができる攻撃目標位置についてのみ攻撃弾を発射したが、攻撃目標位置が見つかるごとに、攻撃弾発射部60が、その攻撃目標位置に向けて攻撃弾を敵機に発射させるようにしてもよい。
【0091】
その他
上記変形例6〜9は、第2実施形態についても同様にして行うことができる。また、上記の変形例を組み合わせて行っても良い。
また、上記シューティングゲーム処理装置の処理機能をコンピュータによって実現することができる。この場合、シューティングゲーム処理装置の処理機能の内容はプログラムによって記述される。そして、このプログラムを、図12に示すようなコンピュータで実行することにより、上記シューティングゲーム処理装置の処理機能がコンピュータ上で実現される。
【0092】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)等を、光磁気記録媒体として、MO(Magneto-Optical disc)等を、半導体メモリとしてEEP−ROM(Electronically Erasable and Programmable-Read Only Memory)等を用いることができる。
【0093】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【0094】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0095】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、ユーザ端末を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【0096】
以上の各実施形態の他、本発明であるシューティングゲーム処理方法、その装置等は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【図面の簡単な説明】
【0097】
【図1】シューティングゲーム処理装置1000の機能構成を例示した図。
【図2】シューティングゲーム処理装置1000の処理を例示した図。
【図3】シューティングゲームの模式図。
【図4】安全行動パターンを説明するための図。
【図5】縦型探索の探索順序を示す図。
【図6】横型探索の探索順序を示す図。
【図7】シューティングゲーム処理装置1001の機能構成を例示した図。
【図8】シューティングゲーム処理装置1001の処理を例示した図(1)。
【図9】シューティングゲーム処理装置1001の処理を例示した図(2)。
【図10】シューティングゲーム処理装置1001の処理を例示した図(3)
【図11】自機行動順列の要素の一致の例を説明するための図。
【図12】シューティングゲーム難易度判定装置をコンピュータにより実行するときの機能構成を例示した図。
【符号の説明】
【0098】
1 自機
2 敵機
3 攻撃弾
4 攻撃弾
5 CPU
6 RAM
7 出力部
8 補助記憶部
9 入力部
9’ バス
10 自機移動パターン生成部
11 自機移動パターン生成部
20 攻撃弾位置推定部
21 ステップ
30 衝突判定部
40 攻撃目標位置判定部
41 到達時間差計算部
50 攻撃目標位置バッファ
51 自機移動パターンバッファ
52 敵機攻撃弾状態バッファ
53 順列データバッファ
60 攻撃弾発射部
61 乱数発生部
101 初期化部
102 制御部
103 バッファ
104 位置更新部
105 記憶部
106 順列作成部
107 順列獲得部
108 操作履歴記録部
109 行動単位時間設定部
112 制御部
201 記憶部
202 位置取得部
401 到達時間差計算部
1000 シューティングゲーム処理装置
1001 シューティングゲーム処理装置

【特許請求の範囲】
【請求項1】
画面上に自機と敵機を表示し、W種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理方法であって、
自機移動パターン生成手段が、所定の時間(以下、行動単位時間Tとする。)だけ移動する行動をD回行う自機の各移動先の候補を生成する自機移動パターン生成過程と、
衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定過程と、
到達時間差計算手段が、上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算過程と、
攻撃目標位置判定手段が、上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定過程と、
攻撃弾発射手段が、上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃発射過程と、
を有することを特徴とするシューティングゲーム処理方法。
【請求項2】
請求項1に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根に近い各枝経路から順に、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により、攻撃目標位置を探索する、
ことを特徴とするシューティングゲーム処理方法。
【請求項3】
請求項1に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根から限界深さに至る各行動パターンを予め決めた順に、その行動パターンにおける各経路において、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により攻撃目標位置を探索する
ことを特徴とするシューティングゲーム処理方法。
【請求項4】
請求項1〜3の何れかに記載のシューティングゲーム処理方法において、
上記攻撃目標位置判定過程は、更に、攻撃目標位置が複数存在する場合には、自機が最も短い時間で到達することができる攻撃目標位置を決定する過程、を更に有し、
上記攻撃発射過程は、上記自機が最も短い時間で到達することができる攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項5】
請求項1〜4の何れかに記載のシューティングゲーム処理方法において、
上記到達時間差計算過程は、上記攻撃目標位置判定過程において攻撃目標位置が見つかったときには、上記攻撃目標位置に自機が移動する時間よりも、上記攻撃目標位置以外の衝突しないと判定された位置に自機が移動する時間の方が短い場合のみ、自機がその衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾がその衝突しないと判定された位置へ移動するのに必要な時間との上記差の絶対値を計算する過程であり、
上記到達時間差計算過程は、更に、最後に見つかった攻撃目標位置のみを攻撃目標位置とする過程を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項6】
請求項1〜5の何れかに記載のシューティングゲーム処理方法において、
上記所定の値は、自機の大きさと敵機が新たに発射する攻撃弾の大きさの和の半分をその攻撃弾の速さで割った値である、
ことを特徴とするシューティングゲーム処理方法。
【請求項7】
請求項1〜6の何れかに記載のシューティングゲーム処理方法において、
ゲームプレイヤーの自機操作履歴における自機移動方向変更時間間隔の平均値を、上記行動単位時間Tとする、
ことを特徴とするシューティングゲーム処理方法。
【請求項8】
請求項1〜6の何れかに記載のシューティングゲーム処理方法において、更に、
行動単位時間設定手段が、上記行動単位時間Tを、自機の行動の回数が多くなるほど大きくする行動単位時間設定過程を有する、
ことを特徴とするシューティングゲーム処理方法。
【請求項9】
請求項1〜8の何れかに記載のシューティングゲーム処理方法において、
上記自機移動パターン生成過程は、自機位置の現在速度を自機が未来において一定時間Tc継続した後に、行動単位時間Tだけ移動する行動をD回行う自機の各移動先の候補を生成する過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項10】
請求項1〜9の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記所定の値をより大きな値に変更して、上記の各過程を再度実行する、
ことを特徴とするシューティングゲーム処理方法。
【請求項11】
請求項1〜9の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記攻撃弾発射過程は、自機の現在位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項12】
請求項1〜9の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記攻撃弾発射過程は、自機の現在位置にあるランダムな変位を与えた位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。
【請求項13】
請求項1〜9の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記自機移動パターン生成過程は、自機が現在速度を維持すると仮定して、自機が現在速度を維持する行動を取り続ける場合の自機の移動先を生成する過程であり、
その後、上記の各過程を再度実行する、
ことを特徴とするシューティングゲーム処理方法。
【請求項14】
請求項1〜9の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記DをD+1として、攻撃目標位置が見つかるまで、上記の各過程を再度実行する、
ことを特徴とするシューティングゲーム処理方法。
【請求項15】
請求項14に記載のシューティングゲーム処理方法において、
上記Dが一定の値になったら、上記の各過程を実行するのを止める、
ことを特徴とするシューティングゲーム処理方法。
【請求項16】
画面上に自機と敵機を表示し、W種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理装置であって、
所定の時間(以下、行動単位時間Tとする。)だけ移動する行動をD回行う自機の各移動先の候補を生成する自機移動パターン生成手段と、
自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定手段と、
上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算手段と、
上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定手段と、
上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃発射手段と、
を有することを特徴とするシューティングゲーム処理装置。
【請求項17】
請求項1〜15の何れかに記載のシューティングゲーム処理方法の各過程をコンピュータに実行させるためのシューティングゲーム処理プログラム。
【請求項18】
請求項17記載のシューティングゲーム処理プログラムを記録したコンピュータ読み取り可能な記録媒体。



【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2007−319560(P2007−319560A)
【公開日】平成19年12月13日(2007.12.13)
【国際特許分類】
【出願番号】特願2006−155358(P2006−155358)
【出願日】平成18年6月2日(2006.6.2)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】