図1を参照して、この発明の一実施例であるビデオゲームシステム10は、ビデオゲーム装置12を含む。ビデオゲーム装置12は、略立方体のハウジング14を含み、ハウジング14の上端には光ディスクドライブ16が設けられる。光ディスクドライブ16には、ゲームプログラム等を記憶した情報記憶媒体の一例である光ディスク18が装着される。ハウジング14の前面には複数の(この実施例では4つの)コネクタ20が設けられる。これらコネクタ20は、ケーブル24によって、コントローラ22をビデオゲーム装置12に接続するためのものであり、この実施例では最大4つのコントローラ22をビデオゲーム装置12に接続することができる。なお、この発明を実行する装置は、ビデオゲーム装置に限られず、携帯型ゲーム装置,業務用ゲーム装置,パーソナルコンピュータまたは携帯電話等、ゲームを実行可能な装置であればなんでもよい。
コントローラ22には、その上面,下面,或いは側面などに、操作部(操作スイッチ)26が設けられる。操作部26は、たとえば2つのアナログジョイスティック(レバー),1つの十字キー,複数のボタンスイッチ等を含む。1つのアナログジョイスティックは、スティックの傾き量と方向とによって、たとえばプレイヤオブジェクト(プレイヤがコントローラ22によって操作可能な動画オブジェクト)の移動方向および/または移動速度ないし移動量などを入力するために用いられる。他のアナログジョイスティックは、傾斜方向によって、たとえば仮想カメラの移動を制御する。十字スイッチは、アナログジョイスティックに代えてプレイヤオブジェクトやカーソル等の移動方向を指示するために用いられる。ボタンスイッチは、たとえば、プレイヤオブジェクトの動作を指示するために利用されたり、3次元画像の仮想カメラの視点を切り換えたり、プレイヤオブジェクトの移動スピード調節等に用いられる。ボタンスイッチは、さらに、たとえばメニュー選択の決定/取り消しを制御する。
なお、この実施例ではコントローラ22がそれと一体的に設けられるケーブル24によってビデオゲーム装置12に接続された。しかしながら、コントローラ22は、他の方法、たとえば電磁波(電波または赤外線)を介してワイヤレスで、ビデオゲーム装置12に接続されてもよい。また、コントローラ22の操作部26の具体的構成は、もちろんこの実施例の構成に限られるものではなく、任意の変形が可能である。たとえば、アナログジョイスティックは1つだけでもよいし、用いられなくてもよい。十字スイッチは用いられなくてもよい。
ビデオゲーム装置12のハウジング14の前面であり、コネクタ20の下方には、1つまたは複数の(この実施例では2つの)メモリスロット28が設けられる。このメモリスロット28にはメモリカード30が挿入される。メモリカード30は、光ディスク18から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム10を利用してプレイしたゲームのゲームデータ(ゲームの結果データまたは途中データ)を保存(セーブ)しておいたりするために利用される。
ビデオゲーム装置12のハウジング14の後面には、AVケーブルコネクタ(図示せず)が設けられ、そのコネクタを用いて、AVケーブル32を通してビデオゲーム装置12にモニタ34を接続する。このモニタ34は典型的にはカラーテレビジョン受像機であり、AVケーブル32は、ビデオゲーム装置12からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に入力する。したがって、カラーテレビ(モニタ)34の画面上にたとえば3次元(3D)ビデオゲームのゲーム画像が表示され、左右のスピーカ34aからゲーム音楽や効果音などのステレオゲーム音声が出力される。
このゲームシステム10において、ユーザまたはゲームプレイヤがゲーム(または他のアプリケーション)をプレイするために、ユーザはまずビデオゲーム装置12の電源をオンし、次いで、ユーザはビデオゲーム(もしくはプレイしたいと思う他のアプリケーション)をストアしている適宜の光ディスク18を選択し、その光ディスク18をビデオゲーム装置12のディスクドライブ16にローディングする。応じて、ビデオゲーム装置12がその光ディスク18にストアされているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはビデオゲーム装置12に入力を与えるためにコントローラ22を操作する。たとえば、操作部26のどれかを操作することによってゲームもしくは他のアプリケーションをスタートさせる。操作部26の他のものを動かすことによって、動画オブジェクト(プレイヤオブジェクト)を異なる方向に移動させ、または3次元(3D)のゲーム世界におけるユーザの視点(カメラ位置)を変化させることができる。
図2は図1実施例のビデオゲームシステム10の電気的な構成を示すブロック図である。ビデオゲーム装置12には、中央処理ユニット(以下、「CPU」という。)36が設けられる。このCPU36は、コンピュータ或いはプロセサなどとも呼ばれ、ビデオゲーム装置12の全体的な制御を担当する。CPU36ないしコンピュータは、ゲームプロセサとして機能し、このCPU36には、バスを介して、メモリコントローラ38が接続される。メモリコントローラ38は主として、CPU36の制御の下で、バスを介して接続されるメインメモリ40の書込みや読出しを制御する。このメモリコントローラ38にはGPU(Graphics Processing Unit:グラフィックス処理装置) 42が接続される。
GPU42は、描画手段の一部を形成し、たとえばシングルチップASICで構成され、メモリコントローラ38を介してCPU36からのグラフィクスコマンド(graphics command :作画命令) を受け、そのコマンドに従って、ジオメトリユニット44およびレンダリングユニット46によって3次元(3D)ゲーム画像を生成する。つまり、ジオメトリユニット44は、3次元座標系の各種キャラクタないしオブジェクト(複数のポリゴンで構成されている。そして、ポリゴンとは少なくとも3つの頂点座標によって定義される多角形平面をいう。)の回転,移動,変形等の座標演算処理を行う。レンダリングユニット46は、各種オブジェクトの各ポリゴンにテクスチャ(Texture :模様画像)を貼り付けるなどの画像生成処理を施す。したがって、GPU42によって、ゲーム画面上に表示すべき3D画像データが作成され、その画像データがフレームバッファ48内に記憶される。ただし、仮想ゲーム空間が3次元ではなく2次元である場合には、立体的なゲーム画像ではなく2次元の平面的なゲーム画像が生成される。
なお、GPU42が作画コマンドを実行するにあたって必要なデータ(プリミティブまたはポリゴンやテクスチャ等)は、GPU42がメモリコントローラ38を介して、メインメモリ40から入手する。
フレームバッファ48は、たとえばラスタスキャンモニタ34の1フレーム分の画像データを描画(蓄積)しておくためのメモリであり、GPU42によって1フレーム毎に書き換えられる。具体的には、フレームバッファ48は、1画素(ピクセル)毎に、画像の色情報を順序立てて記憶している。ここで、色情報は、R,G,B,Aについてのデータであり、たとえば、8ビットのR(赤)データ、8ビットのG(緑)データ、8ビットのB(青)データおよび8ビットのA(アルファ)データである。なお、Aデータは、マスクについてのデータである。後述のビデオI/F58がメモリコントローラ38を介してフレームバッファ48のデータを読み出すことによって、モニタ34の画面上に3Dゲーム画像が表示される。
また、Zバッファ50は、フレームバッファ48に対応する画素数×1画素当たりの奥行きデータのビット数に相当する記憶容量を有し、フレームバッファ48の各記憶位置に対応するドットの奥行き情報または奥行きデータ(Z値)を記憶するものである。
なお、フレームバッファ48およびZバッファ50は、ともにメインメモリ40の一部を用いて構成されてもよく、また、これらはGPU42の内部に設けられてもよい。
メモリコントローラ38はまた、DSP(Digital Signal Processor)52を介して、オーディオ用のRAM(以下、「ARAM」という。)54に接続される。したがって、メモリコントローラ38は、メインメモリ40だけでなく、サブメモリとしてのARAM54の書込みおよび/または読出しを制御する。
DSP52は、サウンドプロセサとして働き、メインメモリ40に記憶されたサウンドデータ(図示せず)を用いたり、ARAM54に書き込まれている音波形データ(図示せず)を用いたりして、ゲームに必要な音、音声或いは音楽に対応するオーディオデータを生成する。
メモリコントローラ38は、さらに、バスによって、各インタフェース(I/F)56,58,60,62および64に接続される。コントローラI/F56は、ビデオゲーム装置12に接続されるコントローラ22のためのインタフェースであり、コントローラ22の操作部26の操作信号または操作データを、メモリコントローラ38を通してCPU36に与える。ビデオI/F58は、フレームバッファ48にアクセスし、GPU42で作成した画像データを読み出して、画像信号または画像データ(ディジタルRGBAピクセル値)をAVケーブル32(図1)を介してモニタ34に与える。
外部メモリI/F60は、ビデオゲーム装置12の前面に挿入されるメモリカード30(図1)をメモリコントローラ38に連係させる。それによって、メモリコントローラ38を介して、CPU36がこのメモリカード30にデータを書込み、またはメモリカード30からデータを読み出すことができる。オーディオI/F62は、メモリコントローラ38を通してDSP52から与えられるオーディオデータまたは光ディスク18から読み出されたオーディオストリームを受け、それらに応じたオーディオ信号(音声信号)をモニタ34のスピーカ34aに与える。
そして、ディスクI/F64は、ディスクドライブ16をメモリコントローラ38に接続し、したがって、CPU36がディスクドライブ16を制御する。このディスクドライブ16によって光ディスク18から読み出されたプログラムおよびデータが、CPU36の制御の下でメインメモリ40に書き込まれる。
図3および図4にはメインメモリ40のメモリマップが示される。メインメモリ40は、プログラム記憶領域70とデータ記憶領域72を含む。プログラム記憶領域70にはゲームプログラムが記憶される。CPU36はプログラム記憶領域70のゲームプログラムに従ってデータ記憶領域72に必要なデータを生成または取得しつつ処理を実行する。なお、ゲームプログラムおよびデータは、光ディスク18から一度に全部または必要に応じて部分的にかつ順次的に読み出され、メインメモリ40の所定領域に記憶される。また、データ記憶領域72には、光ディスク18から読み出したデータ以外にゲームの進行に従って生成または取得したデータも記憶される。なお、図3および図4には記憶されるデータの一部が示され、ゲーム処理の実行に必要な各種データが記憶される。
画像データ記憶領域74には、ゲーム画像を生成するための画像データが記憶される。キャラクタ画像、ユニット画像、地形画像、基地画像、拠点画像、背景画像、カーソル画像、各種画面の画像などの画像データが記憶される。
マップデータ記憶領域76には、基地、拠点および地形などが配置されてユニットが移動される、すなわち、このウォー・シミュレーションゲームが執り行われるマップに関するデータが記憶される。マップは、複数の地点(位置、場所ないし土地)が盤面上で縦横ないし行列形状に配列されることによって形成される。各地点は、たとえば四角形などの所定形状の区域ないしブロックなどであってもよいし、あるいは点であってもよい。マップデータは、マップのサイズ、マップ上の各土地ないし位置の地形、青チームの基地の位置、赤チームの基地の位置、拠点の数および拠点の位置などに関する情報を含む。サイズはたとえば8×8から14×14程度であってよい。図5には、四角形の土地(升目)を用いた8×8のマップが示され、各升目内には当該地点の位置を示す座標(x,y)が示される。xは行番号でありyは列番号である。各位置すなわち各升目に配置される地形の種類は、平地、砂漠、山地、雪山、川、海、宇宙等であり、種類に応じてユニットの移動の可不可、機動性などが異なる。各陣営(赤チームおよび青チーム)の基地はそれぞれ1つだけ配置される。また、初期状態では、たとえば各陣営のユニットが3機ずつ出現されるので、たとえば6つの拠点が配置される。図6には、初期状態のマップの一例が示される。地形、基地位置、および拠点位置の予め決められたマップデータが予め光ディスク18に記憶されていてもよいし、ゲームを開始する際に新たにマップを作成するようにしてもよい。基地および拠点の位置や地形の配置などはたとえばランダムに決定されてよい。
拠点所属データ記憶領域78は、各拠点の識別情報に対応付けて各拠点の所属するチームを示す情報が記憶される。これによって、各拠点が、赤チームまたは青チームに占領されているのか、あるいは中立(無所属)であるのかが特定される。
移動操作担当データ記憶領域80には、マップ上における各陣営のユニットの移動操作の担当を示す情報が記憶される。つまり、青チームおよび赤チームごとに、たとえば、コントローラ1のプレイヤ1、コントローラ2のプレイヤ2およびコンピュータのいずれがユニットを移動させるのかを示す情報が記憶される。
順序データ記憶領域82には、先攻チームおよび後攻チームを示す情報が記憶される。つまり、このデータによって青チームおよび赤チームのいずれが先攻または後攻であるかが特定される。
青チーム制御データ記憶領域84には、青チームのユニットの制御データが記憶される。制御データはマップ上に出現しているユニット数を示すデータを含む。初期状態ではユニット数はたとえば3であり、その後、ゲーム進行に応じて増減する。各ユニットの制御データは、マップ上の位置、現在のヒットポイント(生命、寿命または体力を示すパラメータ)、ヒットポイント最大値、移動済み情報などを含む。初期位置は青チームの基地の位置に設定される。移動済み情報は当該ターンにおける移動を終えたか否かを示す。赤チーム制御データ記憶領域86には、上述の青チーム制御データと同様な、赤チームのユニットの制御データが記憶される。
占領地データ記憶領域88には、移動、リンクまたは囲みなど味方の位置によって規定される範囲によって占領したマップ上の地点の位置が一時記憶される。青チーム領地データ記憶領域90には、青チームが占領しているマップ上の領地(地点)に関するデータが記憶される。青チーム領地データは、占領している領地数、占領率、および占領している地点の位置等の情報を含む。占領率はマップ全体における全領地数に対する当該チームの領地数である。赤チーム領地データ記憶領域92には、上述の青チーム領地データと同様な、赤チームの占領している地点に関するデータが記憶される。
図4に示すように、青チーム戦闘データ記憶領域94には、青チームのユニットの戦闘時の制御データが記憶される。戦闘データは、戦闘に参加しているユニット数を示すデータを含む。戦闘参加可能な最大ユニット数はたとえば3である。敵ユニットと重なった味方ユニットに隣接するユニットがその戦闘に参加することが可能である。各ユニットの制御データは、戦闘時の操作担当、異常状態、および残存時間等の情報を含む。戦闘時の操作担当は、当該ユニットの戦闘操作の担当がプレイヤ1、プレイヤ2およびコンピュータのいずれであるかを示す情報である。異常状態は、当該ユニットが敵ユニットの攻撃を受けて異常状態になっているか否かを示す情報である。異常状態では、オブジェクトは強制的に戦闘不能な状態や能力値が低減された状態におかれる。具体的には、異常状態としては、たとえば「しびれ」および「スロー」が準備される。「しびれ」とは、一定時間(たとえば2秒間すなわち120フレーム)ユニットが操作不能または戦闘不能状態になる状態を指す。また、「スロー」とは、一定時間(たとえば2秒間)ユニットが攻撃不能および移動速度が1/3倍になる状態を指す。残存時間は、異常状態が残りどの程度の時間(何フレーム)続くのかを示す情報であり、つまり、異常状態ではなくなるまでに要する時間を示す情報である。赤チーム戦闘データ記憶領域96には、上述の青チーム戦闘データと同様な、赤チームのユニットの戦闘時の制御データが記憶される。
青チーム回復フラグ記憶領域98には、青チームの味方ユニットに対する回復操作を受け付けるか否かを示すデータが記憶される。プレイヤの操作するユニットが戦闘で破壊されたとき、または戦闘開始時にユニットの操作担当にプレイヤが選ばれず全てコンピュータが戦闘操作の担当となったときには、このフラグがオンにされ、青チームの味方ユニットに異常状態が生じまたはHPが最大でないときには、プレイヤの操作に応じて当該ユニットに対する回復処理が実行されることとなる。赤チーム回復フラグ記憶領域100には、上述の青チーム回復フラグと同様な、赤チームの味方ユニットに対する回復操作を受け付けるか否かを示すデータが記憶される。
この実施例では、青チームと赤チームの2つの陣営ないし軍がマップ上でユニットを移動させて戦うウォー・シミュンレーションゲームが実行される。勝利条件は、たとえば、相手に所属するユニットを全滅させること、相手の基地を占領することのほか、マップ上の全ての土地(地点)のうちの所定割合以上の土地を占領することである。プレイヤおよびコンピュータは、将棋やチェスで盤上で駒を動かすのと同様に、マップ上でユニットと呼ばれるキャラクタないしオブジェクトを移動させて勝利を目指す。
ゲームは各軍が先攻と後攻に分かれて自分の番にユニットを動かす事で進められる。つまり、このゲームではターン制が採用されている。先攻と後攻の2つの番を合わせて1ターンとし、このターンが所定回数(たとえば7回)進捗するとゲームの終了(引き分け)となる。それ以前に勝利条件を満足することで決着がつく。
勝利条件の達成の難易度から見て、陣地の獲得と敵基地の占領の2つが主な目的となる。陣地はユニットがマップ上を移動することによって獲得され、基地の占領は敵基地の位置に到達することで達成される。このように、この実施例では、敵と味方が陣地を奪い合う陣取りゲームの面を有するゲームが実行される。なお、敵ユニットを全滅させたときも勝利となるので、積極的にバトルを行って全滅を目指すのも勝利への道である。しかし、味方ユニットを失うリスクが大きく、敵チームに強力なユニットが存在すると達成が困難であるという問題もはらんでいる。また、バトルはアクション操作で行われるので、その操作の苦手なプレイヤにとって敵全滅は困難なものとなる。したがって、上記2つの主目的の達成へ向けて望み通りにユニットを行動させるために、必要が生じるとバトルで邪魔な敵を排除するというのが主なゲームの進め方となる。
マップ上の陣地の拡張は、主にユニットの移動によってなされる。すなわち、第1の陣地獲得方法として、ユニットが移動した跡は当該ユニットのチームの領地とすることができる。一例として、図7(A)には、青チームのユニットの移動前の状態が示される。ゲームでは、たとえば、方向指示スイッチやアナログジョイスティックの操作によってユニットの存在する位置にカーソルを移動させてAボタンを操作することによって、移動対象のユニットを選択することができる。移動対象ユニットを選択すると、マップ上で移動可能な位置がたとえば緑色の矩形状のマーク(図7では破線表示)等によって識別可能に表示される。方向指示スイッチやアナログジョイスティックがマップ上の土地の配列方向に合わせて操作されると、移動ルートを示す矢印がたとえば紺色で認識可能に表示される。矢印の頭を所望の位置に移動させてAボタンを操作することによって、移動ルートを決定することができる。移動ルートが決定されると、図7(B)に示すように、ユニットが移動ルート上を目的地まで移動するとともに、移動ルート上の各地点が当該ユニットの所属する青チームの領地に変更され、その升目の色が当該チームの色(青)に変化される。
また、移動完了したユニットを含めた味方の位置によって規定される範囲内の土地を獲得できるようにしている。すなわち、第2の陣地獲得方法として、ユニットが移動を終了したときに、当該ユニットと他の味方ユニットまたは味方拠点とが一直線上で結ばれている場合には、通常、それらに挟まれたその直線上の土地も獲得することができる。このようなユニットと他の味方ユニットまたは味方拠点の2つによる挟み込みを「リンク」と呼び、味方で挟んだ土地の獲得をリンクによる占領とも表現する。この挟むことによる占領によって、一度に多くの領地を獲得することができる。ただし、後述するように、リンクが生じても、移動終了後のユニットと味方ユニットまたは味方拠点との間に敵ユニット、敵拠点または中立拠点(無所属の拠点)が存在する場合には、土地を獲得することができない。
一例として、図8(A)には、青チームのユニット(図において左下側)の移動前の状態が示される。この移動対象のユニットの移動ルートを決定する際に、移動ルートを示す矢印の頭の位置すなわち移動目的地が他の味方ユニットまたは味方拠点との間でリンクを発生することとなる位置に存在する場合には、リンクが発生することをプレイヤに知らせる画像が表示される。図8(A)では、移動目的位置と他の味方ユニット(図において上側)の存在する位置とで結ばれた直線上の複数の土地を一括して縁取るような破線が表示される。このリンクが発生する状態で移動ルートが決定された場合、図8(B)に示すように、ユニットが移動ルート上を目的地まで移動し、移動したルート上の土地が青チームの領地に変更される。そして、当該移動対象ユニットと他の味方ユニットとの間にリンクが発生するので、それらに挟まれた土地も青チームの領地に変更される。
一方、この実施例では、移動終了後のユニットと味方ユニットまたは味方拠点との間に敵ユニットが存在している場合には、リンクによる占領の代わりに、当該敵ユニットのヒットポイントHPに対してダメージを与えるようにした。具体的には、一例として、図9(A)には青チームのユニットの移動前の状態が示される。この図9(A)では、上述の図8(A)と異なり、赤チームユニットが上側の青チームユニットの下側に存在している。左下側の青チームユニットの移動目的地が、リンクを発生可能な位置に決定されると、図9(B)に示すように、青チームユニットが移動ルート上を目的地まで移動して、移動したルート上の土地が青チームに占領される。しかし、移動後の青チームユニットと上側の味方ユニットとの間には敵ユニットが存在しているので、それらの間の土地は獲得されない。その代わりに、リンクの生じた直線上に存在する赤チームユニットのHPが所定値または所定の式に従って算出された値だけ減少される。ここで、リンク内に存在する敵ユニット数をnとし、敵ユニットX(=X1〜Xn)のHP最大値をHPmax(X)とする。各敵ユニットXに付与されるダメージDは、たとえば、図9(B)の下段に示される式によって算出され、すなわち、各敵ユニットのHP最大値の12.5%の平均値であってよい。このように、リンク内に含まれる敵ユニットの種類や数に応じて、各ユニットに与えられるダメージの値が変化されることとなる。たとえば、上記例では、最大HPの大きい敵が多く含まれるほど、ダメージの値は大きくなる。
さらに、第3の陣地獲得方法として、ユニットが移動を終了したときに、当該ユニットと他の味方ユニットまたは味方拠点によって土地が囲まれた状態になっている場合には、その囲まれた土地を獲得することができる。詳しくは、味方ユニットまたは味方拠点の3つで構成される直交状態の2つのリンクの先端の2つの位置と、移動終了後のユニットとの間に直交状態の2つのリンクが発生する場合、それら4つのリンクによって土地が囲まれる。このようなユニットと他の味方ユニットまたは味方拠点で構成される囲みを形成することによって当該囲み内の土地を占領することができる。この囲みによる占領によって、一度に多くの領地を獲得でき、したがって効率よく領地を拡張できる。ただし、上述のリンクの場合と同様に、囲みが生じても、囲み内に敵ユニットが存在する場合には、土地を獲得することができない。一例として、図10(A)には、青チームのユニット(左下側)の移動前の状態が示される。左上側の青チーム拠点、右上側の青チーム拠点および右下側の青チームユニットによって直交状態の2つのリンクが発生した状態となっている。左下側の青チームユニットの移動目的地が1マス上の位置に選ばれる場合には、当該移動対象ユニットと上側の味方拠点との間にリンクが発生するとともに、当該移動対象ユニットと右下側の味方ユニットとの間にリンクが発生することとなる。つまり、移動後のユニットと3つの味方ユニットまたは味方拠点との間の4つのリンクによって囲みが発生することとなる。したがって、囲みが発生する位置に移動目的地が決定されると、図10(B)に示すように、囲み内の土地が青チームに占領される。
一方、囲み内に敵ユニットが存在する場合には、囲みによる占領の代わりに、囲み内の敵ユニットのHPにダメージを与えるようにした。具体的には、一例として、図11(A)には青チームのユニットの移動前の状態が示される。この図11(A)では、上述の図10(A)と異なり、赤チームユニットが右上側の青チームユニットの左下側に存在している。左下側の青チームユニットの移動目的地が、囲みを発生可能な位置に決定されると、図11(B)に示すように、青チームユニットが目的地へ移動して目的地が青チームに占領される。この移動によって囲みが発生するが、囲み内には敵ユニットが存在しているので、囲みによる土地の占領は行われない。なお、移動後のユニットと左上側の味方拠点との間のリンクによる占領、および移動後のユニットと右下側の味方ユニットとの間のリンクによる占領が行われる。囲みによる占領の代わりに、囲み内に存在する赤チームユニットのHPが所定値または所定の式に従って算出された値だけ減少される。ここで、囲み内に存在する敵ユニット数をnとし、敵ユニットX(=X1〜Xn)のHP最大値をHPmax(X)とする。各敵ユニットXに付与されるダメージDは、たとえば、図11(B)の下段に示す式に従って算出されてよく、その値は各敵ユニットのHP最大値の25%の平均値であってよい。上述のリンクによるダメージと同様に、囲み内の敵ユニットの種類や数に応じて、各ユニットに与えられるダメージの値が変化される。
このように、この実施例では、陣地獲得のための行動(すなわち移動)によって戦闘以外で敵ユニットにダメージを与える仕組みを設けた。これによって、領地拡張や敵本拠占領のための移動を行いながら戦わずして敵ユニットにダメージを与えることができる。したがって、たとえば敵全滅を目指した戦闘だけを繰返すような単純なゲームプレイや、敵本拠の占領の途上で敵と遭遇したときに戦闘を行うといった成り行きまかせのゲームプレイなどではなく、領地拡張や敵本拠占領のための移動と敵ユニットとの戦闘とを上手く組み合わせながら戦略的に敵陣営を攻略することができ、ゲームをより楽しむことができる。このように、戦略性や興趣性の高いウォー・シミュレーションゲームを実現することができる。
続いて、ユニットの移動終了後の位置からのリンクおよび囲みの判定方法について説明する。この実施例では、ユニットの到達位置から上下左右各方向へのリンクの発生および囲みの発生の判定がそれぞれ行われる。
図12には、到達位置から上方向へのリンク囲み判定の手順が示される。図12(A)には、上方向へのリンク判定が示される。この判定では、たとえば、到達位置から上方向へ1マスずつ順次調査を行う。最初に他の味方ユニットまたは味方拠点にたどり着くことが検出された場合には、リンクによる占領成立と判定される。一方、最初に敵拠点、敵ユニットまたは中立拠点にたどり着くことが検出された場合において、その後マップ外周に達する前に味方ユニットまたは味方拠点にたどり着くことが検出されたときには、占領は不成立であるが、リンクによるダメージ付与が成立する。
上方向へのリンク占領が成立する場合には、図12(B)に示すように、さらに、左右方向へのリンク四角形囲み判定を行う。つまり、4点のリンクによる四角形の囲みが左方向または右方向で成立するか否かを判定する。具体的には、リンクの成立した上方向の味方ユニットまたは味方拠点の位置(すなわち上方向位置)から、右方向、下方向および左方向の順にリンク判定を行う。上方向位置からユニットの到達位置にたどり着くまで全3つのリンク占領が成立したときには、囲み成立と判定される。なお、この囲みは到達位置の右上の囲みであるので第1右上囲みとも呼ばれ、後述するように右方向へのリンク判定から開始することによってその成立が判定される第2右上囲みと同一か否か判定される必要がある。また、上方向位置から左方向、下方向および右方向の順にリンク判定を行い、全3つのリンク占領が成立する場合には、囲み成立と判定される。この囲みは第1左上囲みとも呼ばれる。
このような上方向へのリンク囲み判定を、下方向、左方向および右方向のそれぞれに行う。すなわち、図13に示すように、到達位置から下方向へのリンク囲み判定では、まず、下方向へのリンク判定を行う。そして、下方向へリンク占領が成立する場合には、さらに左右方向へのリンク四角形囲み判定をそれぞれ行う。つまり、下方向の味方ユニットまたは味方拠点の位置(下方向位置)から、右方向、上方向および左方向の順にリンク判定を行い、第1右下囲みの成立を判定する。また、下方向位置から、左方向、上方向および右方向の順にリンク判定を行い、第1左下囲みの成立を判定する。
図14に示すように、到達位置から左方向へのリンク囲み判定では、まず、左方向へのリンク判定を行う。そして、下方向へリンク占領が成立する場合には、さらに上下方向へのリンク四角形囲み判定をそれぞれ行う。つまり、左方向の味方ユニットまたは味方拠点の位置(左方向位置)から、上方向、右方向および下方向の順にリンク判定を行い、第2左上囲みの成立を判定する。また、左方向位置から、下方向、右方向および上方向の順にリンク判定を行い、第2左下囲みの成立を判定する。
図15に示すように、到達位置から右方向へのリンク囲み判定では、まず、右方向へのリンク判定を行う。そして、右方向へリンク占領が成立する場合には、さらに上下方向へのリンク四角形囲み判定をそれぞれ行う。つまり、右方向の味方ユニットまたは味方拠点の位置(右方向位置)から、上方向、左方向および下方向の順にリンク判定を行い、第2右上囲みの成立を判定する。また、右方向位置から、下方向、左方向および上方向の順にリンク判定を行い、第2右下囲みの成立を判定する。
また、この実施例では、移動到達位置からのリンクおよび囲みによる占領だけでなく、移動ルート上を移動中のユニットによってその周辺に囲みが発生する場合には、当該囲みによって土地を獲得できる。この移動中の1マスごとの囲みの発生の判定を説明する。この実施例では、移動途中におけるユニットの位置の上下左右各方向への囲みが判定される。
図16には、移動途中の位置から上方向の囲み判定が示される。この判定では、移動途中のユニット位置の1つ上の位置を始点として、味方の領地に沿って1マスずつ進める調査を行い、内回りで始点まで戻ってくることができるか否かを検出する。図16(A)に示すように、調査の結果、移動位置が内回りで始点まで戻ってくる場合には、囲みが成立すると判定される。囲みが成立する場合には、上述の移動終了後の位置に基づく囲みの場合と同様に、味方の領地に囲まれた内側の土地の全てを占領する。ただし、囲み内に敵ユニットが存在する場合には、土地の占領の代わりに、当該敵ユニットへの囲みによるダメージ付与が行われる。一方、図16(B)に示すように、調査の結果、移動位置がマップの外周に達する場合や外回りで始点まで戻ってくる場合には、囲み不成立と判定される。
このような移動途中における囲みの判定を、さらに下方向、左方向および右方向のそれぞれについて行う。つまり、図17(A)に示すように、移動途中のユニットの1つ下の位置を始点とする調査を行う。また、図17(B)に示すように、移動途中のユニットの1つ左の位置を始点とする調査を行う。また、図17(C)に示すように、移動途中のユニットの1つ右の位置を始点とする調査を行う。いずれの調査においても、内回りで始点まで移動位置が戻ってくることが検出される場合には、囲み成立と判定される。
図18にはユニット移動前の状況を示すゲーム画面の一例が示される。このゲーム画面は3次元画像であり、仮想3次元空間においてマップを俯瞰する位置に配置された仮想カメラから撮影されている。なお、ゲーム画面はたとえば2次元のマップ画像上に2次元のキャラクタ画像を配置した2次元画像として生成されてもよい。
図18のゲーム画面ではマップの一部が表示され、青チームの3つのユニット110(図18では110a,110bおよび110c)および赤チームの1つのユニット112が存在している。青チームの領地はたとえば透明な青色で着色され、図18では青チームのユニット110の存在する升目からわかるように無模様で表現される。赤チームの領地はたとえば透明な赤色で着色され、図18では赤チームのユニット112の存在する升目からわかるように斜線模様で表現される。また、無所属の土地はその地形の画像本来の色で表示され、図18では青チームユニット110bと赤チームユニット112との間の升目からわかるように縦線模様で表現される。また、移動対象のユニットを選択するためのカーソル114が表示される。なお、プレイヤ1によって操作される青チームの順番であるため、カーソル114には青色で着色され「1P」と表示される。このカーソル114はマップ上に立っているユニットよりも高い位置に配置されている。方向指示スイッチまたはアナログジョイスティックを操作してカーソル114を所望のユニットの頭上に移動させ、Aボタンを操作すると、当該ユニットを移動対象に選択することができる。ここでは、青チームのユニット110aを選択するものとする。
青チームのユニット110aを選択すると、たとえば、図19に示すように、移動対象のユニット110aは爪状のキャッチャ116によって持ち上げられる。その後、方向指示スイッチまたはアナログジョイスティックの操作によって、移動ルートを決めることができる。なお、移動可能な位置にはたとえば緑色の矩形状のマークが表示され、図19では破線表示された升目で表現される。方向指示スイッチ等の指示に応じて、たとえば、移動対象のユニット110aの存在していた位置を起点としかつ指示された位置上を通る矢印118が表示される。つまり、この矢印118が移動ルートを示している。図19では、移動目的地として、赤チームユニット112から2升目の無所属の土地が選ばれている。この位置にユニット110aが移動されると、味方ユニット110bとの間でリンクが発生し、かつ、味方ユニット110cとの間でもリンクが発生することとなるので、画面では、これらリンクを構成する複数の升目の周縁を縁取るようにリンク発生を知らせるマーク画像120(たとえば黄色の破線)が表示される。所望の位置を通って所望の目的地に達する移動ルートを指示できたときには、プレイヤはAボタンを操作することによって移動ルートを決定することができる。
移動ルートが決定されると、移動対象のユニット110aが移動ルート上を移動する。図20からわかるように、ユニット110aが移動した後の土地は青チームの領地に変更され、たとえば透明な青色で着色される。また、目的地に到達したユニット110aと味方ユニット110cとの間にはリンクが発生する。リンク内には敵ユニット112が存在するので、この敵ユニット112に対してリンクによるダメージを与えることができる。この場合には、当該赤チームユニット112の最大HPの12.5%に相当する値を現在のHPの値から減らすことができる。ゲーム画面では、当該ユニット112がダメージを受ける画像が表示されるとともに、当該ユニット112のHPを示すゲージにおいて値が減少する画像が表示される。
また、移動ルート上に敵ユニットが存在し、移動対象のユニットが敵ユニットと同じ位置に到達したときには、当該ユニット同士が対戦する戦闘モードが開始される。ユニット同士が重なり合った地点に隣接する地点にユニットが存在する場合には、隣接するユニット(たとえば各チーム最大で2つのユニット)も戦闘に参加する。戦闘開始前にはプレイヤは各ユニットの戦闘操作の担当をプレイヤ自身にするのかコンピュータにするのかを選択する。この戦闘モードでは、ユニットの戦闘はリアルタイムで進行する。つまり、たとえばコマンドが選択されるまで戦闘が一時停止して、コマンド選択に応じて当該コマンドに対応する動作をオブジェクトが実行するような戦闘ゲームではない。つまり、プレイヤの担当するユニットの戦闘動作は、プレイヤによる操作部26のアクション操作に応じた入力データに基づいて実行される。具体的には、操作部の26の操作によって、たとえば撃つ、斬る、蹴る、殴る、飛ぶ、避ける、守るといったアクションをプレイヤユニットに直接行わせることができる。したがって、プレイヤ自身が操作する場合には1つのユニットのみを担当できる。複数のユニットが参加する場合、プレイヤの担当しないユニットの操作はコンピュータが担当する。また、場合によっては、プレイヤは戦闘操作を担当せずに、全てのユニットの戦闘操作をコンピュータに任せることができる。コンピュータの担当するユニットの戦闘は所定のプログラムに従って制御される。
この実施例では、戦闘において、プレイヤの担当しない味方ユニットに対してプレイヤの操作によって影響を与えることができるようにした。具体的には、所定の条件が満足されているときには、プレイヤの操作によって味方ユニットの状態を回復させることができるようにした。所定の条件は、プレイヤが味方ユニットに対して指示を出せる状態になっていることであってよく、たとえばプレイヤの担当するユニットが戦いの場に存在していないことであってよい。具体的には、所定の条件は、プレイヤによって戦闘操作が担当されていたユニットが戦闘において破壊されたこと(すなわち、当該ユニットのヒットポイントが最小値であるゼロになったこと)であってよい。または、所定の条件は、戦闘操作担当としてプレイヤが選択されなかったこと(すなわち、全ユニットの戦闘操作担当としてコンピュータが選択されたこと)であってよい。なお、所定の条件としては、プレイヤ操作に応じて、あるいは、ゲームの進行状況に応じて、プレイヤの担当するユニットのための操作を受け付けない状態に一時的になっていること等も考えられる。
したがって、プレイヤは、所定の条件が満足される場合に限り、たとえば戦闘において操作するユニットがない場合には、コンピュータによって自動制御される味方ユニットを回復させるという支援のための操作を行うことができる。具体的には、味方ユニットが最大HP未満のHPであるときに、プレイヤの操作に応じて当該味方ユニットのHPを最大HPに近付くように回復させることができる。また、味方ユニットがしびれやスローなどの異常状態に陥っているとき、プレイヤの操作に応じて当該異常状態の残り時間を減じさせて、当該味方ユニットを異常状態から早期に復帰させることができる。
図21には、HPを回復させる場合のゲーム画面の一例が示される。戦闘が開始されると、マップを表示している画面とは別の画面であり戦闘用フィールドを示す戦闘画面が表示される。戦闘画面では、画面下部に各ユニットごとに操作担当を示す画像が示される。なお、図21では、簡略的に一方のチームの画像のみを示している。3つのユニットともにCOM(すなわちコンピュータ)に担当されていることが示される。また、図21では、フィールド上には1つのユニット122のみを表示し、残り2つの味方ユニットおよび敵ユニットは省略されている。
戦闘において、ユニットが攻撃を受けると、そのユニットのHPが減少される。また、マップ上のリンクや囲みによるダメージが与えられていた場合には減少した状態のHPを有するユニットが戦闘に登場する。この実施例では、味方ユニットのHPがその最大値ではない場合において、上述のような所定の条件が満たされているときには、当該味方ユニットのHPを回復させる操作が受け付けられ、画面上には回復操作を受付中であることを示すマーク画像124が当該味方ユニットに対応する操作担当を示す画像のたとえば上側に表示される。マーク画像124としては、たとえば回復操作に使用される操作部26のレバーまたはボタンを示す図柄が用いられている。なお、図21の例では、3つの味方ユニットのうちの1つのみが最大HPではなく、当該最大HPではない味方ユニットが、表示された味方ユニット122に対応するものとする。また、このユニット122はプレイヤ1によって移動操作が担当されるチームのユニットであり、回復操作の受付を示すマーク画像124には、プレイヤ1が操作可能であることを示す「1P」が表示される。
プレイヤは回復操作を受け付けるマーク画像124を見たときは、所定の回復操作を行うことによって、対応する味方ユニット122のHPを回復させることができる。回復操作は、方向指示スイッチまたはアナログジョイスティックによる4つの方向のいずれかを指示する操作、またはスタートボタンを除く全てのボタンスイッチのいずれかの操作であってよい。あるいは、特定の方向指示や特定のボタンスイッチの操作であってもよい。プレイヤは、たとえば、アナログジョイスティックを素早くぐるぐる回したり、方向指示スイッチやボタンスイッチを連打したりすることで、より大きくあるいはより早く味方ユニットを回復させることができる。たとえば上記入力が1回検出されるごとに、所定値(たとえば0.1ポイント)をHPに加算するようにしてもよい。
また、戦闘において、ユニットが攻撃を受けると異常状態に陥ることがあり、そのユニットが一定時間(たとえば2秒間)、操作不能になったり、攻撃不能になったり、その移動速度が遅くされたりする。図22には、異常状態から回復させる場合のゲーム画面の一例が示される。この実施例では、味方ユニットが異常状態になっている場合において、上述のような所定の条件が満足されているときには、当該味方ユニットの異常状態を早期に回復させる操作が受け付けられる。画面上には、上述の図21のHPの場合と同様に、回復操作を受付中であることを示すマーク画像124が表示される。また、フィールド上のユニット122においては、異常状態になっていることを示すマーク画像126がたとえばその頭上に表示される。プレイヤは、たとえば異常状態を示すマーク画像126とともに回復操作を受け付けるマーク画像124を見たときには、上述のような所定の回復操作を行うことによって、対応する味方ユニット122を異常状態から早期に復帰させることができる。たとえば上記入力が1回検出されるごとに、異常状態の継続される残り時間から9/60秒(すなわち9フレーム)だけ減算するようにしてもよい。
このように、プレイヤによって担当されたユニットが倒された場合や戦闘にプレイヤが参加しない場合には、プレイヤ操作によって味方キャラクタを回復させて味方キャラクタに加勢することができるので、コンピュータによって自動制御される味方キャラクタの敵キャラクタとの戦いを有利にすることができる。つまり、プレイヤユニットが倒された後であっても、プレイヤは味方ユニットの回復操作を通して味方を支援することによって戦いを続けることができるので、ゲームの興趣性を高めることができる。また、戦闘ゲームやアクション操作の苦手なプレイヤにとっては、味方キャラクタの攻撃や防御などの戦闘時の主たる操作をコンピュータに任せて、回復のための操作だけを行えばよいので、戦闘を簡単かつ気軽に楽しむことができる。
図23には、ゲーム装置12の動作の一例が示される。ゲーム処理を開始すると、まずステップS1で、CPU36は各陣営の移動操作担当を決定する。たとえば、CPU36は、各チームのマップ上での移動操作の担当を選択するための画面をモニタ34に表示し、プレイヤにコントローラ22によって選択させる。CPU36は、コントローラI/F56を介して操作データを取得して、当該操作データに基づいて青チームおよび赤チームの操作担当を決定する。たとえば2つのコントローラ22がゲーム装置12に接続されている場合には、操作担当はプレイヤ1,プレイヤ2およびコンピュータから選択される。決定された各チームごとの移動操作担当を示すデータは、移動操作担当データ記憶領域80に記憶される。
次に、CPU36は、ステップS3でマップ選択処理を実行する。たとえば、CPU36はマップを選択するための画面をモニタ34に表示し、プレイヤにコントローラ22によって選択させる。マップ選択画面では、たとえば、複数の選択候補のマップの名前またはアイコン等とともにそのプレビュー画面が表示されてよい。CPU36は、たとえば方向指示スイッチまたはアナログジョイスティックの左右への指示に応じて、選択しようとしているマップを変更し、Aボタンまたはスタートボタンに応じてマップが決定される。マップは、開発者によって予め準備されている固定的なマップと、プレイヤの操作に応じてランダムに生成される変動的なマップとを含む。マップの構成要素は、サイズ、各位置の地形、拠点の数、拠点の位置、各陣営の基地の位置等を含む。CPU36は、操作データに応じて変動的なマップが選択される場合には、各要素をランダムに決定してマップデータを生成する。また、CPU36はプレビュー画面を生成してマップ選択画面上に表示する。Aボタンまたはスタートボタンが操作されると、生成されたマップデータまたは読み出されたマップデータがマップデータ記憶領域76に記憶される。
続いて、ステップS5で、CPU36は先攻後攻を決定する。たとえば、CPU36は順番を選択するための画面をモニタ34に表示し、プレイヤにコントローラ22によって選択させる。順番選択画面の初期状態では、たとえば青チームが先攻、赤チームが後攻に設定されている。CPU36は、方向指示操作に応じて先攻後攻を入れ替え、Aボタンないしスタートボタンの操作に応じて先攻チームおよび後攻チームを決定して、先攻チームおよび後攻チームの識別情報を示すデータを順序データ記憶領域82に記憶する。
先攻後攻が決定されると、ステップS7で、CPU36は、GPU42を用いてマップデータおよび画像データに基づいてマップの画像を生成してモニタ42に表示する。マップ上の各位置にはたとえば平地、山地、雪山、川、砂漠などの地形が表示されるとともに、さらに、所定の位置には各陣営の基地および拠点(初期状態では中立)が配置される。
続くステップS9で、CPU36は、GPU42を用いて各チームの基地から各ユニットが出現する画像を生成してモニタ42に表示する。たとえば各チーム3つずつのユニットが各チームの基地の位置にそれぞれ出現する。したがって、プレイヤまたはコンピュータは、最初はそれぞれ3つのユニットをマップ上で移動させて敵チームを攻略する。
ステップS11では、CPU36は、ターン数を示す変数Nの初期設定を行って変数Nに0を記憶する。さらに、ステップS13で、CPU36は、ターン数をカウントするために、変数Nをインクリメントしてたとえば「1」を加算する。
続いて、ステップS15で、CPU36は、順序データに基づいて、ターン処理によって移動をさせるチームとして先攻チームを選択し、たとえば当該先攻チームの識別情報を選択チームデータとしてメインメモリ40の所定領域に記憶する。そして、ステップS17で、CPU36は、選択チームのためのターン処理を実行する。これによって、先攻チームのユニットはマップ上を移動し、その移動に伴って陣地の獲得、敵ユニットとの戦闘、敵ユニットへのダメージ付与などが実行される。ターン処理の動作の一例は、後述する図24に示される。
ステップS17を終了すると、ステップS19で、CPU36は、順序データに基づいて、ターン処理を行うチームとして後攻チームを選択し、たとえば当該チームの識別情報を選択チームデータとしてメインメモリ40に記憶する。そして、ステップS21で、CPU36はターン処理を実行する。これによって、今度は、後攻チームのユニットがマップ上を移動される。このステップS21で実行されるターン処理の動作は、ステップS17で実行されるターン処理の動作と同じであり、後述する図24に示される。
ステップS21を終了すると、ステップS23で、CPU36は、変数Nの値が所定の閾値を超えたか否かを判定する。ステップS23で“NO”であれば、つまり、まだ規定のターン数を消化しておらず移動機会が残っている場合には、CPU36はステップS13に戻って次のターンのために処理を続ける。一方、ステップS23で“YES”であれば、つまり、規定のターン数を消化しても勝敗が決しなかった場合には、たとえば両陣営を引き分けとする終了処理を実行して、ゲーム処理を終了する。
図24には、図23のステップS17およびS21のターン処理の動作の一例が示される。ターン処理を開始すると、CPU36は、まず、ステップS31で移動ルート設定処理を実行する。この移動ルート設定処理では、移動対象のユニットが選択されるとともに当該ユニットの移動ルートが設定される。移動ルート設定処理の動作の一例は後述する図25に詳細に示される。
次に、ステップS33で、CPU36は移動処理を実行する。この移動処理では、移動対象のユニットが移動ルートに沿って目的地まで移動され、たとえば土地の獲得、囲みによる占領またはダメージ付与、あるいは戦闘などが実行される。移動処理の動作の一例は後述する図26に詳細に示される。
続いて、ステップS35で、CPU36は移動終了処理を実行する。この移動終了処理では、目的地に達したときのリンクもしくは囲みによる占領またはダメージ付与などが実行される。この移動終了処理の動作の一例は後述する図31に詳細に示される。
そして、ステップS37で、CPU36は、選択チームの全てのユニットの移動を完了したか否かを判断する。各ユニットが移動済みであるか否かは、青チーム制御データ記憶領域84または赤チーム制御データ記憶領域86の各ユニットの移動済みデータに記憶されているので、CPU36は選択チームの全ユニットの移動済みデータがすべて完了を示すか否かを判定する。ステップS37で“NO”であれば、つまり、移動させていないユニットが残っている場合には、CPU36はステップS31に戻って残りユニットのために処理を続ける。一方、ステップS37で“YES”であれば、つまり、選択チームの全ユニットの移動が完了した場合には、このターン処理を終了する。
図25には、図24のステップS31の移動ルート設定処理の動作の一例が示される。図25の最初のステップS51で、CPU36は、選択チームの移動操作担当がプレイヤであるか否かを、移動操作担当データおよび選択チームデータに基づいて判定する。
ステップS51で“YES”であれば、つまり、選択チームがプレイヤによって操作される場合には、CPU36は、ステップS53で操作データに基づくユニット選択処理を実行する。たとえば、図18に示したように、ゲーム画面には移動対象ユニットを選択するためのカーソル114が表示されており、プレイヤは、方向指示スイッチまたはアナログジョイスティックによる方向入力によってカーソル114を所望のユニットの位置に移動させ、カーソル114をユニットに合わせた状態でAボタンを操作することによって、移動対象とするユニットを選択できる。具体的には、CPU36は、コントローラI/F56を介して選択チームを操作するプレイヤに対応するコントローラ22の操作データを一定時間ごと(たとえば1フレームごと)に取得してメインメモリ40に記憶する。CPU36は、方向入力の操作データに応じてカーソル114の位置を変更して移動させる。CPU36は、Aボタンの操作を示す操作データが取得されたときには、カーソル114の位置データと選択チームの各ユニットの位置データとを照合して、ユニットが選択されているか否かを判定する。カーソル114の位置と選択チームのいずれかのユニットの位置とが一致する場合には、CPU36はたとえば当該ユニットの識別情報を移動対象データとしてメインメモリ40の所定領域に記憶する。
続いて、ステップS55で、CPU36は、GPU42を用いて、選択されたユニットをマップ上で持ち上げる画像を生成してモニタ34に表示する。これによって、たとえば図19に示すように、移動対象のユニット110aが爪状のキャッチャ116によって吊り上げられる画像が表示される。また、このステップでは、ユニットが移動することのできる位置であることを示す所定の画像(たとえば緑色の矩形状のマーク)が、対応する位置に表示される。ユニットの移動可能な位置は、たとえば、当該ユニットの機動力と地形の移動コストに応じて決定される。ユニットの機動力は1ターンで移動可能な距離であり、たとえばユニットの種類に応じて予め決められている。また、地形の移動コストは、当該地形上を移動するのに必要な機動力の値であり、地形の種類に応じて予め決められている。ユニットは、現在の位置からの目的地までの移動コストの合計が機動力の値よりも小さければ、その目的地までの範囲内を移動することができる。
そして、ステップS57で、CPU36は、操作データに基づく移動ルート選択処理を実行する。たとえば、図19に示したように、ゲーム画面には、方向指示スイッチまたはアナログジョイスティックによる方向入力に応じて、吊り上げられたユニット110aが移動されるとともに、移動ルートを示す矢印118が現在のユニット位置から表示される。したがって、プレイヤは、方向入力によって、吊り上げられたユニット110aおよび矢印118の頭を所望の位置に移動させて、Aボタンを操作することによって現在位置から目的地までの移動ルートを選択することができる。なお、吊り上げられたユニット110aおよび矢印118の頭は移動可能な範囲を越えて移動されないように制限されてよい。また、移動目的地がマップ上の味方拠点または味方ユニットとリンクを発生させる位置であると判定される場合には、当該リンクを構成する複数の升目の周縁を縁取るマーク画像120が表示される。具体的には、移動ルートを取得する際には、CPU36は、コントローラI/F56を介して選択チームを操作するプレイヤに対応するコントローラ22の操作データを一定時間ごと(たとえば1フレームごと)に取得してメインメモリ40に記憶する。CPU36は、方向入力の操作データに応じて、指示された位置を特定して、指示位置の履歴をメインメモリ40の所定領域に記憶する。なお、特定された位置が変化したときに、当該位置を指示位置の履歴に追加する。また、CPU36は、Aボタンの操作を示す操作データが取得されたときには、目的地が指示されたものと見なして、指示位置の履歴の取得を停止する。したがって、記憶された指示位置の履歴は目的地までの移動ルートを示す。
続いて、ステップS59で、CPU36は、GPU42を用いて、選択されたユニットを目的地に降ろす画像を生成してモニタ34に表示する。そして、ステップS61で、CPU36は、移動先確認のためのダイアログボックスをモニタ34に表示する。たとえば「この移動ルートおよび目的地でよろしいですか?」といったメッセージが文字で表示されてよい。CPU36は、ステップS63で上記確認に対する操作データを取得して、ステップS65でOKが選択されたか否か、つまり、Aボタンが操作されたか否かを判断する。ステップS65で“NO”であれば、つまり、Bボタンが操作された場合には、移動ルートの取り消しが指示されたので、CPU36は、ステップS55に戻って、吊り上げられたユニットを再び現在位置に表示して、移動ルートを取得するための処理を繰返す。一方、ステップS65で“YES”であれば、つまり、移動ルートが認定された場合には、CPU36は、ステップS67で、指示された位置の履歴を移動ルートデータとしてメインメモリ40の所定領域に記憶する。
また、ステップS51で“NO”であれば、つまり、選択チームの操作担当がコンピュータである場合には、CPU36は、ステップS69で、ユニット自動選択処理を実行する。たとえば、所定のプログラムに従って、CPU36は、選択チームのユニットから移動対象とするユニットを選択し、移動対象データとして当該ユニットの識別情報をメインメモリ40の所定領域に記憶する。そして、ステップS71で、CPU36は移動ルート自動設定処理を実行する。たとえば、所定のプログラムに従って、CPU36は、移動対象に選択されたユニットの移動ルートを自動的に決定し、移動ルートデータとしてメインメモリ40の所定領域に記憶する。ステップS67またはS71を終了すると、この移動ルート設定処理を終了して、CPU36は、図24のステップS33に戻る。
図26には、図24のステップS33の移動処理の動作の一例が示される。図26の最初のステップS81で、CPU36は、移動対象ユニットの位置を移動ルートに沿って1升分移動した位置に設定する。つまり、CPU36は、現在の位置データと移動ルートデータから次の位置を特定し、当該特定した位置を移動対象ユニットの位置データとして記憶する。次に、ステップS83で、CPU36は、GPU42を用いて移動後の位置に当該ユニットを描画する。したがって、移動対象のユニットが移動ルート上を1升だけ移動した画像が表示される。
続いて、ステップS85で、CPU36は、移動対象ユニットの移動後の位置と、敵ユニットの位置とが一致するか否かを判断する。ステップS85で“YES”であれば、CPU36は、ステップS87で戦闘処理を実行する。この戦闘処理によって戦闘モードが開始され、マップ移動モードと別画面でユニット同士の直接の戦闘が実行される。移動対象ユニットの位置に隣接する位置に選択チームの味方ユニットが存在する場合には、当該味方ユニットも戦闘に参加することとなる。敵チームのユニットについても同様に隣接位置に存在するユニットが戦闘に参加する。戦闘でHPがゼロになったユニットは破壊される。戦闘処理の動作の一例は後述する図41から図43に示される。
ステップS87を終了すると、CPU36は、マップ移動モードを再開し、ステップS89で、GPU42を用いて戦闘で破壊されたユニットの画像をマップ上から消去する。また、ステップS91で、CPU36は、戦闘で破壊されたユニットのデータを青チーム制御データ記憶領域84または赤チーム制御データ記憶領域86等から消去し、また、各チームの制御データのうちのユニット数を更新する。
そして、ステップS93で、CPU36は、選択チームが戦闘で勝利したか否かを判断する。ステップS93で“YES”であれば、つまり、選択チームが勝った場合には、CPU36は、ステップS95でマップ上に登場している敵チームのユニットが全滅したか否かを、敵チームの制御データ記憶領域のユニット数データから判断する。一方、ステップS93で“NO”であれば、つまり、選択チームが負けた場合には、CPU36は、ステップS97でマップ上に登場している選択チームのユニットが全滅したか否かを、選択チームの制御データ記憶領域のユニット数データから判断する。
ステップS95で“NO”であれば、つまり、敵チームにまだユニットが残っている場合には、移動対象ユニットの移動を続行すべく、CPU36は処理をステップS99に進める。一方、ステップS95で“NO”であれば、つまり、敵チームが戦闘によって全滅した場合には、勝利条件が満足されたので、CPU36は処理をステップS111に進める。
また、ステップS97で“YES”であれば、つまり、選択チームが戦闘によって全滅した場合には、勝利条件が満足されたので、CPU36は処理をステップS111に進める。一方、ステップS97で“NO”であれば、つまり、選択チームにまだユニットが残っている場合には、選択チームの残りのユニットの移動を実行すべく、CPU36はこの移動処理を終了して、処理を図24のステップS37に進める。
また、ステップS85で“NO”であれば、つまり、移動対象ユニットが1升移動しても敵ユニットと重ならなかった場合には、CPU36は処理をステップS99に進める。
ステップS99では、CPU36は、移動後の位置を占領地に設定する。具体的には、CPU36は、移動後の位置を占領地データ記憶領域88に記憶する。そして、CPU36は、ステップS101で占領処理を実行する。これによって、移動後の位置を選択チームの領地に加えることができる。この占領処理の動作の一例は後述する図27に詳細に示される。
ステップS101を終了すると、CPU36は、ステップS103で移動中の囲み判定処理を実行する。この移動中の囲み判定では、上述の図16および図17に示したように、移動中の位置の周辺にその移動によって囲みが生じるか否かが判定される。囲みが成立するときには、敵ユニットが存在しなければ囲み内の土地が占領され、敵ユニットが存在すれば当該敵ユニットにダメージが付与される。この移動中の囲み判定処理の動作の一例は後述する図28および図29に詳細に示される。
ステップS103を終了すると、CPU36は、ステップS105で、敵チームのユニットが囲みによるダメージ付与によって全滅したか否かを、そのユニット数データから判断する。ステップS105で“YES”であれば、つまり、マップ上でのダメージ付与によって敵が全滅した場合には、勝利条件が満たされたので、CPU36は処理をステップS111に進める。
一方、ステップS105で“NO”であれば、CPU36は、ステップS107で移動後の位置が移動ルートの目的地であるか否かを判断する。ステップS107で“NO”であれば、つまり、移動後の位置が移動ルートの途中の位置である場合には、CPU36は、ステップS81に戻って、移動ルート上の移動のための処理を繰返す。
一方、ステップS107で“YES”であれば、つまり、移動ルートの終点に到達した場合には、CPU36は、ステップS109で、選択チームの占領率が所定の閾値を超えたか否かを、選択チームの領地データのうちの占領率データから判断する。所定の閾値はたとえば70%程度に設定されてよい。ステップS109で“YES”であれば、つまり、選択チームが勝利条件を満足したときには、CPU36は処理をステップS111に進める。
ステップS111では、CPU36は、勝利条件が満足されたのでゲーム終了処理を実行する。たとえば、CPU36は、青チームまたは赤チームの勝利を告げる画面を生成してモニタ34に表示する。そして、CPU36はゲーム処理を終了する。一方、ステップS109で“NO”であれば、CPU36はこの移動処理を終了して、図24のステップS35へ戻る。
図27には、図26のステップS101の占領処理の動作の一例が示される。なお、この占領処理は、後述する移動中の囲み判定処理(図28および図29)およびリンク囲み処理(図32−図39)でも実行される。
図27の占領処理を開始すると、まずステップS121で、CPU36は、選択チームの領地データ記憶領域90または92のうちの位置データに、占領地データの位置を追加的に記憶する。占領地データには、移動による占領、リンクによる占領、または囲みによる占領によって獲得される土地の位置が記憶されている。次に、ステップS123で、CPU36は、占領地データに含まれていた位置の数に基づいて、選択チームの領地データ記憶領域90または92のうちの領地数データおよび占領率データを更新する。
続いて、ステップS125では、CPU36は、GPU42を用いて占領地データに含まれる各位置の色を選択チームに対応する色に変更する。これによって、たとえば図20に示したように、占領された土地の色が選択チームの領地を示す色で着色される。
また、CPU36は、ステップS127で、占領地データと敵チームの領地データとを照合して、占領地に敵チームに所属する位置が含まれていたか否かを判断する。ステップS127で“YES”であれば、つまり、敵チームの領地を奪った場合には、敵チームの領地データを更新する必要がある。具体的には、CPU36は、ステップS129で、敵チームの領地データのうちの位置データから、占領地データに含まれていた位置を削除する。また、ステップS131で、CPU36は、選択チームに奪われた敵チームの位置の数に基づいて、敵チームの領地データのうちの領地数データおよび占領率データを更新する。ステップS131を終了し、またはステップS127で“NO”であれば、CPU36はこの占領処理を終了する。
図28には、図26のステップS103の移動中の囲み判定処理の動作の一例が示される。まず、ステップS141で、CPU36は、ユニットの移動後の位置の1升上方向の囲みが発生しているか否かを判定する。具体的には、CPU36は、図16に示したように、ユニットの移動後の位置の上方向が選択チームの領地によって囲まれたか否かを判定する。たとえば、CPU36は、移動後の位置の1升上の位置を始点に設定し、当該始点から選択チームの領地に沿って1マスずつ進める調査を行う。その結果、内回りで始点まで戻ってくることが検出された場合には囲みが成立するものと判定する。一方、進行位置がマップの外周に到達したことや、外回りで始点まで戻ってきたことが検出された場合には囲み不成立と判定する。
そして、ステップS143で、CPU36は、囲みが成立したか否かを判断し、“YES”であれば、ステップS145で、囲み内に敵ユニットが存在するか否かを判断する。具体的には、CPU36は、選択チームの領地データのうちの位置データと移動後の位置の1升上の位置データとに基づいて囲み内の位置を特定する。そして、CPU36は、敵チームの制御データに含まれる各ユニットの位置が当該囲み内の位置に含まれるか否かを判定する。
なお、図28では、簡略化のために、囲み内の敵ユニットの存在のみを判定しているが、ステップS145で“NO”の場合には、さらに敵拠点および中立拠点の存在も判定する。囲み内に敵拠点または中立拠点が存在するときには、ステップS147およびS149による囲み内の占領が行われないようにする。これは、他の囲みやリンク内の敵ユニットの存在を判定して、占領またはダメージ付与を行う場合にも同様に適用される。
ステップS145で“NO”であれば、つまり、囲み内の占領が可能である場合には、CPU36は、ステップS147で、囲み内の全ての位置を占領地データ記憶領域88に記憶して、占領地として設定する。そして、ステップS149で、CPU36は、上述の占領処理(図27)を実行して、囲み内の土地を選択チームに占領させる。
一方、ステップS145で“YES”であれば、つまり、囲み内に敵ユニットが存在する場合には、CPU36は、ステップS151で囲みダメージ処理を実行する。これによって、囲み内に存在する敵ユニットにダメージが与えられる。この囲みダメージ処理の動作の一例は後述する図30に詳細に示される。
ステップS149またはS151を終了すると、CPU36は処理をステップS153に進める。また、ステップS143で“NO”である場合、つまり、移動途中の位置の上方向に囲みが発生しない場合にも、CPU36は処理をステップS153に進める。
ステップS153では、CPU36は、移動後の位置の1升下方向の囲みが発生しているか否かを判定する。具体的には、CPU36は、図17(A)に示したように、ユニットの移動後の位置の下方向が選択チームの領地によって囲まれたか否かを判定する。CPU36は、移動後の位置の1升下の位置を始点に設定して、上述のステップS141と同様の方法で囲み判定を行う。
そして、ステップS155で、CPU36は、囲みが成立したか否かを判断し、“YES”であれば、ステップS157で、囲み内に敵ユニットが存在するか否かを判断する。敵ユニットが存在せず、かつ、囲み内を占領可能である場合には、CPU36は、ステップS159で囲み内の全ての位置を占領地に設定して、ステップS161で上述の占領処理(図27)を実行し、移動途中の位置の下方向の囲み内を選択チームに占領させる。一方、ステップS157で“YES”であれば、つまり、囲み内に敵ユニットが存在する場合には、CPU36は、ステップS163で、後述する囲みダメージ処理を実行して、移動途中の位置の下方向に生じた囲み内の敵ユニットにダメージを与える。ステップS161またはS163を終了し、または、ステップS155で“NO”である場合には、CPU36は処理を次の図29のステップS165へ進める。
図29のステップS165では、CPU36は、移動後の位置の1升左方向の囲みが発生しているか否かを判定する。具体的には、CPU36は、図17(B)に示したように、ユニットの移動後の位置の左方向が選択チームの領地によって囲まれたか否かを判定する。CPU36は、移動後の位置の1升左の位置を始点に設定して、上述のステップS141と同様の方法で囲み判定を行う。
そして、ステップS167で、CPU36は、囲みが成立したか否かを判断し、“YES”であれば、ステップS169で、囲み内に敵ユニットが存在するか否かを判断する。敵ユニットが存在せず、かつ、囲み内を占領可能である場合には、CPU36は、ステップS171で囲み内の全ての位置を占領地に設定して、ステップS173で上述の占領処理(図27)を実行し、移動途中の位置の左方向の囲み内を選択チームに占領させる。一方、ステップS169で“YES”であれば、つまり、囲み内に敵ユニットが存在する場合には、CPU36は、ステップS175で、後述する囲みダメージ処理を実行して、移動途中の位置の左方向に生じた囲み内の敵ユニットにダメージを与える。ステップS173またはS175を終了し、または、ステップS167で“NO”である場合には、CPU36は処理をステップS177に進める。
ステップS177では、CPU36は、移動後の位置の1升右方向の囲みが発生しているか否かを判定する。具体的には、CPU36は、図17(C)に示したように、ユニットの移動後の位置の左方向が選択チームの領地によって囲まれたか否かを判定する。CPU36は、移動後の位置の1升右の位置を始点に設定して、上述のステップS141と同様の方法で囲み判定を行う。
そして、ステップS179で、CPU36は、囲みが成立したか否かを判断し、“YES”であれば、ステップS181で、囲み内に敵ユニットが存在するか否かを判断する。敵ユニットが存在せず、かつ、囲み内を占領可能である場合には、CPU36は、ステップS183で囲み内の全ての位置を占領地に設定して、ステップS185で上述の占領処理(図27)を実行し、移動途中の位置の右方向の囲み内を選択チームに占領させる。一方、ステップS181で“YES”であれば、つまり、囲み内に敵ユニットが存在する場合には、CPU36は、ステップS187で、後述する囲みダメージ処理を実行して、移動途中の位置の右方向に生じた囲み内の敵ユニットにダメージを与える。ステップS185またはS187を終了し、または、ステップS179で“NO”である場合には、CPU36はこの移動中の囲み判定処理を終了して、図26のステップS105に戻る。
図30には、移動中の囲み判定処理(図28のステップS151、S163および図29のステップS175、S187)における囲みダメージ処理の動作の一例が示される。なお、この囲みダメージ処理は、後述するリンク囲み処理(図32−図39)においても実行される。
囲みダメージ処理を開始すると、CPU36は、まずステップS201で、囲み内の敵ユニット数を算出する。たとえば、CPU36は、敵チームの制御データに含まれる各ユニットの位置と囲み内の全ての位置とを照合して、囲み内の敵ユニットを特定するとともに囲み内の敵ユニットの数を数える。
次に、ステップS203で、CPU36は囲み内の各敵ユニットの最大HPに基づいて、ダメージ値を算出する。具体的には、図11で示したように、CPU36は、各敵ユニットの最大HPの25%の平均値を算出し、これを囲みによるダメージ値とする。
続いて、ステップS205で、CPU36は、囲み内の各敵ユニットのHPからダメージ値を減算して、敵チームの制御データのうち、囲み内に存在する各敵ユニットのHPデータを更新する。
また、ステップS207で、CPU36は、GPU42を用いて、囲み内の各敵ユニットがダメージを受ける画像を生成してモニタ34に表示する。これによって、囲み内の敵ユニットがダメージを受けてHPが減少する画面が表示される。
そして、ステップS209で、CPU36は、HPが0になった敵ユニットが存在するか否かを、囲み内の各敵ユニットのHPデータから判定する。ステップS209で“YES”であれば、つまり、囲みによるダメージを受けて破壊された敵ユニットが存在する場合には、CPU36は、ステップS211で、GPU42を用いて、該当するユニットの画像をマップ上から消去する。また、ステップS213で、CPU36は、該当するユニットのデータを敵チームの制御データから消去する。また、敵チームの制御データのうちのユニット数から破壊されたユニット数を減算して、ユニット数データを更新する。ステップS213を終了し、または、ステップS209で“NO”の場合には、CPU36はこの囲みダメージ処理を終了する。
図31には、図24のステップS35の移動終了処理の動作の一例が示される。まずステップS231で、CPU36は、移動ルートに沿った到達地点が敵チームの拠点または中立拠点であるか否かを判定する。たとえば、CPU36は、マップデータのうちの拠点位置データと移動ルートデータから、目的地が拠点位置か否かを判定し、目的地が拠点位置である場合には、当該拠点の所属が敵または中立であるか否かを拠点所属データ記憶領域78のデータから判定する。
ステップS231で“YES”であれば、CPU36は、ステップS233で、当該拠点の所属を選択チームに変更するように、拠点所属データ記憶領域78を更新する。続いて、ステップS235で、CPU36は、選択チームの新しい味方ユニットを当該拠点から発生させる。具体的には、選択チームの制御データ記憶領域84または86のユニット数を増加させるとともに、当該制御データ記憶領域84または86に新しいユニットのデータを生成する。新ユニットの位置は当該拠点位置に設定される。そして、ステップS237で、CPU36は、当該拠点から選択チームの新しい味方ユニットが出現する画像をGPU42を用いて生成しモニタ34に表示する。このように、この実施例では、敵拠点または中立拠点に到達したときには、当該拠点が占領されるとともに、新しい味方ユニットがマップに出現する。したがって、拠点を占領することでゲームを有利に進めることができるようになっている。
ステップS237を終了し、またはステップS231で“NO”である場合には、CPU36は、ステップS239で、マップデータのうちの相手チームの基地位置データと移動ルートデータから、到達地点が相手チームの基地であるか否かを判定する。ステップS239で“YES”であれば、つまり、選択チームのユニットが敵基地に到達した場合には、勝利条件が満足されたので、CPU36は処理をステップS247に進める。
一方、ステップS239で“NO”であれば、CPU36は、ステップS241でリンク囲み処理を実行する。このリンク囲み処理では、移動の結果到達した位置と他の味方ユニットまたは味方拠点との関係でリンクまたは囲みが発生するときには、リンクまたは囲みによる占領またはダメージ付与が行われる。このリンク囲み処理の動作の一例が後述する図32−図39に詳細に示される。
ステップS241を終了すると、CPU36は、ステップS243でリンクまたは囲みによるダメージを受けて敵ユニットが全滅したか否かを敵チームの制御データのうちのユニット数から判定する。ステップS243で“YES”であれば、勝利条件が満足されたので、CPU36は、処理をステップS247に進める。
一方、ステップS243で“NO”であれば、つまり、マップ上に敵チームのユニットが残っている場合には、CPU36は、ステップS245で、選択チームの領地データのうちの占領率データから、選択チームの占領率が所定の閾値を超えたか否かを判定する。ステップS245で“YES”であれば、勝利条件が満足されたので、CPU36は、ステップS247で、たとえば図26のステップS111と同様にして、ゲーム終了処理を実行して、たとえば選択チームの勝利を告げる画面を表示する。そして、CPU36はこのゲーム処理を終了する。一方、ステップS245で“NO”であれば、CPU36は、この移動終了処理を終了して、図24のステップS37へ戻る。
図32には、図31のステップS241のリンク囲み処理の動作の一例が示される。CPU36は、まずステップS261で、到達位置から上方向へのリンクを調査する。具体的には、図12(A)に示したように、CPU36は、まず、到達位置から上方向の各位置を、マップ外周まで順次調査して、味方ユニット、味方拠点、敵ユニット、敵拠点または中立拠点の存在を検出する。なお、味方ユニットの位置は選択チームの制御データに記憶され、敵ユニットの位置は敵チームの制御データに記憶され、各拠点位置はマップデータに記憶されている。
次にステップS263で、CPU36は、上方向への調査結果から、最初に敵ユニットが存在しているか否かを判断する。ステップS263で“YES”であれば、CPU36は、ステップS265で、敵ユニットの次に味方ユニットまたは味方拠点が存在しているか否かを判定する。ステップS265で“YES”であれば、つまり、1または複数の敵ユニットが選択チームの移動対象ユニットとその味方ユニットまたは味方拠点の間に挟まれている場合には、リンクによるダメージ付与の条件が満足されるので、CPU36は、ステップS267で、リンクダメージ処理を実行する。このリンクダメージ処理の動作は後述する図40に詳細に示される。
なお、ステップS265で“NO”であれば、到達位置の上方向にはリンクおよび囲みともに成立しないので、CPU36は、処理を次の図33のステップS287に進める。
一方、ステップS263で“NO”であれば、CPU36は、ステップS269で、最初に味方ユニットまたは味方拠点が存在しているか否かを判断する。ステップS269で“YES”であれば、つまり、選択チームの移動対象ユニットとその味方ユニットまたは味方拠点との間にリンクが成立し、しかもそのリンク内に他の拠点やユニットが存在していない場合には、リンクによる占領の条件が満足される。したがって、CPU36は、ステップS271でリンク内の全ての位置を占領地に設定する。具体的には、到達位置と上方向の味方の位置とに基づいて、リンク内の全ての位置を特定し、当該位置を占領地データ記憶領域88に記憶する。そして、ステップS273で、CPU36は、上述の占領処理(図27)を実行して、上方向のリンク内の位置を選択チームに占領させる。
このように、上方向のリンク占領が成立する場合には、続けて、上方向のリンクを一辺とする四角形の囲みが成立するか否かを判定する。すなわち、ステップS275で、CPU36は、右、下および左方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図12(B)に示したように、CPU36は、上方向の味方位置(味方ユニットまたは味方拠点の位置)から右、下および左方向へ順次リンク判定を行う。つまり、CPU36は、まず、上方向の味方位置から右方向へのリンク判定を行う。その結果、右方向にも味方位置の存在が最初に検出される場合には、CPU36は当該右方向の味方位置から下方向へのリンク判定を行う。その結果、下方向にも味方位置の存在が最初に検出される場合には、CPU36は当該下方向の味方位置から左方向へのリンク判定を行う。そして、左方向に味方位置の存在が最初の検出される場合には、CPU36は、当該左方向の味方位置が移動対象ユニットの到達位置であるか否かを判断する。味方位置が移動対象ユニットの到達位置である場合には、到達位置の右上に囲みが成立すると判定される。
そして、CPU36は、ステップS277で囲みが成立したか否かを判断し、“YES”であれば、ステップS279で、当該囲みによって囲まれた位置を第1右上囲みデータとしてメインメモリ40の所定領域に記憶する。具体的には、到達位置ならびにリンク判定で順に検出された上方向の味方位置、右方向の味方位置、および下方向の味方位置に基づいて、囲み内の全ての位置を特定し、当該特定した位置を第1右上囲みデータとして記憶する。
ステップS279を終了し、または、ステップS277で“NO”であれば、CPU36は、ステップS281で、左、下および右方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図12(B)に示したように、CPU36は、上述のステップS275と同様にして、上方向の味方位置から左、下および右方向へ順次リンク判定を行って、到達位置の左上に囲みが成立するか否かを判定する。
そして、CPU36は、ステップS283で囲みが成立したか否かを判断し、“YES”であれば、ステップS285で当該囲みによって囲まれた位置を第1左上囲みデータとしてメインメモリ40の所定領域に記憶する。ステップS285を終了し、またはステップS283で“NO”であれば、CPU36は、処理を次の図33のステップS287へ進める。また、ステップS269で“NO”である場合、つまり、上方向のリンクも囲みも成立し得ない場合にも、同様に、CPU36は処理を図33のステップS287へ進める。
図33のステップS287で、CPU36は、到達位置から下方向へのリンクを調査する。具体的には、図13に示したように、CPU36は、到達位置から下方向の各位置をマップ外周まで順次調査する。調査方法は上述の上方向へのリンク判定と同様である。
続くステップS289で、CPU36は、下方向への調査結果から、最初に敵ユニットが存在しているか否かを判断する。ステップS289で“YES”であれば、CPU36は、ステップS291で、敵ユニットの次に味方ユニットまたは味方拠点が存在しているか否かを判定する。ステップS291で“YES”であれば、つまり、リンクによるダメージ付与の条件が満足される場合には、CPU36は、ステップS293で、リンクダメージ処理を実行する。このリンクダメージ処理の動作は後述する図40に詳細に示される。
なお、ステップS291で“NO”であれば、到達位置の下方向にはリンクおよび囲みともに成立しないので、CPU36は、処理を次の図34のステップS313に進める。
一方、ステップS289で“NO”であれば、CPU36は、ステップS295で、最初に味方ユニットまたは味方拠点が存在しているか否かを判断する。ステップS295で“YES”であれば、つまり、リンクによる占領の条件が満足される場合には、CPU36は、ステップS297でリンク内の全ての位置を占領地データに設定する。そして、ステップS299で、CPU36は、上述の占領処理(図27)を実行して、下方向のリンク内の位置を選択チームに占領させる。
下方向のリンク占領が成立する場合には、続けて、下方向のリンクを一辺とする四角形の囲みが成立するか否かを判定する。すなわち、ステップS301で、CPU36は、右、上および左方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図13に示したように、CPU36は、下方向の味方位置から右、上および左方向へ順次リンク判定を行って、到達位置の右下における囲みの発生を判定する。
続くステップS303で、CPU36は、囲みが成立したか否かを判断し、“YES”であれば、ステップS305で、当該囲みによって囲まれた位置を第1右下囲みデータとしてメインメモリ40の所定領域に記憶する。
ステップS305を終了し、または、ステップS303で“NO”であれば、CPU36は、ステップS307で、左、上および右方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図13に示したように、CPU36は、下方向の味方位置から左、下および右方向へ順次リンク判定を行って、到達位置の左下に囲みが成立するか否かを判定する。
そして、CPU36は、ステップS309で囲みが成立したか否かを判断し、“YES”であれば、ステップS311で当該囲みによって囲まれた位置を第1左下囲みデータとしてメインメモリ40の所定領域に記憶する。ステップS311を終了し、またはステップS309で“NO”であれば、CPU36は、処理を次の図34のステップS313へ進める。また、ステップS295で“NO”である場合、つまり、下方向のリンクも囲みも成立し得ない場合にも、同様に、CPU36は処理を図34のステップS313に進める。
図34のステップS313では、CPU36は、到達位置から左方向へのリンクを調査する。具体的には、図14に示したように、CPU36は、到達位置から左方向の各位置をマップ外周まで順次調査する。調査方法は上述の上方向へのリンク判定と同様である。
続くステップS315で、CPU36は、左方向への調査結果から、最初に敵ユニットが存在しているか否かを判断する。ステップS315で“YES”であれば、CPU36は、ステップS317で、敵ユニットの次に味方ユニットまたは味方拠点が存在しているか否かを判定する。ステップS317で“YES”であれば、つまり、リンクによるダメージ付与の条件が満足される場合には、CPU36は、ステップS319で、リンクダメージ処理を実行する。このリンクダメージ処理の動作は後述する図40に詳細に示される。
なお、ステップS317で“NO”であれば、到達位置の左方向にはリンクおよび囲みともに成立しないので、CPU36は、処理を次の図35のステップS339に進める。
一方、ステップS315で“NO”であれば、CPU36は、ステップS321で、最初に味方ユニットまたは味方拠点が存在しているか否かを判断する。ステップS321で“YES”であれば、つまり、リンクによる占領の条件が満足される場合には、CPU36は、ステップS323でリンク内の全ての位置を占領地データに設定する。そして、ステップS325で、CPU36は、上述の占領処理(図27)を実行して、左方向のリンク内の位置を選択チームに占領させる。
左方向のリンク占領が成立する場合には、続けて、左方向のリンクを一辺とする四角形の囲みが成立するか否かを判定する。すなわち、ステップS327で、CPU36は、上、右および下方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図14に示したように、CPU36は、左方向の味方位置から上、右および下方向へ順次リンク判定を行って、到達位置の左上における囲みの発生を判定する。
続くステップS329で、CPU36は、囲みが成立したか否かを判断し、“YES”であれば、ステップS331で、当該囲みによって囲まれた位置を第2左上囲みデータとしてメインメモリ40の所定領域に記憶する。
ステップS331を終了し、または、ステップS329で“NO”であれば、CPU36は、ステップS333で、下、右および上方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図14に示したように、CPU36は、左方向の味方位置から下、右および上方向へ順次リンク判定を行って、到達位置の左下に囲みが成立するか否かを判定する。
そして、CPU36は、ステップS335で囲みが成立したか否かを判断し、“YES”であれば、ステップS337で当該囲みによって囲まれた位置を第2左下囲みデータとしてメインメモリ40の所定領域に記憶する。ステップS337を終了し、またはステップS335で“NO”であれば、CPU36は、処理を次の図35のステップS339へ進める。また、ステップS321で“NO”である場合、つまり、左方向のリンクも囲みも成立し得ない場合にも、同様に、CPU36は処理を図35のステップS339に進める。
図35のステップS339では、CPU36は、到達位置から右方向へのリンクを調査する。具体的には、図15に示したように、CPU36は、到達位置から右方向の各位置をマップ外周まで順次調査する。調査方法は上述の上方向へのリンク判定と同様である。
続くステップS341で、CPU36は、右方向への調査結果から、最初に敵ユニットが存在しているか否かを判断する。ステップS341で“YES”であれば、CPU36は、ステップS343で、敵ユニットの次に味方ユニットまたは味方拠点が存在しているか否かを判定する。ステップS343で“YES”であれば、つまり、リンクによるダメージ付与の条件が満足される場合には、CPU36は、ステップS345で、リンクダメージ処理を実行する。このリンクダメージ処理の動作は後述する図40に詳細に示される。
なお、ステップS343で“NO”であれば、到達位置の右方向にはリンクおよび囲みともに成立しないので、CPU36は、処理を次の図36のステップS365に進める。
一方、ステップS341で“NO”であれば、CPU36は、ステップS347で、最初に味方ユニットまたは味方拠点が存在しているか否かを判断する。ステップS347で“YES”であれば、つまり、リンクによる占領の条件が満足される場合には、CPU36は、ステップS349でリンク内の全ての位置を占領地データに設定する。そして、ステップS351で、CPU36は、上述の占領処理(図27)を実行して、右方向のリンク内の位置を選択チームに占領させる。
右方向のリンク占領が成立する場合には、続けて、右方向のリンクを一辺とする四角形の囲みが成立するか否かを判定する。すなわち、ステップS353で、CPU36は、上、左および下方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図15に示したように、CPU36は、右方向の味方位置から上、左および下方向へ順次リンク判定を行って、到達位置の右上における囲みの発生を判定する。
続くステップS355で、CPU36は、囲みが成立したか否かを判断し、“YES”であれば、ステップS357で、当該囲みによって囲まれた位置を第2右上囲みデータとしてメインメモリ40の所定領域に記憶する。
ステップS357を終了し、または、ステップS355で“NO”であれば、CPU36は、ステップS359で、下、左および上方向へ続くリンクによる四角形の囲み判定を実行する。具体的には、図15に示したように、CPU36は、右方向の味方位置から下、左および上方向へ順次リンク判定を行って、到達位置の右下に囲みが成立するか否かを判定する。
そして、CPU36は、ステップS361で囲みが成立したか否かを判断し、“YES”であれば、ステップS363で当該囲みによって囲まれた位置を第2右下囲みデータとしてメインメモリ40の所定領域に記憶する。ステップS363を終了し、またはステップS361で“NO”であれば、CPU36は、処理を次の図36のステップS365へ進める。また、ステップS347で“NO”である場合、つまり、右方向のリンクも囲みも成立し得ない場合にも、同様に、CPU36は処理を図36のステップS365に進める。
続く図36−図39では、リンク四角形囲みが成立していた場合における囲みによる占領またはダメージ付与のための処理が実行される。図36には到達位置の左上の囲みのための処理が示される。図36の最初のステップS365では、CPU36は、上方向リンク判定に基づく第1左上囲みが成立したか否かを第1左上囲みデータから判定し、“YES”であれば、ステップS367で左方向リンク判定に基づく第2左上囲みが成立したか否かを第2左上囲みデータから判定する。ステップS367で“YES”であれば、つまり、両囲みとも成立している場合には、CPU36は、ステップS369で第1左上囲みと第2左上囲みとが同一であるか否かを両データから判定する。つまり、CPU36は同一の囲みを上方向リンク判定と左方向リンク判定で検出したのか否かを判断する。
ステップS369で“YES”であれば、つまり、両囲みが同一の場合には、第1左上囲みについて処理を行うものとし、CPU36は処理をステップS371へ進める。
また、ステップS367で“NO”であれば、つまり、第1左上囲みのみが成立する場合には、CPU36はステップS371で第1左上囲み内に敵ユニットが存在するか否かを、第1左上囲みデータと敵チームの制御データのうちの各ユニットの位置データとに基づいて判定する。
ステップS371で“YES”であれば、CPU36は、ステップS373で、第1左上囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、当該囲み内の敵ユニットにダメージを与える。ステップS373を終了するとCPU36は処理を図37のステップS397へ進める。
一方、ステップS371で“NO”であれば、つまり、敵ユニットが存在しない場合には、CPU36は、囲みによる占領を実行する。なお、図36のステップS371では省略しているが、囲みによる占領は、当該囲み内に敵ユニットばかりでなく敵拠点および中立拠点も存在していないときに実行可能である。したがって、囲み内に敵拠点または中立拠点が存在する場合には占領は行われない。このことは他の囲みの場合も同様であるが他の囲みの箇所での説明は省略する。
囲みによる占領が可能な場合には、CPU36は、ステップS375で第1左上囲みで囲まれた位置を占領地データに設定し、ステップS377で当該左上囲みについて上述の占領処理(図27)を実行し、当該囲み内の全位置を選択チームに占領させる。ステップS377を終了するとCPU36は処理をステップS397に進める。
一方、ステップS369で“NO”であれば、つまり、第1左上囲みと第2左上囲みとが異なる場合には、両囲みによるダメージ付与または占領を実行する。すなわち、CPU36は、ステップS379で、第1左上囲み内に敵ユニットが存在するか否かを判定し、“YES”であれば、ステップS381で上述の囲みダメージ処理(図30)を実行して、第1左上囲み内の敵ユニットにダメージを与える。一方、ステップS379で“NO”であれば、つまり、第1左上囲みによって占領可能な場合には、CPU36は、ステップS383で第1左上囲みに囲まれた位置を占領地データに設定し、ステップS385で第1左上囲みについて上述の占領処理(図27)を実行し、当該囲み内の全ての位置を選択チームに占領させる。
ステップS381またはステップS385を終了すると、CPU36は、ステップS387で、第2左上囲み内に敵ユニットが存在するか否かを、第2左上囲みデータと敵チームの制御データのうちの各ユニットの位置データとに基づいて判定する。ステップS387で“YES”であれば、CPU36は、ステップS389で、第2左上囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、敵ユニットにダメージを与える。ステップS389を終了すると、CPU36は処理をステップS397に進める。
一方、ステップS387で“NO”であれば、つまり、第2左上囲みによって占領可能である場合には、CPU36は、ステップS391で、第2左上囲みに囲まれた位置を占領地データに設定し、ステップS393で第2左上囲みついて上述の占領処理(図27)を実行し、当該第2左上囲み内の全ての位置を選択チームに占領させる。ステップS393を終了するとCPU36は処理をステップS397に進める。
また、ステップS365で“NO”であれば、CPU36は、ステップS395で、第2左上囲みは成立しているか否かを第2左上囲みデータから判定する。ステップS395で“YES”であれば、つまり、第2左上囲みのみが成立する場合には、CPU36は処理をステップS387へ進めて、上述したように、第2左上囲みによるダメージ付与または第2左上囲みによる占領を実行する。
また、ステップS395で“NO”であれば、つまり、到達位置の左上に囲みが成立していない場合には、CPU36は処理を図37のステップS397へ進める。
図37には、到達位置の右上の囲みのための処理が示される。図37の最初のステップS397では、CPU36は、上方向リンク判定に基づく第1右上囲みが成立したか否かを第1右上囲みデータから判定し、“YES”であれば、ステップS399で右方向リンク判定に基づく第2右上囲みが成立したか否かを第2右上囲みデータから判定する。ステップS399で“YES”であれば、つまり、両囲みとも成立している場合には、CPU36は、ステップS401で第1右上囲みと第2右上囲みとが同一であるか否かを両データから判定する。つまり、CPU36は同一の囲みを上方向リンク判定と右方向リンク判定で検出したのか否かを判断する。
ステップS401で“YES”であれば、つまり、両囲みが同一の場合には、第1右上囲みについて処理を行うものとし、CPU36は処理をステップS403へ進める。
また、ステップS399で“NO”であれば、つまり、第1右上囲みのみが成立する場合には、CPU36はステップS403で第1右上囲み内に敵ユニットが存在するか否かを判定する。
ステップS403で“YES”であれば、CPU36は、ステップS405で、第1右上囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、当該囲み内の敵ユニットにダメージを与える。ステップS405を終了するとCPU36は処理を図38のステップS429へ進める。
一方、ステップS403で“NO”であれば、つまり、囲みによる占領が可能な場合には、CPU36は、ステップS407で第1右上囲みで囲まれた位置を占領地データに設定し、ステップS409で当該右上囲みについて上述の占領処理(図27)を実行し、当該囲み内の全位置を選択チームに占領させる。ステップS409を終了するとCPU36は処理をステップS429に進める。
一方、ステップS401で“NO”であれば、つまり、第1右上囲みと第2右上囲みとが異なる場合には、両囲みによるダメージ付与または占領を実行する。すなわち、CPU36は、ステップS411で、第1右上囲み内に敵ユニットが存在するか否かを判定し、“YES”であれば、ステップS413で上述の囲みダメージ処理(図30)を実行して、第1右上囲み内の敵ユニットにダメージを与える。一方、ステップS411で“NO”であれば、つまり、第1右上囲みによって占領可能な場合には、CPU36は、ステップS415で第1右上囲みに囲まれた位置を占領地データに設定し、ステップS417で第1右上囲みについて上述の占領処理(図27)を実行し、当該囲み内の全ての位置を選択チームに占領させる。
ステップS413またはステップS417を終了すると、CPU36は、ステップS419で、第2右上囲み内に敵ユニットが存在するか否かを判定する。ステップS419で“YES”であれば、CPU36は、ステップS421で、第2右上囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、敵ユニットにダメージを与える。ステップS421を終了すると、CPU36は処理をステップS429に進める。
一方、ステップS419で“NO”であれば、つまり、第2右上囲みによる占領が可能な場合には、CPU36は、ステップS423で、第2右上囲みに囲まれた位置を占領地データに設定し、ステップS425で第2右上囲みついて上述の占領処理(図27)を実行し、当該第2右上囲み内の全ての位置を選択チームに占領させる。ステップS425を終了するとCPU36は処理をステップS429に進める。
また、ステップS397で“NO”であれば、CPU36は、ステップS427で、第2右上囲みは成立しているか否かを第2右上囲みデータから判定する。ステップS427で“YES”であれば、つまり、第2右上囲みのみが成立する場合には、CPU36は処理をステップS419へ進めて、上述したように、第2右上囲みによるダメージ付与または第2右上囲みによる占領を実行する。
また、ステップS427で“NO”であれば、つまり、到達位置の右上に囲みが成立していない場合には、CPU36は処理を図38のステップS429へ進める。
図38には、到達位置の左下の囲みのための処理が示される。図38の最初のステップS429では、CPU36は、下方向リンク判定に基づく第1左下囲みが成立したか否かを第1左下囲みデータから判定し、“YES”であれば、ステップS431で左方向リンク判定に基づく第2左下囲みが成立したか否かを第2左下囲みデータから判定する。ステップS431で“YES”であれば、つまり、両囲みとも成立している場合には、CPU36は、ステップS433で第1左下囲みと第2左下囲みとが同一であるか否かを両データから判定する。つまり、CPU36は同一の囲みを下方向リンク判定と左方向リンク判定で検出したのか否かを判断する。
ステップS433で“YES”であれば、つまり、両囲みが同一の場合には、第1左下囲みについて処理を行うものとし、CPU36は処理をステップS435へ進める。
また、ステップS431で“NO”であれば、つまり、第1左下囲みのみが成立する場合には、CPU36はステップS435で第1左下囲み内に敵ユニットが存在するか否かを判定する。
ステップS435で“YES”であれば、CPU36は、ステップS437で、第1左下囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、当該囲み内の敵ユニットにダメージを与える。ステップS437を終了するとCPU36は処理を図39のステップS461へ進める。
一方、ステップS435で“NO”であれば、つまり、囲みによる占領が可能な場合には、CPU36は、ステップS439で第1左下囲みで囲まれた位置を占領地データに設定し、ステップS441で当該左下囲みについて上述の占領処理(図27)を実行し、当該囲み内の全位置を選択チームに占領させる。ステップS441を終了するとCPU36は処理をステップS461に進める。
一方、ステップS433で“NO”であれば、つまり、第1左下囲みと第2左下囲みとが異なる場合には、両囲みによるダメージ付与または占領を実行する。すなわち、CPU36は、ステップS443で、第1左下囲み内に敵ユニットが存在するか否かを判定し、“YES”であれば、ステップS445で上述の囲みダメージ処理(図30)を実行して、第1左下囲み内の敵ユニットにダメージを与える。一方、ステップS443で“NO”であれば、つまり、第1左下囲みによって占領可能な場合には、CPU36は、ステップS447で第1左下囲みに囲まれた位置を占領地データに設定し、ステップS449で第1左下囲みについて上述の占領処理(図27)を実行し、当該囲み内の全ての位置を選択チームに占領させる。
ステップS445またはステップS449を終了すると、CPU36は、ステップS451で、第2左下囲み内に敵ユニットが存在するか否かを判定する。ステップS451で“YES”であれば、CPU36は、ステップS453で、第2左下囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、敵ユニットにダメージを与える。ステップS453を終了すると、CPU36は処理をステップS461に進める。
一方、ステップS451で“NO”であれば、つまり、第2左下囲みによる占領が可能な場合には、CPU36は、ステップS455で、第2左下囲みに囲まれた位置を占領地データに設定し、ステップS457で第2左下囲みついて上述の占領処理(図27)を実行し、当該第2左下囲み内の全ての位置を選択チームに占領させる。ステップS457を終了するとCPU36は処理をステップS461に進める。
また、ステップS429で“NO”であれば、CPU36は、ステップS459で、第2左下囲みは成立しているか否かを第2左下囲みデータから判定する。ステップS459で“YES”であれば、つまり、第2左下囲みのみが成立する場合には、CPU36は処理をステップS451へ進めて、上述したように、第2左下囲みによるダメージ付与または第2左下囲みによる占領を実行する。
また、ステップS459で“NO”であれば、つまり、到達位置の左下に囲みが成立していない場合には、CPU36は処理を図39のステップS461へ進める。
図39には、到達位置の右下の囲みのための処理が示される。図39の最初のステップS461では、CPU36は、下方向リンク判定に基づく第1右下囲みが成立したか否かを第1右下囲みデータから判定し、“YES”であれば、ステップS463で右方向リンク判定に基づく第2右下囲みが成立したか否かを第2右下囲みデータから判定する。ステップS463で“YES”であれば、つまり、両囲みとも成立している場合には、CPU36は、ステップS465で第1右下囲みと第2右下囲みとが同一であるか否かを両データから判定する。つまり、CPU36は同一の囲みを下方向リンク判定と右方向リンク判定で検出したのか否かを判断する。
ステップS465で“YES”であれば、つまり、両囲みが同一の場合には、第1右下囲みについて処理を行うものとし、CPU36は処理をステップS467へ進める。
また、ステップS463で“NO”であれば、つまり、第1右下囲みのみが成立する場合には、CPU36はステップS467で第1右下囲み内に敵ユニットが存在するか否かを判定する。
ステップS467で“YES”であれば、CPU36は、ステップS469で、第1右下囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、当該囲み内の敵ユニットにダメージを与える。ステップS469を終了すると、CPU36はこのリンク囲み処理を終了して、図31のステップS243へ戻る。
一方、ステップS467で“NO”であれば、つまり、囲みによる占領が可能な場合には、CPU36は、ステップS471で第1右下囲みで囲まれた位置を占領地データに設定し、ステップS473で当該右下囲みについて上述の占領処理(図27)を実行し、当該囲み内の全位置を選択チームに占領させる。ステップS473を終了すると、CPU36はこのリンク囲み処理を終了して図31のステップS243へ戻る。
一方、ステップS465で“NO”であれば、つまり、第1右下囲みと第2右下囲みとが異なる場合には、両囲みによるダメージ付与または占領を実行する。すなわち、CPU36は、ステップS4475で、第1右下囲み内に敵ユニットが存在するか否かを判定し、“YES”であれば、ステップS477で上述の囲みダメージ処理(図30)を実行して、第1右下囲み内の敵ユニットにダメージを与える。一方、ステップS475で“NO”であれば、つまり、第1右下囲みによって占領可能な場合には、CPU36は、ステップS479で第1右下囲みに囲まれた位置を占領地データに設定し、ステップS481で第1右下囲みについて上述の占領処理(図27)を実行し、当該囲み内の全ての位置を選択チームに占領させる。
ステップS477またはステップS481を終了すると、CPU36は、ステップS483で、第2右下囲み内に敵ユニットが存在するか否かを判定する。ステップS483で“YES”であれば、CPU36は、ステップS485で、第2右下囲みデータに基づいて、上述の囲みダメージ処理(図30)を実行し、敵ユニットにダメージを与える。ステップS485を終了すると、CPU36はこのリンク囲み処理を終了して、図31のステップS243へ戻る。
一方、ステップS483で“NO”であれば、つまり、第2右下囲みによる占領が可能な場合には、CPU36は、ステップS487で、第2右下囲みに囲まれた位置を占領地データに設定し、ステップS489で第2右下囲みついて上述の占領処理(図27)を実行し、当該第2右下囲み内の全ての位置を選択チームに占領させる。ステップS489を終了すると、CPU36はこのリンク囲み処理を終了して、図31のステップS243に戻る。
また、ステップS461で“NO”であれば、CPU36は、ステップS491で、第2右下囲みは成立しているか否かを第2右下囲みデータから判定する。ステップS491で“YES”であれば、つまり、第2右下囲みのみが成立する場合には、CPU36は処理をステップS483へ進めて、上述したように、第2右下囲みによるダメージ付与または第2右下囲みによる占領を実行する。
また、ステップS491で“NO”であれば、つまり、到達位置の右下に囲みが成立していない場合には、CPU36はこのリンク囲み処理を終了して図31のステップS243に戻る。
図40には、リンク囲み処理(図32−図39)におけるリンクダメージ処理の動作の一例が示される。リンクダメージ処理を開始すると、CPU36は、まずステップS501で、リンク内の敵ユニット数を算出する。たとえば、CPU36は、敵チームの制御データに含まれる各ユニットの位置とリンク内の全ての位置とを照合して、リンク内の敵ユニットを特定するとともにリンク内の敵ユニットの数を数える。
次に、ステップS503で、CPU36はリンク内の各敵ユニットの最大HPに基づいて、ダメージ値を算出する。具体的には、図9で示したように、CPU36は、各敵ユニットの最大HPの12.5%の平均値を算出して、これをリンクによるダメージ値とする。
続いて、ステップS505で、CPU36は、リンク内の各敵ユニットのHPからダメージ値を減算して、敵チームの制御データのうちリンク内に存在する各敵ユニットのHPデータを更新する。
また、ステップS507で、CPU36は、GPU42を用いて、リンク内の各敵ユニットがダメージを受ける画像を生成してモニタ34に表示する。これによって、たとえば図20に示すように、リンク内の敵ユニット112がダメージを受けてHPを示すゲージの値が減少する画面が表示される。
そして、ステップS509で、CPU36は、HPが0になった敵ユニットが存在するか否かを、リンク内の各敵ユニットのHPデータから判定する。ステップS509で“YES”であれば、つまり、リンクによるダメージを受けて破壊された敵ユニットが存在する場合には、CPU36は、ステップS511で、GPU42を用いて、該当するユニットの画像をマップ上から消去する。また、ステップS513で、CPU36は、該当するユニットのデータを敵チームの制御データから消去する。また、敵チームの制御データのうちのユニット数データも更新する。ステップS513を終了し、または、ステップS509で“NO”の場合には、CPU36はこのリンクダメージ処理を終了する。
図41−図43には、図26の移動処理におけるステップS87の戦闘処理の動作の一例が示される。戦闘処理を開始すると、図41の最初のステップS521で、CPU36は、各チームの各ユニットの戦闘操作担当を選択するための画面をモニタ34に表示する。この画面では、移動操作をプレイヤが担当するチームのユニットの戦闘操作の担当を、当該プレイヤまたはCOM(コンピュータ)から選択することができる。なお、選択チームのユニットと敵ユニットとが重なった位置に隣接する位置にユニットが存在している場合には、当該ユニットも戦闘に参加する。各チームの戦闘データ記憶領域94または96には、戦闘に参加するユニット数に応じて各ユニットのデータが生成される。複数のユニットが戦闘に参加するチームの移動操作をプレイヤが担当している場合、プレイヤは複数のユニットのうち1つのユニットの戦闘操作を担当することができる。あるいは、プレイヤは、全てのユニットの戦闘操作をCOMに任せることができる。なお、コンピュータが移動操作を担当しているチームのユニットの戦闘操作担当は、予めCOMに設定されている。
CPU36は、ステップS523で、操作データに基づいて、各ユニットの戦闘操作担当を決定する。たとえば、CPU36は、方向指示スイッチ等の操作に応じて、画面上の各ユニットの操作担当をプレイヤまたはCOMに変更する。また、CPU36は、Aボタンの操作に応じて、全ユニットの操作担当を決定して、各ユニットの操作担当データにCOMまたは各プレイヤを示す識別情報を記憶する。
続いて、CPU36は、ステップS525で、移動操作担当データに基づいてプレイヤが移動操作を担当しているチームを特定し、プレイヤが移動操作を担当するチームのいずれかのユニットの戦闘操作担当データに、プレイヤを示すデータが設定されているか否かを判定する。ステップS525で“NO”であれば、つまり、プレイヤが戦闘操作を担当しない場合には、CPU36は、ステップS527で、プレイヤが移動操作を担当するチームの回復フラグの記憶領域96または98に「1」を書き込んで、該当するチーム回復フラグをオンにする。これによって、戦闘操作を担当しないプレイヤによる味方ユニットへの回復操作を受け付けることができる。一方、ステップS525で“NO”であれば、つまり、プレイヤが戦闘操作を担当する場合には、CPU36は処理をステップS529に進める。ステップS529以降の各ステップは、戦闘モード終了と判定されるまで、たとえば1フレームごとに実行される。
ステップS529では、CPU36は、GPU42を用いて戦闘画面を生成してモニタ34に表示する。初期状態の戦闘画面では、たとえば各チームが画面両端に分かれて各ユニットが所定の位置に配置される。また、たとえば図21に示したように、画面下端部には、各ユニットの操作担当を示す画像がそれぞれ表示される。戦闘モードが進行するにつれて、各ユニットの移動および動作は操作データまたはプログラムに基づいて制御されるので、この戦闘画面の表示処理では、各ユニットが移動後の位置で動作を行う画像が表示される。
そして、ステップS531で、CPU36は、コントローラI/F56を介してコントローラ22からの操作データを取得する。以下の処理では、この操作データに基づいて、プレイヤが戦闘操作を担当するユニットの移動および動作が制御されたり、また、回復フラグがオンにされたチームのユニットの回復が制御されたりする。
ステップS533では、CPU36は、各チームの回復フラグがオンであるか否かを判定する。ステップS533で“YES”であれば、つまり、回復操作の受付中である場合には、CPUコア42は、ステップS535で、操作データに基づいて、アナログジョイスティックおよび方向指示スイッチによる4つの方向(上下左右)のいずれかの入力、または、いずれかのボタンスイッチ(スタートボタンを除く)の入力があったか否かを判定する。なお、判定に使用される操作データは、回復フラグがオンであるチームの移動操作を担当しているプレイヤに対応するコントローラ22からの操作データである。
ステップS535で“YES”であれば、つまり、プレイヤによる回復操作が検出された場合には、CPU36は、ステップS537で、そのプレイヤが移動操作を担当するチームの各ユニットのHPの値に所定値(たとえば0.1)を加算して、各ユニットのHPデータを更新する。また、CPU36は、GPU42を用いて、たとえば該当するユニットの下方にHPを示すゲージを表示し、HPがたとえば1回復するごとにHPの値を示す数字を上げるようにしてよい。なお、該当するチームのユニットのうちHPが最大HPであるユニットに対しては、HPの加算は行わない。
また、ステップS539で、CPU36は、回復フラグがオンにされかつ回復操作が検出されたチームに異常状態のユニットが存在するか否かを、該当するチームの戦闘データのうちの異常状態データに基づいて判定する。ステップS539で“YES”であれば、CPU36は、ステップS541で、該当するユニットの残存時間から所定値(たとえば9フレーム)を減算して、その残存時間データを更新する。異常状態は残存時間(初期値はたとえば120フレーム)が0になるまで継続されるものであり、このように回復操作に応じて残存時間を減少させるので、異常状態からの早期復帰が可能になる。
ステップS541を終了し、またはステップS539で“NO”であれば、CPU36は処理を図42のステップS543に進める。また、ステップS535で“NO”であれば、つまり、回復操作が検出されなかった場合には、CPU36は処理をステップS543に進める。また、ステップS533で“NO”であれば、つまり、回復操作を受付中ではない場合にも、CPU36は処理をステップS543に進める。
図42のステップS543では、CPU36は、各チームの戦闘データのうち各ユニットの異常状態データに基づいて、異常状態のユニットが存在するか否かを判定する。ステップS543で“YES”であれば、CPU36は、ステップS545で、該当するユニットの残存時間を一定値(たとえば1フレーム)減少させて、その残存時間データを更新する。異常状態は所定時間継続されるので、このステップS545で、ゲームの進行に応じて残存時間を一定値減少させている。
そして、ステップS547で、CPU36は、該当するユニットの残存時間が0以下になったか否かを判定する。ステップS547で“YES”であれば、CPU36は、ステップS549で、残存時間が0以下になったユニットの異常状態データをクリアして、正常状態に戻す。また、CPU36は、ステップS551で、GPU52を用いて、該当するユニット上に表示されていた異常状態を示すマーク画像126を消去する。
ステップS551を終了すると、CPU36は処理をステップS553に進める。また、ステップS547で“NO”の場合、またはステップS543で“NO”の場合には、CPU36は処理をステップS553に進める。
ステップS553では、CPU36は、上述の回復処理(ステップS537またはS541)が施されていないユニットの移動および動作を制御する。具体的には、CPU36は、プレイヤが戦闘操作を担当するユニットについては、ステップS531で取得した操作データに基づいて、その移動および動作を制御する。また、COMが戦闘操作を担当するユニットについては、所定のプログラムに従って自動でその移動および動作を制御する。ただし、「しびれ」の異常状態のユニットは移動および動作不能にする。また、「スロー」の異常状態のユニットについては、その移動速度を1/3倍に設定し、その攻撃動作を不能にする。各ユニットのHPは敵ユニットからの攻撃に応じて減少される。また、攻撃を受けたとき、各ユニットは攻撃の種類に応じて異常状態に変化される。
そして、ステップS555で、CPU36は、ステップS553の処理において異常状態に変化したユニットが存在するか否かを判定する。このステップS555で“YES”であれば、CPU36は、ステップS557で、該当するユニットの異常状態データに、「しびれ」または「スロー」等の異常状態を記憶する。また、ステップS559で、CPU36は、該当するユニットの残存時間データに初期値(たとえば120フレーム)を設定する。回復操作が検出されなければ、異常状態はここで設定された時間だけ継続される。また、ステップS561で、CPU36は、GPU42を用いて、該当するユニットの上に異常状態を示すマーク画像126を表示する。これによって、該当ユニットが異常状態になったことをプレイヤに明示できる。ステップS561を終了し、またはステップS555で“NO”であれば、CPU36は処理をステップS563に進める。
続いて、ステップS563で、CPU36は、ステップS553の処理において各チームのユニットのうちプレイヤによって戦闘操作の担当されるユニットが破壊されたか否かを、各ユニットのHPデータに基づいて判定する。ステップS563で“YES”であれば、つまり、戦闘操作担当がプレイヤであるユニットのHPが0になった場合には、CPU36は、ステップS565で、そのユニットの所属するチームに対応する回復フラグをオンにする。これによって、破壊されたユニットを担当していたプレイヤによる味方ユニットへの回復操作を受け付けることができる。ステップS565を終了し、またはステップS563で“NO”であれば、CPU36は処理を図43のステップS567に進める。
図43のステップS567では、CPU36は、各チームの回復フラグがオンであるか否かを判定する。ステップS567で“YES”であれば、つまり、回復操作を受付中であるチームが存在する場合には、当該チームの味方ユニットに対する回復操作を受付中であることを示すマーク画像124の表示が制御される。すなわち、ステップS569で、CPU36は、該当するチームに最大HPではないユニットが存在するか否かを、そのチームの制御データの各ユニットのHPデータおよびHP最大値データに基づいて判定する。ステップS569で“YES”であれば、つまり、ダメージを受けてHPが減少しているユニットが存在する場合には、CPU36は、ステップS571で、GPU42を用いて、該当するユニットのアイコン上に回復操作受付中であることを示すマーク画像124を表示する。これによって、たとえば図21に示したように、HPが最大ではない味方ユニットに対応するアイコン上にマーク画像124が表示される。したがって、当該チームの移動操作を担当するプレイヤに対して回復操作を促すことができる。
ステップS571を終了し、またはステップS569で“NO”であれば、CPU36は、ステップS573で、該当するチームに最大HPに回復したユニットが存在するか否かを判定する。ステップS573で“YES”であれば、つまり、ステップS537の処理によって最大HPになったユニットが該当するチームに存在する場合には、CPU36は、ステップS575で、GPU42を用いて、該当するユニットに対応するアイコン上に表示されている回復操作受付中であることを示すマーク画像124を消去する。
ステップS575を終了し、または、ステップS573で“NO”であれば、CPU36は、ステップS577で、該当するチームに異常状態のユニットが存在するか否かを、そのチームの戦闘データの各ユニットの異常状態データに基づいて判定する。ステップS577で“YES”であれば、CPU36は、ステップS579で、該当するユニットに対応するアイコン上に回復操作受付中であることを示すマーク画像124を表示する。これによって、たとえば図22に示したように、異常状態の味方ユニットに対応するアイコン上にマーク画像124が表示される。したがって、当該チームの移動操作を担当するプレイヤに対して回復操作を促すことができる。
ステップS579を終了したとき、ステップS577で“NO”である場合、または、ステップS567で“NO”である場合には、CPU36は、ステップS581で、戦闘終了であるか否かを判定する。つまり、CPU36は、いずれかのチームについて戦闘に参加していた全ユニットのHPデータが0になったか否かを判定する。ステップS581で“NO”であれば、つまり、両チームともユニットが残っている場合には、CPU36は図41のステップS529に戻って、戦闘のための処理を繰返す。一方、ステップS581で“YES”であれば、つまり、いずれかのチームのユニットが戦闘で全滅した場合には、CPU36は、この戦闘処理を終了して、図26のステップS89に戻る。
この実施例によれば、味方ユニットや味方拠点を使ったリンクや囲みによって、土地の獲得や敵へのダメージ付与を行えるようにした。具体的には、味方の位置によって規定される範囲としてのリンクや囲みによって挟んだり囲んだりした土地を占領できるようにし、また、リンクや囲みによって敵ユニットを挟んだり囲んだりした場合には、当該敵ユニットにダメージを与えることができるようにした。したがって、1回の移動によって、移動ルート上の土地ばかりでなく、より多くの土地を占領できる。また、戦わずして、つまり、ダメージを受けるリスクを負うことなく、敵ユニットのHPを減少させることができる。たとえば強力な敵ユニットであっても戦闘前にダメージを与えておくことも可能になる。したがって、単に敵ユニット位置や適本拠に向けて移動させるというプレイの仕方ではなく、他の味方ユニットの位置や味方拠点の配置とともに敵ユニットの位置や強さを考慮しながら、戦略的にユニットを移動させることによって、より有利に、より効果的にゲームをプレイすることができる。たとえば、プレイヤは、マップの状況、敵の位置および強さなどに応じて、直接的に敵を破壊する戦闘と間接的なダメージ付与とを組み合わせたり単独で使用したりして上手く使い分けながら、自分に有利になるようにゲームを進めていくことができる。このように、戦略性および興趣性の高いウォー・シミュレーションゲームを提供することができる。
また、戦闘モードにおいては、プレイヤによって担当されたユニットが倒された場合やプレイヤが戦闘に参加しない場合には、簡単な操作によって、味方ユニットに加勢してこれを回復させることができる。したがって、戦闘ゲームにおいて、コンピュータによって自動制御される味方キャラクタを有利にすることができる。また、戦闘ゲームや、戦闘モードにおけるアクション操作の苦手なプレイヤにとっては、味方キャラクタの攻撃や防御などの戦闘時の主たる操作をコンピュータに任せて、回復のための操作だけを行うことによって、戦闘を有利に進めることができるので、戦闘ゲームの苦手なプレイヤであっても、簡単かつ気軽に楽しむことができる。
なお、上述の実施例では、図12から図15で示したように、3点の味方ユニットまたは味方拠点によって2つの直交するリンクが発生している場合において、移動対象ユニットが到達したときに、2つのリンクの先端の味方位置と到達位置との間にそれぞれリンクが発生すれば、リンクによる四角形の囲みが成立するものと定義していた。しかし、他の実施例では、図44に示すように、初期の2点の味方ユニットまたは味方拠点と、移動対象ユニットによっても、リンクによる四角形の囲みが成立するものと定義してもよい。具体的には、図44に示すように、2点の味方ユニットまたは味方拠点がリンクしない状態で、かつ、味方の領地で繋がっている場合において、移動対象ユニットが到達したときに、2つの味方位置と到達位置との間にそれぞれリンクが発生すれば、囲みが成立するものとしてよい。このように、上述の4点の囲みに加えて3点の囲みも定義する場合には、マップ上の拠点数や味方ユニット数が少なくても、簡単に囲みを発生させることができるので、ゲームの戦略性および興趣性をより高めることができる。また、リンクや囲みを成立させることによって、一度に多くの土地を占領できるので、その後、到達位置の囲みだけでなく、移動途中の囲み(図16および図17)も成立させ易くなる。
また、上述の各実施例では、リンクや囲みによるダメージは、リンクや囲みの規模にかかわらず、最大HPの所定%だけ与えられるようにしていた。しかし、他の実施例では、リンクや囲みの規模に応じてダメージ値を変化させるようにしてもよい。たとえば、リンクや囲み内の土地数に比例してダメージ値が大きくなるようにしてよい。このようにすれば、発生させるリンクや囲みの規模によって敵ユニットに付与できるダメージ値が増減するので、ゲームの戦略性や興趣性を向上することができる。
また、上述の各実施例では、リンクや囲みによるダメージは、ユニットの破壊に直結するHPに対して付与された。しかし、他の実施例では、敵ユニットの他のパラメータにダメージを付与するようにしてもよい。ただし、パラメータは、ユニット同士の戦闘に有利な影響を与えることの可能なパラメータであることが望ましく、たとえば攻撃力、守備力、攻撃可能回数、回復可能回数といった戦闘における能力に関するパラメータであってよい。
また、上述の各実施例では、マップを構成する各土地の形状が四角形であり、隣接する四角形で辺が一致または共有するように各土地が並べられたので、リンクは、土地の中心から各辺への方向または各辺に平行な方向、すなわち、上下方向と左右方向の2方向だけで成立すると定義していた。しかし、他の実施例では、斜め方向にもリンクが成立するように定義してもよい。また、囲みについても、斜め方向のリンクを組み合わせて、たとえば三角形の囲みまたは四角形の囲みが成立するように定義してもよい。
また、上述の各実施例では、マップを構成する各土地の形状が四角形であったが、他の実施例では、各土地は三角形や六角形などの他の形状であってもよい。たとえば、三角形の場合には、隣接する三角形で辺が一致するように各土地を並べてマップを構成し、リンクについては3方向(各辺に平行な方向)に成立するものと定義してよく、また、囲みについては三角形、四角形または六角形等が成立するものと定義してよい。また、六角形の場合には、隣接する六角形で辺が一致するように各土地を並べてマップを構成し、リンクについては3方向(土地の中心から各辺への方向)に成立するものと定義してよく、囲みについては、三角形、四角形または六角形等が成立するものと定義してもよい。