JP2007330535A - シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体 - Google Patents
シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体 Download PDFInfo
- Publication number
- JP2007330535A JP2007330535A JP2006166301A JP2006166301A JP2007330535A JP 2007330535 A JP2007330535 A JP 2007330535A JP 2006166301 A JP2006166301 A JP 2006166301A JP 2006166301 A JP2006166301 A JP 2006166301A JP 2007330535 A JP2007330535 A JP 2007330535A
- Authority
- JP
- Japan
- Prior art keywords
- aircraft
- attack
- enemy aircraft
- enemy
- shooting game
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
【解決手段】本発明によれば、モード判定手段(101)が、ある方向に直進する敵機が、その敵機の進行方向に回りこんで攻撃をする自機に撃墜される場合には、防御モード・囲い込みモードと判定する。ある方向に直進する敵機が、その敵機の進行方向に回りこんで攻撃をする自機に撃墜されない場合には、攻撃モードと判定する。防御モード・囲い込みモードにおいては、敵機の速度を遅くして、自機の移動を制限する敵機の攻撃弾の壁を作りやすくすると同時に、自機がいない方向に移動して自機の攻撃を避ける。攻撃モードにおいては、敵機の速度を速くして、敵機が様々な角度から自機に向けて攻撃弾を発射できるようにする。
【選択図】図1
Description
また、敵機の攻撃弾発射動作を制御する方法としては、例えば、自機の位置とは無関係に敵機が一定方向に攻撃弾を発射するアルゴリズムや、ランダムな方向に攻撃弾を発射するアルゴリズムがあった。また、自機の位置を考慮するアルゴリズムとしては、例えば、攻撃弾発射時点の自機の位置に向けて攻撃弾を発射するアルゴリズムがあった。
Jonathan Schaeffer,H.Jaap van den Herik,"Games,computers,and artificial intelligence",Artificial Intelligence,2002,Vol.134,p1-7
例えば、自機の攻撃弾が縦方向に飛ぶ、いわゆる縦型シューティングゲームにおいては、ゲーム画面が縦型であることが比較的多く、敵機が画面の上方から出現して、画面の下方に位置する自機を攻撃することが多い。このような縦型シューティングゲームにおいては、ゲーム画面が縦型であるため、敵機の攻撃が自機に対して脅威を与え得るほどの近距離まで、敵機が自機に近づくことは難しく、敵機が自機の攻撃により早々に撃墜されるケースが多い。また、ゲームの難易度のバランスを考えると、敵機のスピードを過剰に大きくすることは適切ではない。このため、多くの縦型シューディングゲームにおいては、画面上方から出現した敵機は早々に撃墜されてしまうため、敵機の行動制御アルゴリズムを工夫するメリットが小さいという問題があった。
また、チェス、オセロ、将棋といった思考ゲームを解くための人工知能技術の研究は、効率的に深い探索計算を行うための手法の開発に集中している(例えば、非特許文献1参照。)。もちろん、シューティングゲームにおいても、知的な敵機の動作アルゴリズムを開発するためには、探索技術は重要である。しかし、シューティングゲームにおいて、探索の深さに関する要求は低く、むしろ、いかにしてアクションゲームにおいて求められているレベルの実時間性を実現するかが大事である。しかし、そのような要求を満たす技術はなかった。
また、敵機の制御には、従来のように、全ての敵機の動きを監視する方式の中央制御では不十分である。なぜなら、ゲーム画面上に出現する敵機の状況は時々刻々と変化をし、それらの全ての状況を考慮した中央制御アルゴリズムの開発は事実上不可能であるからである。
この結果、敵機の攻撃がより知的になる。また、個々の敵機が上記のアルゴリズムに従って行動することにより、敵機同士間で連携が生まれるため、全体としてよりゲーム性の増したシューティングゲームを実現することができる。
<シューティングゲームの説明>
図6に、本発明の処理の対象となるシューティングゲームを例示する。画面上には、自機1と自機1の攻撃弾3、敵機2と敵機2の攻撃弾4が表示される。攻撃弾3、敵機2、攻撃弾4は、複数存在していても良い。自機1、敵機2、攻撃弾3、攻撃弾4は、X軸とY軸で構成される2次元の平面上に位置するものとする。
ユーザは、自機1を操作して、敵機2と闘う。ユーザは、一回の操作で、W種類の移動速度(方向と速さ)で、行動単位時間Tだけ自機を移動させることができる。自機1が取り得るW種類の移動速度(Vsx(w),Vsy(w))は予め決められており、それぞれの移動速度(Vsx(w),Vsy(w))には、移動速度番号w(w=1,…,W)が付けられているものとする。以下では、移動速度番号wを選択する行動のことを行動(w)という。また、ユーザは、W種類の速度による移動と同時に、敵機2を攻撃するための攻撃弾3を発射する操作をすることができる。自機1から発射された攻撃弾3は、画面の上方に向かって直進する。
自機1が、敵機2及び敵機2が発射する攻撃弾4と衝突した場合には、自機1は破壊され、そこでゲームオーバーとなる。逆に、自機1の攻撃弾3が敵機2に衝突した場合には、敵機2は破壊される。自機1の攻撃弾3によりすべての敵機2を破壊した場合には、ユーザは、そのゲームに勝利することになる。
以下では、自機のX軸方向、及び、Y軸方向の移動速度の最大値をVsmax、敵機のX軸方向の移動速度の最大値をVexmaxとする。また、自機の現在位置を(Xs,Ys)、敵機の現在位置を(X,Y)とする。そして、例えば、Vexmax>Vsmaxとする。
以下では、本発明を理解する上で必要になる「安全行動パターン」の概念について説明する。自機がW種類の速度による移動を所定の回数(D回)だけ行うことができるとする。このとき、自機が取り得る全行動パターンについて、自機が敵機の攻撃弾により破壊されるかどうかを調べる。すなわち、各行動の深さd(d={1,…,D})においてW種類の移動速度による移動を行うことによって自機が取り得る全行動パターンについて、自機が敵機の攻撃弾により破壊されるかどうかを調べる。全行動パターンのうち、自機が攻撃弾により破壊されない行動パターンのことを安全行動パターンとする。逆に、自機が攻撃弾により破壊されてしまう行動パターンのことを死亡行動パターンとする。全行動パターンと安全行動パターンと死亡行動パターンの間には、全行動パターン数=安全行動パターンの総数+死亡行動パターンの総数、という関係がある。
以下では、安全行動パターンに従って移動した位置のX座標の最大値をXmax、安全行動パターンに従って移動した位置のX座標の最小値をXminとする。XmaxとXminは、後述するように、例えば、縦型探索、横型探索といった探索計算によって求める。
上記のようなシューティングゲームにおいて、以下のようにして、敵機の移動速度(Vex,Vey)を定めると良い。
まず、自機が敵機の攻撃弾により破壊されるかどうかを考慮せずに、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるかどうかを判定する(図5、ステップS161)。その後、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるものについて、自機が敵機の攻撃弾により破壊されるかどうかを考慮して、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊されるかどうかを判定する(図5、ステップS162〜ステップS166)。
例えば、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|である場合には、図13に示すように、敵機の進行方向に自機が回り込むことができる。このため、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性がある。しかし、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|であっても、Xmax<X、もしくは、X<Xminである場合には、自機が、敵機の進行方向に回り込んで敵機を破壊するのは不可能である。Xmax<X、もしくは、X<Xminである場合には、自機の安全行動パターンの中に、自機が敵機の進行方向に回り込むような行動パターンがないためである。言い換えれば、Xmax<X、もしくは、X<Xminである場合には、自機が、その位置(X,Y)に位置する敵機の進行方向に回り込むような行動パターンは死亡行動パターンであるため、自機が、その位置(X,Y)に位置する敵機の進行方向に回り込むような行動パターンを取れば、自機は敵機が既に発射した攻撃弾により破壊されてしまうためである。
なお、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|ではなく、|Xs−X|/Vsmax<|Ys−Y|/|Vexmax−Vsmax|あるかどうかを判定して、防御・囲い込みモードか、攻撃モードかを決定しても良い。また、Xmin<X<Xmaxではなく、Xmin≦X≦Xmaxかどうかで、敵機がX軸方向であって自機がいない方向に移動するかどうかを決定しても良い。
上記の敵機の移動速度の決定方法と同時に、以下に述べるように、「安全行動パターン」の数が少なくなるように敵機に攻撃弾を発射させると効果的である。敵機が攻撃弾を発射する時点で存在している自機の取り得る「安全行動パターン」の数を減らすことができれば、敵機は自機を効率的に追い詰めているということができるためである。また、敵機の移動速度が遅い場合に、安全行動パターンの中に含まれる位置のひとつを通過するように多くの攻撃弾を狭い間隔で発射すれば、自機の移動をさえぎる壁が作りやすくなるためである。
以下では、ある位置に自機が到達するのにかかる時間と、その位置に敵機が発射する攻撃弾が到達するのにかかる時間との差の絶対値が所定の値Cよりも小さい場合には、その位置のことを攻撃弾の目標位置(以下、攻撃目標位置とする。)と呼ぶ。所定の値Cは、例えば、自機の大きさと敵機攻撃弾の大きさの和の半分をS、敵機の攻撃弾の速度をVeとすると、S/Veとすることができる。また、自機の大きさとしては、例えば、自機の形状に内接する円の直径、敵機攻撃弾の大きさとしては、敵機攻撃弾の形状に内接する円の直径を取ることができる。
ここで、自機の攻撃目標位置への到達時間が短いほど、敵機が発射する攻撃弾によって減らすことができる自機の安全行動パターンの数は多いということができる。なぜなら、自機の移動パターンの探索木の根元の近くにある(浅い深さにある)節点を攻撃目標位置とすると、その節点から分岐する安全行動パターンのすべてをなくすことができるためである。
縦型探索とは、子節点を優先して探索するものである。例えば、D=3、W=3の場合、図11に示すように、行動単位ごとの移動経路につけた番号の順番でそれぞれの経路を探索する手法である。以下に述べる第1実施形態では、衝突が起こった場合には、衝突が起こった箇所より後の経路を探索しない。例えば、※1(6の経路)において衝突が起こった場合には、7〜9の経路については探索しない。この場合には、6の経路を探索して衝突が発生した後に、10の経路を探索することになる。また、ひとつでも適切な攻撃目標位置が見つかると、その攻撃目標位置に到達するまでの時間より、自機の到達時間が長い位置については探索を行わない。例えば、図5に示すように、深さd=2の探索で、○(15の経路)において適切な攻撃目標位置が見つかった場合には、自機が、現在位置から○で示された攻撃目標位置に到達するまでの時間よりも、自機の到達時間が短い位置についてのみ適切な攻撃目標位置と成り得るかどうかを調べる。
シューティングゲーム処理装置1000は、例えば、自機移動パターン生成部10、攻撃弾位置推定部20、衝突判定部30、攻撃目標位置判定部40、攻撃目標位置バッファ50、自機移動パターンバッファ51、敵機攻撃弾状態バッファ52、自機移動範囲バッファ54、攻撃弾発射部60、自機移動範囲決定部70、敵機速度決定部80から構成される。
自機移動パターン生成部10は、例えば、初期化部101、制御部102、バッファ103、位置更新部104、記憶部105から構成される。
攻撃弾位置推定部20は、例えば、記憶部201、位置取得部202から構成される。
攻撃目標位置判定部40は、例えば、到達時間差計算部401を含む。
敵機速度決定部80は、例えば、モード判定部801と位置判定部802から構成される。
自機の行動の回数(探索の深さ)D、自機の取り得る行動wの種類の数W、各行動wを取ったときの自機の速度(Vxw,Vyw)、行動単位時間Tは予め設定され、自機移動パターン生成部10の記憶部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)とすることができる。
また、行動単位時間Tの長さは、自機の大きさが0でないとした場合、自機が移動によって掃く領域がカバーすることができない領域が各深さの移動において発生しないようにすることが重要である。自機が移動によって掃く領域がカバーすることができない領域が存在すれば、求まったXmax,Xminは、実際に自機が移動することができる領域の一部については考慮していないことになるからである。このため、より適切な攻撃目標位置を見つけるためには、例えば、自機の形状に内接する円の直径を自機の速度で割った値を、上記行動単位時間Tとして設定する。
敵機の攻撃弾の速度(Vbikx(t),Vbiky(t))は、予め設定され攻撃弾位置推定部20の記憶部201に格納されているものとする。
以下では、tを自機が行動を開始してからの経過時間、時刻tでの自機の位置を(Xs(t),Ys(t))、敵機iの発射したk番目の攻撃弾の時刻tでの位置を(Xbik(t),Ybik(t))とする。ここで、tは、処理単位時間τごとに離散的な時間を取るものとする。
自機移動パターン生成部10の初期化部101は、t=0,d=1、Db=D,tb=D×Tとして、これらをバッファ103に格納する。また、初期化部101は、時刻tにおける自機の位置(Xs(t),Ys(t))を自機の現在位置に設定して、これを自機移動パターンバッファ51に格納する。
<ステップS2>
自機移動パターン生成部10の制御部102は、w(d)=1とする。ここで、w(d)は、深さdにおける自機の移動速度番号wである。
<ステップS3>
自機移動パターン生成部10の制御部102は、w(d)と(Xs(t),Ys(t))の値を、それぞれ自機移動パターンバッファ51に格納する。また、自機移動パターン生成部10の制御部102は、時刻tにおける攻撃弾の位置(Xbik(t),Ybik(t))を、敵機攻撃弾状態バッファ52に格納する。
自機移動パターン生成部10の制御部102は、バッファ103からtを読み出し、tをインクリメント幅τだけインクリメントする。インクリメントされたtは、バッファ103に格納される。tのインクリメント幅τは、行動単位時間Tより小さい値、好ましくはTを複数等分する値であれば、どのような値でも良い。例えば、Tを0.3秒〜1秒としたとき、このTを10等分する時間間隔である0.03秒〜0.1秒をτに設定することができる。
また、自機移動パターン生成部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に出力される。
攻撃弾位置推定部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に出力される。
衝突判定部30は、自機と攻撃弾が衝突したかどうかを判定する。衝突したかどうかは、予め設定され、図示していない衝突判定部30内の記憶部に記憶された自機の形状、攻撃弾の形状と、自機移動パターン生成部10から出力された更新後の自機の位置(Xs(t),Ys(t))、攻撃弾位置推定部20から出力された更新後の攻撃弾の位置(Xbik(t),Ybik(t))とから判断される。
例えば、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の攻撃弾の形状が重なった場合には、自機と攻撃弾が衝突したと判定することができる。
衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部10と自機移動範囲決定部70に出力される。その後、ステップS7aの処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部10に出力される。その後、ステップS12の処理を行う。
ステップS7aは、自機が敵機の攻撃弾に撃墜されないで移動することができるX軸方向の移動範囲の最大値・最小値を求めるための過程である。ステップS7aは、図3に示すように、ステップS71〜ステップS74から構成される。
≪ステップS71≫(図3)
衝突がなかった旨の信号を受け取った自機移動範囲決定部70は、自機移動範囲バッファ54に格納されているXmaxを読み出し、Xs(t)との大小関係を比較する。
Xmax<Xs(t)であれば、ステップS72の処理を行う。
Xs(t)≦Xmaxであれば、ステップS73の処理を行う。
なお、自機移動範囲バッファ54にXmaxが格納されていない場合には、自機移動範囲決定部70は、Xs(t)をXmaxとして自機移動範囲バッファ54に格納して、ステップS8(図2)の処理を行う。
自機移動範囲決定部70は、Xmax<Xs(t)の場合には、Xs(t)を新たなXmaxとして、自機移動範囲バッファ54に格納する。その後、ステップS8(図2)の処理を行う。
自機移動範囲決定部70は、Xs(t)≦Xmaxの場合には、自機移動範囲バッファ54に格納されているXminを読み出し、Xs(t)との大小関係を比較する。
Xs(t)<Xminであれば、ステップS74の処理を行う。
Xmin≦Xs(t)であれば、ステップS8(図2)の処理を行う。
なお、自機移動範囲バッファ54にXminが格納されていない場合には、自機移動範囲決定部70は、Xs(t)をXminとして自機移動範囲バッファ54に格納して、ステップS8(図2)の処理を行う。
自機移動範囲決定部70は、Xs(t)<Xminの場合には、Xs(t)を新たなXminとして、自機移動範囲バッファ54に格納する。その後、ステップS8(図2)の処理を行う。
<ステップS8>
自機移動パターン生成部10の制御部102は、ステップS3のときから、行動単位時間Tが経過したかどうかを判定する。すなわち、バッファから読み出したtがd×Tよりも大きいかどうか、つまり、t≧d×Tかどうかを判定する。
t<d×Tであれば、ステップS4の処理を行う。すなわち、tがステップS3の時から行動単位時間Tを経過するまで、ステップS4〜S8を繰り返す。
t≧d×Tであれば、ステップS9の処理を行う。
<ステップS9>
自機移動パターン生成部10の制御部102は、バッファ103から読み出したdを1だけインクリメントする。インクリメントされたdは、バッファ103に格納される。
<ステップS10>
自機移動パターン生成部10の制御部102は、バッファ103から読み出したdが、バッファ103から読み出したDbより大きいかどうかを判定する。すなわち、Db<dかどうかを判定する。
Db≧dであると判定された場合には、制御部102は、ステップS2の処理を行う。
Db<dであると判定された場合には、制御部102は、ステップS11の処理を行う。
自機移動パターン生成部10の制御部102は、バッファ103から読み出したdを、1だけデクリメントする。デクリメントされたdは、バッファ103に格納される。
<ステップS12>
自機移動パターン生成部10の制御部102は、バッファ103から読み出したtを(d−1)Tに設定する。(d−1)Tに設定されたtは、バッファ103に格納される。また、自機移動パターンバッファ51に格納されたw(d)を読み出し、1だけインクリメントする。インクリメントされたw(d)は、自機移動パターンバッファ51に格納される。
<ステップS13>
自機移動パターン生成部10の制御部102は、記憶部105から読み出したWと、自機移動パターンバッファ51から読み出したw(d)の大小関係を比較する。
W<w(d)であれば、自機移動パターン生成部10の制御部102は、ステップS15の処理を行う。W≧w(d)であれば、自機移動パターン生成部10の制御部102は、ステップS14の処理を行う。
<ステップS14>
自機移動パターン生成部10の制御部102は、自機移動パターンバッファ51から、時刻tにおける自機の位置(Xs(t),Ys(t))を読み出す。また、敵機攻撃弾状態バッファ52から、時刻tにおける攻撃弾の位置(Xbik(t),Ybik(t))を読み出す。その後、ステップS3の処理の処理を行う。
ステップS13においてW<w(d)であると判定された場合には、自機移動パターン生成部10の制御部102は、d=1か否かを判定する。
d≠1と判定された場合には、ステップS11の処理を行う。
d=1と判定された場合には、ステップS16aの処理を行う。
<ステップS16a>
ステップS15において、d=1と判定された場合には、自機のX軸方向の移動範囲の最大値Xmax、最小値Xminを求める探索を終了する。そして、敵機速度決定部80が、自機のX軸方向の移動範囲の最大値Xmax、最小値Xminを基にして、敵機の移動速度を決定する。ステップS16aは、図5に示すように、ステップS161〜ステップ1611から構成される。
まず、敵機速度決定部80のモード判定部801が、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|かどうかを判定する。
|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|である場合には、図13に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるので、敵機速度決定アルゴリズムは、防御モード・自機囲い込みモードに移行する。具体的には、ステップS162〜ステップS168の処理を行う。
≪ステップS162≫
敵機速度決定部80の位置判定部802は、自機移動範囲バッファ54から読み出したXmaxと敵機の現在位置のX座標(X)との大小関係を比較する。
X≦Xmaxであれば、ステップS164の処理を行う。
≪ステップS163≫
Xmax<Xのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はX軸方向には移動しない。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=0、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
敵機速度決定部80の位置判定部802は、自機移動範囲バッファ54から読み出したXminと敵機の位置のX座標(X)との大小関係を比較する。
X<Xminであれば、ステップS165の処理を行う。
Xmin≦Xであれば、ステップS166の処理を行う。
X<Xminのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はX軸方向には移動しない。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=0、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
敵機速度決定部80の位置判定部802は、自機の現在位置のX座標の値Xsと敵機の現在位置のX座標(X)との大小関係を比較する。
Xs<Xであれば、ステップS167の処理を行う。
X≦Xsであれば、ステップS168の処理を行う。
ステップS164とステップS165において、Xmin<X<Xmaxと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、X軸方向であって自機がいない方向に向かって移動する。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=Vexmax、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
ステップS164とステップS165において、Xmin<X<Xmaxと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が、敵機の進行方向に回り込んで攻撃をする自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、X軸方向であって自機がいない方向に向かって移動する。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=−Vexmax、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
敵機速度決定部80の位置判定部802は、自機の現在位置のX座標の値Xsと敵機の現在位置のX座標の値Xとの大小関係を比較する。
X<Xsであれば、ステップS1610の処理を行う。
Xs≦Xであれば、ステップS1611の処理を行う。
≪ステップS1610≫
ステップS161において、|Xs−X|/Vsmax>|Ys−Y|/|Vexmax−Vsmax|と判定されており、攻撃モードにあるため、敵機はY軸方向には速く移動する。また、X軸方向には移動しないか、もしくは、X軸方向であって自機がいる方向にむかって移動する。例えば、Vex=Vexmax、Vey=−Vsmax×2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
ステップS161において、|Xs−X|/Vsmax>|Ys−Y|/|Vexmax−Vsmax|と判定されており、攻撃モードにあるため、敵機はY軸方向には速く移動する。また、X軸方向には移動しないか、もしくは、X軸方向であって自機がいる方向にむかって移動する。例えば、Vex=−Vexmax、Vey=−Vsmax×2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
上記の処理を、一定時間(例えば、行動単位時間T)ごとに行う。
以上が、第1実施形態によるシューティングゲーム処理装置1000の概要である。
シューティングゲーム処理装置1001は、自機移動パターン生成部11が順列作成部106と順列獲得部107を有する点、自機移動パターン生成部11の制御部112の動作が、シューティングゲーム処理装置1000の自機移動パターン生成部10の制御部102の動作と異なる点、順列データバッファ53を有する点で、図1に示したシューティングゲーム処理装置1000と異なる。シューティングゲーム処理装置1001の他の機能構成は、シューティングゲーム処理装置1000の機能構成と同じである。
第1実施形態と同様に、自機の行動の回数(探索の深さ)D、自機の取り得る行動wの種類の数W、各行動wを取ったときの自機の速度(Vxw,Vyw)、行動単位時間Tは予め設定され、自機移動パターン生成部の記憶部105に格納されているものとする。
また、敵機の攻撃弾の速度(Vbikx(t),Vbiky(t))は、予め設定され攻撃弾位置推定部20の記憶部201に格納されているものとする。
以下では、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は、処理単位時間τごとに離散的な時間を取るものとする。
自機移動パターン生成部11の初期化部101は、d=1,k=1,Db=D,tb=D×Tとして、これらをバッファ103に格納する。また、初期化部101は、時刻tにおける自機の位置(Xs(t),Ys(t))を自機の現在位置に設定して、これを自機移動パターンバッファ51に格納する。
自機移動パターン生成部11の順列作成部106は、すべての、jとdeについて、自機行動順列w(d,1,j),…,w(d,de,j),…,w(d,d,j)を作成し、これを順列データバッファ53に格納する。また、j=1としてバッファ103に格納する。上記自機行動順列は、自機が取り得る移動速度番号の順列である。
例えば、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}
また、例えば、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}
さらに、例えば、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}
自機移動パターン生成部11の制御部112は、de=1,t=0としてバッファ103に格納する。また、自機が選択すべき移動速度番号をw(d,de,j)とする。
<ステップS4>
自機移動パターン生成部11の制御部112は、バッファ103から読み出したdがd=1かどうかを判定する。d=1であれば、ステップS5の処理を行う。d=1でなければ、ステップS18の処理を行う。
<ステップS5>
自機移動パターン生成部11の制御部112は、バッファ103からtを読み出し、tをインクリメント幅τだけインクリメントする。インクリメントされたtは、バッファ103に格納される。tのインクリメント幅τは、行動単位時間Tより小さい値、好ましくはTを複数等分する値であれば、どのような値でも良い。例えば、Tを0.3秒〜1秒としたとき、このTを10等分する時間間隔である0.03秒〜0.1秒をτに設定することができる。
また、自機移動パターン生成部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に出力される。
攻撃弾位置推定部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に出力される。
衝突判定部30は、自機と攻撃弾が衝突したかどうかを判定する。衝突したかどうかは、予め設定され、図示していない衝突判定部30内の記憶部に記憶された自機の形状、攻撃弾の形状と、自機移動パターン生成部11から出力された更新後の自機の位置(Xs(t),Ys(t))、攻撃弾位置推定部20から出力された更新後の攻撃弾の位置(Xbik(t),Ybik(t))とから判断される。
例えば、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の攻撃弾の形状が重なった場合には、自機と攻撃弾が衝突したと判定することができる。
衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部11と自機移動範囲決定部70に出力される。その後、ステップS7aの処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部11に出力される。その後、ステップS17aの処理を行う。
ステップS7aは、自機が敵機の攻撃弾に撃墜されないで移動することができるX軸方向の移動範囲の最大値・最小値を求めるための過程である。ステップS7aは、図3に示すように、ステップS71〜ステップS74から構成される。
衝突がなかった旨の信号を受け取った自機移動範囲決定部70は、自機移動範囲バッファ54に格納されているXmaxを読み出し、Xs(t)との大小関係を比較する。
Xmax<Xs(t)であれば、ステップS72の処理を行う。
Xs(t)≦Xmaxであれば、ステップS73の処理を行う。
なお、自機移動範囲バッファ54にXmaxが格納されていない場合には、自機移動範囲決定部70は、Xs(t)をXmaxとして自機移動範囲バッファ54に格納して、ステップS11(図8)の処理を行う。
自機移動範囲決定部70は、Xmax<Xs(t)の場合には、Xs(t)を新たなXmaxとして、自機移動範囲バッファ54に格納する。その後、ステップS11(図8)の処理を行う。
自機移動範囲決定部70は、Xs(t)≦Xmaxの場合には、自機移動範囲バッファ54に格納されているXminを読み出し、Xs(t)との大小関係を比較する。
Xs(t)<Xminであれば、ステップS74の処理を行う。
Xmin≦Xs(t)であれば、ステップS11(図8)の処理を行う。
なお、自機移動範囲バッファ54にXminが格納されていない場合には、自機移動範囲決定部70は、Xs(t)をXminとして自機移動範囲バッファ54に格納して、ステップS11(図8)の処理を行う。
自機移動範囲決定部70は、Xs(t)<Xminの場合には、Xs(t)を新たなXminとして、自機移動範囲バッファ54に格納する。その後、ステップS11(図8)の処理を行う。
<ステップS11>
自機移動パターン生成部11の制御部112は、ステップS3のときから、行動単位時間Tが経過したかどうかを判定する。すなわち、バッファ103から読み出したtがde×Tよりも大きいかどうか、つまり、t≧de×Tかどうかを判定する。
t<d×Tであれば、ステップS5の処理を行う。すなわち、tがステップS3の時から行動単位時間Tを経過するまで、ステップS5〜S11の処理を繰り返す。
t≧d×Tであれば、ステップS12の処理を行う。
<ステップ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に格納し、図9に示すステップS13の処理を行う。
自機移動パターン生成部11の制御部112は、バッファ103から読み出した自機行動順列番号jを1だけインクリメントする。インクリメントされた自機行動順列番号jは、バッファ103に格納される。
<ステップS14>
自機移動パターン生成部11の制御部112は、バッファ103から読み出した自機行動順列番号jが、j=wのd乗かどうかを判定する。
j≠wのd乗であれば、ステップS3(図8)の処理を行う。すなわち、すべての自機行動順列番号jについて、ステップS3〜S12の処理が繰り返されることになる。
j=wのd乗であれば、ステップS15の処理を行う。
<ステップS15>
自機移動パターン生成部11の制御部112は、バッファ103から読み出したdを1だけインクリメントする。インクリメントされたdは、バッファ103に格納される。
<ステップS16>
自機移動パターン生成部11の制御部112は、バッファ103から読み出したdが、バッファ103から読み出したDbより大きいかどうかを判定する。すなわち、Db<dかどうかを判定する。
Db<dであると判定された場合には、本実施形態による横型探索は終了し、制御部112は、ステップS16a(図5)の処理を行う。
<ステップS17>(図8)
ステップS7の処理において、自機と敵機の攻撃弾が衝突していると判定された場合には、自機移動パターン生成部11の制御部112は、現在のdをdc(k)、現在のjをjc(k)として、自機移動パターンバッファ51に格納する。そして、バッファ103から読み出したkを1だけインクリメントして、このインクリメントしたkをバッファ103に格納する。
<ステップS18>(図8)
順列獲得部107は、順列データバッファ53を検索して、現在評価している自機行動順列の要素と同じ要素を持つ順列の自機行動順列の深さdsとその順列番号jsを獲得する。
例えば、図15に示すように、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)となる。
自機移動パターン生成部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が存在する場合には、図9に示したステップS13の処理を行う。
dc(k)=ds,jc(k)=jsとなるkが存在しない場合には、ステップ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に格納する。
ステップS16において、Db<dと判定された場合には、自機のX軸方向の移動範囲の最大値Xmax、最小値Xminを求める探索を終了する。そして、敵機速度決定部80が、自機のX軸方向の移動範囲の最大値Xmax、最小値Xminを基にして、敵機に移動速度を決定する。ステップS16aは、図5に示すように、ステップS161〜ステップ1611から構成される。
≪ステップS161≫(図5)
まず、敵機速度決定部80のモード判定部801が、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|かどうかを判定する。
|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|である場合には、図13に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性があるので、敵機速度決定アルゴリズムは、防御モード・自機囲い込みモードに移行する。具体的には、ステップS162〜ステップS168の処理を行う。
|Xs−X|/Vsmax>|Ys−Y|/|Vexmax−Vsmax|である場合には、図14に示すように、敵機が、敵機の進行方向に回り込んだ自機の攻撃により破壊される可能性がないので、敵機速度決定アルゴリズムは、攻撃モードに移行する。具体的には、ステップS169〜ステップS1611の処理を行う。
敵機速度決定部80の位置判定部802は、自機移動範囲バッファ54から読み出したXmaxと敵機の現在位置のX座標の値Xとの大小関係を比較する。
Xmax<Xであれば、ステップS163の処理を行う。
X≦Xmaxであれば、ステップS164の処理を行う。
≪ステップS163≫
Xmax<Xのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はX軸方向には移動しない。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=0、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
敵機速度決定部80の位置判定部802は、自機移動範囲バッファ54から読み出したXminと敵機の位置のX座標(X)との大小関係を比較する。
X<Xminであれば、ステップS165の処理を行う。
Xmin≦Xであれば、ステップS166の処理を行う。
≪ステップS165≫
X<Xminのときには、敵機が、敵機の進行方向に回り込んだ自機により破壊されることはないため、敵機はX軸方向には移動しない。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=0、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
敵機速度決定部80の位置判定部802は、自機の現在位置のX座標の値Xsと敵機の現在位置のX座標(X)との大小関係を比較する。
Xs<Xであれば、ステップS167の処理を行う。
X<Xsであれば、ステップS168の処理を行う。
≪ステップS167≫
ステップS164とステップS165において、Xmin<X<Xmaxと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、X軸方向であって自機がいない方向に向かって移動する。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=Vexmax、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
ステップS164とステップS165において、Xmin<X<Xmaxと判定されているので、自機の安全行動パターンの中に、敵機の進行方向に回り込んで自機を攻撃するパターンがある。このため、敵機が自機に撃墜される可能性がある。敵機は、自機の攻撃弾を避けるために、X軸方向であって自機がいない方向に向かって移動する。また、ステップS161において、|Xs−X|/Vsmax≦|Ys−Y|/|Vexmax−Vsmax|と判定されており、防御モード・自機囲い込みモードにあるため、敵機はY軸方向にはゆっくりと進む。このため、例えば、Vex=−Vexmax、Vey=−Vsmax/2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
敵機速度決定部80の位置判定部802は、自機の現在位置のX座標の値Xsと敵機の現在位置のX座標(X)との大小関係を比較する。
X<Xsであれば、ステップS1610の処理を行う。
Xs<Xであれば、ステップS1611の処理を行う。
≪ステップS1610≫
ステップS161において、|Xs−X|/Vsmax>|Ys−Y|/|Vexmax−Vsmax|と判定されており、攻撃モードにあるため、敵機はY軸方向には速く移動する。また、X軸方向には移動しないか、もしくは、X軸方向であって自機がいる方向にむかって移動する。例えば、Vex=Vexmax、Vey=−Vsmax×2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
ステップS161において、|Xs−X|/Vsmax>|Ys−Y|/|Vexmax−Vsmax|と判定されており、攻撃モードにあるため、敵機はY軸方向には速く移動する。また、X軸方向には移動しないか、もしくは、X軸方向であって自機がいる方向にむかって移動する。例えば、Vex=−Vexmax、Vey=−Vsmax×2とする。敵機速度決定部80は、この移動速度に従って敵機を移動させる。
上記の処理を、一定時間(例えば、行動単位時間T)ごとに行う。
以上が、第2実施形態によるシューティングゲーム処理装置1001の概要である。
以下、第1実施形態におけるステップS17aとステップS18aの処理について説明する。
ステップS17aは、敵機が攻撃弾を発射する目標位置、すなわち、攻撃弾発射位置を求めるステップである。ステップS17aは、図4に示すように、ステップS171〜ステップS173から構成される。
≪ステップS171≫
衝突がなかった旨の信号を受け取った自機移動パターン生成部10の制御部102は、バッファ103から読み出したtとtbの大小関係を比較する。
t<tbであれば、ステップS172の処理を行う。t≧tbであれば、ステップS8(図2)の処理を行う。なお、t≧tbであれば、第2実施形態の場合は、ステップS11(図8)の処理を行う。
攻撃目標位置判定部40の到達時間差計算部401は、敵機の現在位置(X,Y)に位置する敵機が、(Xs(t),Ys(t))を目標位置として攻撃弾を発射したときに、その攻撃弾が(Xs(t),Ys(t))に到達するのに要するTnを計算する。そして、自機が上記目標位置(Xs(t),Ys(t))に到達するのに要する時間tと上記到達所要時間Tnの差の絶対値を計算する。
攻撃目標位置判定部40は、上記到達所要時間Tnとtの差の絶対値が、記憶部105から読み出した所定の値Cよりも小さいかどうかを判定する。所定の値Cは、例えば、自機の大きさと敵機攻撃弾の大きさの和の半分をS、敵機の攻撃弾の速度をVeとすると、S/Veとすることができる。また、自機の大きさとしては、例えば、自機の形状に内接する円の直径、敵機攻撃弾の大きさとしては、敵機攻撃弾の形状に内接する円の直径を取ることができる。
S/Ve>|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることができる。敵機が(Xs(t),Ys(t))を目標位置として攻撃弾を発射すれば、自機を破壊することができる可能性があるからである。この場合、ステップS173の処理を行う。
<ステップS173>
S/Ve>|t−Tn|であれば、(Xs(t),Ys(t))を攻撃目標位置とすることができるため、攻撃目標位置判定部40は、(Xs(t),Ys(t))を、攻撃目標位置(Xdes,Ydes)として攻撃目標位置バッファ50に格納する。また、tb=tとして新たにtbを設定し、これをバッファ103に格納する。その後、ステップS8(図2)の処理を行う。第2実施形態では、その後、ステップS11(図8)の処理を行う。
以上が、ステップS17aの説明である。次に、ステップS18aについて説明する。
ステップS18aは、ステップS17aで求めた攻撃目標位置に向けて敵機に攻撃弾を発射させるステップである。具体的には、攻撃弾発射部60が、攻撃目標位置バッファ50から読み出した攻撃目標位置(Xdes,Ydes)に向けて、敵機に攻撃弾を発射させる。
上記実施形態による探索では、一度攻撃目標位置が見つかった後は、自機がその攻撃目標位置に到達するよりも短い時間で到達することができる位置についてのみ(t<tb,ステップS171)、攻撃弾の目標位置となり得るかどうかを探索している。そして、新たな攻撃弾の目標位置が見つかった場合には(ステップS172)、その新たな攻撃弾の目標位置で、攻撃目標位置バッファ50が更新される(ステップS173)。このため、上記実施形態による探索を終えたときに、攻撃目標位置バッファ50に格納されている攻撃目標位置(Xdes,Ydes)が、自機が最も短い時間で到達することができる攻撃目標位置となるのである。
以上が、ステップS18aの説明である。
例えば、自機移動パターン生成部10と自機移動パターン生成部11の操作履歴記録部108が、プレイヤーの操作履歴についてのデータを取っているものとする。行動単位時間設定部109は、操作履歴記録部108に記録された操作履歴データから、自機が移動方向を変更した時間の間隔の平均値を計算し、この計算結果を行動単位時間Tとして設定することができる。
これにより、プレイヤーの癖を考慮した攻撃弾の発射が可能となる。
ユーザが画面に表示された自機、敵機、攻撃弾を見てから、自機の行動を決めて、その行動を入力するには、行動単位時間T以上の時間がかかることが普通である。したがって、自機が現在速度を未来において一定時間Tcだけ継続したとして、攻撃目標位置を求める探索を行うようにしても問題は生じない。また、自機と敵機の行動選択のタイミングが同時ではない場合、すなわち、敵機が行動を選択する場合に、自機が移動中である場合においても、自機が現在速度を未来において一定時間Tcだけ継続したとして探索を行うことにより、敵機が行動を選択することができる。
その他の処理は、上記各実施形態と同じである。なお、上記一定時間Tcには、例えば、実施例1で説明した自機が移動方向を変更した時間の間隔の平均値を設定することができる。
例えば、攻撃弾発射部60の乱数発生部61が、X軸方向の変位量とY軸方向の変位量のそれぞれについてのランダムな値を生成する。攻撃弾発射部60が、自機の現在位置に上記生成されたX軸方向の変位量とY軸方向の変位量を加算した位置に向けて攻撃弾を敵機に発射させる。
具体的には、自機の形状に内接する円の直径をMとすると、X軸方向の変位量,Y軸方向の変位量の幅を、−3M〜3M程度にすると良い。例えば、自機の形状の大きさが30ドットの場合には、X軸方向の変位量,Y軸方向の変位量としては、それぞれ、−50〜50の値をランダムに取ることができるようにすると良い。
上記信号を受け取った自機移動パターン生成部10は、自機が現在の速度を維持すると仮定して、自機が現在の速度を維持する行動を取り続ける場合の自機の移動先を生成する。攻撃目標位置判定部40は、その移動先に至るまでの各位置について、適切な攻撃弾目標位置と成り得るかどうかを判定する。すなわち、その移動先に至るまでの各位置について、その位置に自機が移動する時間と敵機が発射する攻撃弾がその位置に移動する時間の差の絶対値が、所定の値Cよりも小さいかどうかを判定する。所定の値Cよりも小さい場合には、その位置を攻撃目標位置とすることができる。攻撃弾発射部60は、その攻撃目標位置に向けて攻撃弾を発射する。
上記信号を受け取った自機移動パターン生成部10の制御部102は、記憶部105に格納された所定の値Cを読み出し、所定の値Cをより大きな値に設定しなおして記憶部105に格納する。そして、上記シューティングゲーム処理装置の処理を再度実行するようにしてもよい。その際、自機の移動範囲決定ステップS7aと敵機の速度決定ステップS16aの処理は省略することができる。
攻撃目標位置が見つかっていない旨の信号を受け取った自機移動パターン生成部10の制御部102は、記憶部105に格納された探索の深さDを読み出し、1だけインクリメントしたD+1の値を新たなDとして記憶部105に格納する。そして、上記シューティングゲーム処理装置の処理を再度実行するようにしてもよい。その際、自機の移動範囲決定ステップS7aと敵機の速度決定ステップS16aの処理は省略することができる。
制御部102は、インクリメントしたD+1が一定の値Dcになったら、探索を終了する。すなわち、インクリメントしたD+1が一定の値Dcになった場合には、各処理を停止する。
自機と敵機の距離が長いほど行動単位時間Tを長くすることにより、言い換えれば、自機と敵機の距離が短いほど行動単位時間Tを短くすることにより、自機と敵機の距離が短くより緊迫感が増す接近戦において、敵機の動作をより精密に制御することが可能になりよりゲーム性が増す。また、自機と敵機の距離が長く、敵機の行動についての精密な制御が必要でない場合には、行動単位時間Tを長くすることにより、シューティングゲーム処理装置における処理の負担を軽減することができる。
上記の実施例を組み合わせて行っても良い。
また、上記シューティングゲーム処理装置の処理機能をコンピュータによって実現することができる。この場合、シューティングゲーム処理装置の処理機能の内容はプログラムによって記述される。そして、このプログラムを、図16に示すようなコンピュータで実行することにより、上記シューティングゲーム処理装置の処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、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)等を用いることができる。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
以上の各実施形態の他、本発明であるシューティングゲーム処理方法、その装置等は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
Claims (19)
- 画面上に自機と敵機を表示し、W種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理方法であって、
モード判定手段が、ある方向に直進する敵機が、その敵機の進行方向に回りこんで攻撃をする自機に撃墜されるかどうかを判定するモード判定過程と、
敵機速度決定手段が、上記モード判定過程において、上記敵機が上記自機に撃墜されると判定された場合には、上記方向への敵機の移動速度を遅くし、上記敵機が上記自機に撃墜されないと判定された場合には、上記方向への敵機の移動速度を速くする敵機速度決定過程と、
を有することを特徴とするシューティングゲーム処理方法。 - 請求項1に記載のシューティングゲーム処理方法において、
自機が攻撃弾を発射する方向をY軸、自機が攻撃弾を発射する方向と垂直な方向をX軸とし、
上記モード判定過程は、自機の現在位置のX座標と敵機の現在位置のX座標の差の絶対値を、自機のX軸方向への最大移動速度で割った値(以下、A値とする。)を求め、自機の現在位置のY座標と敵機の現在位置のY座標の差の絶対値を、敵機のY軸方向への最大移動速度と自機のY軸方向への最大移動速度との差の絶対値で割った値(以下、B値とする。)を求め、A値とB値を比較し、B値の方が大きい場合には、上記敵機が上記自機に撃墜されると判定し、A値の方が大きい場合には、上記敵機が上記自機に撃墜されないと判定する過程である、
ことを特徴とするシューティングゲーム処理方法。 - 請求項1又は2に記載のシューティングゲーム処理方法において、
上記敵機速度決定過程は、更に、上記モード判定過程において、上記敵機が上記自機に撃墜されると判定された場合には、上記方向と垂直な方向で自機がいない方向への敵機の移動速度を0以上にし、上記敵機が上記自機に撃墜されないと判定された場合には、上記方向と垂直な方向で自機がいる方向への敵機の移動速度を0以上にする過程を含む、
ことを特徴とするシューティングゲーム処理方法。 - 請求項3に記載のシューティングゲーム処理方法において、
自機が攻撃弾を発射する方向をY軸、自機が攻撃弾を発射する方向と垂直な方向をX軸とし、
更に、
自機移動パターン生成手段が、所定の時間(以下、行動単位時間Tとする。)だけ移動する行動をD回行う自機の各移動先の候補を生成する自機移動パターン生成過程と、
衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定過程と、
自機移動範囲決定手段が、上記衝突判定過程において衝突しないと判定された位置のX座標の最小値と最大値を決定する自機移動範囲決定過程と、
位置判定手段が、敵機の現在位置のX座標が、上記X座標の最小値と最大値の間にあるかどうかを判定する位置判定過程と、
を有し、
上記敵機速度決定過程は、更に、
(1)上記モード判定過程において上記敵機が上記自機に撃墜されると判定され、かつ、上記位置判定過程において敵機の現在位置のX座標が上記X座標の最小値と最大値の間にないと判定された場合には、上記方向と垂直な方向への敵機の移動速度を0にする過程と、
(2)上記モード判定過程において上記敵機が上記自機に撃墜されると判定され、かつ、上記位置判定過程において敵機の現在位置のX座標が上記X座標の最小値と最大値の間にあると判定された場合には、上記方向と垂直な方向で自機がいない方向への敵機の移動速度を0より大きくする過程と、
を含む、
ことを特徴とするシューティングゲーム処理方法。 - 請求項1〜3の何れかに記載のシューティングゲーム処理方法において、
更に、
自機移動パターン生成手段が、所定の時間(以下、行動単位時間Tとする。)だけ移動する行動をD回行う自機の各移動先の候補を生成する自機移動パターン生成過程と、
衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、敵機が既に発射した攻撃弾と衝突するかどうかを判定する衝突判定過程と、
自機移動範囲決定手段が、上記衝突判定過程において衝突しないと判定された位置のX座標の最小値と最大値を決定する自機移動範囲決定過程と、
到達時間差計算手段が、上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算過程と、
攻撃目標位置判定手段が、上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定過程と、
攻撃弾発射手段が、上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃発射過程と、
を有する、
ことを特徴とするシューティングゲーム処理方法。 - 請求項4に記載のシューティングゲーム処理方法において、
更に、
到達時間差計算手段が、上記衝突判定過程において衝突しないと判定された場合には、自機が上記衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾が上記衝突しないと判定された位置へ移動するのに必要な時間との差の絶対値を計算する到達時間差計算過程と、
攻撃目標位置判定手段が、上記差の絶対値が所定の値よりも小さいかどうかを判定し、その差の絶対値が所定の値よりも小さい場合には、上記衝突しないと判定された位置を攻撃目標位置とする攻撃目標位置判定過程と、
攻撃弾発射手段が、上記攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる攻撃発射過程と、
を有する、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5又は6に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根に近い各枝経路から順に、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により、攻撃目標位置を探索する、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5又は6に記載のシューティングゲーム処理方法であって、
上記自機移動パターン生成過程は、自機の現在位置を根とし、行動単位ごとに自機が取り得る各速度で決まる経路を枝とする行動パターンを探索木として構成する過程であり、
上記根から限界深さに至る各行動パターンを予め決めた順に、その行動パターンにおける各経路において、上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により攻撃目標位置を探索する
ことを特徴とするシューティングゲーム処理方法。 - 請求項5〜8の何れかに記載のシューティングゲーム処理方法において、
上記攻撃目標位置判定過程は、更に、攻撃目標位置が複数存在する場合には、自機が最も短い時間で到達することができる攻撃目標位置を決定する過程、を更に有し、
上記攻撃発射過程は、上記自機が最も短い時間で到達することができる攻撃目標位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5〜9の何れかに記載のシューティングゲーム処理方法において、
上記到達時間差計算過程は、上記攻撃目標位置判定過程において攻撃目標位置が見つかったときには、上記攻撃目標位置に自機が移動する時間よりも、上記攻撃目標位置以外の衝突しないと判定された位置に自機が移動する時間の方が短い場合のみ、自機がその衝突しないと判定された位置へ移動するのに必要な時間と、敵機が新たに発射する攻撃弾がその衝突しないと判定された位置へ移動するのに必要な時間との上記差の絶対値を計算する過程であり、
上記到達時間差計算過程は、更に、最後に見つかった攻撃目標位置のみを攻撃目標位置とする過程を有する、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5〜10の何れかに記載のシューティングゲーム処理方法において、
上記所定の値は、自機の大きさと敵機が新たに発射する攻撃弾の大きさの和の半分をその攻撃弾の速さで割った値である、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5〜11の何れかに記載のシューティングゲーム処理方法において、更に、
行動単位時間設定手段が、上記モード判定過程において、上記敵機が上記時期に撃墜されると判定された場合には、上記行動単位時間Tを長くし、上記敵機が上記時期に撃墜されないと判定された場合には、上記行動単位時間Tを短くする行動単位時間設定過程を有する、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5〜12の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記所定の値をより大きな値に変更して、上記の各過程を再度実行する、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5〜12の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記攻撃弾発射過程は、自機の現在位置にあるランダムな変位を与えた位置へ向けて敵機に新たな攻撃弾を発射させる過程である、
ことを特徴とするシューティングゲーム処理方法。 - 請求項5〜12の何れかに記載のシューティングゲーム処理方法において、
上記衝突判定過程と上記到達時間差計算過程と上記攻撃目標位置判定過程により探索しても上記自機の各移動先の候補のいずれについても攻撃目標位置が見つからない場合には、
上記DをD+1として、攻撃目標位置が見つかるまで、上記の各過程を再度実行する、
ことを特徴とするシューティングゲーム処理方法。 - 請求項15に記載のシューティングゲーム処理方法において、
上記Dが一定の値になったら、上記の各過程を実行するのを止める、
ことを特徴とするシューティングゲーム処理方法。 - 画面上に自機と敵機を表示し、W種類の行動を選択する操作によって自機を移動させて、自機に攻撃を加えてくる敵機と闘うシューティングゲーム処理装置であって、
ある方向に直進する敵機が、その敵機の進行方向に周りこんで攻撃をする自機に撃墜されるかどうかを判定するモード判定手段と、
上記モード判定過程において、上記敵機が上記自機に撃墜されると判定された場合には、上記方向への敵機の移動速度を遅くし、上記敵機が上記自機に撃墜されないと判定された場合には、上記方向への敵機の移動速度を速くする敵機速度決定手段と、
を有することを特徴とするシューティングゲーム処理装置。 - 請求項1〜16の何れかに記載のシューティングゲーム処理方法の各過程をコンピュータに実行させるためのシューティングゲーム処理プログラム。
- 請求項18記載のシューティングゲーム処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006166301A JP4976754B2 (ja) | 2006-06-15 | 2006-06-15 | シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006166301A JP4976754B2 (ja) | 2006-06-15 | 2006-06-15 | シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2007330535A true JP2007330535A (ja) | 2007-12-27 |
JP4976754B2 JP4976754B2 (ja) | 2012-07-18 |
Family
ID=38930561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006166301A Active JP4976754B2 (ja) | 2006-06-15 | 2006-06-15 | シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4976754B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018038892A (ja) * | 2017-12-14 | 2018-03-15 | 株式会社バンダイナムコエンターテインメント | プログラムおよびコンピュータシステム |
-
2006
- 2006-06-15 JP JP2006166301A patent/JP4976754B2/ja active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018038892A (ja) * | 2017-12-14 | 2018-03-15 | 株式会社バンダイナムコエンターテインメント | プログラムおよびコンピュータシステム |
Also Published As
Publication number | Publication date |
---|---|
JP4976754B2 (ja) | 2012-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7476235B2 (ja) | 仮想オブジェクトの制御方法、装置、デバイス及びコンピュータプログラム | |
Uriarte et al. | Game-tree search over high-level game states in RTS games | |
KR101377010B1 (ko) | 다중조준점 적용 방법 및 이를 구현하기 위한 프로그램이 저장된 기록 매체 | |
KR20120060917A (ko) | 추론적 피직스 모델링과 목적-기반 인공 지능의 결합 | |
JP6193586B2 (ja) | プログラム、システム、および、方法 | |
Hagelbäck | Hybrid pathfinding in StarCraft | |
US20230013014A1 (en) | Method and apparatus for using virtual throwing prop, terminal, and storage medium | |
US20230078592A1 (en) | Ability casting method and apparatus for virtual object, device, medium and program product | |
Stanescu et al. | Using Lanchester attrition laws for combat prediction in StarCraft | |
WO2022156491A1 (zh) | 虚拟对象控制方法、装置、设备、存储介质及程序产品 | |
JP2023169298A (ja) | 仮想オブジェクト制御方法、装置、端末及びコンピュータプログラム | |
JP2023541697A (ja) | 仮想シーンにおける位置取得方法、装置、電子機器、記憶媒体及びコンピュータプログラム | |
US20230330530A1 (en) | Prop control method and apparatus in virtual scene, device, and storage medium | |
JP2023164787A (ja) | 仮想環境の画面表示方法、装置、機器及びコンピュータプログラム | |
JP7504287B2 (ja) | 画面表示方法、装置、機器及びコンピュータプログラム | |
CN111202983A (zh) | 虚拟环境中的道具使用方法、装置、设备及存储介质 | |
Michalski et al. | SMAClite: A Lightweight Environment for Multi-Agent Reinforcement Learning | |
JP2023548802A (ja) | ステージ画面の表示方法、装置、及び機器 | |
JP4976754B2 (ja) | シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体 | |
EP3984607A1 (en) | Interaction control system and method for game objects, and server and computer-readable storage medium | |
US20230030619A1 (en) | Method and apparatus for displaying aiming mark | |
JP4804230B2 (ja) | シューティングゲーム処理方法、その装置、そのプログラム及びその記録媒体 | |
Policarpo et al. | Dynamic scripting applied to a First-Person Shooter | |
JP4996275B2 (ja) | 難易度判定方法、装置、プログラム | |
JP4804240B2 (ja) | シューティングゲームの敵機攻撃制御方法、その装置、そのプログラム及びその記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080804 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110506 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110624 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110802 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20110818 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110905 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120403 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120413 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4976754 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150420 Year of fee payment: 3 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |