図1を参照して、この発明の実施例であるゲーム装置10は、後述するように、画像処理プログラムを記憶することにより、画像処理装置としても機能する。このゲーム装置10は、第1の液晶表示器(LCD)12および第2のLCD14を含む。LCD12およびLCD14は、所定の配置位置となるようにハウジング16に収納される。この実施例では、ハウジング16は、上側ハウジング16aと下側ハウジング16bとによって構成され、LCD12は上側ハウジング16aに収納され、LCD14は下側ハウジング16bに収納される。したがって、LCD12とLCD14とは縦(上下)に並ぶように近接して配置される。
なお、この実施例では、表示器としてLCDを用いるようにしてあるが、LCDに代えて、EL(Electronic Luminescence)ディスプレイやプラズマディスプレイを用いるようにしてもよい。
図1からも分かるように、上側ハウジング16aは、LCD12の平面形状よりも少し大きな平面形状を有し、一方主面からLCD12の表示面を露出するように開口部が形成される。一方、下側ハウジング16bは、その平面形状が上側ハウジング16aと略同じであり、その略中央部にLCD14の表示面を露出するように開口部が形成される。下側ハウジング16bのLCD14の左方には電源スイッチ18が設けられる。
また、上側ハウジング16aには、LCD12を挟んで左右に、スピーカ36aおよび36b(図2)のための音抜き孔20aおよび20bが形成される。そして、下側ハウジング16bには、マイク(図示せず)のためのマイク孔20cが形成されるとともに、操作スイッチ22(22a,22b,22c,22d,22e,22Lおよび22R)が設けられる。
また、上側ハウジング16aと下側ハウジング16bとは、上側ハウジング16aの下辺(下端)と下側ハウジング16bの上辺(上端)の一部とが回動可能に連結されている。したがって、たとえば、ゲームをプレイしない場合には、LCD12の表示面とLCD14の表示面とが対面するように、上側ハウジング16aを回動させて折りたたんでおけば、LCD12の表示面およびLCD14の表示面に傷がつくなどの破損を防止することができる。ただし、上側ハウジング16aと下側ハウジング16bとは、回動可能に連結せずに、それらを一体的(固定的)に設けたハウジング16を形成するようにしてもよい。
操作スイッチ22は、方向指示スイッチ(十字スイッチ)22a,スタートスイッチ22b、セレクトスイッチ22c、動作スイッチ(Aボタン)22d、動作スイッチ(Bボタン)22e、動作スイッチ(Xボタン)22f、動作スイッチ(Yボタン)22g、動作スイッチ(Lボタン)22Lおよび動作スイッチ(Rボタン)22Rを含む。スイッチ22aは、下側ハウジング16bの一方主面であり、LCD14の左側に配置される。その他のスイッチ22b−22gは、下側ハウジング16bの一方主面であり、LCD14の右側に配置される。さらに、スイッチ22Lおよびスイッチ22Rは、それぞれ、上側ハウジング16aとの連結部を挟む下側ハウジング16bの上側面の左右角部に配置される。
方向指示スイッチ22aは、ディジタルジョイスティックとして機能し、4つの押圧部の1つを操作することによって、ユーザないしプレイヤによって操作可能なプレイヤキャラクタ(またはプレイヤオブジェクト)の移動方向を指示したり、カーソルの移動方向を指示したりする等に用いられる。また、各押圧部には、特定の役割を割り当てることができ、4つの押圧部の1つを操作することによって、割り当てられた役割を指示(指定)することができる。
スタートスイッチ22bは、プッシュボタンで構成され、ゲームを開始(再開)したり、一時停止(Pause)したりする等に用いられる。また、セレクトスイッチ22cは、プッシュボタンで構成され、ゲームモードの選択等に用いられる。
動作スイッチ22dすなわちAボタンは、プッシュボタンで構成され、方向指示以外の動作、すなわち、プレイヤキャラクタに打つ(パンチ)、投げる、つかむ(取得)、乗る、ジャンプするなどの任意のアクションをさせることができる。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かす等を指示することができる。また、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。動作スイッチ22eすなわちBボタンは、プッシュボタンで構成され、セレクトスイッチ22cで選択したゲームモードの変更やAボタン22dで決定したアクションの取り消し等のために用いられる。
動作スイッチ22fすなわちXボタン、および動作スイッチ22gすなわちYボタンは、プッシュボタンで構成され、Aボタン22dとBボタン22eだけでは、ゲーム進行ができないときに、補助的な操作に用いられる。ただし、Xボタン22fおよびYボタン22gは、Aボタン22dおよびBボタン22eと同様の操作に用いることも可能である。もちろん、ゲームプレイにおいてXボタン22fとYボタン22gとを必ずしも使用しなくてよい。
動作スイッチ22L(左押しボタン)および動作スイッチ22R(右押しボタン)は、プッシュボタンで構成され、左押しボタン(Lボタン)22Lおよび右押しボタン(Rボタン)22Rは、Aボタン22dおよびBボタン22eと同様の操作に用いることができ、また、Aボタン22dおよびBボタン22eの補助的な操作に用いることができる。さらに、Lボタン22LおよびRボタン22Rは、方向スイッチ22a、Aボタン22d,Bボタン22e,Xボタン22f,Yボタン22gに割り当てられた役割を、他の役割に変更することができる。
また、LCD14の上面には、タッチパネル24が装着される。タッチパネル24としては、たとえば、抵抗膜方式、光学式(赤外線方式)および静電容量結合式のいずれかの種類のものを用いることができる。また、タッチパネル24は、その上面をスティック26ないしはペン(スタイラスペン)或いは指(以下、これらを「スティック26等」という場合がある。)で、押圧したり、撫でたり、触れたりすることにより操作(タッチ操作)すると、スティック26等の操作位置の座標を検出して、検出した座標(検出座標)に対応する座標データを出力する。
なお、この実施例では、LCD14(LCD12も同じ、または略同じ。)の表示面の解像度は256dot×192dotであり、タッチパネル24の検出精度も表示画面に対応して256dot×192dotとしてあるが、タッチパネル24の検出精度は表示画面の解像度よりも低くてもよく、高くてもよい。
LCD12およびLCD14には異なるゲーム画面が表示されてもよい。たとえば、レースゲームでは一方のLCDに運転席からの視点による画面を表示し、他方のLCDにレース(コース)全体の画面を表示することができる。また、RPGでは、一方のLCDにマップやプレイヤキャラクタ等のキャラクタを表示し、他方のLCDにプレイヤキャラクタが所有するアイテムを表示することができる。さらに、一方のLCD(この実施例では、LCD14)にゲームの操作画面(ゲーム画面)を表示し、他方のLCD(この実施例では、LCD12)に当該ゲームに関する情報(得点やレベルなど)を含む他のゲーム画面を表示することができる。さらには、2つのLCD12およびLCD14を合わせて1つの画面として用いることにより、プレイヤキャラクタが倒さなければならない巨大な怪物(敵キャラクタ)を表示することもできる。
したがって、プレイヤはスティック26等でタッチパネル24を操作することにより、LCD14の画面に表示されるプレイヤキャラクタ、敵キャラクタ、アイテムキャラクタ、操作オブジェクトなどの画像を指示(操作)したり、コマンドを選択(入力)したりすることができる。また、3次元ゲーム空間に設けられる仮想カメラ(視点)の方向(視線の向き)を変化させたり、ゲーム画面(マップ)のスクロール(徐々に移動表示)方向を指示したりすることもできる。
なお、ゲームの種類によっては、タッチパネル24を用いることにより、その他の入力指示も可能である。たとえば、座標入力指示を入力したり、LCD14において文字,数字,記号等を手書き入力したりすることができる。
このように、ゲーム装置10は、2画面分の表示部となるLCD12およびLCD14を有し、いずれか一方(この実施例では、LCD14)の上面にタッチパネル24が設けられるので、2画面(12,14)と2系統の操作部(22,24)とを有する構成になっている。
また、この実施例では、スティック26は、たとえば下側ハウジング16bに設けられる収納部(図1では点線で示す)に収納することができ、必要に応じて取り出される。ただし、スティック26を設けない場合には、その収納部も設ける必要はない。
さらに、ゲーム装置10はメモリカード(またはカートリッジ)28を含み、このメモリカード28は着脱自在であり、下側ハウジング16bの裏面ないしは下端(底面)に設けられる挿入部30(図1では点線で示す)に挿入される。図1では省略するが、挿入部30の奥部には、メモリカード28の挿入方向先端部に設けられるコネクタ(図示せず)と接合するためのコネクタ32(図2参照)が設けられており、したがって、メモリカード28が挿入部30に挿入されると、コネクタ同士が接合され、ゲーム装置10のCPUコア34(図2参照)がメモリカード28にアクセス可能となる。
なお、図1では表現できないが、上側ハウジング16aの音抜き孔20aおよび20bと対応する位置であり、この上側ハウジング16aの内部にはスピーカ36aおよび36b(図2参照)が設けられる。
また、図1では省略するが、たとえば、下側ハウジング16bの裏面側には、電池収容ボックスが設けられ、また、下側ハウジング16bの底面側には、音量スイッチ、外部拡張コネクタおよびイヤフォンジャックなどが設けられる。
図2はゲーム装置10の電気的な構成を示すブロック図である。図2を参照して、ゲーム装置10は電子回路基板38を含み、この電子回路基板38には上述のCPUコア34等の回路コンポーネントが実装される。CPUコア34は、バス40を介して前述のコネクタ32に接続されるとともに、RAM42、第1のグラフィック処理ユニット(GPU)44、第2のGPU46、入出カインターフエース回路(以下、「I/F回路」という。)48およびLCDコントローラ50が接続される。
コネクタ32には、上述したように、メモリカード28が着脱自在に接続される。メモリカード28は、ROM28aおよびRAM28bを含み、図示は省略するが、ROM28aおよびRAM28bは、互いにバスで接続され、さらに、コネクタ32と接合されるコネクタ(図示せず)に接続される。したがって、上述したように、CPUコア34は、ROM28aおよびRAM28bにアクセスすることができるのである。
ROM28aは、ゲーム装置10で実行すべきゲームのためのゲームプログラム、画像データ(文字やオブジェクトの画像、背景画像、アイテム画像、アイコン(ボタン)画像、メッセージ画像など)およびゲームに必要な音(音楽)のデータ(音データ)等を予め記憶する。RAM(バックアップRAM)28bは、そのゲームの途中データやゲームの結果データなどを記憶(セーブ)する。
RAM42は、バッファメモリないしはワーキングメモリとして使用される。つまり、CPUコア34は、メモリカード28のROM28aに記憶されたゲームプログラム、画像データおよび音データ等をRAM42にロードし、ロードしたゲームプログラムを実行する。また、CPUコア34は、ゲームの進行に応じて一時的に発生するデータ(ゲームデータやフラグデータ)をRAM42に記憶しつつゲーム処理を実行する。
なお、ゲームプログラム、画像データおよび音データ等は、ROM28aから一度に全部、または部分的かつ順次的に読み出され、RAM42に記憶(ロード)される。
ただし、メモリカード28のROM28aには、ゲーム以外の他のアプリケーションについてのプログラムおよび当該アプリケーションの実行に必要な画像データが記憶される。また、必要に応じて、音(音楽)データが記憶されてもよい。かかる場合には、ゲーム装置10では、当該アプリケーションが実行される。
GPU44およびGPU46は、それぞれ、描画手段の一部を形成し、たとえばシングルチップASICで構成され、CPUコア34からのグラフィックスコマンド(作画命令)を受け、そのグラフィックスコマンドに従って画像データを生成する。ただし、CPUコア34は、グラフィックスコマンドに加えて、画像データの生成に必要な画像生成プログラム(ゲームプログラムに含まれる。)をGPU44およびGPU46のそれぞれに与える。
また、GPU44には、第1のビデオRAM(以下、「VRAM」という。)52が接続され、GPU46には、第2のVRAM54が接続される。GPU44およびGPU46が作画コマンドを実行するにあたって必要なデータ(画像データ:ポリゴンやテクスチャ等のデータ)は、GPU44およびGPU46が、それぞれ、第1のVRAM52および第2のVRAM54にアクセスして取得する。
なお、CPUコア34は、描画に必要な画像データをGPU44およびGPU46を介して第1のVRAM52および第2のVRAM54に書き込む。GPU44はVRAM52にアクセスして描画のための画像データを作成し、GPU46はVRAM54にアクセスして描画のための画像データを作成する。
VRAM52およびVRAM54は、LCDコントローラ50に接続される。LCDコントローラ50はレジスタ56を含み、レジスタ56はたとえば1ビットで構成され、CPUコア34の指示によって「0」または「1」の値(データ値)を記憶する。LCDコントローラ50は、レジスタ56のデータ値が「0」である場合には、GPU44によって作成された画像データをLCD12に出力し、GPU46によって作成された画像データをLCD14に出力する。また、LCDコントローラ50は、レジスタ56のデータ値が「1」である場合には、GPU44によって作成された画像データをLCD14に出力し、GPU46によって作成された画像データをLCD12に出力する。
なお、LCDコントローラ50は、VRAM52およびVRAM54から直接画像データを読み出したり、GPU44およびGPU46を介してVRAM52およびVRAM54から画像データを読み出したりする。
I/F回路48には、操作スイッチ22,タッチパネル24およびスピーカ36a,36bが接続される。ここで、操作スイッチ22は、上述したスイッチ22a,22b,22c,22d,22e,22g,22Lおよび22Rであり、操作スイッチ22が操作されると、対応する操作信号(操作データ)がI/F回路48を介してCPUコア34に入力される。また、タッチパネル24からの座標データがI/F回路48を介してCPUコア34に入力される。さらに、CPUコア34は、ゲーム音楽(BGM)、効果音またはゲームキャラクタの音声(擬制音)などのゲームに必要な音データをRAM42から読み出し、I/F回路48を介してスピーカ36a,36bから出力する。
図3は、図1および図2に示すゲーム装置10を用いて、この実施例の仮想ゲームをプレイする場合に、図示は省略するが、或るシーンのゲーム画面(化石のクリーニング画面)をLCD14に表示するために、VRAM54(またはVRAM52)に描画される画像データのレイヤ構造を示す。この実施例では、図3からも分かるように、化石のクリーニング画面(画像)は、6つのレイヤ100,102,104,106,108,110によって構成される。レイヤ100,102,104,106,108,110は、XY平面に平行であり、その順番で、視点(仮想カメラ)からZ軸方向に遠ざかるように所定の間隔で配置される。
レイヤ100には、岩石の1層目の画像が描画される。レイヤ102には、岩石の2層目の画像が描画される。レイヤ104には、岩石の3層目の画像が描画される。レイヤ106には、化石の表層の画像が描画される。レイヤ108には、化石の内層の画像が描画される。そして、レイヤ110には、化石のクリーニングのための作業台の画像が描画される。
クリーニング画像は複数の領域に分割され、領域単位で管理される。各領域は、平面形状(XY平面上における形状)は同じであり、この実施例では、正六角形に設定される。具体的には、図4(A)に示すように、視点側からレイヤ100を見ると、各領域(以下、「ヘクス」と呼ぶことにする。)は正六角形の形状に分割される。これは、画像の表示変化により、化石のクリーニング作業を現実的に表現するためである。
この実施例では、上述したように、クリーング画像はヘクス単位で管理される。各へクスは、同一のレイヤ100−110内では、固定的に付された番号で識別され、XY平面内の位置が同じであれば、異なるレイヤ100−110であっても(Z軸方向にずれても)同じ番号で識別される。つまり、各ヘクスは層構造となっているのである。具体的には、図4(B)にレイヤ100−110の一部を示すと、同一のレイヤ100、102、104内では、ヘクス1,2,3のように区別される。ただし、ヘクス1,2,3は、レイヤ100,102,104が異なってもXY平面内の位置が同じであれば、同じ番号で管理される。したがって、各ヘクスには、レイヤ100−110の各々に対応して、画像(最大で6種類の画像)が設定され、また岩石や化石が削られるか否かを判別するための耐久力値(最大で6種類の耐久力値)が設定されている。
後述するように、プレイヤがハンマやドリルを用いて削り操作をすると、削り対象のヘクスが特定され、この削り対象のヘクスにおいて、現在画像が表示されているレイヤ100−110(以下、「画像表示レイヤ」という)に設定されている耐久力値が検出される。そして、画像表示レイヤに設定されている耐久力値からハンマやドリルによる破壊力の値(破壊力値)が減算される。ここで、耐久力値が0以下になると、当該画像表示レイヤは削除される。つまり、削り対象のヘクスの画像表示レイヤに設定された画像が消去され、その下のレイヤに設定された画像が表示されることになる。すなわち、当該削り対象のヘクスにおいて、画像表示レイヤが更新されるのである。このように、ヘクス単位で画像表示レイヤを更新することにより、ハンマやドリルを用いて岩石や化石を削る様子が画面表示されるのである。
なお、各ヘクスのレイヤ100−110毎に設定される耐久力値の初期値を、各ヘクス間や各レイヤ100−110間で異なる値に設定することにより、岩石や化石の硬い所や軟らかい所を表現することができる。また、レイヤ110には、作業台の色彩ないし模様の画像(テクスチャ)が一面に貼り付けられる。
図示は省略するが、仮想ゲームにおいてクリーニング作業を実行する場合には、プレイヤは所望の道具やその種類を選択することができる。図示は省略するが、クリーニング作業のための道具としては、ハンマとドリルとを選択することができ、たとえば、ハンマまたはドリルを選択するためのアイコン画像がLCD14に表示される。したがって、プレイヤは、所望のアイコン画像をタッチするなどして道具を選択する。さらに、道具を選択すると、その種類を選択するためのアイコン画像が表示される。たとえば、ハンマやドリルは3種類ずつ設けられる。ハンマはそのサイズが3種類(大、中、小)用意されている。この実施例では、使用するハンマの種類に応じて破壊力が異なる。また、ドリルはその径のサイズが3種類(大、中、小)用意されている。この実施例では、使用するドリルの種類に応じて削る範囲と破壊力とが異なる。
なお、道具の選択方法は単なる一例であり、これに限定される必要はない。たとえば、セレクトスイッチ22cを押すことにより、道具およびその種類を選択可能な選択画面(メニュー画面)を表示し、方向指示スイッチ22aを用いて道具およびその種類を選択し、Aボタン22dを押すことにより、選択した道具およびその種類を決定することができる。
図5ないし図10を用いて、クリーニング作業において、ハンマやドリルを使用して岩石や化石を削る場合の画像処理および削った後の画像処理について説明する。図5ないし図7は、ハンマを用いる場合の破壊力の伝播の仕方および岩石や化石を削る場合の画像処理を説明するための図解図である。
まず、図5を用いて、ハンマで岩石や化石を削る場合の破壊力の伝播の仕方について説明する。図5では、レイヤ100−110の一部を水平方向(横方向)から見た場合の断面図を示す。ただし、図面の都合上、断面を表わすハッチングは省略してある。また、ハンマによる破壊力が直接的に加えられる(タッチ位置を含む)ヘクスの最上層(ここではレイヤ100)すなわち画像表示レイヤを太線枠で示してある。さらに、図5では、破壊力の大きさの一例を白抜きの矢印の大きさで対比可能に示してある。
図5に示すように、破壊力はレイヤ100−110の上層から下層に向けて(Z軸方向に)伝播するとともに、同一のレイヤ100−110内の水平方向(XY方向)に伝播する。つまり、図5の一点鎖線で示すように、ハンマの破壊力が伝播する範囲は、ハンマで叩いた位置を中心とする円弧の形状となる。これは、図5の横方向(90度回転した方向)から見た場合のように、Z軸周りの他の方向から見た場合も同じであり、したがって、衝撃力は岩石や化石に対してすり鉢状に伝播される。
この実施例では、上述したように、各ヘクスでは、レイヤ100−110毎に、耐久力値が設定されており、各ヘクスのレイヤ100−110毎に岩石や化石が削られたかどうかを判断するようにしてある。具体的には、プレイヤがスティック26を用いてタッチパネル24を指示(タッチ)すると、タッチ位置のヘクス(以下、「指示ヘクス」という。)にハンマによる破壊力が加えられる。つまり、ハンマで叩いた中心のヘクスすなわち指示ヘクスの画像表示レイヤに、直接的にハンマの破壊力が加えられる。この破壊力は、図5に示したように、指示ヘクスを通して、垂直方向および水平方向に伝播する。以下、垂直方向への破壊力の伝播と、水平方向への破壊力の伝播とを分けて説明する。
垂直方向への破壊力の伝播は、まず、指示ヘクスの画像表示レイヤに設定されている耐久力値から、破壊力値を減算する。ここで、耐久力値が0以下になり、破壊力値が残っている場合には、その画像表示レイヤの下のレイヤに設定されている耐久力値から、残っている破壊力値が減算される。破壊力値が無くなる(0になる)まで、このような処理が繰り返される。このようにして、垂直方向において、削除するレイヤが決定され、画面更新時に削除される。
次に、図6および図7を用いて、水平方向(XY平面内)への破壊力の伝播の仕方について詳細に説明する。ただし、図6に示す場合では、簡単のため、各ヘクスの画像表示レイヤは同一のレイヤ100−110であると仮定して説明する。
上述したように、プレイヤがスティック26を用いてタッチパネル24を指示(タッチ)すると、図6(A)に示すように、そのタッチ位置のヘクス(指示ヘクス)がハンマによって叩かれた中心のヘクスとして特定される。なお、タッチパネル24がタッチされたとき(ハンマによって叩かれたとき)を、第nフレームとする。
指示ヘクスには、上述したように、ハンマによる破壊力が直接的に加えられる。ハンマからの破壊力が指示ヘクスに加えられると、当該指示ヘクスの画像表示レイヤの耐久力値から破壊力値が減算される。ここで、画像表示レイヤの耐久力値が0以下である場合には、当該画像表示レイヤは次のフレーム(第n+1フレーム)で削除される。つまり、画像表示レイヤに設定されている画像が消去される。
なお、上述したように、ハンマによる破壊力は、ハンマの種類によって予め決定されている。
第nフレームにおいて、画像表示レイヤの耐久力値から破壊力値を減算したときに、破壊力値が残っている場合には、図6(B)に示すように、次のフレーム(第n+1フレーム)で、その破壊力値が指示ヘクスに隣接するヘクスに伝播する。つまり、破壊力が、指示ヘクスに隣接するヘクスの画像表示レイヤに伝播するのである。したがって、ハンマによる破壊力は、XY平面内において、ハンマで叩いた位置(指示ヘクス)を中心に、放射状に伝播する。この実施例では、残っている破壊力値が、隣接するヘクスのそれぞれに伝播する。すると、指示ヘクスに隣接する各ヘクスでは、画像表示レイヤに設定された耐久力値から残っている破壊力値が減算される。このようにして、破壊力値が0になるまで、フレーム毎に、破壊力の伝播処理が実行される。
したがって、図6(B)に示す第n+1フレームの状態において、耐久力値が0以下になった画像表示レイヤを有するヘクスでは、その画像表示レイヤが次のフレーム(第n+2フレーム)で削除される。このとき、破壊力値が0になっていない場合には、第n+2フレームで削除されるべき画像表示レイヤを有するヘクスに隣接するヘクスに、残っている破壊力が与えられる。
ただし、隣接するヘクスは、指示ヘクスを中心にして、放射状に離れる側のヘクスのみを意味する。
また、図5に示したように、指示ヘクスの周囲のヘクスについても水平方向のみならず、垂直方向に破壊力は伝播する。つまり、指示ヘクスの周囲のヘクスに破壊力が伝播すると、その周囲のヘクスでは、垂直方向にも破壊力は伝播する。垂直方向における破壊力の伝播については、上述したとおりである。
ここで、図6(A)−図6(C)では、各ヘクスの画像表示レイヤが同じレイヤ100−110である場合について説明した。しかし、実際には、画像表示レイヤは、各ヘクス間で異なること多い。したがって、たとえば、既に穴が形成されているような箇所をハンマで叩いた場合には、水平方向に破壊力が伝播すると、当該破壊力が伝播するレイヤ102−110よりも、画像表示レイヤが高い(Z値が小さい)場合がある。かかる場合には、実際のクリーニング作業等を考慮して、上のレイヤ100−108の画像表示レイヤにも破壊力は伝播するようにしてある。かかる場合にも、上述した垂直方向への破壊力の伝播方法と同様にして、破壊力が伝播される。
しかし、水平方向において、岩石や化石の一部に穴や段差が形成されている場合には、つまり破壊力が伝播されるレイヤ100−110よりも画像表示レイヤの方が低い(Z値が大きい)場合には、その穴や段差の手前のヘクスで破壊力の水平方向への伝播は途絶える。たとえば、図7(A)に示すように、第nフレームにおいて、指示ヘクスの画像表示レイヤと白色のヘクスの画像表示レイヤとが同じレイヤ(100−106)であり、右斜め下方向への斜線を付した4つのヘクスの画像表示レイヤがそのレイヤ(100−106)よりも2つ以上下のレイヤ(104−110)である場合には、少なくとも第n+2フレーム目までは、ハンマによる破壊力はその4つのヘクスに伝播されることはない。したがって、図7(B)に示すように、ハンマによる破壊力が与えられた指示ヘクスの画像表示レイヤと同じ画像表示レイヤを有するヘクス(太線枠で囲む3つのヘクス)であっても、それよりも下の画像表示レイヤを有するヘクスを間に挟んでいる場合には、破壊力は伝播されない。
次に、図8を用いて、ドリルを用いる場合の破壊力が加えられる範囲、削り対象のヘクスの決定方法および岩石や化石を削る場合の画像処理について説明する。プレイヤがスティック26を用いてタッチパネル24をタッチすると、図8(A)に示すように、タッチ位置のヘクスがドリルによって削られる(掘られる)中心のヘクス(指示ヘクス)として特定される。なお、ドリルによって岩石や化石を削り始めたときを、第nフレームとする。
ドリルはその種類によって、破壊力が加えられる(削る)範囲が予め決定されている。最も径小のドリルを用いる場合には、指示ヘクスおよびそれに隣接するヘクスの範囲を削ることができる(図8(A)〜図8(C)参照)。つまり、指示ヘクスを中心とし、その周辺1マス分を含む範囲が削る範囲である。径中のドリルを用いる場合には、指示ヘクスを中心とし、その周辺2マス分を含む範囲が削る範囲である。さらに、径大のドリルを用いる場合には、指示ヘクスを中心とし、その周辺3マス分を含む範囲が削る範囲である。詳細な説明は省略するが、上述したように、ドリルによる破壊力もまた、その種類によって予め決定されている。
通常、ドリルが岩石や化石を削ることができるのは、ドリルが岩石や化石に当っている(接している)部分のみである。したがって、この実施例では、削る範囲が決定されると、ドリルが岩石や化石を削る対象として、指示ヘクスおよび指示ヘクスを中心として削る範囲に含まれるヘクスのうち、最も画像表示レイヤが高い(Z値が小さい)ヘクスを特定する。
図8(A)〜図8(C)を参照して、削る範囲および削る対象のヘクスの特定について説明することにする。ただし、図8(A)−図8(C)に示す例では、径小のドリルが使用されている場合について示してある。図8(A)では、左斜め下向きの斜線が付されたヘクスの画像表示レイヤが最上位であり、斑点模様が付されたヘクスの画像表示レイヤは斜線が付されたヘクスの画像表示レイヤよりも下のレイヤであり、さらに、網掛け模様が付されたヘクスの画像表示レイヤは斑点模様が付された画像表示レイヤよりも下のレイヤである。ただし、同じ斜線や模様が付されたヘクスの画像表示レイヤ同じレイヤである。
したがって、図8(A)に示すように、第nフレームでは、ドリルは左斜め下向きの斜線が付されたヘクスにのみ、ドリルによる破壊力が与えられる。上述したように、各ヘクスでは、レイヤ100−110に対応して耐久力値が設定されていて、その耐久力値から破壊力値を減算して、削り範囲に存在するヘクスの画像表示レイヤを削除するか否かを決定する。これは上述のハンマを用いる場合と同様である。したがって、重複した説明は省略する。ただし、実際には、ドリルが削り範囲に含まれるヘクスであって、最上位の画像表示レイヤがすべて削除されない限り、削り範囲に含まれる次のレイヤを削ることはできない。また、図8(A)−図8(C)では、簡単のため、ドリルによる削り操作は継続して行われているものと仮定するとともに、削り対象となるヘクスの画像表示レイヤの画像が1フレーム毎に消去されるものと仮定する。
第n+1フレームでは、指示ヘクスに隣接するヘクスであって、指示ヘクスの画像表示レイヤと同じ画像表示レイヤを有するヘクスが削り対象として特定される。図8(B)に示す例において、斑点模様が付されたヘクスが削り対象となる。この第n+1フレームにおいて、削り対象のヘクスが削除される。すると、第n+2フレームにおいて、削り範囲に存在する指示ヘクスに隣接するヘクスであって、指示ヘクスの画像表示レイヤと同じ画像表示レイヤを有するヘクスが削り対象として特定される。具体的には、図8(C)に示すように、網掛け模様が付されたヘクスが削りの対象となる。したがって、この第n+2フレームにおいて、削り対象のヘクスが削除される。このような処理は、スティック26等によって、タッチパネル24をオンし続けている間、または、削り対象のすべてのヘクスについてのすべての画像表示レイヤが最下位(最下層:レイヤ110)になるまで繰り返される。
なお、ドリルによって岩石や化石を削る場合には、上述したように、ドリルが当っている部分が削られるため、たとえば、ドリルの外形(円形)と同じ形状の穴が形成される。
また、ドリルを用いる場合に、プレイヤがスティック26をスライドさせてタッチ位置を移動させ(スライド操作して)、連続したフレームで離れた座標へのタッチが検出されると、離れた2点間をラインアルゴリズムで走査し、その間に存在するヘクスも削り対象とする。したがって、たとえば、図9(A)に示すように、第nフレームのタッチ位置と、第n+1フレームのタッチ位置とが連続的に検出されたとき、その第nフレームの指示ヘクスと第n+1フレームの指示ヘクスとが削除対象となるとともに、図9(B)に示すように、第nフレームの指示ヘクスと第n+1フレームの指示ヘクスとの間に在るヘクスもまた削除対象となる。
ただし、第nフレームのタッチ位置を含むヘクス(説明の便宜上、「第1ヘクス」という。)の画像表示レイヤと、第n+1フレームのタッチ位置を含むヘクス(説明の便宜上、「第2ヘクス」という。)の画像表示レイヤとが異なるレイヤである場合には、第1ヘクスから第2ヘクスに向かう途中で画像表示レイヤのレイヤ100−110が変化する場合がある。たとえば、第1ヘクスの画像表示レイヤよりも第2ヘクスの画像表示レイヤの方が下位(下層)である場合には、その画像表示レイヤのレイヤの高さ(Z値)が変化する場合には、レイヤの高さが変化してから第2ヘクスまでのヘクスは削り対象にならない。ただし、変化した画像表示レイヤが第1ヘクスの画像表示レイヤよりも上位(上層)である場合には、第1レイヤから第2レイヤまでのすべてが削除対象となる。
また、第1ヘクスと第2ヘクスとが同じレイヤ上であっても、第1ヘクスから第2ヘクスに向かう途中に存在するヘクスの画像表示レイヤが、第1ヘクスおよび第2ヘクスの画像表示レイヤよりも下層である場合には、その下層に存在するヘクスは削除対象とならない。一方、変化したレイヤが第1ヘクスおよび第2ヘクスよりも上層である場合には、第1レイヤから第2レイヤまでのすべてが削り対象となる。
次に、図10(A)−図10(D)を用いて、ハンマやドリルを用いて岩石や化石を削ったことにより、穴が形成された場合の画面表示の方法を説明する。つまり、岩石や化石を削ることより形成された穴の淵の部分(レイヤの異なる隣のヘクスとの段差(断面))が画面上で表現される。図10(A)は白色のヘクスと斑点模様が付されたヘクスとが存在し、斑点模様が付されたヘクスが白色のヘクスよりも下層である。つまり、斑点模が付されたヘクスが配置される部分が穴に相当する。
図10(B)には、断面部分を表示するためのテンプレートが示される。このようなテンプレートを削除されたヘクスとそれに隣接するヘクスとの間に設けることにより、穴が形成されていることを表現することができる。テンプレートは、1または2以上の組み合わせにより使用される。ただし、簡単のため、図10(B)では、いずれか2つを組み合わせて使用する場合のテンプレートのみを示してある。図10(A)に示す穴の部分と同じ形状になるように、図10(B)に示す6つのテンプレートから2つのテンプレートが選択される。したがって、図10(C)に示すように、2つのテンプレートが合成ないし接合されたテンプレート(合成テンプレート)が生成される。そして、図10(D)に示すように、合成テンプレートが図10(A)に示した穴の部分に貼り付けられる。したがって、穴が形成された様子が現実的に表現される。
図11は図2に示したRAM42のメモリマップ70を示す図解図である。RAM42は、プログラム記憶領域72およびデータ記憶領域74を含む。プログラム記憶領域72には、画像処理プログラムが記憶され、この画像処理プログラムは、入力座標検出プログラム72a、道具選択処理プログラム72b、ハンマ破壊処理プログラム72c、ドリル破壊処理プログラム72d、画像表示プログラム72eおよびクリーニング判定プログラム72fなどによって構成される。
入力座標検出プログラム72aは、プレイヤのタッチ操作によってタッチパネル24から入力される座標データを取得し、取得した座標データからタッチ位置の座標(タッチ座標)を検出して、タッチ座標の座標データをRAM74に記憶するためのプログラムである。道具選択処理プログラム72bは、ハンマまたはドリルを選択するとともに、ハンマの種類またはドリルの種類を選択するためのプログラムである。
ハンマ破壊処理プログラム72cは、ハンマを用いて岩石や化石を削る場合に、その破壊力の伝播処理および耐久力値が0以下の画像表示レイヤの削除を行うためのプログラムである。ドリル破壊処理プログラム72dは、ドリルを用いて岩石や化石を削る場合に、その破壊力がおよぶ範囲の決定したり、破壊力を伝播するべき削り対象のヘクスを特定したり、削り対象のヘクスのうち耐久力値が0以下となる画像表示レイヤの削除を行うためのプログラムである。
画像表示プログラム72eは、後述する画像データを用いて、LCD12およびLCD14に表示する画面データを生成し、LCD12およびLCD14に画面を表示し、その表示をフレーム毎に更新するためのプログラムである。クリーニング判定プログラム72fは、化石のクリーニングが成功したか否かを判定するためのプログラムである。この実施例では、画像表示レイヤがレイヤ106であるヘクスの総数が所定数以上である場合に、つまり化石の表層が或る一定範囲以上現れている場合に、クリーニングが成功であると判断する。一方、画像表示レイヤがレイヤ108またはレイヤ110であるヘクスの総数が所定数以上である場合に、つまり化石の内層や作業台が現れ、化石の表層が一定範囲以上欠落している(壊れている)場合に、クリーングが失敗であると判定する。
図示は省略するが、画像処理プログラムには、音出力プログラムやバックアッププログラムなども含まれる。音出力プログラムは、音データを用いて、キャラクタの音声や擬声音、音楽(BGM)、効果音のような音を生成し、出力するためのプログラムである。バックアッププログラムは、プレイヤの指示やイベントの発生により、ゲームデータ(途中データや結果データ)をRAM28bに記憶(セーブ)するためのプログラムである。
図12は、図11に示したデータ記憶領域74の具体的な内容の例を示す図解図である。図12に示すように、データ記憶領域74には、ヘクスデータ74a、道具データ74b、タッチ座標データ74c、ハンマ選択フラグデータ74d、ドリル選択フラグデータ74eおよび破壊伝播処理フラグデータ74fなどのデータが記憶される。
ヘクスデータ74aは、各ヘクスn(n=1,2,…,N)についてのデータ、すなわちヘクス1データ80、ヘクス2データ82、…を含む。各ヘクスnデータの構成は同じであるため、ここではヘクス1データ80について詳細に説明し、他のヘクス2データ82、…、ヘクスNデータについての説明は省略する。
ヘクス1データ80は、画像データ80a、耐久力値データ80b、位置座標データ80c、レイヤ番号データ80d、状態データ80eおよび伝播フラグデータ80fによって構成される。画像データ80aは、ヘクス1に描画される画像についてのデータ(ポリゴンデータやテクスチャデータなど)であり、レイヤ100−110毎に用意される。たとえば、テクス1が岩石および化石を含む部分である場合には、画像データ80aはレイヤ100に対応する岩石の1層目の画像データ、レイヤ102に対応する岩石の2層目の画像データ、レイヤ104に対応する岩石の3層目の画像データ、レイヤ106に対応する化石の表層の画像データ、レイヤ108に対応する化石の内層の画像データおよびレイヤ110に対応する作業台の画像データによって構成される。また、たとえば、テクス1が岩石のみであり化石を含まない部分である場合には、画像データ80aは、レイヤ100に対応する岩石の1層目の画像データ、レイヤ102に対応する岩石の2層目の画像データ、レイヤ104に対応する岩石の3層目の画像データ、レイヤ106に対応する画像データなし(nullデータ)、レイヤ108に対応するnullデータおよびレイヤ110に対応する作業台の画像データを含む。
耐久力値データ80bは、岩石や化石が削られるか否かを判断するための耐久力値(閾値)についての数値データである。この実施例では、レイヤ100−110の各々に対応して耐久力値が設定される。ただし、岩石や化石が存在しないレイヤ100−110に対してはnullデータが記述される。つまり、画像(画像データ)が設定されていないレイヤ100−110については、耐久力値が設定されない。位置座標データ80cは、ヘクス1が配置される位置座標(XY座標)のデータである。なお、図示は省略するが、レイヤ100−110のZ座標(Z値)は予め設定され、データ記憶領域74の他の領域に記憶されている。レイヤ番号データ80dは、ヘクス1において現在表示されている画像についての画像データが描画されているレイヤ100,102,104,106,108,110すなわち画像表示レイヤを識別するための識別番号を示す数値データである。たとえば、この実施例では、レイヤ100−110には、画像の表示順位を示すレイヤ番号が付されている。図3からも分かるように、視点に近い側のレイヤの画像が優先的に表示されるため、表示順位を示すレイヤ番号は次のように設定してある。具体的に言うと、レイヤ100のレイヤ番号は「1」であり、レイヤ102のレイヤ番号は「2」であり、レイヤ104のレイヤ番号は「3」であり、レイヤ106のレイヤ番号は「4」であり、レイヤ108のレイヤ番号は「5」であり、そして、レイヤ110のレイヤ番号は「6」である。このレイヤ番号データ80dが示す番号は、岩石や化石が削られ、対応するヘクスの画像表示レイヤが削除されると、更新(インクリメント)される。
状態データ80eは、ヘクス1の状態を示すデータである。この実施例では、ヘクス1の状態は、「ROCK(破壊力を受けていない状態)」,「SHOCK(削り対象として特定された状態)」および「EMPTY(削られた状態)」のいずれかであり、たとえば、2ビットのレジスタを用いて表わされる。具体的には、レジスタの値が“10”である場合には「ROCK」の状態を示し、レジスタの値が“01”である場合には「SHOCK」の状態を示し、そして、レジスタの値が“00”である場合には「EMPTY」の状態を示す。伝播フラグデータ80fは、ヘクス1に水平方向に隣接するヘクスに破壊力を伝播させるか否かを判断するためのフラグデータである。この伝播フラグデータ80fは、1ビットのレジスタで構成される。隣接するヘクスに破壊力を伝播させる場合には、伝播フラグはオン(成立)され、レジスタにデータ値「1」が設定される。一方、隣接するヘクスに破壊力を伝播させない場合には、伝播フラグはオフ(不成立)され、レジスタにデータ値「0」が設定される。
道具データ74bは、ハンマの画像データ90およびドリルの画像データ92を含む。画像データ90は、道具を選択する場合に、ハンマのアイコンを表示するための種類(大,中,小)毎の画像データである。画像データ92は、道具を選択する場合に、ドリルのアイコンを表示するための種類(大,中,小)毎の画像データである。
タッチ座標データ74cは、タッチパネル24から入力された座標データに基づいて検出されたタッチ座標の座標データである。たとえば、タッチ座標データ74cは、1フレーム毎に更新され、画像処理を実行している間に検出される座標データを時系列に従って並べたデータである。したがって、たとえば、タッチ座標データ74cは、画像処理の開始時にリセット(消去)される。
ハンマ選択フラグデータ74dは、ハンマが選択されているかどうかを判断するためのフラグデータであり、1ビットのレジスタで構成される。ハンマが選択されている場合には、ハンマ選択フラグはオンされ、レジスタにデータ値「1」が設定される。ただし、道具が選択されていない場合やドリルが選択されている場合には、ハンマ選択フラグはオフされ、レジスタにデータ値「0」が設定される。
ドリル選択フラグデータ74eは、ドリルが選択されているかどうかを判断するためのフラグデータであり、1ビットのレジスタで構成される。ドリルが選択されている場合には、ドリル選択フラグはオンされ、レジスタにデータ値「1」が設定される。ただし、道具が選択されていない場合やハンマが選択されている場合には、ドリル選択フラグはオフされ、レジスタにデータ値「0」が設定される。
破壊伝播処理フラグデータ74fは、破壊伝播処理を実行するか否かを判断するためのフラグデータであり、1ビットのレジスタによって構成される。破壊伝播処理を実行する場合には、破壊伝播処理フラグがオンされ、レジスタにデータ値「1」が設定される。一方、破壊伝播処理を実行しない場合には、破壊伝播処理フラグがオフされ、レジスタにデータ値「0」が設定される。
図示は省略するが、データ記憶領域74には、他のデータ、フラグデータやカウンタも設けられる。
具体的には、図2に示したCPUコア34が図13および図14に示すフロー図に従って画像処理を実行する。図13に示すように、CPUコア34は、画像処理を開始すると、ステップS1で、初期設定(画像データの設定)を実行する。図示および詳細な説明は省略するが、プレイヤは、クリーニング対象の複数の岩石から1の岩石を選択して、選択した1の岩石を用いて化石をクリーニングするため、選択された岩石についての画像データを設定するようにしてある。つまり、CPUコア34は、選択された岩石についてのヘクスデータ74aをROM28aから読み出し、RAM42のデータ記憶領域74に展開する(書き込む)のである。続くステップS3ではタッチ入力が有るかどうかを判断する。つまり、CPUコア34は、タッチパネル24から座標データが入力されているかどうかを判断する。
ステップS3で“NO”であれば、つまりタッチ入力が無ければ、そのまま図14に示すステップS21に進む。一方、ステップS3で“YES”であれば、つまりタッチ入力が有れば、ステップS5で、タッチ入力が示すタッチ座標を検出する。つまり、CPUコア34は、タッチパネル24から入力される座標データに基づいて、LCD14上のタッチ座標を検出する。
なお、上述したように、この実施例では、LCD14の解像度とタッチパネル24の検出精度とは同じに設定してあるため、LCD14およびタッチパネル24の座標系を同じにしておけば、タッチパネル24からの座標データが示す座標をタッチ座標として検出することができる。
続くステップS7では、いずれかのヘクスを選択しているかどうかを判断する。つまり、CPUコア34は、ステップS5で検出したタッチ座標が岩石、化石または作業台の描画領域に含まれるかどうかを判断する。ステップS7で“NO”であれば、つまりいずれのヘクスも選択していない場合には、ステップS9で道具選択かどうかを判断する。ステップS9で“NO”であれば、つまり道具選択でもなければ、何ら指示が無いと判断して、そのままステップS21に進む。一方、ステップS9で“YES”であれば、つまり道具選択であれば、ステップS11で、上述したような道具選択処理を実行してから、ステップS21に進む。詳細な説明は省略するが、上述したように、道具選択処理によって、ハンマまたはドリルが選択されるとともに、その種類(大、中、小)も選択される。
また、ステップS7で“YES”であれば、いずれかのヘクスを選択している場合には、ステップS13で、選択されている道具がハンマであるかどうかを判断する。つまり、CPUコア34は、ハンマ選択フラグデータ74dを参照して、ハンマ選択フラグがオンであるかどうかを判断する。ステップS13で“YES”であれば、つまりハンマ選択フラグがオンであれば、選択されている道具がハンマであると判断して、ステップS15で、後述するハンマ破壊処理(図15および図16参照)を実行して、ステップS21に進む。
しかし、ステップS13で“NO”であれば、つまりハンマ選択フラグがオフであれば、ハンマが選択されていないと判断して、ステップS17で、選択された道具がドリルであるかどうかを判断する。つまり、CPUコア34は、ドリル選択フラグデータ74eを参照して、ドリル選択フラグがオンであるかどうかを判断する。ステップS17で“NO”であれば、つまりドリル選択フラグがオフであれば、道具が選択されていないと判断して、そのままステップS21に進む。一方、ステップS17で“YES”であれば、つまりドリル選択フラグがオンであれば、選択された道具がドリルであると判断して、ステップS19で、後述するドリル破壊処理(図17参照)を実行して、ステップS21に進む。
図14に示すように、ステップS21では、画像表示を更新する。ここでは、たとえば、岩石をクリーニングしている場合には、1フレーム毎に、ハンマやドリルによって削られた後の画面が表示される。続くステップS23では、破壊伝播処理フラグがオンであるかどうかを判断する。具体的には、CPUコア34は、破壊伝播処理フラグデータ74fを参照して、破壊伝播処理フラグがオンであるかどうかを判断する。
ステップS23で“YES”であれば、つまり破壊伝播フラグがオンであれば、破壊伝播処理を実行すると判断して、ステップS25で、後述する破壊伝播処理(図18および図19参照)を実行して、図13に示したステップS3に戻る。一方、ステップS23で“NO”であれば、つまり破壊伝播フラグがオフであれば、破壊伝播処理を実行しないと判断して、ステップS27で、レイヤ番号が「4」のヘクスの総数aを算出する。つまり、CPUコア34は、ヘクスデータ74aを参照して、レイヤ番号データ(80d等)が示す数値が「4」であるヘクスnデータの個数を検出する。
続くステップS29では、総数aが所定数k1以上であるかどうかを判断する。ここで、所定数k1は、たとえば、化石の表層の画像が設定されたヘクスの総数の80−90%程度の数に決定される。ただし、岩石に含まれる化石は、岩石毎に異なるため、岩石に応じて所定数k1は決定される。ステップS29で“YES”であれば、つまり総数aが所定数k1以上であれば、ステップS31で、クリーニング成功処理を実行して、画像処理を終了する。図示は省略するが、たとえば、クリーニング成功処理は、破損していない化石の画像を含み、化石のクリーニングに成功した様子を画面表示したり、効果音を出力したり、または、それらの両方を実行したりする処理である。
また、ステップS29で“NO”であれば、つまり総数aが所定数k1未満であれば、ステップS33で、レイヤ番号が「5」または「6」のヘクスの総数bを算出する。つまり、CPUコア34は、ヘクスデータ74aを参照して、レイヤ番号データ(80d等)が示す数値が「5」または「6」であるヘクスnデータの個数を検出する。そして、ステップS35で、総数bが所定数k2以上であるかどうかを判断する。つまり、化石が壊れている程度を判断するのである。所定数k2は、たとえば、次のように決定される。まず、作業台が描画されたヘクスの総数から化石の内層の画像が設定されたヘクスの総数を減算して、クリーニング作業の当初から化石の画像が設定されておらず、作業台の画像が設定されているヘクスの数(以下、「作業台の純ヘクス数」という。)を算出する。この作業台の純ヘクス数を超えて作業台の画像が表示されたヘクスが検出された場合(化石の内層をも削り作業台が表示されている場合)や化石の内層の画像が表示されたヘクスが存在する場合に、化石が壊れてしまっている部分が存在すると言える。したがって、所定数k2は、化石の内層の画像が設定されたヘクスの総数の20−30%程度の数に決定される。ただし、上述したように、岩石に含まれる化石は、岩石毎に異なるため、岩石に応じて所定数k2は決定される。
ステップS35で“NO”であれば、つまり総数bが所定数k2未満であれば、化石に傷を付けたり、壊してしまっている程度が低いと判断して、クリーニング処理を続行すべく、そのままステップS3に戻る。一方、ステップS35で“YES”であれば、つまり総数bが所定数k2以上であれば、化石に傷を付けたり、壊してしまっている程度が高いと判断して、ステップS37で、クリーニング失敗処理を実行し、画像処理を終了する。図示は省略するが、たとえば、クリーニング失敗処理は、壊れた化石の画像を含み、クリーニングに失敗した様子を画面表示したり、失敗したことを示すような効果音を出力したり、またはそれら両方を実行したりする処理である。
図15および図16は、図13のステップS15に示したハンマ破壊処理のフロー図である。図15に示すように、CPUコア34は、ハンマ破壊処理を開始すると、ステップS51で、前フレームのタッチ入力が有るかどうかを判断する。つまり、CPUコア34は、タッチ座標データ74cを参照して、前フレームのタッチ座標の座標データが記憶されているかを判断することにより、ハンマを用いて岩石や化石を既に叩いているかどうかを判断する。
ステップS51で“YES”であれば、つまり前フレームのタッチ入力が有れば、図16に示すように、そのままハンマ破壊処理をリターンする。一方、ステップS51で“NO”であれば、つまり前フレームのタッチ入力が無ければ、ステップS53で、破壊力値Pを設定する。この実施例では、選択されたハンマの種類(大,中,小)に応じて破壊力値Pが設定される。ただし、プレイヤ(またはプレイヤキャラクタ)のレベルやゲームの進行状況に応じて、破壊力値Pを決定したり、ハンマの種類に応じて設定されている破壊力値Pを補正したりしてもよい。
続くステップS55では、各ヘクスの状態を設定する。つまり、CPUコア34は、ヘクスnデータ(80,82,…)の状態データ(80e等)を設定する。具体的には、レイヤ番号データ(80d等)が示すレイヤ番号が「1」−「5」であるヘクスnデータについては、状態データを“10”に設定し、レイヤ番号が「6」であるヘクスnデータについては、状態データを“00”に設定する。次にステップS57では、検出されたタッチ座標に基づいて選択されたヘクスを特定する。つまり、CPUコア34は、タッチ座標データ74cを参照して、現フレームのタッチ座標を検出する。次に、CPUコア34は、ヘクスnデータの位置座標データ(80c)を参照して、当該位置座標データが示す位置座標のうち、現在のタッチ座標と最も距離が小さい位置座標を有するヘクスを、選択されたヘクスすなわち指示ヘクスとして特定する。
続いて、図16に示すステップS59では、ステップS57で特定されたヘクス(指示ヘクス)の状態が「ROCK」であるかどうかを判断する。つまり、CPUコア34は、指示ヘクスのヘクスnデータに含まれる状態データが“10”であるかどうかを判断する。ステップS59で“NO”であれば、つまり指示ヘクスの状態が「ROCK」でなければ、そのまま後述するステップS75に進む。ステップS59で“YES”であれば、つまり指示ヘクスの状態が「ROCK」であれば、ステップS61で、当該特定されたヘクス(指示ヘクス)の状態を「SHOCK」に変更する。つまり、CPUコア34は、指示ヘクスのヘクスnデータに含まれる状態データを“01”に更新する。
続くステップS63では、当該特定されたヘクス(指示ヘクス)の耐久力値と、破壊力値Pとに基づいて破壊すべきレイヤ数を算出する。つまり、Z軸方向に伝播する破壊力によって削られるレイヤ数が求められる。上述したように、指示ヘクスの画像表示レイヤに設定された耐久力値から破壊力値Pを減算し、破壊力値Pが残っている場合に、その画像表示レイヤの下のレイヤに設定された耐久力値から残っている破壊力値Pを減算する。このような処理を、破壊力値Pが0になるまで繰り返す。ここでは、耐久力値が0以下となった破壊(削除)すべきレイヤの数を算出しているのである。
次のステップS65では、特定されたヘクス(指示ヘクス)の破壊処理を実行する。つまり、CPUコア34は、ステップS63で破壊すべきであると判断された(耐久力値が0以下になった)レイヤに設定された画像(画像データ)を消去する。そして、ステップS67では、特定されたヘクス(指示ヘクス)の伝播フラグをオンする。つまり、CPUコア34は、指示ヘクスに対応するヘクスnデータの伝播フラグデータを示すレジスタにデータ値「1」を設定する。
続いて、ステップS69では、特定されたヘクス(指示ヘクス)の状態を「EMPTY」に変更する。つまり、CPUコア34は、指示ヘクスに対応するヘクスnデータの状態データを“00”に設定する。次いで、ステップS71では、特定されたヘクスのレイヤ番号を算出されたレイヤ数だけインクリメントする。つまり、CPUコア34は、指示ヘクスに対応するヘクスnデータに含まれるレイヤ番号データが示すレイヤ番号を、ステップS63で算出されたレイヤ数だけ加算し、レイヤ番号データを更新する。ただし、算出後のレイヤ番号が示すレイヤに画像が設定されていない(nullデータが記憶されている)場合には、さらにレイヤ番号が加算(インクリメント)される。さらに、ステップS73で、破壊力値Pを所定数減算する。この実施例では、指示ヘクスにおいて、ハンマで叩いたときに画像表示レイヤとして設定されていたレイヤ100−110に設定された耐久力値が破壊力値Pから減算される。
そして、ステップS75では、破壊力値Pが0以下であるかどうかを判断する。ステップS75で“NO”であれば、つまり破壊力値Pが0以下でなければ、ステップS77で、破壊伝播処理フラグをオンして、図13および図14に示した画像処理にリターンする。つまり、ステップS77では、CPUコア34は、破壊伝播処理フラグデータ74fを示すレジスタにデータ値「1」を設定する。一方、ステップS75で“YES”であれば、つまり破壊力値Pが0以下であれば、そのまま画像処理にリターンする。
図17は、図13のステップS19に示したドリル破壊処理のフロー図である。ここでは、径小のドリルが選択された場合の破壊処理について説明するが、径の大きさによって、レイヤ番号を検出する(S93)ヘクスの範囲が異なる以外は、径中、径大のドリルが選択された場合も同様である。
図17に示すように、CPUコア34は、ドリル破壊処理を開始すると、ステップS91で、検出されたタッチ座標に基づいて選択されたヘクスを特定する。つまり、タッチ位置のヘクスが指示ヘクスとして特定される。この特定方法は、上述のステップS57の場合と同様である。続くステップS93では、特定されたヘクス(指示ヘクス)とその周辺のヘクスのレイヤ番号を検出する。つまり、CPUコア34は、指示ヘクスおよびその指示ヘクスの周囲に存在(隣接)する6つのヘクスについてのヘクスnデータに含まれるレイヤ番号データを参照する。
そして、ステップS95では、検出したレイヤ番号がすべて「6」であるかどうかを判断する。つまり、指示ヘクスおよびその指示ヘクスの周囲のヘクスが現在表示する画像がすべて作業台であるかどうかを判断するのである。ステップS95で“YES”であれば、つまり検出したレイヤ番号がすべて「6」である場合には、当該部分をドリルによって削ることができないと判断して、そのまま図13および図14に示した画像処理にリターンする。一方、ステップS95で“NO”であれば、つまり検出したレイヤ番号がいずれか1つでも「6」でない場合には、ステップS97で、ステップS93で検出したヘクスのレイヤ番号を比較する。そして、ステップS99では、最もレイヤ番号の小さいヘクスを選択し、選択したヘクス画像表示レイヤに設定されている耐久力値から破壊力値を減算する。ただし、最もレイヤ番号の小さいヘクスが複数有る場合には、CPUコア34は、それらすべてのヘクスの画像表示レイヤに設定されている耐久力値から破壊力値を減算する。
続くステップS101では、耐久力値が0以下であるかどうかを判断する。ここでは、ステップS99において減算処理を実行したヘクスの画像表示レイヤに設定されている耐久力値が0以下であるかどうかを判断するのである。ステップS101で“NO”であれば、つまり耐久力値が0よりも大きければ、そのまま画像処理にリターンする。一方、ステップS101で“YES”であれば、つまり耐久力値が0以下であれば、ステップS103で、当該ヘクスの破壊処理を実行する。つまり、耐久力値が0になった画像表示レイヤに設定されている画像(画像データ)を消去する。そして、ステップS105で、ステップS103において破壊処理されたヘクスのレイヤ番号を1インクリメントして、画像処理にリターンする。ただし、ステップS105では、上述したステップS71と同様に、インクリメントした後のレイヤ番号が示すレイヤに画像が設定されていない場合には、さらにレイヤ番号が1インクリメントされる。
なお、ステップS97において、最もレイヤ番号が小さいヘクスが複数有る場合には、ステップS99〜S103の処理は、それらすべてについて個別に実行される。
図18および図19は、図14に示したステップS25の破壊伝播処理のフロー図である。ただし、この破壊伝播処理は、ハンマを用いる場合の処理であり、指示ヘクスと水平方向に隣接するヘクス等、指示ヘクスの周囲のヘクスに破壊力を伝播させるとともに、当該周囲のヘクスから垂直方向(Z軸方向)に破壊力を伝播させ、ヘクスnにおいて耐久力値が0以下のレイヤを削除するための処理である。
図18に示すように、CPUコア34は、破壊伝播処理を開始すると、ステップS121で、変数nを初期化する(n=1)。ここで、変数nはヘクスnをカウントするために利用される。続くステップS123では、ヘクスnの伝播フラグがオンであるかどうかを判断する。ここでは、ヘクスnに対応するヘクスnデータに含まれる伝播フラグデータを示すレジスタにデータ値「1」が設定されているかどうかを判断する。
ステップS123で“YES”であれば、つまりヘクスnの伝播フラグがオンであれば、そのまま後述するステップS133に進む。一方、ステップS123で“NO”であれば、つまりヘクスnの伝播フラグがオフであれば、ステップS125で、ヘクスnの状態が「ROCK」であるかどうかを判断する。
ステップS125で“NO”であれば、つまりヘクスnの状態が「ROCK」でなければ、そのままステップS133に進む。一方、ステップS125で“YES”であれば、つまりヘクスnの状態が「ROCK」であれば、ステップS127で、ヘクスnに隣接するヘクスの伝播フラグがオンであるかどうかを判断する。ステップS127で“NO”であれば、つまりヘクスnに隣接するヘクスの伝播フラグがオフであれば、そのままステップS133に進む。ただし、厳密には、複数のヘクスがヘクスnに隣接する場合には、ヘクスnに隣接するすべてのヘクスの伝播フラグがオフである場合にのみ、ステップS127で“NO”となる。
また、ステップS127で“YES”であれば、つまりヘクスnに隣接するヘクスの伝播フラグがオンであれば、ステップS129で、ヘクスnに隣接するヘクスのレイヤ番号がヘクスnのレイヤ番号以上かどうかを判断する。つまり、ヘクスnに隣接するヘクスとヘクスnのレイヤが同じか、またはヘクスnに隣接するヘクスの方がヘクスnよりもレイヤが低いかどうかを判断しているのである。
ステップS129で“NO”であれば、つまりヘクスnに隣接するヘクスのレイヤ番号がヘクスnのレイヤ番号よりも小さい場合には、そのままステップS133に進む。これは、ヘクスnに隣接するヘクスの画像表示レイヤがヘクスnの画像表示レイヤよりも下である場合には、水平方向に破壊力が伝播しないからである。一方、ステップS129で“YES”であれば、つまりヘクスnに隣接するヘクスのレイヤ番号がヘクスnのレイヤ番号以上である場合には、ステップS131で、ヘクスnの状態を「SHOCK」に変更して、ステップS133に進む。ただし、ステップS129の処理は、ヘクスnに隣接するヘクスのうち、伝播フラグがオンであるヘクスの各々について個別に実行される。
ステップS133では、変数nをインクリメントする(n=n+1)。そして、ステップS135では、変数nが最大値maxであるかどうかを判断する。ここで、最大値maxは、ヘクスの総数(N)であり、予め決定されている。ステップS135で“NO”であれば、つまり変数nが最大値maxでなければ、ステップS123に戻る。一方、ステップS135で“YES”であれば、つまり変数nが最大値maxであれば、図19に示すステップS137で、状態が「SHOCK」であるヘクスが有るかどうかを判断する。ここでは、CPUコア34は、ヘクスデータ74aのすべてのヘクスnデータを参照して、状態データが“01”を示すヘクスnデータが有るかどうかを検出するのである。
ステップS137で“NO”であれば、つまり状態が「SHOCK」であるヘクスが無ければ、そのままステップS151に進む。一方、ステップS137で“YES”であれば、つまり状態が「SHOCK」であるヘクスが有れば、ステップS139で、状態が「SHOCK」であるヘクスの耐久力値と、破壊力値Pとに基づいて破壊すべきレイヤ数を算出する。このステップS139の処理は、上述したステップS63の処理と同じである。続くステップS141では、状態が「SHOCK」のヘクスの破壊処理を実行する。ここでは、状態が「SHOCK」のヘクスについて、ステップS139において破壊すべきであると判断されたレイヤの画像(画像データ)を消去する。
続くステップS143では、状態が「SHOCK」のヘクスの伝播フラグをオンし、ステップS145で、状態が「SHOCK」のヘクスの状態を「EMPTY」に変更する。続いて、ステップS145では、状態が「EMPTY」に変更されたヘクスのレイヤ番号を算出されたレイヤ数だけインクリメントし、ステップS149で、破壊力値Pを所定数減算する。ここでは、上述したステップS73の処理と同様に、破壊力値Pから、画像が設定された最上位のレイヤに設定される耐久力値が減算される。
そして、ステップS151では、破壊力値Pが0以下であるかどうかを判断する。ステップS151で“NO”であれば、つまり破壊力値Pが0よりも大きければ、そのまま図13および図14に示した画像処理にリターンする。一方、ステップS151で“YES”であれば、つまり破壊力値Pが0以下であれば、ステップS153で、破壊力伝播処理フラグをオフしてから、画像処理にリターンする。
この実施例によれば、ハンマで叩いた場合には放射状に破壊力を伝播させ、また、ドリルで削る場合には削り範囲において画像表示レイヤが最上位であるヘクスのみに破壊力をおよばせて、削り対象のヘクスの耐久力値が無くなると、当該ヘクスの画像表示レイヤに設定された画像を消去することにより、岩石や化石の部分を削るので、化石をクリーングしている様子を現実的に表現することができる。つまり、より複雑で細かい画像処理を実行することができる。
なお、この実施例では、ハンマで岩石や化石を削る場合に、その破壊力を放射状に伝播させるようにするために、各マス目をヘクスの形状にしたが、三角形、四角形、五角形のような比較的単純な形状としてもよいし、八角形以上の多角形としてもよい。
また、この実施例では、ハンマやドリルはそれぞれ3種類用意されるようにしたが、ハンマやドリルはそれぞれ1種類であってもよい。ハンマとドリルとの違いにより、破壊力のおよぼし方が異なり、それぞれの道具を用いた場合の特徴を生かした画面表示を行っている点に着目されたい。
さらに、この実施例では、ポインティングデバイスとして、タッチパネルを用いるようにしたが、ペンタブレット、タッチパッド、コンピュータマウスのような他のポインティングデバイスを用いることも可能である。ただし、他のポインティングデバイスを用いる場合には、画面上の指示位置を示すためのマウスポインタのような指示画像を表示する必要がある。
さらにまた、ゲーム装置の構成は、上述の実施例の構成に限定されるべきでない。たとえば、LCDは1つでもよく、タッチパネルは2つのLCDのそれぞれに設けるようにしてもよい。