(57)【特許請求の範囲】
【請求項１】
初期化手段と、自機移動パターン生成手段と、敵機行動決定手段と、衝突判定手段と、カウント手段とを備えたコンピュータが、画面上に自機と敵機を表示し、自機をＷ種類の行動によって所定の時間（以下、行動単位時間Ｔとする。）だけ移動させる操作を、所定の回数（以下、Ｄとする。）だけ行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの難易度を提示する方法であって、
初期化手段が、自機と敵機を画面上の行動開始位置に置く初期化過程と、
自機移動パターン生成手段が、Ｄ回の行動を選択する自機の各移動先の候補を生成する自機移動パターン生成過程と、
敵機行動決定手段が、敵機の各移動先の候補を生成する敵機行動決定過程と、
衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、上記敵機の各移動先の候補へ移動する敵機と衝突するか否かを判定する衝突判定過程と、
カウント手段が、上記衝突があった回数を計測して、シューティングゲームの難易度を決定するカウント過程と、
を有することを特徴とするシューティングゲーム難易度判定方法。
【請求項２】
請求項１記載のシューティングゲーム難易度判定方法であって、
べき乗演算手段が、衝突があった場合に、衝突が起こった際に自機が行った行動の回数をｄとすると、Ｗ（Ｄ−ｄ）を計算するべき乗演算過程、を更に有し、
上記カウント過程は、上記べき乗演算過程で得られた値を衝突回数としてカウントする過程であり、
上記自機移動パターン生成過程は、上記衝突が起こった場合、上記衝突が起こった箇所より後の自機の移動先の候補を生成しない過程である、
ことを特徴とするシューティングゲーム難易度判定方法。
【請求項３】
請求項１記載のシューティングゲームの難易度判定方法であって、
上記カウント過程は、上記衝突があった回数に代えて上記衝突がなかった回数を計測して、シューティングゲームの難易度を決定する過程である、
ことを特徴とするシューティングゲーム難易度判定方法。
【請求項４】
請求項１乃至３の何れかに記載のシューティングゲーム難易度判定方法であって、
正規化手段が、上記カウント過程が計測した結果を、上記Ｄ回の行動を選択した自機の移動先の候補の数であるＷＤで割算し、この計算結果をシューティングゲームの難易度とする正規化過程、
を更に有することを特徴とするシューティングゲーム難易度判定方法。
【請求項５】
請求項１乃至４の何れかに記載のシューティングゲーム難易度判定方法であって、
上記敵機行動決定過程は、上記自機の各移動先の候補に基づいて、敵機の移動先の候補を生成する過程である、
ことを特徴とするシューティングゲーム難易度判定方法。
【請求項６】
請求項１乃至５の何れかに記載のシューティングゲーム難易度判定方法であって、
自機の形状に内接する円の直径を自機の速度で割った値を、上記行動単位時間Ｔとする、
ことを特徴とするシューティングゲーム難易度判定方法。
【請求項７】
請求項１乃至６の何れかに記載のシューティングゲーム難易度判定方法であって、
敵機は複数存在する、
ことを特徴とするシューティングゲーム難易度判定方法。
【請求項８】
請求項１乃至７の何れかに記載のシューティングゲーム難易度判定方法であって、
上記初期化過程は、更に、敵機が過去に発射した攻撃弾を画面上の行動開始位置に置く過程であり、
上記敵機行動決定過程は、更に、上記攻撃弾の各移動先の候補を生成する過程であり、
上記衝突判定過程は、更に、自機が、上記攻撃弾の各移動先の候補へ移動する攻撃弾と衝突するか否かを判定する過程である、
ことを特徴とするシューティングゲーム難易度判定方法。
【請求項９】
請求項１乃至８の何れかに記載のシューティングゲーム難易度判定方法であって、
射線判定手段が、敵機が自機の射線上にあるかどうかを判定する射線判定過程、を更に有し、
上記敵機行動決定過程は、上記射線判定過程において射線上にあると判定された敵機については、その敵機の各移動先の候補を生成しない過程であり、
上記衝突判定過程は、上記射線判定過程において射線上にあると判定された敵機については、自機と衝突するか否かを判定しない過程である、
ことを特徴とするシューティングゲーム難易度判定方法。
【請求項１０】
画面上に自機と敵機を表示し、自機をＷ種類の行動によって所定の時間（以下、行動単位時間Ｔとする。）だけ移動させる操作を、所定の回数（以下、Ｄとする。）だけ行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの難易度を提示する装置であって、
自機と敵機を画面上の行動開始位置に置く初期化手段と、
Ｄ回の行動を選択する自機の各移動先の候補を生成する自機移動パターン生成手段と、
敵機の各移動先の候補を生成する敵機行動決定手段と、
自機が、上記自機の各移動先の候補へ移動する途中に、上記敵機の各移動先の候補へ移動する敵機と衝突するか否かを判定する衝突判定手段と、
上記衝突があった回数を計測して、シューティングゲームの難易度を決定するカウント手段と、
を有することを特徴とするシューティングゲーム難易度判定装置。
【請求項１１】
画面上に自機と敵機を表示し、自機をＷ種類の行動によって所定の時間（以下、行動単位時間Ｔとする。）だけ移動させる操作を、所定の回数（以下、Ｄとする。）だけ行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの難易度を提示するプログラムであって、
自機と敵機を画面上の行動開始位置に置く初期化過程と、
Ｄ回の行動を選択する自機の各移動先の候補を生成する自機移動パターン生成過程と、
敵機の各移動先の候補を生成する敵機行動決定過程と、
自機が、上記自機の各移動先の候補へ移動する途中に、上記敵機の各移動先の候補へ移動する敵機と衝突するか否かを判定する衝突判定過程と、
上記衝突があった回数を計測して、シューティングゲームの難易度を決定するカウント過程と、
をコンピュータに実行させるためのシューティングゲーム難易度判定プログラム。
【請求項１２】
請求項１１記載のシューティングゲーム難易度判定プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画面上に自機と敵機を表示し、自機をＷ種類の行動によって所定の時間（以下、行動単位時間Ｔとする。）だけ移動させる操作を、所定の回数（以下、Ｄとする。）だけ行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの敵キャラクターの強さを定量的に判定するシューティングゲーム難易度判定方法、その装置、そのプログラム及びその記録媒体に関する。
【背景技術】
【０００２】
将棋、囲碁のような一対一のゲームにおいて、コンピュータプログラムと人が対戦する形式のコンピュータゲームが普及している。そのコンピュータプログラムの強さを定量的に評価する指標としては、例えば、将棋の場合、人間のプロもしくはアマチュア有段者の何段のものにそのコンピュータプログラムが勝つことが出来るかという指標が用いられている。また、詰め将棋を解くコンピュータプログラムの場合には、その詰め将棋を解くのに必要な手の数で、コンピュータプログラムの強さを評価できる。例えば、200手詰めの詰め将棋をとくことが出来る場合はそのコンピュータプログラムの強さを200、1500手詰めの詰め将棋をとくことが出来る場合はそのコンピュータプログラムの強さを1500と考えることが出来た。
【０００３】
また、攻撃手段が自機に近づくにつれて移動速度を低下させる等の処理により、自機が攻撃手段に接触し難くして、ビギナーであってもシューティングゲームを楽しむことができるように難易度を調整する技術があった（例えば、特許文献１参照）。
【特許文献１】特許第３４９６１４９号明細書
【非特許文献１】Jonathan Schaeffer,H.Jaap van den Herik,“Games,computers,and artificial intelligence”,Artificial Intelligence,2002,Vol.134,p1-7
【発明の開示】
【発明が解決しようとする課題】
【０００４】
近年、コンピュータを利用したゲームが広く普及している。そのような中、ゲームのプレイヤーが戦闘機を模擬した自機を操作して、自機に対して攻撃を加えてくる敵機と闘うシューティングゲームは、コンピュータゲームの中でも、広く普及しているものである。
しかし、将棋、囲碁のような一対一のゲームの場合とは異なり、敵機が一機とは限らず、敵機が攻撃弾を発射するなどして、状況が時々刻々と変わるシューティングゲームにおいては、シューティングゲームの難易度を客観的かつ定量的に表現する手法はなかった。
【０００５】
なぜなら、シューティングゲームにおいては、シューティングゲームの敵機のアルゴリズムが、自機の行動を何手先まで予測することができるのかということが、そのシューティングゲームの難易度と直接的には結びつかない。シューティングゲームにおいては、敵機や攻撃弾の数や速度が、より直接的に難易度に関係する。このため、将棋、囲碁のような一対一のゲームの場合とは異なり、敵のアルゴリズムの読みの深さをゲームの難易度の指標とすることはできないからである。
【０００６】
また、人間のプレイヤーの強さを基準にゲームの難易度を測るにしても、シューティングゲームには、将棋のような公式に定義された厳密な強さの階級が存在しないため、どのプレイヤーがどのぐらいの強さを持っているかという再現性のあるデータを得ることが難しいという問題がある。
【０００７】
このため、シューティングゲームの開発において、ゲームの難易度バランスを調整する際には、定量的な指標はなく、もっぱら、被験者に開発中のゲームをプレイさせて、難易度に関する印象を聞く方法に頼っているのが現状である。
また、上記特許第３４９６１４９号明細書に記載された技術は、難易度を調整する技術であり、難易度を定量的に計算するための技術ではない。
【課題を解決するための手段】
【０００８】
本発明によれば、画面上に自機と敵機を表示し、自機をＷ種類の行動によって所定の時間（以下、行動単位時間Ｔとする。）だけ移動させる操作を、所定の回数（以下、Ｄとする。）だけ行って、自機に攻撃を加えてくる敵機と闘うシューティングゲームの難易度を提示するために、初期化手段が、自機と敵機を画面上の行動開始位置に置く。自機移動パターン生成手段が、Ｄ回の行動を選択する自機の各移動先の候補を生成する。敵機行動決定手段が、敵機の各移動先の候補を生成する。衝突判定手段が、自機が、上記自機の各移動先の候補へ移動する途中に、上記敵機の各移動先の候補へ移動する敵機と衝突するか否かを判定する。衝突カウント手段が、上記衝突があった回数を計測して、シューティングゲームの難易度を決定する。
【発明の効果】
【０００９】
シューティングゲームにおける敵機等の強さを定量的に判定することが可能となり、ゲームの難易度設定が容易となる。また、ゲームが人間の脳に与える影響を調べる際の心理物理実験のツールとしてシューティングゲームを利用する場合に、人間の心理学的バイアスを受けない、ゲーム難易度の客観的な指標を与えることが可能になる。
【発明を実施するための最良の形態】
【００１０】
［理論的背景］
自機と敵機は、原点等の所定の初期位置に置かれている。なお、敵機は複数存在し、また、敵機が過去に発射した攻撃弾が存在していても良い。ユーザは、初期位置にある自機を操作して、初期位置にある敵機と闘う。自機は、一回の操作で、Ｗ種類の速度（方向と速さ）で、行動単位時間Ｔだけ移動することができる。ユーザは、任意の回数（Ｄ回）だけ自機を操作することができる。ここでの敵機の動作アルゴリズムは、例えば、自機の動作を観測し、その結果を敵機動作決定に反映するものである。また、敵機が発射した各攻撃弾は、例えば、敵機より発射される際に移動速度が設定され、その後はその一定速度を維持するものである。自機が、敵機及び敵機が発射する攻撃弾と衝突した場合には、自機は破壊され、そこでゲームオーバーとなる。Ｄ回の操作後に自機が生き残っていれば、ユーザは、そのゲームに勝利したことになる。
【００１１】
このようなゲームにおいて、Ｄ回の操作により自機が行動した経路を行動パターンとすると、難易度は、自機の取り得る全行動パターンに占める死亡行動パターンの数で定量的に計算することができる。死亡行動パターン数が多い場合には、プレイヤーがそれだけ少ない数の安全行動パターンを選択する必要があるからである。ここで、死亡行動パターンとは、自機が敵機もしくは攻撃弾と接触して死んでしまうような場合の行動パターンのことである。また、安全行動パターンとは、敵機の位置もしくは攻撃弾の位置がある一定の距離に近づかないような自機操作のパターンのこと、すなわち、自機が敵機もしくは攻撃弾と接触しないような場合の行動パターンのことである。全行動パターンの数と、死亡行動パターンの数、安全行動パターンの数の間には、全行動パターンの数＝死亡行動パターンの数＋安全行動パターンの数、という関係が成り立っている。
【００１２】
安全行動パターン、死亡行動パターンは、行動決定木で記述されており、決定木の分岐の数は、自機が生き残るもしくは死んでしまう行動の場合の数に対応するものである。したがって、死亡行動パターンの数は、自機が敵機もしくは攻撃弾との衝突が起こる行動選択の総数から求めるべきであるとも考えられる。しかし、ここで注意すべきなのは、行動決定木における衝突の起こる行動選択の深さである。深さが浅いところでの衝突は、それだけ、自機の行動選択に差し迫った決断を迫るものである。このため、同じ衝突でも、深さの浅いところでの衝突を、深さが深いところでの衝突よりも大きく評価すべきである。
【００１３】
ここで、上述したように、自機が一回の行動において選択することができる行動の種類の数をＷ、自機の行動選択の回数の上限をＤとし、さらに、衝突が起こった自機の行動が選択された深さ、すなわち、衝突が起こった際に自機が既に行動選択を行った回数をｄとすると、自機が敵機もしくは攻撃弾と衝突した場合の数は、Ｗ（Ｄ−ｄ）でカウントすることができる。Ｗ（Ｄ−ｄ）を計算することにより、それ以降の行動決定木での分岐全てで、衝突が起こっているものとして、ある深さｄで起こった衝突の場合の数をカウントすることができる。このため、Ｗ（Ｄ−ｄ）で、衝突した場合の数をカウントすることにより、敵機の強さを適切に把握することができるのである。
【００１４】
すべての衝突に対してＷ（Ｄ−ｄ）を計算し、これらのＷ（Ｄ−ｄ）をすべて足すことにより、死亡行動パターンの数を計算することができる。そして、例えば、この死亡行動パターンの数を全行動パターンで割ったものが、シューティングゲームの難易度となる。
【００１５】
例えば、Ｗ＝３、Ｄ＝３の場合であり、図３に示すように、※１、※２、※３において衝突が起こったとする。この場合、死亡パターン数は以下のように計算することができる。図３において、実線は、各深さｄにおいて、移動速度番号０の行動を選択した場合の自機の描く軌跡を表している。破線は、各深さｄにおいて、移動速度番号１の行動を選択した場合の自機の描く軌跡を表している。一点鎖線は、各深さｄにおいて、移動速度番号２の行動を選択した場合の自機の描く軌跡を表している。※１における衝突は、ｄ＝２における衝突であるため、Ｗ（Ｄ−ｄ）＝３（３−２）＝３でカウントすることができる。※２における衝突は、ｄ＝３における衝突であるため、Ｗ（Ｄ−ｄ）＝３（３−３）＝１でカウントすることができる。※３における衝突は、ｄ＝１における衝突であるため、Ｗ（Ｄ−ｄ）＝３（３−１）＝９でカウントすることができる。これらのＷ（Ｄ−ｄ）をすべて足し合わせたもの３＋１＋９＝１３が、死亡パターン数である。この死亡パターン数は、衝突が起こった以降の行動決定木での分岐全てで、衝突が起こっているものとした場合の死亡パターン数に一致する。この例では、全行動パターンの数は、ＷＤ＝３３＝２７であるため、シューティングゲームの難易度は、例えば、（死亡行動パターンの数）／（全行動パターンの数）＝１３／２７≒０．４８１４８…、として求めることができる。
【００１６】
死亡行動パターンは、人工知能の技術分野における探索計算を行うことで求めることができる。以下に述べる実施例では、いわゆる縦型探索により、死亡行動パターンの数を計算するものとする。縦型探索により、メモリを効率的に使用することができるためである。縦型探索とは、子節点を優先して探索する手順であり、例えば、Ｄ＝３、Ｗ＝３の場合、図４に示すように、行動単位ごとの移動経路につけた番号の順番でそれぞれの経路を探索する手法である。以下に述べる実施例においては、衝突が起こった場合には、衝突が起こった箇所より後の経路を探索しない。例えば、※１（６の経路）において衝突が起こった場合には、７〜９の経路については探索しない。この場合には、６の経路を探索して衝突が発生した後に、１０の経路を探索することになる。
【００１７】
［実施形態］
図１、２を参照して、本発明によるシューティングゲーム難易度判定方法を実施するためのシューティングゲーム難易度判定装置１０００を説明する。図１は、シューティングゲーム難易度判定装置１０００の機能構成例を示す図である。図２は、シューティングゲーム難易度判定装置１０００の処理例を示す図である。
【００１８】
シューティングゲーム難易度判定装置１０００は、例えば、自機移動パターン生成部１０、敵機行動決定部２０、衝突判定部３０、難易度計算部４０、難易度データ保存部５０、自機移動パターンバッファ５１、敵機攻撃状態バッファ５２から構成される。
自機移動パターン生成部１０は、例えば、初期化部１０１、制御部１０２、バッファ１０３、位置更新部１０４、記憶部１０５から構成される。
敵機行動決定部２０は、例えば、敵機移動速度決定部２０１、記憶部２０２、敵機攻撃弾発射速度決定部２０３、制御部２０４から構成される。
難易度計算部４０は、例えば、べき乗演算部４０１、衝突カウント部４０２、正規化部４０３から構成される。
【００１９】
自機に許される移動速度、すなわち、方向と速さの組み合わせはＷ通りであり、それぞれの移動速度には番号ｊ（１≦ｊ≦Ｗ）が付けられているものとする。深さｄでの移動速度番号をＪ（ｄ）とする。また、それぞれの移動速度で行動単位時間Ｔだけ移動を行うことを行動単位とし、行動単位の一つを決定木の一つの枝とする。自機は、Ｄ回行動の選択を行う。すなわち、最大の深さｄの最大値はＤとなる。ＷとＤは任意の値で良いが、例えば、Ｗ＝９、Ｄ＝１０とすることができる。予め設定されたＷとＤの値は、自機移動パターン生成部１０の記憶部１０５に格納されているものとする。また、自機は、直交ｘ，ｙ座標面上を行動するものとする。Ｗ種類の各移動速度（Ｖｘ（ｊ），Ｖｙ（ｊ））も、予め設定され、自機移動パターン生成部１０の記憶部１０５に格納されているものとする。Ｗ＝９の場合、例えば、
（Ｖｘ（０），Ｖｙ（０））＝（０，１）、
（Ｖｘ（１），Ｖｙ（１））＝（１，１）、
（Ｖｘ（２），Ｖｙ（２））＝（１，０）、
（Ｖｘ（３），Ｖｙ（３））＝（１，−１）、
（Ｖｘ（４），Ｖｙ（４））＝（０，−１）、
（Ｖｘ（５），Ｖｙ（５））＝（−１，−１）、
（Ｖｘ（６），Ｖｙ（６））＝（−１，０）、
（Ｖｘ（７），Ｖｙ（７））＝（−１，１）、
（Ｖｘ（８），Ｖｙ（８））＝（０，０）、
とすることができる。
【００２０】
なお、自機の行動を表現する行動単位の長さは、自機の大きさが０でないとした場合、自機が移動によって掃く領域がカバーできない領域が各深さの移動において発生しないようにすることが、正確な敵機の強さの判定において重要である。難易度を定量化する際に自機が移動によって掃く領域がカバーできない領域が存在すれば、求まった難易度は、実際に自機が移動することができる領域の一部については考慮していないことになるため、敵の強さを正確に表現しているものと言うことはできないためである。このため、より正確に難易度を求める場合は、自機の形状に内接する円の直径を自機の速度で割った値を、上記行動単位時間Ｔとすれば良い。このようにして予め設定された行動単位時間Ｔも、自機移動パターン生成部１０の記憶部１０５に格納されているものとする。
【００２１】
また、ｔを自機が行動を開始してからの経過時間、時刻ｔでの敵機ｉの位置を（Ｘｉ（ｔ），Ｙｉ（ｔ））、この実施例は、敵機ｉが発射した攻撃弾を考慮した場合であり、敵機ｉの発射したｋ番目の攻撃弾の時刻ｔでの位置を（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））、時刻ｔでの自機の位置を（Ｘｓ（ｔ），Ｙｓ（ｔ））、移動速度番号ｊの自機の移動速度を（Ｖｘ（ｊ），Ｖｙ（ｊ））とする。
【００２２】
＜ステップＳ１＞
自機移動パターン生成部１０の初期化部１０１は、ｔ＝０，ｄ＝１として、これをバッファ１０３に格納する。また、初期化部１０１は、時刻ｔにおける自機の位置（Ｘｓ（０），Ｙｓ（０））を、例えば、原点（０，０）に設定する。初期位置（Ｘｓ（０），Ｙｓ（０））を原点（０，０）に設定するのは一例であり、任意の位置に設定しても良い。また、初期化部１０１は、敵機ｉの位置（Ｘｉ（ｔ），Ｙｉ（ｔ））及び敵機が過去に攻撃弾を発射している場合にはその攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を任意の位置に設定する。
【００２３】
＜ステップＳ２＞
自機移動パターン生成部１０の制御部１０２は、Ｊ（ｄ）＝０とする。
【００２４】
＜ステップＳ３＞
自機移動パターン生成部１０の制御部１０２は、Ｊ（ｄ）と（Ｘｓ（ｔ），Ｙｓ（ｔ））の値を、それぞれ自機移動パターンバッファ５１に格納する。すなわち、ｄ＝１の場合には、Ｊ（１）＝０が自機移動パターンバッファ５１に格納されることになる。また、（Ｘｓ（０），Ｙｓ（０））＝（０，０）の場合には、（Ｘｓ（０），Ｙｓ（０））＝（０，０）が自機移動パターンバッファ５１に格納されることになる。
また、自機移動パターン生成部１０の制御部１０２は、時刻ｔにおける敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））と攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を、敵機攻撃状態バッファ５２に格納する。
【００２５】
＜ステップＳ４＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３からｔを読み出し、ｔをインクリメントする。インクリメントされたｔは、バッファ１０３に格納される。ｔのインクリメント幅は、行動単位時間Ｔより小さい値、好ましくはＴを複数等分する値であれば、どのような値でも良い。例えば、Ｔを０．３秒〜１秒としたとき、このＴを１０等分する時間間隔である、０．０３秒〜０．１秒をｔに設定することができる。
【００２６】
また、自機移動パターン生成部１０の位置更新部１０４は、自機の移動速度（Ｖｘ（Ｊ（ｄ）），Ｖｙ（Ｊ（ｄ））でｔのインクリメント幅の時間だけ移動した後の自機の位置を計算する。具体的には、位置更新部１０４は、ｔのインクリメント幅をτとすると、（τ×Ｖｘ（Ｊ（ｄ）），τ×Ｖｙ（Ｊ（ｄ）））を計算して、位置の変位量を求め、これに（Ｘｓ（ｔ−τ），Ｙｓ（ｔ−τ））を加算することにより、自機の位置を更新する。インクリメント幅τでインクリメントした後の自機の位置、すなわち、更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））は、敵機行動決定部２０に出力される。
【００２７】
＜ステップＳ５＞
敵機行動決定部２０の敵機移動速度決定部２０１は、上記自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））を基にして、敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））及び攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を更新する。すなわち、自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））を考慮した敵機の行動のアルゴリズムに従ってτ時間移動した後の敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））及びτ時間経過後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を計算する。
【００２８】
自機の位置を考慮した敵機の行動のアルゴリズムは周知のアルゴリズムを用いることができる。例えば、自機の位置に近づくように敵機が動くアルゴリズムや、常に自機との位置を一定距離・方向に保つように敵機が動くアルゴリズムを利用することができる。また、自機の位置を考慮しないアルゴリズム、例えば、自機の位置とは無関係に敵機が下降し続けるアルゴリズムや、自機の位置とは無関係に敵機が静止し続けるアルゴリズムを利用することもできる。
【００２９】
例えば、敵機移動速度決定部２０１は、上記の何れかの敵機の行動アルゴリズムに従って、敵機の速度（Ｖｉｘ（ｔ），Ｖｉｙ（ｔ））を決定する。そして、敵機移動速度決定部２０１は、（τ×Ｖｉｘ（ｔ），τ×Ｖｉｙ（ｔ））を計算して、敵機の位置の変位量を求める。敵機行動決定部２０の記憶部２０２に保存された更新前の敵機の位置（Ｘｉ（ｔ−τ），Ｙｉ（ｔ−τ））を読み出し、上記計算した敵機の位置の変位量（τ×Ｖｉｘ（ｔ），τ×Ｖｉｙ（ｔ））と加算することによって、更新後の敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））を求める。
【００３０】
また、敵機移動速度決定部２０１は、記憶部２０２に記憶された攻撃弾の速度（Ｖｂｉｋｘ（ｔ），Ｖｂｉｋｙ（ｔ））を読み出し、これをτ倍したものを、同じく記憶部２０２から読み出した更新前の攻撃弾の位置（Ｘｂｉｋ（ｔ−τ），Ｙｂｉｋ（ｔ−τ））に加算することにより、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を求める。
また、敵機攻撃弾発射速度決定部２０３が、更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））に応じて、周知のアルゴリズムを用いて、新たな攻撃弾を発射するようにしても良い。
【００３１】
更新後の敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））は、記憶部２０２に記憶される。また、更新後の敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））は、更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））と共に、衝突判定部３０に出力される。
また、更新後の敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））は、自機移動パターン生成部１０に出力される。
【００３２】
＜ステップＳ６＞
衝突判定部３０は、自機と敵機、又は、自機と攻撃弾が衝突したかどうかを判定する。衝突したかどうかは、予め設定され、図示していない衝突判定部３０内の記憶部に記憶された自機の形状、敵機の形状、攻撃弾の形状と、敵機行動決定部２０から出力された更新後の敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））、更新後の自機の位置（Ｘｓ（ｔ），Ｙｓ（ｔ））とから判断される。例えば、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の形状が重なった場合には、自機と敵機が衝突したと判定することができる。また、更新後の位置に置かれた自機の形状と更新後の位置に置かれた敵機の形状が重なった場合には、自機と攻撃弾が衝突したと判定することができる。
【００３３】
衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部１０に出力される。その後、ステップＳ７の処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部１０と難易度計算部４０に出力される。その後、ステップＳ１４の処理を行う。
【００３４】
＜ステップＳ７＞
衝突がなかった旨の信号を受け取った自機移動パターン生成部１０の制御部１０２は、Ｓ３のときから、行動単位時間Ｔが経過したかどうかを判定する。すなわち、バッファから読み出したｔがｄＴよりも大きいかどうか、つまり、ｔ≧ｄＴかどうかを判定する。
ｔ＜ｄＴであれば、次の処理は、ステップＳ４に戻る。すなわち、ｔがステップＳ３の時から行動単位時間Ｔを経過するまで、ステップＳ４〜Ｓ７を繰り返す。ｔ≧ｄＴであれば、次の処理は、ステップＳ８に進む。
【００３５】
＜ステップＳ８＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｄを１だけインクリメントする。インクリメントされたｄは、バッファ１０３に格納される。
【００３６】
＜ステップＳ９＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｄが、予め記憶部１０５に格納され設定されたＤより大きいかどうかを判定する。すなわち、Ｄ＜ｄかどうかを判定する。なお、Ｄは、例えば、Ｄは５〜１０に設定することができる。
Ｄ≧ｄであると判定された場合には、制御部１０２は、ステップＳ２に戻って処理を行う。
Ｄ＜ｄであると判定された場合には、制御部１０２は、ステップＳ１０の処理を行う。
【００３７】
＜ステップＳ１０＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｄを、１だけデクリメントする。デクリメントされたｄは、バッファ１０３に格納される。
【００３８】
＜ステップＳ１１＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｔを（ｄ−１）Ｔに設定する。（ｄ−１）Ｔに設定されたｔは、バッファ１０３に格納される。また、自機移動パターンバッファ５１に格納されたＪ（ｄ）を読み出し、１だけインクリメントする。インクリメントされたＪ（ｄ）は、自機移動パターンバッファ５１に格納される。
【００３９】
＜ステップＳ１２＞
自機移動パターン生成部１０の制御部１０２は、記憶部１０５から読み出したＷと、自機移動パターンバッファ５１から読み出したＪ（ｄ）の大小関係を判定する。
Ｗ＜Ｊ（ｄ）であれば、自機移動パターン生成部１０の制御部１０２は、ステップＳ１３の処理を行う。Ｗ≧Ｊ（ｄ）であれば、自機移動パターン生成部１０の制御部１０２は、ステップＳ１５の処理を行う。
【００４０】
＜ステップＳ１３＞
自機移動パターン生成部１０の制御部１０２は、敵機攻撃状態バッファ５２から、時刻ｔにおける敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））、更新後の攻撃弾の位置（Ｘｂｉｋ（ｔ），Ｙｂｉｋ（ｔ））を読み出す。その後、ステップＳ３の処理に戻る。
【００４１】
＜ステップＳ１４＞
ステップＳ６において、衝突があったと判定された場合には、難易度計算部４０のべき乗演算部４０１が、自機移動パターン生成部１０のバッファ１０３から読み出したｄと、自機移動パターン生成部１０のバッファ１０３から読み出した記憶部１０５から読み出したＷとＤとを用いて、衝突回数Ｗ（Ｄ−ｄ）を計算する。計算された衝突回数Ｗ（Ｄ−ｄ）は、衝突カウント部４０２に出力される。
衝突カウント部４０２は、衝突がある毎に計算された衝突回数Ｗ（Ｄ−ｄ）を、ステップＳ１５において本実施例によるシューティングゲーム難易度判定方法の処理フローが終了するまで、足し込み続ける。
【００４２】
＜ステップＳ１５＞
ステップＳ１２において、Ｗ＜Ｊ（ｄ）であると判定された場合には、自機移動パターン生成部１０の制御部１０２は、ｄ＝１か否かを判定する。
ｄ≠１と判定された場合には、ステップＳ１０の処理に戻る。
ｄ＝１と判定された場合には、制御部１０２は、本実施例によるシューティングゲーム難易度判定方法の処理フローが終了した旨の信号を難易度計算部４０に出力する。上記処理フローが終了した旨の信号を受信した難易度計算部４０の衝突カウント部４０２が、今まで足し込んだ衝突回数を、正規化部４０３に出力する。正規化部４０３は、自機移動パターン生成部１０の記憶部１０５から読み込んだＷとＤから、全行動パターンの数ＷＤを計算する。正規化部４０３は、上記今まで足し込んだ衝突回数を全行動パターンの数ＷＤで除算して、シューティングゲームの難易度を求める。除算結果は、難易度データ保存部５０に出力される。
以上が、本実施例によるシューティングゲームの難易度判定装置の機能構成、処理例の概要である。
【００４３】
［変形例等］
上記実施例では、死亡行動パターン数、すなわち、衝突した数をカウントしてシューティングゲームの難易度としたが、安全行動パターン数、すなわち、衝突しなかった数をカウントして、シューティングゲームの難易度としても良い。この場合には、シューティングゲーム難易度判定装置１０００は、図５に示す処理を行う。図５に示す処理は、ステップＳ６’、ステップＳ９’、ステップＳ１４’における処理が、図４に示す処理とは異なり、他のステップにおける処理は同じである。処理が同じステップについては、同一のステップ番号を付けて説明を省略する。
【００４４】
＜ステップＳ６’＞
衝突判定部３０により、ステップＳ６の説明で示したのと同じ衝突判定方法により、衝突がなかったと判定された場合には、衝突がなかった旨の信号が、自機移動パターン生成部１０に出力される。その後、ステップＳ７の処理を行う。
衝突があったと判定された場合には、衝突があった旨の信号が、自機移動パターン生成部１０に出力される。その後、ステップＳ１１の処理を行う。
【００４５】
＜ステップＳ９’＞
自機移動パターン生成部１０の制御部１０２は、バッファ１０３から読み出したｄが、予め記憶部１０５に格納され設定されたＤより大きいかどうかを判定する。すなわち、Ｄ＜ｄかどうかを判定する。なお、Ｄは、例えば、Ｄは５〜１０に設定することができる。
Ｄ≧ｄであると判定された場合には、制御部１０２は、ステップＳ２に戻って処理を行う。
Ｄ＜ｄであると判定された場合には、制御部１０２は、ステップＳ１４’の処理を行う。
【００４６】
＜ステップＳ１４’＞
ステップＳ９’において、Ｄ＜ｄであると判定された場合には、自機移動パターン生成部１０の制御部１０２が、自機が生き残った旨を表わす信号を、難易度計算部４０の生き残り移動パターンカウント部４０４に送る。生き残り移動パターンカウント部４０４は、上記自機が生き残った旨を表わす信号を受信した回数をカウントする。
自機移動パターン生成部１０から処理フローが終了した旨の信号を受け取った場合には、生き残り移動パターンカウント部４０４は、それまでにカウントした上記自機が生き残った旨を表わす信号を受信した回数を、正規化部４０３に送る。
このようにして、安全行動パターン数、すなわち、衝突しなかった数をカウントして、シューティングゲームの難易度とすることができる。
【００４７】
また、行動の種類Ｗを行動の回数Ｄで累乗して求められるＷＤ個のすべての行動パターンについて、それぞれ、自機と敵機、及び、自機と攻撃弾が衝突するかどうかを衝突判定部３０が調べ、その衝突回数又は衝突しなかった回数を、衝突カウント手段４０２又は生き残り移動パターンカウント部４０４がカウントすることにより、シューティングゲームの難易度を求めても良い。
【００４８】
また、図２に例示したフローチャートのステップＳ６とステップＳ７の間に、及び、図５に例示したフローチャートのステップＳ６’とステップＳ７の間に、下記のステップＳ６’’の処理を行うようにしても良い。
【００４９】
＜ステップＳ６’’＞
衝突がなかった旨の信号を受け取った自機移動パターン生成部１０の制御部１０２は、更新後の敵機の位置（Ｘｉ（ｔ），Ｙｉ（ｔ））が、更新後の自機の射線上にあるかどうかを判定する。例えば、自機がＹ軸方向（画面の上方向）に攻撃弾を発射する場合には、更新後の敵機のＸ軸方向の位置Ｘｉ（ｔ）と更新後の自機のＹ軸方向の位置Ｘｓ（ｔ）との差の絶対値ｄ（Ｘｉ（ｔ），Ｘｓ（ｔ））を計算し、この計算結果が所定の値aよりも小さいかどうかを判定する。上記所定の値aとしては、例えば、敵機の形状のＸ軸方向の幅の半分の値に、自機が発射する攻撃弾の形状のＸ軸方向の幅の半分の値を加算した値を設定することができる。
【００５０】
ｄ（Ｘｉ（ｔ），Ｘｓ（ｔ））＜aの場合には、敵機は自機の攻撃弾により破壊されたと考えることができるため、制御部１０２は、上記射線上にある敵機が破壊された旨の信号を、敵機行動決定部２０及び衝突判定部３０に送り、その後、ステップＳ７の処理を行う。上記信号を受けた敵機行動決定部２０は、その後の処理において、上記破壊されたと考えられる敵機についての位置の更新を停止する。また、制御部１０２は、その後の処理において、上記破壊されたと考えられる敵機については、その位置のバッファへの読み書き等の処理を行わない。また、上記信号を受けた衝突判定部３０は、その後の処理において、自機と上記破壊されたと考えられる敵機の衝突の判定を行わない。
ｄ（Ｘｉ（ｔ），Ｘｓ（ｔ））≧aの場合には、制御部１０２は、ステップＳ７の処理を行う。
【００５１】
また、上記実施例では、衝突カウント部４０２が足し込んだ衝突回数及び生き残り移動パターンカウント部４０４がカウントした自機が生き残った旨を表わす信号を受信した回数、を正規化部４０３が正規化し、正規化した値を難易度データ保存部５０に出力した。しかし、衝突カウント部４０２が足し込んだ衝突回数及び生き残り移動パターンカウント部４０４がカウントした自機が生き残った旨を表わす信号を受信した回数、をそのまま難易度データ保存部５０に出力しても良い。正規化部４０３が正規化せずとも、衝突カウント部４０２が足し込んだ衝突回数及び生き残り移動パターンカウント部４０４がカウントした自機が生き残った旨を表わす信号を受信した回数も、広義の難易度として捉えることができるためである。
【００５２】
また、上記シューティングゲーム難易度判定装置１０００の処理機能をコンピュータによって実現することができる。この場合、シューティングゲーム難易度装置の処理機能の内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、図６に示すように、上記シューティングゲーム難易度判定装置１０００の処理機能がコンピュータ上で実現される。
【００５３】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（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）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００５６】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、ユーザ端末を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
以上の各実施形態の他、本発明であるシューティングゲーム難易度判定方法、その装置等は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【図面の簡単な説明】
【００５７】
【図１】シューティングゲーム難易度判定装置の機能構成を例示した図。
【図２】シューティングゲーム難易度判定装置の処理を例示した図。
【図３】衝突回数のカウント方法を説明するための図。
【図４】縦型探索の方法を説明するための図。
【図５】シューティングゲーム難易度判定装置の処理を例示した図。
【図６】シューティングゲーム難易度判定装置をコンピュータにより実行するときの機能構成を例示した図。
【図７】図２に例示したシューティングゲーム難易度判定装置の処理の変形例を示した図。
【図８】図５に例示したシューティングゲーム難易度判定装置の処理の変形例を示した図。
【符号の説明】
【００５８】
１  自機
２  敵機
３  ＣＰＵ
４  ＲＡＭ
５  出力部
６  補助記憶部
７  入力部
８  バス
１０  自機移動パターン生成部
２０  敵機行動決定部
３０  衝突判定部
４０  難易度計算部
５０  難易度データ保存部
５１  自機移動パターンバッファ
５２  敵機攻撃状態バッファ
１０１  初期化部
１０２  制御部
１０３  バッファ
１０４  位置更新部
１０５  記憶部
２０１  敵機移動速度決定部
２０２  記憶部
２０３  敵機攻撃弾発射速度決定部
２０４  制御部
４０１  乗演算部
４０２  衝突カウント部
４０３  正規化部
４０４  生き残り移動パターンカウント部
１０００  シューティングゲーム難易度判定装置
【図１】
0004804222.tif 000002
【図２】
0004804222.tif 000003
【図３】
0004804222.tif 000004
【図４】
0004804222.tif 000005
【図５】
0004804222.tif 000006
【図６】
0004804222.tif 000007
【図７】
0004804222.tif 000008
【図８】
0004804222.tif 000009