(57)【要約】  【構成】３次元パズルゲーム装置（１０）は立体パズル２０６の表示されるＬＣＤ１４を含む。立体パズル２０６は仮想３次元空間の３次元方向のそれぞれに配置された複数のブロック２０８を含む。また、ブロック列の中から残すべきブロックを探すヒントとなる情報として、たとえばブロック列において残すべきブロックの数を示すヒント数字２１０が表示される。たとえばタッチパネル（２４）を用いてブロックに対して削除指示が行われると、当該ブロックは残すべきブロックであるか否かが判別される。当該ブロックが残すべきブロックではないと判別されたときには、当該ブロックが消去される。残っているブロックが全て残すべきブロックであると判別されたときには、立体パズルが解かれたと判別される。  【効果】複数のブロックからなる立体パズルから不要なブロックのみを削除するという、斬新で、興趣性の高い３次元パズルゲームを提供できる。【選択図】図３
2010022462.tif 000002
【特許請求の範囲】
【請求項１】
仮想３次元空間の立体パズルを解くゲームが実行される３次元パズルゲーム装置であって、
前記仮想３次元空間の３次元方向のそれぞれに配置された複数のブロックを含む立体パズルと任意のブロック列の中から残すべきブロックを探すヒントとなる情報とを表示する表示手段、
入力手段からの入力情報に基づいて、いずれかのブロックに対する削除指示が行われたか否かを判別する入力判別手段、
前記入力判別手段によって前記ブロックに対して前記削除指示が行われたと判別されたとき、前記削除指示が行われたブロックが残すべきブロックであるか否かを判別する削除判別手段、
前記削除判別手段によって前記削除指示が行われたブロックが残すべきブロックではないと判別されたとき、前記削除指示が行われたブロックを消去する消去手段、および
残っているブロックが全て前記残すべきブロックであるか否かを判別することによって、前記立体パズルが解かれたか否かを判別する解決判別手段を備える、３次元パズルゲーム装置。
【請求項２】
前記複数のブロックのそれぞれに対応付けて、削除の正否を示す削除情報を予め記憶する削除情報記憶手段をさらに備え、
前記削除判別手段は、前記削除指示が行われたブロックに対応する前記削除情報に基づいて判別を行う、請求項１記載の３次元パズルゲーム装置。
【請求項３】
前記ヒントとなる情報を、前記ブロック列を構成する各ブロックの前記削除情報から生成するヒント生成手段をさらに備える、請求項２記載の３次元パズルゲーム装置。
【請求項４】
前記表示手段は、前記ヒントとなる情報を、前記ブロック列を構成する各ブロックの当該列方向に垂直な表面に表示する、請求項１ないし３のいずれかに記載の３次元パズルゲーム装置。
【請求項５】
前記入力判別手段は、前記入力情報に基づいて、いずれかのブロックに対してマーク付け指示が行われたか否かをさらに判別し、
前記入力判別手段によって前記ブロックに対して前記マーク付け指示が行われたと判別されたとき、前記マーク付け指示が行われたブロックに対応付けて、前記ブロックがマーク付けされたことを示す情報を記憶するマーク付け手段、および
前記入力判別手段によって前記削除指示が行われたと判別されたとき、前記削除指示が行われたブロックがマーク付けされたブロックであるか否かを判別して、前記マーク付けされたブロックに対する前記消去手段による消去処理を不能動化する消去不能動化手段をさらに備える、請求項１ないし４のいずれかに記載の３次元パズルゲーム装置。
【請求項６】
前記入力判別手段は、前記入力情報に基づいて、任意のブロックに対して非表示指示が行われたか否かをさらに判別し、
前記表示手段は、前記入力判別手段によって前記ブロックに対して前記非表示指示が行われたと判別されたとき、前記非表示指示が行われた前記ブロックを表示しない、請求項１ないし５のいずれかに記載の３次元パズルゲーム装置。
【請求項７】
前記入力手段は、前記表示手段によって表示される画面上の任意の位置を指示するポインティングデバイスを含み、
前記ポインティングデバイスによる指示位置から視線を算出する視線算出手段、および
前記視線と各ブロックの表面との交点を算出することによって、指示されたブロックを特定するブロック特定手段をさらに備える、請求項１ないし６のいずれかに記載の３次元パズルゲーム装置。
【請求項８】
前記ポインティングデバイスによる前記指示位置の変化量に基づいて、前記立体パズルの回転量を算出する回転量算出手段をさらに備え、
前記表示手段は、前記回転量に基づいて回転された前記立体パズルを表示する、請求項７記載の３次元パズルゲーム装置。
【請求項９】
仮想３次元空間の立体パズルを解くゲームが実行される３次元パズルゲーム装置のゲームプログラムであって、
前記３次元パズルゲーム装置のコンピュータに、
前記仮想３次元空間の３次元方向のそれぞれに配置された複数のブロックを含む立体パズルと任意のブロック列の中から残すべきブロックを探すヒントとなる情報とを表示する表示ステップ、
入力手段からの入力情報に基づいて、いずれかのブロックに対する削除指示が行われたか否かを判別する入力判別ステップ、
前記入力判別ステップによって前記ブロックに対して前記削除指示が行われたと判別されたとき、前記削除指示が行われたブロックが残すべきブロックであるか否かを判別する削除判別ステップ、
前記削除判別ステップによって前記削除指示が行われたブロックが残すべきブロックではないと判別されたとき、前記削除指示が行われたブロックを消去する消去ステップ、および
残っているブロックが全て前記残すべきブロックであるか否かを判別することによって、前記立体パズルが解かれたか否かを判別する解決判別ステップを実行させる、ゲームプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は３次元パズルゲーム装置およびゲームプログラムに関し、特にたとえば仮想３次元空間の立体パズルを解くゲームが実行される３次元パズルゲーム装置およびゲームプログラムに関する。
【背景技術】
【０００２】
従来、２次元フィールド上に複数の行列からなるマス目を表示し、各行・各列に表示されるヒント情報（塗りつぶすことのできるマス目の数を示す数字）を手がかりにマス目を塗りつぶしていくと、イラスト等が浮き出るタイプのパズルゲーム、いわゆるお絵描きロジックというパズルゲームが知られている。従来のお絵描きロジックは、縦と横のマス目からなる２次元のパズルゲームだったが、これを３次元のパズルゲームにしたものとして特許文献１が知られている。
【０００３】
特許文献１には、完成時に描かれる３次元イラストを複数の層（レイヤ）に分解して、そのレイヤ毎に出題と解答を行い、全レイヤに正解した場合に３次元イラストが完成するパズルゲーム装置が開示されている。具体的には、複数のレイヤの中から解答すべきレイヤがユーザによって選択されると、選択されたレイヤに関する問題が表示される。ユーザは、レイヤごとに出題情報に基づいてマス目を選択し塗りつぶす操作を繰り返す。全てのレイヤの全てのマス目に正しく解答が入力されると、３次元イラストが表示される。
【特許文献１】特開２００７−６１３７２号公報[A63F 13/00]
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、上記特許文献１では、画面上に表示されるのは選択された１つのレイヤのみであるため、ユーザは問題の回答中に立体パズルの形状を把握しがたいという問題があった。また、解答方法も２次元のレイヤの上に当該レイヤに対する解答を入力するという方法であり、従来の２次元のパズルゲームと全く同じであるため、ユーザは３次元のパズルを解いているという感覚を得にくいという問題があった。
【０００５】
それゆえに、この発明の主たる目的は、複数のブロックからなる立体パズルから不要なブロックのみを削除するという新規な、３次元パズルゲーム装置およびゲームプログラムを提供することである。
【０００６】
この発明の他の目的は、パズルゲームの興趣性を高めることのできる、３次元パズルゲーム装置およびゲームプログラムを提供することである。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００８】
第１の発明は、仮想３次元空間の立体パズルを解くゲームが実行される３次元パズルゲーム装置であって、仮想３次元空間の３次元方向のそれぞれに配置された複数のブロックを含む立体パズルと任意のブロック列の中から残すべきブロックを探すヒントとなる情報とを表示する表示手段、入力手段からの入力情報に基づいて、いずれかのブロックに対する削除指示が行われたか否かを判別する入力判別手段、入力判別手段によってブロックに対して削除指示が行われたと判別されたとき、削除指示が行われたブロックが残すべきブロックであるか否かを判別する削除判別手段、削除判別手段によって削除指示が行われたブロックが残すべきブロックではないと判別されたとき、削除指示が行われたブロックを消去する消去手段、および残っているブロックが全て残すべきブロックであるか否かを判別することによって、立体パズルが解かれたか否かを判別する解決判別手段を備える、３次元パズルゲーム装置である。
【０００９】
第１の発明では、３次元パズルゲーム装置（１０）は表示手段（１２，１４，３４，４４，４６，５０，Ｓ２３）を含み、表示手段は、立体パズル（２０６）とヒントとなる情報（２１０）とを表示する。立体パズルは、複数のブロック（２０８）が立体的に配置されることによって形成されており、具体的には、立体パズルは、仮想３次元空間の３次元方向のそれぞれに配置された複数のブロックを含む。たとえば、立体パズルは、各方向（ｘ、ｙ、ｚ軸方向）に所定数（ｘ、ｙ、ｚ個）配置された直方体形状であってよい。ヒントとなる情報は、任意のブロック列の中から残すべきブロックを探すヒントを示し、たとえば、ブロック列の中で残すべきブロックの数を示すヒント数字（２１０）であってよい。この３次元パズルゲームでは、ユーザが入力手段（２２，２４）を用いて立体パズルから削除するブロックを指示する。すると、入力判別手段（３４，Ｓ７）によって、入力情報に基づいて、いずれかのブロックに対して削除指示が行われたか否かが判別される。削除指示が行われたと判別されるとき、削除判別手段（３４，Ｓ５３）によって、削除指示が行われたブロックが残すべきブロックであるか否かが判別される。削除指示が行われたブロックが残すべきブロックではないと判別されたとき、消去手段（３４，Ｓ５５，Ｓ１２７）によって、削除指示が行われたブロックが消去される。このようにして、ユーザの指示に応じて立体パズルから不要なブロックが消去される。解決判別手段（３４，Ｓ２５）によって、残っているブロックが全て残すべきブロックであるか否かが判別されることによって、立体パズルが解かれたか否かが判別される。
【００１０】
第１の発明によれば、複数のブロックが３次元方向に配置されることによって構成された立体パズルとともに表示されたヒント情報を手がかりに、不要なブロックを削除することによって解くことができる、新規なパズルゲームを提供することができ、パズルゲームの興趣性を高めることができる。
【００１１】
第２の発明は、第１の発明に従属し、複数のブロックのそれぞれに対応付けて、削除の正否を示す削除情報を予め記憶する削除情報記憶手段をさらに備え、削除判別手段は、削除指示が行われたブロックに対応する削除情報に基づいて判別を行う。
【００１２】
第２の発明では、削除情報記憶手段（２８ａ，３１４）に、各ブロックの削除の正否を示す削除情報が予め記憶されており、当該削除情報に基づいて、削除判別手段による判別が行われる。ブロックに対する削除指示の正否を簡単な処理で判別することができる。
【００１３】
第３の発明は、第２の発明に従属し、ヒントとなる情報を、ブロック列を構成する各ブロックの削除情報から生成するヒント生成手段をさらに備える。
【００１４】
第３の発明では、予め記憶された各ブロックの削除の正否を示す削除情報に基づいて、ヒント生成手段（３４，Ｓ１）により、各ブロック列の残すべきブロックを探すヒントとなる情報が生成される。ヒントとなる情報を削除情報から生成することができるので、ヒントとなる情報を予め記憶するためのメモリ容量を節約できる。
【００１５】
第４の発明は、第１ないし第３のいずれかの発明に従属し、表示手段は、ヒントとなる情報を、ブロック列を構成する各ブロックの当該列方向に垂直な表面に表示する。
【００１６】
第４の発明では、表示手段によって、ブロック列の残すべきブロックを探すヒントとなる情報が、各ブロックにおいてブロック列方向に垂直な表面に表示されるので、ヒントとなる情報をユーザに認識し易く表示することができる。
【００１７】
第５の発明は、第１ないし第４のいずれかの発明に従属し、入力判別手段は、入力情報に基づいて、いずれかのブロックに対してマーク付け指示が行われたか否かをさらに判別し、入力判別手段によってブロックに対してマーク付け指示が行われたと判別されたとき、マーク付け指示が行われたブロックに対応付けて、ブロックがマーク付けされたことを示す情報を記憶するマーク付け手段、および入力判別手段によって削除指示が行われたと判別されたとき、削除指示が行われたブロックがマーク付けされたブロックであるか否かを判別して、マーク付けされたブロックに対する消去手段による消去処理を不能動化する消去不能動化手段をさらに備える。
【００１８】
第５の発明では、入力情報に基づいて、いずれかのブロックに対してマーク付け指示が行われたか否かが入力判別手段（３４，Ｓ９）によって判別される。マーク付け指示が行われたと判別されるときには、マーク付け手段（３４，Ｓ８５）によって、当該ブロックに対応付けて、当該ブロックがマーク付けされたことを示す情報が記憶される。入力判別手段によって削除指示が行われたと判別されたときには、消去不能動化手段（３４，Ｓ５１）によって、削除指示が行われたブロックがマーク付けされたブロックであるか否かが判別されて、マーク付けされたブロック対する消去処理が不能動化される。ユーザは、削除したくないブロックにマーク付けすることができ、それによって、意思に反してブロックが誤って削除されるのを防止することができる。
【００１９】
第６の発明は、第１ないし第５のいずれかの発明に従属し、入力判別手段は、入力情報に基づいて、任意のブロックに対して非表示指示が行われたか否かをさらに判別し、表示手段は、入力判別手段によってブロックに対して非表示指示が行われたと判別されたとき、非表示指示が行われたブロックを表示しない。
【００２０】
第６の発明では、入力情報に基づいて、入力判別手段（３４，Ｓ１１，Ｓ１３）により、任意のブロックに対して非表示指示が行われたか否かがさらに判別される。ブロックに対して非表示指示が行われたと判別されたときには、表示手段（３４，Ｓ２１，Ｓ１２５）によって、非表示指示が行われたブロックは表示されない。たとえば、複数のブロックが配置される３次元方向のいずれかの方向で非表示にする位置が指示されたとき、当該方向で指示された位置より外側のブロックが非表示にされてよい。ユーザの指示によって任意のブロックを非表示にすることができるので、外側から見えない内部に配置されたブロックを表示することができ、内部のブロックの削除（あるいはマーク付け）が可能になる。
【００２１】
第７の発明は、第１ないし第６のいずれかの発明に従属し、入力手段は、表示手段によって表示される画面上の任意の位置を指示するポインティングデバイスを含み、ポインティングデバイスによる指示位置から視線を算出する視線算出手段、および視線と各ブロックの表面との交点を算出することによって、指示されたブロックを特定するブロック特定手段をさらに備える。
【００２２】
第７の発明では、入力手段として画面上の任意の位置を指示するポインティングデバイス（２４）が備えられる。視線算出手段（３４，Ｓ４１，Ｓ４３，Ｓ７１，Ｓ７３）によって、ポインティングデバイスによる指示位置から視線が算出される。ブロック特定手段（３４，Ｓ４５−Ｓ４９，Ｓ７５−Ｓ７９）によって、当該視線と各ブロックの表面との交点が算出されることによって、指示されたブロックが特定される。簡単な処理で立体パズルを構成する複数のブロックのうちの指示されたブロックを特定することができる。
【００２３】
第８の発明は、第７の発明に従属し、ポインティングデバイスによる指示位置の変化量に基づいて、立体パズルの回転量を算出する回転量算出手段をさらに備え、表示手段は、回転量に基づいて回転された立体パズルを表示する。
【００２４】
第８の発明では、ユーザがポインティングデバイスで指示位置を移動させると、回転量算出手段（３４，Ｓ１０１−Ｓ１０５）によって、当該指示位置の変化量（移動量）に基づいて立体パズルの回転量が算出され、表示手段（Ｓ１２１，Ｓ１４３）によって、回転量に基づいて回転された立体パズルが表示される。立体パズルの回転操作を直感的に行うことができる。
【００２５】
第９の発明は、仮想３次元空間の立体パズルを解くゲームが実行される３次元パズルゲーム装置のゲームプログラムであって、３次元パズルゲーム装置のコンピュータに、仮想３次元空間の３次元方向のそれぞれに配置された複数のブロックを含む立体パズルと任意のブロック列の中から残すべきブロックを探すヒントとなる情報とを表示する表示ステップ、入力手段からの入力情報に基づいて、いずれかのブロックに対する削除指示が行われたか否かを判別する入力判別ステップ、入力判別ステップによってブロックに対して削除指示が行われたと判別されたとき、削除指示が行われたブロックが残すべきブロックであるか否かを判別する削除判別ステップ、削除判別ステップによって削除指示が行われたブロックが残すべきブロックではないと判別されたとき、削除指示が行われたブロックを消去する消去ステップ、および残っているブロックが全て残すべきブロックであるか否かを判別することによって、立体パズルが解かれたか否かを判別する解決判別ステップを実行させる、ゲームプログラムである。
【００２６】
第９の発明は、第１の発明の３次元パズルゲーム装置において適用されるゲームプログラムであり、上述の第１の発明と同様の効果を奏する。
【発明の効果】
【００２７】
この発明によれば、複数のブロックを含む立体パズルを表示するとともに、当該立体パズルの各ブロック列において残すべきブロックを探すためのヒントとなる情報を表示し、ユーザに不要なブロックを削除させることによって、パズルを解かせるようにしたので、ユーザは、ヒントとなる情報を手がかりにして立体パズルを彫刻するような感覚で立体パズルを解くことができる。したがって、複数のブロックからなる立体パズルから不要なブロックのみを削除するという、斬新で、しかも興趣性の高い３次元パズルゲームを提供することができる。
【００２８】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【００２９】
図１を参照して、この発明のゲーム装置１０は、一例として携帯型のゲーム装置の形態で実現される。ただし、ゲーム装置１０の形態は任意であり、たとえば、据置型のゲーム装置、パーソナルコンピュータ、携帯情報端末、携帯電話機などであってもよい。
【００３０】
ゲーム装置１０は、第１の液晶表示器（ＬＣＤ）１２および第２のＬＣＤ１４を含む。ＬＣＤ１２およびＬＣＤ１４は、所定の配置位置となるようにハウジング１６に収納される。この実施例では、ハウジング１６は、上側ハウジング１６ａと下側ハウジング１６ｂとによって構成され、ＬＣＤ１２は上側ハウジング１６ａに収納され、ＬＣＤ１４は下側ハウジング１６ｂに収納される。したがって、ＬＣＤ１２とＬＣＤ１４とは縦（上下）に並ぶように近接して配置される。
【００３１】
なお、この実施例では、表示器としてＬＣＤを用いるようにしてあるが、ＬＣＤに代えて、ＥＬ(Electronic Luminescence)ディスプレイやプラズマディスプレイを用いるようにしてもよい。
【００３２】
図１からも分かるように、上側ハウジング１６ａは、ＬＣＤ１２の平面形状よりも少し大きな平面形状を有し、一方主面からＬＣＤ１２の表示面を露出するように開口部が形成される。一方、下側ハウジング１６ｂの平面形状およびサイズも上側ハウジング１６ａと同等に選ばれ、横方向の中央部にＬＣＤ１４の表示面を露出するように開口部が形成される。下側ハウジング１６ｂの右側面には電源スイッチ１８が設けられる。
【００３３】
また、上側ハウジング１６ａには、ＬＣＤ１２を挟んで左右に、スピーカ３６ａおよび３６ｂ（図２参照）のための音抜き孔２０ａおよび２０ｂが形成される。
【００３４】
上側ハウジング１６ａと下側ハウジング１６ｂとは、上側ハウジング１６ａの下辺（下端）と下側ハウジング１６ｂの上辺（上端）の一部とが回動可能に連結されている。したがって、たとえば、ゲームをプレイしない場合には、ＬＣＤ１２の表示面とＬＣＤ１４の表示面とが対面するように、上側ハウジング１６ａを回動させて折りたたんでおけば、ＬＣＤ１２の表示面およびＬＣＤ１４の表示面に傷がつくなどの破損を防止することができる。ただし、上側ハウジング１６ａと下側ハウジング１６ｂとは、回動可能に連結せずに、それらを一体的（固定的）に設けたハウジング１６を形成するようにしてもよい。
【００３５】
そして、上側ハウジング１６ａと下側ハウジング１６ｂとの連結部の中央には、マイク（図示せず）のためのマイク孔２０ｃが形成される。マイクから取り込んだ音、音声または息などによる音声信号に基づいてゲーム処理を行うことが可能である。
【００３６】
また、下側ハウジング１６ｂには、操作スイッチ２２（２２ａ，２２ｂ，２２ｃ，２２ｄ，２２ｅ，２２Ｌおよび２２Ｒ）が設けられる。
【００３７】
操作スイッチ２２は、方向指示スイッチ（十字スイッチ）２２ａ，スタートスイッチ２２ｂ、セレクトスイッチ２２ｃ、動作スイッチ（Ａボタン）２２ｄ、動作スイッチ（Ｂボタン）２２ｅ、動作スイッチ（Ｘボタン）２２ｆ、動作スイッチ（Ｙボタン）２２ｇ、動作スイッチ（Ｌボタン）２２Ｌおよび動作スイッチ（Ｒボタン）２２Ｒを含む。スイッチ２２ａは、下側ハウジング１６ｂの一方主面であり、ＬＣＤ１４の左側に配置される。その他のスイッチ２２ｂ−２２ｇは、下側ハウジング１６ｂの一方主面であり、ＬＣＤ１４の右側に配置される。さらに、動作スイッチ２２Ｌおよび２２Ｒは、それぞれ下側ハウジング１６ｂの上端面の左右角部に配置される。なお、動作スイッチ２２Ｌおよび２２Ｒは下側ハウジング１６ｂの背面に設けられており、図１のような正面視では連結部の背後に隠れているので破線で示されている。
【００３８】
方向指示スイッチ２２ａは、ディジタルジョイスティックとして機能し、４つの押圧部の１つを操作することによって、ユーザないしプレイヤによって操作可能なプレイヤオブジェクト(またはプレイヤキャラクタ)の進行方向（移動方向）を指示したり、カーソルの進行方向を指示したりする等のために用いられる。また、各押圧部には、特定の役割を割り当てることができ、４つの押圧部の１つを操作することによって、割り当てられた役割を指示（指定）することができる。
【００３９】
スタートスイッチ２２ｂは、プッシュボタンで構成され、ゲームを開始（再開）したり、一時停止(Pause)したりする等に用いられる。また、セレクトスイッチ２２ｃは、プッシュボタンで構成され、ゲームモードの選択等に用いられる。
【００４０】
動作スイッチ２２ｄすなわちＡボタンは、プッシュボタンで構成され、方向指示以外の動作、すなわち、プレイヤオブジェクトに打つ（パンチ）、投げる、つかむ（取得）、乗る、ジャンプするなどの任意のアクションをさせることができる。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かす等を指示することができる。また、ロールプレイングゲーム(ＲＰＧ)やシミュレーションＲＰＧにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。動作スイッチ２２ｅすなわちＢボタンは、プッシュボタンで構成され、セレクトスイッチ２２ｃで選択したゲームモードの変更やＡボタン２２ｄで決定したアクションの取り消し等のために用いられる。
【００４１】
動作スイッチ２２ｆすなわちＸボタン、および動作スイッチ２２ｇすなわちＹボタンは、プッシュボタンで構成され、Ａボタン２２ｄとＢボタン２２ｅだけでは、ゲーム進行ができないときに、補助的な操作に用いられる。ただし、Ｘボタン２２ｆおよびＹボタン２２ｇは、Ａボタン２２ｄおよびＢボタン２２ｅと同様の操作に用いることも可能である。もちろん、ゲームプレイにおいてＸボタン２２ｆとＹボタン２２ｇとを必ずしも使用しなくてよい。
【００４２】
動作スイッチ２２Ｌ（左押しボタン）および動作スイッチ２２Ｒ（右押しボタン）は、プッシュボタンで構成され、左押しボタン（Ｌボタン）２２Ｌおよび右押しボタン（Ｒボタン）２２Ｒは、Ａボタン２２ｄおよびＢボタン２２ｅと同様の操作に用いることができ、また、Ａボタン２２ｄおよびＢボタン２２ｅの補助的な操作に用いることができる。さらに、Ｌボタン２２ＬおよびＲボタン２２Ｒは、方向スイッチ２２ａ，Ａボタン２２ｄ，Ｂボタン２２ｅ，Ｘボタン２２ｆ，Ｙボタン２２ｇに割り当てられた役割を、他の役割に変更することができる。
【００４３】
また、ＬＣＤ１４の上面には、タッチパネル２４が装着される。タッチパネル２４としては、たとえば、抵抗膜方式、光学式(赤外線方式)および静電容量結合式のいずれかの種類のものを用いることができる。タッチパネル２４はＬＣＤ１４の画面内の任意の位置をユーザが指示するためのポインティングデバイスである。タッチパネル２４は、その上面をスティック２６ないしはペン（スタイラスペン）或いは指（以下、これらを「スティック２６等」という場合がある。）で、押圧したり、撫でたり、触れたりすることにより操作（タッチ入力）すると、スティック２６等の操作位置の座標を検出して、当該検出座標に対応する座標データを出力する。
【００４４】
なお、この実施例では、ＬＣＤ１４（ＬＣＤ１２も同じ、または略同じ。）の表示面の解像度は２５６ｄｏｔ×１９２ｄｏｔである。タッチパネル２４の検出精度も表示画面に対応して２５６ｄｏｔ×１９２ｄｏｔとしてあるが、タッチパネル２４の検出精度は表示画面の解像度よりも低くてもよく、高くてもよい。
【００４５】
ＬＣＤ１２およびＬＣＤ１４には異なるゲーム画面を表示することができる。たとえば、レースゲームでは一方のＬＣＤに運転席からの視点による画面を表示し、他方のＬＣＤにレース（コース）全体の画面を表示することができる。また、ＲＰＧでは、一方のＬＣＤにマップやプレイヤオブジェクト等のキャラクタを表示し、他方のＬＣＤにプレイヤオブジェクトが所有するアイテムを表示することができる。さらに、一方のＬＣＤにプレイヤオブジェクトやノンプレイヤオブジェクトなどを含むゲーム画面を表示し、他方のＬＣＤに当該プレイヤオブジェクトやノンプレイヤオブジェクトに関する情報を含む他のゲーム画面または当該プレイヤオブジェクトを操作するための操作画面を表示することができる。さらには、２つのＬＣＤ１２およびＬＣＤ１４を合わせて１つの画面として用いることにより、プレイヤオブジェクトが倒さなければならない巨大な怪物（敵オブジェクト）を表示することもできる。
【００４６】
したがって、プレイヤはスティック２６等でタッチパネル２４を操作することにより、ＬＣＤ１４の画面に表示されるプレイヤオブジェクト、敵オブジェクト、アイテムオブジェクト、操作オブジェクトなどの画像を指示（操作）したり、コマンドを選択（入力）したりすることができる。また、仮想ゲーム空間（３次元ゲーム空間）に設けられる仮想カメラ（視点）の方向（視線の向き）を変化させたり、ゲーム画面（マップ）のスクロール(徐々に移動表示)方向を指示したりすることもできる。
【００４７】
なお、ゲームの種類によっては、タッチパネル２４を用いることにより、その他の入力指示も可能である。たとえば、ＬＣＤ１４上のタッチパネル２４において文字，数字，記号等を手書き入力することができる。
【００４８】
このように、ゲーム装置１０は、２画面分の表示部となるＬＣＤ１２およびＬＣＤ１４を有し、いずれか一方（この実施例では、ＬＣＤ１４）の上面にタッチパネル２４が設けられるので、２画面（１２，１４）と２系統の操作部（２２，２４）とを有する構成になっている。
【００４９】
なお、この実施例では、第１のＬＣＤ１２と第２のＬＣＤ１４とを縦方向に並べて配置するようにしているが、２つのＬＣＤの配置は適宜に変更され得る。他の実施例では、第１のＬＣＤ１２と第２のＬＣＤ１４とを横方向に並べて配置するようにしてもよい。
【００５０】
また、この実施例では、２つのＬＣＤを設けるようにしているが、表示手段としてのＬＣＤの数は適宜変更され得る。他の実施例では、縦長形状の１つのＬＣＤを設けて、表示領域を上下に分けて、２つのゲーム画面をそれぞれの表示領域に表示するようにしてもよいし、あるいは、横長形状の１つのＬＣＤを設けて、表示領域を左右に分割し、２つゲーム画面をそれぞれの表示領域に表示するようにしてもよい。
【００５１】
また、スティック２６は、たとえば下側ハウジング１６ｂに設けられる収納部（図示せず）に収納することができ、必要に応じて取り出される。ただし、スティック２６を設けない場合には、その収納部も設ける必要はない。
【００５２】
さらに、ゲーム装置１０はメモリカード（またはカートリッジ）２８を含み、このメモリカード２８は着脱自在であり、下側ハウジング１６ｂの上端面に設けられる挿入部３０（図１では点線で示す）に挿入される。図１では省略するが、挿入部３０の奥部には、メモリカード２８の挿入方向先端部に設けられるコネクタと接合するためのコネクタ３２（図２参照）が設けられており、したがって、メモリカード２８が挿入部３０に挿入されると、コネクタ同士が接合され、ゲーム装置１０のＣＰＵコア３４（図２参照）がメモリカード２８にアクセス可能となる。
【００５３】
なお、図１では省略するが、たとえば、下側ハウジング１６ｂにおいて、その裏面には電池収容ボックスが設けられ、下端面（底面）には、音量スイッチおよびイヤフォンジャックなどが設けられ、上端面（天面）には、外部拡張コネクタなどが設けられる。
【００５４】
図２はゲーム装置１０の電気的な構成を示すブロック図である。この図２を参照して、ゲーム装置１０は電子回路基板３８を含み、この電子回路基板３８には上述のＣＰＵコア３４等の回路コンポーネントが実装される。ＣＰＵコア３４は、バス４０を介して前述のコネクタ３２に接続されるととともに、ＲＡＭ４２、第１のグラフィック処理ユニット（ＧＰＵ）４４、第２のＧＰＵ４６、入出カインターフェース回路（以下、「Ｉ／Ｆ回路」という。）４８、ＬＣＤコントローラ５０および無線通信部５８に接続される。
【００５５】
コネクタ３２には、上述したように、メモリカード２８が着脱自在に接続される。メモリカード２８は、ＲＯＭ２８ａおよびＲＡＭ２８ｂを含み、図示は省略するが、ＲＯＭ２８ａおよびＲＡＭ２８ｂは、互いにバスで接続され、さらに、コネクタ３２と接合されるコネクタ（図示せず）に接続される。したがって、上述したように、ＣＰＵコア３４は、ＲＯＭ２８ａおよびＲＡＭ２８ｂにアクセスすることができる。
【００５６】
ＲＯＭ２８ａは、ゲーム装置１０で実行すべきゲームのためのゲームプログラム、画像データ（文字やオブジェクトの画像、背景画像、アイテム画像、アイコン（ボタン）画像、メッセージ画像など）およびゲームに必要な音（音楽）のデータ（音データ）等を予め記憶する。ＲＡＭ（バックアップＲＡＭ）２８ｂは、そのゲームの途中データやゲームの結果データなどを記憶（セーブ）する。セーブ用メモリとしてはフラッシュメモリなどが用いられてよい。
【００５７】
ＲＡＭ４２は、バッファメモリないしはワーキングメモリとして使用される。つまり、ＣＰＵコア３４は、メモリカード２８のＲＯＭ２８ａに記憶されたゲームプログラム、画像データおよび音データ等をＲＡＭ４２にロードし、ロードしたゲームプログラムに従って処理を実行する。また、ＣＰＵコア３４は、ゲームの進行に応じて一時的に生成するデータ（ゲームデータやフラグデータ等）をＲＡＭ４２に記憶しつつゲーム処理を実行する。
【００５８】
なお、ゲームプログラム、画像データおよび音データ等は、ＲＯＭ２８ａから一度に全部または部分的にかつ順次的に読み出され、ＲＡＭ４２に記憶される。
【００５９】
ただし、ゲーム装置１０ではゲーム以外の他のアプリケーションが実行されてよく、この場合、メモリカード２８のＲＯＭ２８ａには、当該アプリケーションについてのプログラムおよび画像データ等の必要なデータが記憶されてよい。また、必要に応じて、音（音楽）データが記憶されてもよい。
【００６０】
ＧＰＵ４４およびＧＰＵ４６は、それぞれ、描画手段の一部を形成し、たとえばシングルチップＡＳＩＣで構成され、ＣＰＵコア３４からのグラフィックスコマンド（作画命令）を受け、そのグラフィックスコマンドに従って画像データを生成する。ただし、ＣＰＵコア３４は、グラフィックスコマンドに加えて、画像データの生成に必要な画像生成プログラム（ゲームプログラムに含まれる。）をＧＰＵ４４およびＧＰＵ４６のそれぞれに与える。
【００６１】
また、ＧＰＵ４４には、第１のビデオＲＡＭ（以下、「ＶＲＡＭ」という。）５２が接続され、ＧＰＵ４６には、第２のＶＲＡＭ５４が接続される。ＧＰＵ４４およびＧＰＵ４６が作画コマンドを実行するにあたって必要なデータ（画像データ：ポリゴンやテクスチャ等のデータ）は、ＧＰＵ４４およびＧＰＵ４６が、それぞれ、第１のＶＲＡＭ５２および第２のＶＲＡＭ５４にアクセスして取得する。
【００６２】
なお、ＣＰＵコア３４は、描画に必要な画像データをＧＰＵ４４およびＧＰＵ４６を介して第１のＶＲＡＭ５２および第２のＶＲＡＭ５４に書き込む。ＧＰＵ４４はＶＲＡＭ５２にアクセスして描画のための画像データを作成し、その画像データをＶＲＡＭ５２の描画バッファに記憶する。ＧＰＵ４６はＶＲＡＭ５４にアクセスして描画のための画像データを作成し、その画像データをＶＲＡＭ５４の描画バッファに記憶する。描画バッファとしてはフレームバッファまたはラインバッファ等が採用されてよい。
【００６３】
ＶＲＡＭ５２およびＶＲＡＭ５４は、ＬＣＤコントローラ５０に接続される。ＬＣＤコントローラ５０はレジスタ５６を含み、レジスタ５６はたとえば１ビットで構成され、ＣＰＵコア３４の指示によって「０」または「１」の値（データ値）を記憶する。ＬＣＤコントローラ５０は、レジスタ５６のデータ値が「０」である場合には、ＧＰＵ４４によって作成された画像データをＬＣＤ１２に出力し、ＧＰＵ４６によって作成された画像データをＬＣＤ１４に出力する。また、ＬＣＤコントローラ５０は、レジスタ５６のデータ値が「１」である場合には、ＧＰＵ４４によって作成された画像データをＬＣＤ１４に出力し、ＧＰＵ４６によって作成された画像データをＬＣＤ１２に出力する。
【００６４】
なお、ＬＣＤコントローラ５０は、ＶＲＡＭ５２およびＶＲＡＭ５４から直接画像データを読み出したり、ＧＰＵ４４およびＧＰＵ４６を介してＶＲＡＭ５２およびＶＲＡＭ５４から画像データを読み出したりする。
【００６５】
また、ＶＲＡＭ５２およびＶＲＡＭ５４はＲＡＭ４２に設けられてもよいし、あるいはその描画バッファおよびＺバッファがＲＡＭ４２に設けられてもよい。
【００６６】
Ｉ／Ｆ回路４８には、操作スイッチ２２，タッチパネル２４およびスピーカ３６ａ，３６ｂが接続される。ここで、操作スイッチ２２は、上述したスイッチ２２ａ，２２ｂ，２２ｃ，２２ｄ，２２ｅ，２２ｇ，２２Ｌおよび２２Ｒであり、操作スイッチ２２が操作されると、対応する操作信号（操作データ）がＩ／Ｆ回路４８を介してＣＰＵコア３４に入力される。また、タッチパネル２４からの座標データがＩ／Ｆ回路４８を介してＣＰＵコア３４に入力される。さらに、ＣＰＵコア３４は、ゲーム音楽（ＢＧＭ）、効果音またはゲームキャラクタの音声（擬制音）などのゲームに必要な音データをＲＡＭ４２から読み出し、Ｉ／Ｆ回路４８を介してスピーカ３６ａ，３６ｂから当該音を出力する。
【００６７】
無線通信部５８は他のゲーム装置１０や通信機器との間で無線によってデータを送受信するための通信手段である。なお、ゲーム装置１０が送受信する微弱電波は、電波法による規制のかからない強度に設定されている。ＣＰＵコア３４がゲームデータやコマンドなどのデータを無線通信部５８に与えると、無線通信部５８は、相手方へのデータを無線信号に変調してアンテナから送信する。また、無線通信部５８は、相手方からの無線信号を同じアンテナで受信してデータに復調し、当該データをＣＰＵコア３４に与える。この無線通信部５８を介して、ゲーム装置１０は、他のゲーム装置１０との間でデータを通信して通信ゲームを実行することが可能である。また、ゲーム装置１０は、無線通信部５８を介してネットワークに接続することができ、ネットワーク上のサーバからプログラムやデータをダウンロードしたり、ネットワークを介して他のゲーム装置１０と通信したりすることが可能である。
【００６８】
この実施例では、仮想３次元空間の立体パズルを解くゲームすなわち３次元パズルゲームが実行される。立体パズルは、仮想３次元空間の３次元方向のそれぞれに所定数配置された複数のブロックを含む。つまり、複数のブロックが３次元方向のそれぞれに列をなして配置されることによって、立体パズルが形成されている。この立体パズルが表示されるとともに、任意のブロック列の中から残すべきブロックを探すためのヒントとなる情報が表示される。ユーザ（プレイヤ）によって削除指示されたブロックが不要なブロックである場合、当該ブロックが消去される。立体パズルから不要なブロックが全て削除されることにより、所定の３次元モデルが完成され、当該立体パズルが解かれたと判断される。
【００６９】
図３はゲーム開始時に表示されるゲーム画面の一例を示す。上画面はＬＣＤ１２の画面であり、下画面はタッチパネル２４の設けられたＬＣＤ１４の画面である。
【００７０】
上画面では、問題（立体パズル）のレベルとともに、ゲームオーバとなる条件が表示される。この実施例では、ゲームオーバとなる条件として、制限時間およびミス制限回数が設定されている。制限時間は左側の時計２００によって表現されており、時間経過に従って時計２００の時間がカウントダウン（または、カウントアップ）される。なお、右側の時計２０２は、ゲーム開始からの経過時間を示すためのものである。また、ミス制限回数は、いわゆるお手付き、すなわち、残すべきブロックに対する誤った削除指示の回数を制限するためのものである。ミス制限回数はブロック２０４の数によって表現され、ミスがあるたびにブロック２０４の画像がミスを示す画像に変更される。図３では、制限時間は３０分であり、ミス制限回数は５回である。制限時間内に不要なブロックを全て削除することができなかった場合、または、削除するブロックの指示を間違えた回数がミス制限回数に達した場合には、ゲームオーバとなる。
【００７１】
下画面では、ゲームを開始すると「ゲームスタート」のテキストが表示され、さらに問題としての立体パズル２０６が中央に表示される。立体パズル２０６は複数のブロック２０８を含む。複数のブロック２０８は仮想３次元空間において立体的に配置されており、それによって立体パズル２０６が所定の形状に形成されている。この立体パズル２０６の中に、正解となる立体的形状またはモデルが隠れている。つまり、立体パズル２０６は、正解のモデルを包含する大きさおよび形状を有している。
【００７２】
この実施例では、各ブロック２０８は、所定サイズの立方体に形成されている。複数のブロック２０８が互いに直交する３つの方向、すなわち、ブロック２０８の縦横高さ方向（または、縦横奥行き方向）にそれぞれ所定数配置されることによって、立体パズル２０６が直方体形状に形成されている。この立体パズル２０６のために、ブロック２０８の縦横高さ方向を３軸方向とした直交座標系が定義されている。この直交座標系をブロック座標系と呼ぶものとする。ブロック座標系を用いて表現すれば、ブロック座標系のｘ，ｙ，ｚ軸方向にそれぞれｘ，ｙ，ｚ個のブロック２０８が配置されることによって、立体パズル２０６が形成されている。各軸方向のブロック２０８の個数ｘ，ｙ，ｚは互いに異なる数であってよい。このブロック座標系では、原点にあるブロック２０８の場合、（０，０，０）の座標であり、たとえばｘ軸方向の隣にあるブロック２０８の場合、（１，０，０）の座標であるというように、ブロック２０８の配置場所と座標値とが等しく設定されている。
【００７３】
なお、立体パズル２０６の最大サイズが予め決められており、最大サイズの場合のブロックデータをメモリ上に確保するようにしている。たとえば最大サイズは１０＊１０＊１０に設定され、１０００個のブロックデータの置き場所とブロック２０８の座標が１対１に対応するようになっている。つまり、ブロックデータは、１０＊１０＊１０個の配列に並んでおり、配列のインデックス番号（要素番号）がそのままブロック座標系の座標に対応している。
【００７４】
下画面では、このような立体パズル２０６とともに、残すべきブロック２０８を探すヒントとなる情報（数字）を示すヒント情報が表示される。この実施例では、各ブロック２０８の表面にヒント情報が表示される。具体的には、ブロック列を構成する各ブロック２０８の当該列方向に垂直な面に、当該ブロック列で残すべきブロック２０８の数を示すヒント数字２１０が表示される。つまり、各ブロック２０８において、ブロック列の方向に並んでいる表面（ブロック列の方向において対向している面）に、当該ブロック列で残すべきブロック２０８の数が表示される。例えば、図３に示す立体パズル２０６の正面の左上に配置されているブロック２０８ａに注目する。このブロック２０８ａの正面には数字「０」のヒント情報が表示されている。これは当該ブロック２０８ａの厚み（奥行き）方向に並んでいる３つのブロック２０８からなるブロック列について、残すべきブロックが０であることを示している。また、立体パズル２０６の上面の左端真ん中に配置されているブロック２０８ｂに注目する。このブロック２０８ｂの上面には数字「３」のヒント情報が表示されている。これは当該ブロック２０８ｂの縦（上下）方向に並んでいる９つのブロック２０８からなるブロック列について、残すべきブロックが３つあることを示している。また、立体パズル２０６の右側面の上から４つ目で手前から２つ目に配置されているブロック２０８ｃに注目する。このブロック２０８ｃの右側面には数字「７」のヒント情報が表示されている。これは当該ブロック２０８ｃの横（左右）方向に並んでいる７つのブロック２０８からなるブロック列について、残すべきブロックが７つであることを示している。各面のヒント数字２１０を見せるか隠すか（表示するか否か）は、問題作成者または開発者によって予め決められている。立方体のブロック２０８の６面のすべてにヒント数字２１０を表示しなくてよい。このように、ブロック２０８の表面にヒント情報を表示することにより、ヒント情報を認識し易く表示することができる。
【００７５】
ユーザは、各ブロック２０８に表示されたヒント数字２１０を手がかりにして、削除するブロック２０８および残すブロック２０８を決める。たとえば、ヒント数字２１０として「０」が表示されている場合、当該ブロック列には、残すべきブロック２０８が無いことが分かるので、当該ブロック列のすべてのブロック２０８を削除してよいことが分かる。また、ヒント数字２１０として当該ブロック列に存在するブロック２０８の数と同じ数値が表示されている場合、当該ブロック列のブロック２０８はすべて残すべきブロック２０８であることが分かる。
【００７６】
ユーザは、削除すべきブロック２０８に対しては、ブロック２０８の削除を指示する操作によって、当該不要なブロック２０８を消去することができる。また、残すべきブロック２０８に対しては、ブロック２０８のマーク付けを指示する操作によって、当該必要なブロック２０８にマーク付けを行うことができる。マーク付けにより、各ブロック２０８について、削除すべきブロック２０８ではないと決めたことを覚えておく必要がなくなる。
【００７７】
この実施例では、削除指示操作として、方向指示スイッチ２２ａの上方向を押し、かつ、当該ブロック２０８をタッチする操作が設定されている。また、マーク付け指示操作として、方向指示スイッチ２２ａの右方向を押し、かつ、ブロック２０８をタッチする操作が設定されている。下画面の左下隅には、このようなブロック２０８の削除指示操作およびマーク付け指示操作の方法をユーザに案内する画像が表示される。具体的には、方向指示スイッチ２１２が表示され、さらに、当該方向指示スイッチ２１２の上方向に対応付けて、ブロック２０８を破壊する道具をイメージしてハンマ２１４が表示されるとともに、右方向に対応付けて、ブロック２０８に色付けする道具をイメージして刷毛２１６が表示されている。なお、上述の方向指示スイッチ２２ａの操作は、右利きの（右手でスティック２６を持つ）ユーザのためのものであり、左利きの（左手でスティック２６を持つ）ユーザのために、削除指示操作では、方向指示スイッチ２２ａの上方向の代わりにＸボタン２２ｆが使用されてよく、マーク付け指示操作では、方向指示スイッチ２２ａの右方向の代わりにＡボタン２２ｄが使用されてよい。
【００７８】
なお、上述の削除指示操作およびマーク付け操作は一例であり、適宜変更されてよい。たとえば、初めに、削除またはマーク付けの操作の種類を選択しておいてから、タッチパネル２４でブロック２０８をタッチすることによって、削除指示またはマーク付け指示を使い分けるようにしてもよい。
【００７９】
また、下画面では、立体パズル２０６の周囲の所定の位置にスライサ２１８ａおよび２１８ｂが表示されている。なお、スライサ２１８ａおよび２１８ｂを包括的に参照符号「２１８」で示すこともある。
【００８０】
スライサ２１８は、立体パズル２０６の内部を表示する操作のために用いられるオブジェクトである。立体パズル２０６は、図３から分かるように、複数のブロック２０８が立体的に配置されることによって構成されているので、外（カメラ）から見えないブロック２０８、つまり、内部のブロック２０８が存在する。このような内部のブロック２０８についても、外部のブロック２０８、つまり、外（カメラ）から見えるブロック２０８に表示されているヒント数字２１０から、削除すべきかまたは残すべきかを判断することができるものがある。そのため、この実施例では、スライサ２１８の操作によって、立体パズル２０６の外部のブロック２０８を一時的に非表示にし、内部のブロック２０８を表示することができるようにした。スライサ２１８の操作方法や機能などの詳細については後述する。
【００８１】
図４は、ブロック２０８の削除とマーク付けを説明するための図解図である。削除の際には、ユーザは、ヒント数字２１０から削除すべきブロック２０８であると判断したブロック２０８に対して上述の削除指示操作を行う。当該ブロック２０８が残すべきブロック２０８でなければ、立体パズル２０６から当該ブロック２０８が消去される。
【００８２】
一方、マーク付けの際には、ユーザは、ヒント数字２１０から残すべきブロック２０８であると判断したブロック２０８に対して上述のマーク付け指示操作を行う。これによって、当該ブロック２０８の色が、初期の所定の色と異なる色に変化される。
【００８３】
また、削除指示されたブロック２０８が残すべきブロック２０８であった場合には、図５に示すように、当該ブロック２０８は消去されず、ミスを示す画像を用いて表示される。たとえば、「ミス」のテキストとともに、当該ブロック２０８が、亀裂の入ったブロック２０８に変更される。なお、このミスにより、当該ブロック２０８が残すべきブロック２０８であることが判明するので、この実施例では、当該ブロック２０８の色が、マーク付けの場合と同じ色に変化される。
【００８４】
続いて、図６から図９を参照して、ユーザに指示されたブロック２０８を特定する方法について説明する。図６は、カメラ、タッチ座標およびブロック２０８の関係と視線を示す図解図である。立体パズル２０６は、透視投影変換によって仮想スクリーンに描画される。仮想スクリーンが仮想３次元空間におけるタッチパネル２４に対応する。したがって、カメラ（視点）とタッチ座標とを結ぶ直線を用いて、指示されたブロック２０８を特定する。この直線は、カメラから延びる直線であるから、ここでは視線と呼ぶものとする。
【００８５】
この実施例では、仮想３次元空間の縦横奥行き方向を３軸方向とした直交座標系が定義されている。この直交座標系をワールド座標系と呼ぶものとする。このワールド座標系を用いて、カメラ、立体パズル２０６、ブロック２０８、スライサ２１８の仮想３次元空間における配置場所と座標値とが設定される。ワールド座標系は、前述のブロック座標系とはその原点および軸が異なるだけであり、相互に変換可能である。
【００８６】
具体的には、図６に示すように、まず、２次元のタッチ座標を、カメラおよび立体パズル２０６が配置される仮想３次元空間のワールド座標系に変換する。次に、カメラの位置から３次元座標に変換したタッチ座標へ直線すなわち視線を引く。当該視線を立体パズル２０６のためのブロック座標系に変換する。そして、当該視線が立体パズル２０６のどのブロック２０８に当たっているかを判定する。
【００８７】
指示されたブロック２０８を特定する計算の際には、図７および図８に示すような考え方を使用する。図７に示すように、ブロック２０８は、６つの面（サーフェス）２２０の集合であると考えるものとする。そして、立体パズル２０６に関しても、ブロック２０８の集合ではなく、サーフェス２２０の集合と考える。
【００８８】
図８に示すように、たとえば３＊３＊３の立体パズル２０６を想定した場合、ブロック座標系のｘ軸の正の方向を表とするｘ＝１、ｘ＝２、ｘ＝３の平面を考える。そして、当該平面が格子状になっており、ブロック２０８の存在する位置の格子には、サーフェス２２０が張られていると考える。同様に、ｙ軸の正方向を表とする平面（ｙ＝１、ｙ＝２、ｙ＝３）、ｚ軸の正方向を表とする平面（ｚ＝１、ｚ＝２、ｚ＝３）も考える。さらに、図８では省略しているが、ｘ軸の負の方向を表とする平面（ｘ＝０、ｘ＝１、ｘ＝２）、ｙ軸の負の方向を表とする平面（ｙ＝０、ｙ＝１、ｙ＝２）、ｚ軸の負の方向を表とする平面（ｚ＝０、ｚ＝１、ｚ＝２）も考える。つまり、全部で１８の格子状の平面が在ると考える。
【００８９】
次に、視線と各平面との交点を算出し、当該交点にサーフェス２２０が張られているかどうかを調べる。最後に、視線と交わったサーフェス２２０のうち、視点に最も近いサーフェス２２０を視点からの距離によって判定する。そして、最も近いサーフェス２２０の帰属するブロック２０８を、ユーザのタッチしたブロック２０８として特定する。図９は、一例としてｚ軸の平面（ｚ＝１、ｚ＝２、ｚ＝３）と視線との交差を示している。図９のようなカメラと交点の関係の場合、ｚ＝３の平面における交点がカメラに最も近いので、当該サーフェス２２０の帰属するブロック２０８が、指示されたブロック２０８として特定される。
【００９０】
具体的な計算の際には、まず、視線の直線式に、ｘの整数値（ｘ＝１、ｘ＝２、ｘ＝３）を代入して、ｙとｚを求め、視線とｘ軸の正方向の各平面との交点の座標を取得する。同様に、ｙ軸の正方向の各平面（ｙ＝１、ｙ＝２、ｙ＝３）と視線との交点の座標、およびｚ軸の正方向の各平面（ｚ＝１、ｚ＝２、ｚ＝３）と視線との交点の座標も算出する。これにより、ｘ、ｙ、ｚ軸の正方向の平面について、９つの交点の座標が得られる。同様に、ｘ、ｙ、ｚ軸の負方向の平面についても、視線との交点の座標を算出する。
【００９１】
交点の座標からブロック座標系のブロック２０８の座標値を算出し、次の数１の計算式により、ブロック２０８のインデックス番号ＩＢを算出する。
［数１］
ＩＢ＝ｘ＋ｙ＊（ｘｓｉｚｅ）＋ｚ＊（ｘｓｉｚｅ）＊（ｙｓｉｚｅ）
ここで、ｘｓｉｚｅ、ｙｓｉｚｅは、それぞれ立体パズル２０６のｘ軸方向のサイズ、ｙ軸方向のサイズである。図８の３＊３＊３の立体パズル２０６の場合、ｘ軸方向のサイズおよびｙ軸方向のサイズともに３である。
【００９２】
算出されたインデックス番号に基づいて、当該ブロック２０８が存在しているかどうかを判定する。ブロックデータでは、配列のインデックス番号に対応付けて、ブロック２０８が存在するかどうかを示す情報が記憶されているので、当該ブロックデータを参照して判定を行うことができる。複数のブロック２０８が存在している場合には、カメラから最も近いブロック２０８がタッチされたブロック２０８であると判定される。
【００９３】
このように、タッチ位置から算出した視線と各ブロック２０８の表面との交点を算出することによって、ユーザにタッチされたブロック２０８を特定するようにしているので、簡単な処理で３次元パズルを構成する複数のブロック２０８のうちの指示されたブロック２０８を特定することができる。
【００９４】
また、この実施例では、ユーザによる所定の操作に応じて立体パズル２０６が回転されるようになっている。具体的には、スライドタッチ操作に応じて、立体パズル２０６の回転量が変化される。スライドタッチ操作とは、タッチパネル２４上をタッチしたまま、タッチ位置（指示位置）を移動させる操作のことである。ただし、この実施例では、スライサ２１８が表示されているので、スライサ２１８を除いた場所で、スライドタッチ操作が行われる必要がある。
【００９５】
回転量を算出する際には、まず、現在のスライドタッチの移動量（ドラッグ値）を、タッチパネル２４の座標系のＸ，Ｙ軸の各方向について算出する。なお、タッチパネル２４の座標系は、たとえば、タッチパネル２４の左上隅を原点とし、タッチパネル２４の右方向をＸ軸、下方向をＹ軸とする座標系である。
【００９６】
Ｘ方向のドラッグ値Ｄｘは、指示位置のＸ方向の変化量であり、前のタッチ位置（Ｘ座標）から現在のタッチ位置（Ｘ座標）を差し引くことによって算出される。Ｙ方向のドラッグ値Ｄｙは、指示位置のＹ方向の変化量であり、前のタッチ位置（Ｙ座標）から現在のタッチ位置（Ｙ座標）を差し引くことによって算出される。
【００９７】
このドラッグ値を回転量（ロール値）に変換する。その際に、タッチ位置がゆっくりスライドされたときには、よりゆっくり、素早くスライドされたときには、より素早く、立体パズル２０６が回転されるように、閾値によって演算式を変えるようにしている。すなわち、ドラッグ値が所定の閾値Ｔ以下のときには、数２によってロール値Ｒｘを算出し、ドラッグ値が所定の閾値Ｔを超えるときには、数３によってロール値Ｒｘを算出する。Ｒｙについても同様の演算式で算出される。
［数２］
Ｒｘ＝Ｄｘ＊Ａ
［数３］
Ｒｘ＝（Ｄｘ−Ｔ）＊Ｂ＋Ｔ＊Ａ
ここで、Ａ、Ｂは係数であり、それぞれ所定値が設定されている。
【００９８】
最後に、ロール値を立体パズル２０６の回転量に加算する。つまり、ロール値Ｒｘは、立体パズル２０６のブロック座標系のｙ軸を軸とした回転量に加算され、ロール値Ｒｙは、立体パズル２０６のブロック座標系のｘ軸を軸とした回転量に加算される。ブロック座標系からワールド座標系に変換する際に回転量に応じた回転行列がかけられるので、回転操作の反映された立体パズル２０６が表示される。
【００９９】
したがって、ユーザは、スライドタッチ操作によって、立体パズル２０６の回転操作を直感的に行うことができる。たとえば図１０に示すように、いろいろな方向に回転させた立体パズル２０６を表示させることができるので、図３のような初期状態では表示されていなかったブロック２０８やヒント数字２１０を確認することができるし、当該ブロック２０８に対して削除やマーク付けを行うことができる。
【０１００】
なお、回転操作は、スライドタッチ操作に限らず、他の実施例では、他の操作で行われてもよい。たとえば、操作スイッチ２２の操作によって行われてよい。具体的には、立体パズル２０６は、動作スイッチ２２Ｒの操作でブロック座標系のｙ軸回りに回転され、動作スイッチ２２Ｌの操作でブロック座標系のｘ軸回りに回転されるようにしてもよい。
【０１０１】
また、この実施例では、上述のようにスライサ２１８が設けられており、スライサ２１８を操作することによって、立体パズル２０６の内部のブロック２０８が表示される。図３に示したように、この実施例では、２つのスライサ２１８ａおよび２１８ｂが表示される。スライサ２１８ａおよび２１８ｂは、それぞれ立体パズル２０６のブロック座標系のｘ軸方向およびｚ軸方向で、ブロック２０８を非表示にする位置を指示するためのものである。スライサ２１８は、スライドタッチ操作によって操作することが可能であり、つまり、スライサ２１８をタッチしてタッチ位置を移動させることによって、スライサ２１８を移動させることができる。ただし、スライサ２１８ａおよび２１８ｂは、それぞれブロック座標系のｘ軸方向およびｚ軸方向にのみ移動される。
【０１０２】
図１１は、ｘ軸方向のスライサ２１８ａによって内部が表示された立体パズル２０６の一例を示す。たとえば、スライサ２１８ａは、スライドタッチ操作に応じてｘ軸負方向に移動されている。立体パズル２０６においては、ｘ軸においてスライサ２１８ａの位置よりも正方向に存在するブロック２０８が非表示にされる。したがって、立体パズル２０６のスライサ２１８ａの位置の断面が表示されることとなり、当該断面のブロック２０８に対して、削除およびマーク付けの指示を行うことが可能になる。
【０１０３】
このようなスライサ２１８の処理の際には、ブロック２０８の削除およびマーク付けの場合と同様に、まず、タッチ座標をワールド座標系に変換し、カメラとタッチ座標とを結ぶ直線から視線を算出する。次に、視線をワールド座標系からブロック座標系に変換する。続いて、視線とスライサ２１８の交差判定を行う。つまり、スライサ２１８がユーザによって指示されたか否かを判定する。
【０１０４】
なお、このスライサ２１８の交差判定の際には、先にブロック２０８と視線との交差判定を行うようにしている。この実施例では、スライサ２１８はブロック２０８の背後に隠れる場合があるが、逆に、スライサ２１８はブロック２０８の手前に表示されることがないからである。もし視線が先にブロック２０８と交差していたら、スライサ２１８とは交差していないと判断している。また、この実施例では、スライサ２１８が８面体形状に形成されているので、スライサ２１８と視線の交差判定では、処理を簡単化するために、スライサ２１８の判定上の形状を球体とみなして、視線と球体の交差判定を行うようにしている。球体の半径は、球体がスライサ２１８を包含するサイズに設定されている。
【０１０５】
視線がスライサ２１８と交差していると判定された場合、スライドタッチの移動量に基づいてスライサ２１８の座標値を更新する。たとえば、スライサ２１８へのタッチが開始されたときのタッチ座標を基準点とし、当該基準点と現在のタッチ座標に基づいて、スライドタッチの移動量を算出する。この移動量は、たとえば、基準点から現在の指示位置までのベクトルとして算出され、したがって、移動に関して長さと方向の成分を含む。この移動量（移動ベクトル）をワールド座標系で算出し、さらにブロック座標系に変換することにより、ブロック座標系における移動量（移動ベクトル）を算出する。そして、タッチされたスライサ２１８がｘ軸方向の非表示位置を指示するためのスライサ２１８ａの場合、算出された移動量とタッチが開始されたときのスライサ２１８ａの位置とに基づいて、ブロック座標系のｘ軸における移動量（長さと方向）を算出して、スライサ２１８ａのｘ座標値を算出する。また、タッチされたスライサ２１８がｚ軸方向の非表示位置を指示するためのスライサ２１８ｂの場合、算出された移動量とタッチが開始されたときのスライサ２１８ｂの位置とに基づいて、ブロック座標系のｚ軸における移動量（長さと方向）を算出して、スライサ２１８ｂのｚ座標値を算出する。
【０１０６】
スライサ２１８の座標値は、ブロック２０８と同様に、ブロック座標系で保持されているので、各ブロック２０８が非表示となるか否かも、ブロック座標系の座標値によって容易に判定することができる。スライサ２１８ａの場合には、スライサ２１８ａのｘ座標値以上のｘ座標値に対応するインデックス番号のブロック２０８が非表示にされる。つまり、ブロックデータの配列のうち、ｘ軸がスライサ２１８ａのｘ座標値に対応する列以降であるブロック２０８が非表示にされる。スライサ２１８ｂについても、同様にして、スライサ２１８ｂのｚ座標値に基づいて、非表示にするブロック２０８が特定されて、当該ブロック２０８が非表示にされる。
【０１０７】
また、図１１に示すように、立体パズル２０６のスライサ２１８によって非表示になった部分には、ワイヤフレーム２２２が表示される。ワイヤフレーム２２２を表示することによって、ブロック２０８が削除されたのではなく、スライサ２１８に対する操作によって一時的に非表示にされているに過ぎないこと表現できる。このワイヤフレーム２２２は、通常は見えないはずの裏を向いたポリゴンの一番外側（外縁）を描くことによって表示される。具体的には、ブロック２０８を削る前の立体パズル２０６を１つの大きいブロックと見なす。このブロックを表示するにあたり、表を向いているポリゴンだけを描くのが通常であるところを、この場合、表を向いたポリゴンを描かず、裏を向いたポリゴンの一番外側だけを描くようにする。なお、ポリゴンの表裏は、ポリゴンを構成する各頂点を視点から見た並び順によって決まるものであり、反時計回りの場合、表であり、時計回りの場合、裏であると定義されている。
【０１０８】
このように、スライサ２１８に対する簡単な操作によって、立体パズル２０６において内部に位置する任意のブロック２０８を表示することができ、当該内部のブロック２０８に対しても、削除指示やマーク付け指示を行うことが可能になる。
【０１０９】
なお、他の実施例では、ブロック座標系のｙ軸方向で非表示にする位置を指示するスライサ２１８をさらに設けるようにしてもよい。あるいは、このｙ軸方向のスライサ２１８は、ｘ軸方向のスライサ２１８ａに代えて、またはｚ軸方向のスライサ２１８ｂに代えて、設けられてもよい。
【０１１０】
このように、この３次元パズルゲームでは、ユーザは、スライドタッチ操作による立体パズル２０６の回転、およびスライサ２１８を用いた内部のブロック２０８の表示などを行いながら、削除指示およびマーク付け指示によって、立体パズル２０６から不要なブロック２０８を削除し、残すべきブロック２０８にマークを付け、立体パズル２０６を解く。図１２は、立体パズル２０６が解かれる直前の画面の一例を示す。左端の１つのブロック２０８を除いて、立体パズル２０６のブロック２０８はすべてマーク付けされている。マーク付けされたブロック２０８は全て残すべきブロック２０８であり、マーク付けされていない左端のブロック２０８は、不要なブロックである。したがって、図１２で、左端のブロック２０８に対して削除指示が行われると、当該立体パズル２０６が解かれることとなる。
【０１１１】
残っているブロック２０８が全て残すべきブロック２０８であると判定されると、立体パズル２０６が解かれ、所定の立体モデルが完成する。図１３は、完成した立体モデル２２４の表示された画面の一例を示す。図１３では、立体パズル２０６の解答は、マンボウの立体モデル２２４であり、画面上では、当該モデル名と「クリア」を示すテキストが表示されている。立体モデル２２４において、各ブロック２０８の色は、完成時の色に変更されている。なお、この立体モデル２２４は、ブロックデータを用いずに、予め準備しておいた３Ｄモデルデータに差し換えることによって表示されたものであってもよく、その場合、立体モデル２２４の色付けやテクスチャを、当該モデルに対して、より適切なものや色彩豊かなものなどにすることができる。
【０１１２】
一方、立体モデル２２４が完成される前に、ゲームオーバ条件が満足された場合には、ゲームオーバとなり、ゲームオーバを示す画面が表示される。図１４は、ゲームオーバ時の画面の一例を示す。図１４は、ミスの回数が制限回数を超えた場合を示し、上画面では、ミス制限回数を示す５つのブロック２０４が全てミスを示す画像によって表示されている。下画面では、「ゲームオーバ」のテキストが表示される。なお、時間制限のゲームオーバ条件が満足された場合には、たとえば「タイムアップ」のテキストが下画面に表示される。
【０１１３】
図１５および図１６には、ゲーム装置１０のメモリマップの一例が示される。メモリマップはプログラム記憶領域３００およびデータ記憶領域３０２を含む。プログラム記憶領域３００にはＲＯＭ２８ａのプログラムが記憶されている。データ記憶領域３０２にはＲＯＭ２８ａに予め記憶されたデータや処理によって生成または取得されたデータが記憶されている。なお、図１５および図１６はメモリマップの一部を示しており、プログラム記憶領域３００およびデータ記憶領域３０２には処理の実行に必要な他のプログラムおよびデータが記憶されている。
【０１１４】
記憶領域３０４には表示プログラムが記憶されている。表示プログラムは、複数のブロック２０８からなる立体パズル２０６およびヒント数字２１０等を含む画面を描画して表示するためのものである。
【０１１５】
記憶領域３０６には入力判別プログラムが記憶されている。入力判別プログラムは、入力情報に基づいて、ユーザによってどのような指示が行われたかを判別するためのものである。入力情報は、各操作スイッチ２２が押されたかどうかを示すデータ、タッチパネル２４におけるタッチの有無を示すデータおよびタッチされた位置の座標データを含む。入力情報の取得は一定時間（たとえば１フレーム＝１／６０秒）ごとに行われる。入力情報に基づいて、ブロック２０８を削除する指示が行われたか否か、ブロック２０８にマーク付けする指示が行われたか否か、立体パズル２０６の回転が指示されたか否か、スライサ２１８が操作されたか否かなどが判別される。
【０１１６】
記憶領域３０８には削除判別プログラムが記憶されている。削除判別プログラムは、削除指示が行われたとき、当該指示されたブロック２０８が残すべきブロック２０８であるか否かを判別するためのものである。この実施例では、各ブロック２０８について、当該ブロック２０８を残すべきか否かを示すフラグが記憶されているので、指示されたブロック２０８を特定し、当該フラグを参照して判別を行う。
【０１１７】
記憶領域３１０には消去プログラムが記憶されている。消去プログラムは、残すべきブロック２０８であると判別されなかったブロック２０８を消去するためのものである。この実施例では、ブロックデータにおいて、立体パズル２０６において各ブロック２０８が存在しているかどうかを示すフラグが記憶されており、削除指示されたブロック２０８が残すべきブロック２０８ではないとき、当該フラグをオフにすることで、当該ブロック２０８が消去される。
【０１１８】
記憶領域３１２には解決判別プログラムが記憶される。解決判別プログラムは、立体パズル２０６において残っているブロック２０８の全てが残すべきブロックであるか否かを判別することによって、問題としての立体パズル２０６が解かれたか否か、つまり、立体モデル２２４が完成したか否かを判別する。
【０１１９】
記憶領域３１４には問題データ（立体パズルデータ）が記憶されている。問題データは、ＲＯＭ２８ａに予め記憶されていた、つまり、静的なデータである。なお、たとえば問題のレベル（難易度）別に、複数の問題データが予め記憶されていてよい。また、問題データは、ネットワークを介してサーバからダウンロードしてＲＡＭ２８ｂまたはＲＡＭ４２に取得したデータであってもよい。
【０１２０】
問題データは、包含サイズデータ、ブロックデータおよび表面データを含む。包含サイズデータは、問題としての立体パズル２０６がブロック座標系のｘ、ｙ、ｚ軸のそれぞれについて何個（ｘ、ｙ、ｚ個）のブロック２０８によって構成されているかを示す。なお、この実施例では、立体パズル２０６が直方体形状に形成されるので、このような包含サイズデータが記憶される。
【０１２１】
ブロックデータは、立体パズル２０６に含まれる各ブロック２０８に関する情報を示すブロック情報を記憶している。ブロックデータは、ブロック座標系のｘ軸、ｙ軸、ｚ軸の順に並んでいるｘ＊ｙ＊ｚ個のブロック情報を含む。上述のように、ブロックデータは、所定の最大サイズ（たとえば１０＊１０＊１０）の立体パズル２０６の各ブロック２０８のために必要な記憶領域を有している。つまり、このブロックデータは、最大サイズの場合の個数分のブロック情報が並べられた配列であり、配列のインデックス番号はブロック座標系の座標値に対応している。
【０１２２】
各ブロック情報は、色、「残すべきかどうか」フラグ、および「存在しているかどうか」フラグを含む。色は、立体パズル２０６が解かれたときにブロック２０８に付けられる色の情報である。ただし、上述のように完成モデル２２４の３Ｄモデルデータを別途記憶している場合には、この色情報は使用されない。「残すべきかどうか」フラグは、ブロック２０８を残すべきかどうかを示すフラグであり、つまり、削除の正否を示す情報である。残すべきブロック２０８については、当該フラグはオンにされ、削除すべきブロック２０８については、当該フラグはオフにされている。この「残すべきかどうか」フラグによって、各ブロック２０８に対する削除指示の正否が判別されるので、簡単な処理で判別を行うことができる。
【０１２３】
「存在しているかどうか」フラグは、ブロック２０８が存在しているかどうかを示すフラグである。上述のように、配列のインデックス番号は、ブロック座標系の座標値に対応しており、つまり、各ブロック情報は、ブロック座標系における各ブロック２０８の配置場所に対応付けられている。したがって、立体パズル２０６においてブロック２０８が配置されている配置場所については、当該フラグがオンにされ、ブロック２０８が配置されていない配置場所については、当該フラグがオフにされている。ユーザによる削除指示操作によってブロック２０８が削除された場合には、当該ブロック２０８に対応する「存在しているかどうか」フラグがオンからオフにされる。
【０１２４】
表面データは、ブロック２０８の表面に表示されるヒント数字２１０についての情報を示す表面情報を記憶している。この実施例では、ブロック２０８は立方体であり、６つの表面を有するので、基本的には、各ブロック２０８の６つの表面のそれぞれについて、表面情報が記憶される。したがって、表面データは、ｘ＊ｙ＊２、ｘ＊ｚ＊２、ｙ＊ｚ＊２個の表面情報を含む。
【０１２５】
ヒント数字２１０は、ブロック列において残すべきブロック２０８の数を示す。ヒント数字２１０は、この実施例では、当該ブロック列の列方向において対向する面に、つまり、列方向に垂直な表面に表示される。ヒント数字２１０を各ブロック２０８のブロック列方向に垂直な表面に表示するので、ブロック列ごとのヒント数字２１０を認識し易い。また、ヒント数字２１０を、対向する２つの面の両方に表示する場合には、同じブロック列の両側でヒント数字２１０が表示されるので、ヒント数字２１０をより容易に確認することができる。
【０１２６】
このヒント数字２１０について、各表面情報は、「ヒント数字を見せるか隠すか」フラグを含む。「ヒント数字を見せるか隠すか」フラグは、当該表面にヒント数字２１０を表示するか否かを示すフラグであり、ヒント数字を表示する表面については、当該フラグがオンにされ、ヒント数字を表示しない表面については、当該フラグがオフにされている。どの表面にヒント数字２１０を表示するか否かは、問題作成者ないし開発者によって予め設定される。
【０１２７】
なお、対向する２つの面は、同一のブロック列の列方向に並ぶので、対向する２つの面には、同一のヒント数字２１０が与えられる。対向する２つの面で、ヒント数字２１０を見せるか隠すかを一致させる場合には、１つの面について表面情報を記憶しておけば足りる。したがって、その場合、表面データは、ｘ＊ｙ、ｘ＊ｚ、ｙ＊ｚ個の表面情報であってもよい。
【０１２８】
記憶領域３１６には問題付加データが記憶される。この問題付加データは、上述の静的な問題データを元に、処理によって動的に生成された付加情報である。問題付加データは、静的な問題データと同様に、ブロックデータおよび表面データを含む。
【０１２９】
ブロックデータは、各ブロック２０８について、「ミスしたかどうか」フラグおよび「マークされているかどうか」フラグを含む。「ミスしたかどうか」フラグは、ブロック２０８の削除指示が間違って行われたか否かを示すフラグである。当該ブロック２０８が残すべきブロックであるのに削除指示が行われたときに、当該フラグがオフからオンにされる。
【０１３０】
また、「マークされているかどうか」フラグは、ブロック２０８がマーク付けされているか否かを示すフラグである。当該ブロック２０８がマークされていない場合においてマーク付け指示が行われたとき、当該フラグがオフからオンにされる。一方、当該ブロック２０８がマーク付け指示によってマークされている場合において再びマーク付け指示が行われたときには、当該フラグはオンからオフにされる。また、当該ブロック２０８が残すべきブロックであるのに削除指示が行われたとき（つまり、削除指示が間違いであったとき）にも、上述のように当該ブロック２０８が残すべきブロック２０８であることが判明するので、当該フラグがオフからオンにされる。
【０１３１】
また、この「マークされているかどうか」フラグがオンにされている場合において、当該ブロック２０８に対して削除指示が行われたときには、当該ブロック２０８に対する消去処理が不能動化される。したがって、ユーザは、削除すべきではないと判断したブロック２０８、つまり、削除したくないブロック２０８に対してマーク付けを行っておけば、誤操作などにより、ユーザの意思に反してブロック２０８が誤って削除されるのを防止することができる。
【０１３２】
表面データは、各表面について、ヒント数字テクスチャの種類の情報を含む。ヒント数字テクスチャは、ヒント数字２１０をブロック２０８の表面上に表示するためのテクスチャデータであり、数字ごとのヒント数字テクスチャが予め記憶されている。各ブロックの各面のヒント数字２１０は、ブロック列で残すべきブロック２０８の数を示すものであるから、静的な問題データに含まれるブロックデータの「存在しているかどうか」フラグに基づいて、各表面のヒント数字２１０が算出される。そして、各ブロック２０８の表面ごとにヒント数字テクスチャの種類を指定する情報を示す表面データが生成されて記憶領域３１６に記憶される。この実施例では、ブロック列を構成する各ブロック２０８の削除の正否を示す情報から各表面のヒント数字２１０を算出し、各表面のヒント数字テクスチャの種類の情報を生成するようにしているので、ヒント情報を予め記憶しておくためのメモリ容量を節約できる。
【０１３３】
なお、図３等で示すような単なる数字のみを表示するテクスチャは、ブロック列において複数の残すべきブロック２０８が連続的に並んで配置されている場合に使用される。また、ブロック列において複数の残すべきブロック２０８が間を置いて配置されている場合には、たとえば丸印で囲まれた数字を表示するテクスチャが使用される。
【０１３４】
図１６は、メモリマップのうちデータ記憶領域３０２の別の領域を示す。記憶領域３１８には操作情報（入力情報）が記憶される。操作情報は、上述のように、タッチパネル２４から取得された操作データとして、タッチ座標およびタッチの有無に関する情報を含む。また、操作情報は、操作スイッチ２２から取得された操作データとして、各操作スイッチ２２が押されたかどうかを示す情報を含む。
【０１３５】
記憶領域３２０には仮想３次元空間を描画するためのカメラに関する情報が記憶されている。カメラ情報は、ワールド座標系における視点の座標を含む。注視点の座標または視線方向などに関する情報がさらに記憶されている。なお、この実施例では、視点は所定位置に固定されている。
【０１３６】
記憶領域３２２にはスライサ２１８の位置データが記憶される。スライサ２１８の位置データは、ブロック座標系で表された座標値を含む。この実施例では、ブロック座標系のｘ軸方向に移動可能なスライサ２１８ａとｚ軸方向に移動可能なスライサ２１８ｂのデータが記憶されている。スライサ２１８ａおよび２１８ｂの初期座標値は、たとえばそれぞれ立体パズル２０６のｘおよびｚ軸方向の先端のブロック２０８の隣の配置場所に対応する座標値である。なお、ｙ軸の座標値には、たとえば立体パズル２０６のｙ軸方向の中央など所定の配置場所に対応する座標値が設定される。ｘ軸またはｚ軸の座標値は、スライサ２１８に対するスライド操作に応じて更新される。このスライサ２１８の座標値とブロック２０８の座標値との比較によって、当該ブロック２０８を非表示にするか否かが判別される。
【０１３７】
記憶領域３２４には、スライサ２１８の半径データが記憶されている。スライサ２１８と視線との交差判定の際には、スライサ２１８は球体として扱うようにしているので、当該球体の半径データがこの記憶領域３２４に記憶されている。
【０１３８】
記憶領域３２６にはスライドタッチの移動量が記憶される。スライドタッチの移動量は、上述のように、タッチパネル２４のＸ軸方向およびＹ軸方向のそれぞれのドラッグ値Ｄｘ、Ｄｙであり、Ｘ軸方向およびＹ軸方向のそれぞれについて、前回のタッチ位置から現在のタッチ位置を差し引くことによって算出される。
【０１３９】
記憶領域３２８には立体パズル２０６の回転量が記憶される。具体的には、ブロック座標系のｘ軸回りの回転量およびｙ軸回りの回転量が記憶される。スライドタッチ操作すなわち回転操作が行われたときには、上述のスライドタッチの移動量Ｄｘ、Ｄｙから、数２または数３によってロール値Ｒｘ、Ｒｙが算出される。そして、立体パズル２０６のｙ軸回りの回転量にロール値Ｒｘが加算され、立体パズル３０６のｘ軸回りの回転量にロール値Ｒｙが加算される。立体パズル２０６を表示するためにワールド座標系に配置する際には、回転量に基づいた回転行列が算出され、ブロック座標系からワールド座標系への変換行列とともに用いられる。したがって、回転量に応じて回転された立体パズル２０６が表示される。
【０１４０】
なお、図１５および図１６には示されないが、データ記憶領域３０２には、ブロック２０８およびスライサ２１８など各種オブジェクトの画像データ、ヒント数字テクスチャ、各種フラグ、カウンタなど、処理に必要な他のデータも記憶されている。
【０１４１】
図１７および図１８にはゲーム装置１０の動作の一例が示される。ゲーム処理を開始すると、ステップＳ１で、ＣＰＵコア３４は、ブロック２０８毎の「残すべきかどうか」フラグに基づいて、「ヒント数字テクスチャの種類の情報」を生成する。この実施例では、ヒント数字２１０はブロック列の中から残すべきブロック２０８の数を示すものであるから、立体パズル２０６のｘ、ｙ、ｚ軸方向に並ぶ各ブロック列において存在しているブロック２０８の数、すなわち、「残すべきかどうか」フラグがオンであるブロック２０８の数を算出することによって、各ブロック２０８のブロック列に垂直な各表面のヒント数字２１０を算出する。そして、各ブロック２０８の各表面について、ヒント数字テクスチャの種類を決定し、各表面のヒント数字テクスチャの種類を表面データとして記憶領域３１６に記憶する。
【０１４２】
続くステップＳ３以降の処理は、図１８のステップＳ２５でゲームクリア条件が満足され、またはステップＳ２９でゲームオーバ条件が満足されるまで、単位時間（１フレーム）ごとに実行される。
【０１４３】
ステップＳ３では、ＣＰＵコア３４は時間カウント処理を実行する。これにより、ゲーム開始からの経過時間がカウントされる。
【０１４４】
ステップＳ５では、ＣＰＵコア３４は操作情報を取得する。具体的には、操作スイッチ２２の操作データおよびタッチパネル２４の操作データを取得して記憶領域３１８に記憶する。続くステップＳ７、Ｓ９、Ｓ１１およびＳ１３では、取得した操作情報に基づいて、ユーザによって行われた操作（入力）の種類が判別される。
【０１４５】
ステップＳ７では、ＣＰＵコア３４は、十字スイッチ（方向指示スイッチ）２２ａの上方向またはＸボタン２２ｆが押されると同時に（または、押された状態で）タッチパネル２４でタッチ操作（入力）が行われたか否かを判断する。ステップＳ７で“ＹＥＳ”の場合、つまり、削除指示のための操作が行われていると判断される場合には、ＣＰＵコア３４はステップＳ１５で後述する図１９のブロック削除処理を実行する。
【０１４６】
一方、ステップＳ７で“ＮＯ”の場合、ＣＰＵコア３４は、ステップＳ９で十字スイッチ２２ａの右方向またはＡボタン２２ｄが押されると同時に（または、押された状態で）タッチパネル２４でタッチ操作が行われたか否かを判断する。ステップＳ９で“ＹＥＳ”の場合、つまり、マーク付け指示のための操作が行われていると判断される場合には、ＣＰＵコア３４はステップＳ１７で後述する図２０のブロックマーク処理を実行する。
【０１４７】
一方、ステップＳ９で“ＮＯ”の場合、ＣＰＵコア３４はステップＳ１１でタッチパネル２４でタッチ操作のみが行われたか否かを判断する。ステップＳ１１で“ＹＥＳ”の場合、ＣＰＵコア３４は、ステップＳ１３で視線とスライサ２１８が交差したか否かを判断する。つまり、回転操作が行われているのか、または、スライサ２１８が操作されたのかを判断する。
【０１４８】
このスライサ２１８の交差判定では、上述のように、タッチ座標がワールド座標系の座標に変換され、当該変換されたタッチ座標と記憶領域３２０のカメラの座標から視線が算出され、さらに視線がブロック座標系に変換される。そして、当該変換された視線と立体パズル２０６の各ブロック２０８の表面との交差が調べられ、視線と各ブロック２０８が交差していない場合には、視線とスライサ２１８（２１８ａ、２１８ｂ）との交差が調べられる。スライサ２１８は球体として扱われ、記憶領域３２２の座標と記憶領域３２４の半径に基づいて、球体としてのスライサ２１８と視線が交差するか否かが判断される。
【０１４９】
ステップＳ１３で“ＮＯ”の場合、つまり、ユーザによって回転操作が行われたと判断される場合には、ＣＰＵコア３４は、ステップＳ１９で後述する図２１の回転処理を実行する。
【０１５０】
一方、ステップＳ１３で“ＹＥＳ”の場合、つまり、ユーザによってスライサ２１８の操作が行われたと判断される場合には、ＣＰＵコア３４は、ステップＳ２１で後述する図２２のスライサ処理を実行する。
【０１５１】
なお、ステップＳ１１で“ＮＯ”の場合、つまり、所定の操作が行われていない場合には、処理はそのままステップＳ２３に進む。
【０１５２】
図１９には、ステップＳ１５（図１７）のブロック削除処理の動作の一例が示される。ブロック削除処理を開始すると、ＣＰＵコア３４は、ステップＳ４１でタッチ座標を３次元空間のワールド座標系に変換して視線を計算する。視線の直線式は、変換された３次元のタッチ座標とカメラの座標から算出される。なお、タッチパネル２４の座標系からワールド座標系への変換行列は、仮想カメラの位置とタッチパネル２４（仮想スクリーン）の位置によって算出されるが、この実施例では、仮想カメラおよび仮想スクリーンは固定されているので、変換行列は予め記憶されていてよい。
【０１５３】
次に、ステップＳ４３で、ＣＰＵコア３４は、視線をワールド座標系からブロック座標系に変換する。なお、ブロック座標系とワールド座標系の位置関係は決まっており、つまり、ブロック座標系の原点はワールド座標系で所定の位置に配置されるので、ワールド座標系とブロック座標系との間の変換行列は予め記憶されていてよい。また、立体パズル２０６は回転量に基づいて回転されているので、当該回転量に応じた逆変換も行われる。
【０１５４】
続いて、ステップＳ４５で、ＣＰＵコア３４は、ブロック２０８の集合すなわち立体パズル２０６をサーフェス２２０の張られた格子状平面の集合と考え、視線と各平面との交点を算出する。立体パズル２０６の各平面は、立体パズル２０６の包含サイズを最大値とするｘ、ｙ、ｚの整数値によって与えられる。
【０１５５】
そして、ステップＳ４７で、ＣＰＵコア３４は、交点にブロック２０８が存在しているか否かを判断する。上述のように、交点の座標からブロック座標系のブロック２０８の座標値を算出し、数１によってブロック２０８のインデックス番号ＩＢを算出する。そして、インデックス番号ＩＢに対応するブロックデータの「存在しているかどうか」フラグを参照し、当該フラグがオンであるか否かを判定する。ステップＳ４７で“ＮＯ”の場合には、ブロック２０８がタッチされていないので、このブロック削除処理を終了する。
【０１５６】
一方、ステップＳ４７で“ＹＥＳ”の場合、つまり、ブロック２０８に対して削除指示が行われた場合には、ＣＰＵコア３４は、ステップＳ４９で、最も近いブロック２０８を、タッチしたブロック２０８として特定する。最も近いブロック２０８は、カメラからの距離が最も短い交点の存在するサーフェス２２０が帰属するブロック２０８である。
【０１５７】
そして、ステップＳ５１で、ＣＰＵコア３４は、ブロックデータにおいて、特定したブロック２０８の「ミスしたかどうか」フラグまたは「マークされているかどうか」フラグがオンであるか否かを判断する。「ミスしたかどうか」フラグは、残すべきブロック２０８に削除指示が行われた場合にオンにされるので、この「ミスしたかどうか」フラグがオンの場合、当該ブロック２０８が残すべきブロック２０８であることが既に判明し、当該ブロック２０８がミスの画像で表示されている。したがって、「ミスしたかどうか」フラグがオンのブロック２０８は、削除判定対象から除外する。また、「マークされているかどうか」フラグは、ユーザが残すべきブロック２０８とみなしてマーク付けを行った場合、または、残すべきフロック２０８に間違って削除指示が行われた場合に、オンにされる。つまり、この「マークされているかどうか」フラグがオンのブロック２０８は、ユーザによって削除すべきではないブロック２０８として判断されたブロック２０８であるか、または、問題で定義された残すべきブロック２０８である。したがって、「マークされているかどうか」フラグがオンのブロック２０８も、削除判定対象から除外する。このステップＳ５１で“ＹＥＳ”の場合、マーク付け用の色でまたはミスの画像で表示された削除判定対象にならないブロック２０８がタッチされたので、当該ブロック２０８に対するステップＳ５５の消去処理を不能動化し、このブロック削除処理を終了する。
【０１５８】
一方、ステップＳ５１で“ＮＯ”の場合、つまり、初期の色で表示されたブロック２０８に対して削除指示が行われた場合には、ＣＰＵコア３４は、ステップＳ５３で、ブロックデータにおいて、特定したブロック２０８の「残すべきかどうか」フラグがオンであるか否かを判断する。
【０１５９】
ステップＳ５３で“ＮＯ”の場合、つまり、不要なブロック２０８に対して削除指示が行われた場合には、ＣＰＵコア３４は、ステップＳ５５で、記憶領域３１４のブロックデータにおいて、特定したブロック２０８の「存在しているかどうか」フラグをオフにする。これにより、当該削除指示されたブロック２０８が立体パズル２０６から消去される。
【０１６０】
一方、ステップＳ５３で“ＹＥＳ”の場合、つまり、必要なブロック２０８に対して削除指示が行われた場合には、ＣＰＵコア３４は、ステップＳ５７で、記憶領域３１６のブロックデータにおいて、特定されたブロック２０８の「ミスしたかどうか」フラグおよび「マークされているかどうか」フラグをオンにする。これにより、削除指示が間違って行われたブロック２０８は、図５に示したようなミスの画像で表示されることとなる。なお、この実施例では、削除指示ミスのブロック２０８がマーク付けされた場合の色と同じ色で表示されるように構成しているので、「マークされているかどうか」フラグもオンにされる。ステップＳ５５またはＳ５７を終了すると、このブロック削除処理が終了され、処理は図１７のステップＳ２３に戻る。
【０１６１】
図２０には、ステップＳ１７（図１７）のブロックマーク処理の動作の一例が示される。ブロックマーク処理を開始すると、ＣＰＵコア３４は、ステップＳ７１−Ｓ７９で、マーク付け指示の行われたブロック２０８を特定する。ステップＳ７１−Ｓ７９の処理は、上述のブロック削除処理のステップＳ４１−Ｓ４９の処理と同様であり、ここでの説明は省略する。
【０１６２】
ステップＳ８１では、ＣＰＵコア３４は、ブロックデータにおいて、特定したブロック２０８の「ミスしたかどうか」フラグがオンであるか否かを判断する。上述のように、「ミスしたかどうか」フラグがオンであるブロック２０８は、残すべきブロック２０８であることが既に判明しているので、マーク付け判定対象から除外する。したがって、ステップＳ８１で“ＹＥＳ”の場合、このブロックマーク処理を終了する。
【０１６３】
一方、ステップＳ８１で“ＮＯ”の場合、つまり、残すべきか否かが判明していないブロック２０８に対してマーク付け指示が行われた場合には、ＣＰＵコア３４は、ステップＳ８３で、ブロックデータにおいて、特定したブロック２０８の「マークされているかどうか」フラグがオンであるか否かを判断する。
【０１６４】
ステップＳ８３で“ＮＯ”の場合、つまり、初期の色で表示されたブロック２０８に対してマーク付け指示が行われた場合には、ＣＰＵコア３４は、ステップＳ８５で、記憶領域３１６のブロックデータにおいて、特定したブロック２０８の「マークされているかどうか」フラグをオンにする。これにより、当該マーク付け指示の行われたブロック２０８は、マーク付け用の色で表示されることとなる。
【０１６５】
一方、ステップＳ８３で“ＹＥＳ”の場合、つまり、既にマーク付けされたブロック２０８に対して再びマーク付け指示が行われた場合には、ＣＰＵコア３４は、ステップＳ８７で、記憶領域３１６のブロックデータにおいて、特定されたブロック２０８の「マークされているかどうか」フラグをオフにする。これにより、当該ブロック２０８に対するマーク付けが解除され、当該ブロック２０８は、再び初期の色で表示されることとなる。ステップＳ８５またはＳ８７を終了すると、このブロックマーク処理が終了され、処理は図１７のステップＳ２３に戻る。
【０１６６】
図２１には、ステップＳ１９（図１７）の回転処理の動作の一例が示される。回転処理を開始すると、ＣＰＵコア３４は、ステップＳ１０１で、スライドタッチの移動量を算出する。上述のように、タッチパネル２４のＸ軸方向およびＹ軸方向のそれぞれについて、前回のタッチ座標と今回のタッチ座標の差分を取ることにより、ドラッグ値ＤｘおよびＤｙが算出され、記憶領域３２６に記憶される。
【０１６７】
次に、ステップＳ１０３で、ＣＰＵコア３４は移動量を回転量に変換する。上述のように、ドラッグ値Ｄｘ、Ｄｙと閾値Ｔとの大小関係に基づいて数２または数３を用いて、ロール値Ｒｘ、Ｒｙが算出される。閾値Ｔ以上の素早いスライド操作が行われた場合には、閾値Ｔより小さいゆっくりしたスライド操作の場合よりも大きいロール値Ｒｘ、Ｒｙが算出される。
【０１６８】
そして、ステップＳ１０５で、ＣＰＵコア３４は、算出した回転量を立体パズル２０６の回転量に加算し、記憶領域３２８の立体パズル２０６の回転量を更新する。上述のように、ロール値Ｒｘは立体パズル２０６のブロック座標系のｙ軸回りの回転量に加算され、ロール値Ｒｙは立体パズル２０６のブロック座標系のｘ軸回りの回転量に加算される。これにより、ユーザのスライドタッチ操作に応じて、立体パズル２０６が回転されることとなる。ステップＳ１０５を終了すると、この回転処理が終了され、処理は図１７のステップＳ２３に戻る。
【０１６９】
図２２には、ステップＳ２１（図１７）のスライサ処理の動作の一例が示される。ステップＳ１３（図１７）の判定で、視線と交差したと判定されたスライサ２１８について、このスライサ処理が実行される。
【０１７０】
スライサ処理を開始すると、ＣＰＵコア３４は、ステップＳ１１１で、スライドタッチの移動量を算出する。たとえば、スライサ２１８に対するタッチが開始されたときのタッチ座標を基準点として記憶しておき、当該基準点の座標と現在のタッチ座標に基づいて、基準点から現在のタッチ位置までのベクトルを算出する。なお、タッチパネル座標系からワールド座標系に変換したタッチ座標によって、ワールド座標系での移動量（ベクトル）を算出する。
【０１７１】
そして、ステップＳ１１３で、ＣＰＵコア３４は、移動量に基づいてスライサ２１８のブロック座標系の位置を更新する。具体的には、ワールド座標系の移動量（ベクトル）をブロック座標系に変換する。タッチされたスライサ２１８がスライサ２１８ａの場合、移動量と記憶領域３２２のスライサ２１８ａの位置に基づいて、スライサ２１８ａのブロック座標系のｘ座標値を算出し、記憶領域３２２のスライサ２１８ａの位置データを更新する。また、タッチされたスライサ２１８がスライサ２１８ｂの場合、移動量と記憶領域３２２のスライサ２１８ｂの位置に基づいて、スライサ２１８ｂのブロック座標系のｚ座標値を算出し、記憶領域３２２のスライサ２１８ｂの位置データを更新する。ステップＳ１１３を終了すると、このスライサ処理が終了され、処理は図１７のステップＳ２３に戻る。
【０１７２】
図１７のステップＳ２３では、ＣＰＵコア３４は描画処理を実行する。描画処理の動作の一例が図２３および図２４に示される。
【０１７３】
描画処理を開始すると、ＣＰＵコア３４は、ステップＳ１２１で、記憶領域３２８の回転量に基づいて、ブロック座標系からワールド座標系へ変換する回転行列を生成する。
【０１７４】
続いて、ステップＳ１２３で、ＣＰＵコア３４は、処理対象のブロック２０８を順に選択する。処理対象のブロック２０８は、たとえば、ｚ座標順、ｘ座標順、ｙ座標順に１個ずつ選択される。上述のように、ブロックデータは配列になっており、当該配列のインデックス番号を上記順番で選択することによって、ブロック２０８を選択する。
【０１７５】
ステップＳ１２５では、ＣＰＵコア３４は、ブロック２０８の座標がスライサ２１８によって非表示となる座標であるか否か判断する。上述のように、ブロック２０８はブロック座標系の座標値に対応付けられており、スライサ２１８のブロック座標系の位置は記憶領域３２２に記憶されているので、ブロック座標系の座標値の比較により、ブロック２０８を非表示にするか否かを容易に判断することができる。具体的には、ブロック２０８のｘ座標値が、ｘ軸方向の位置を指示するためのスライサ２１８ａのｘ座標値以上であるか否かが判断される。また、ブロック２０８のｚ座標値が、ｚ軸方向の位置を指示するためのスライサ２１８ｂのｚ座標値以上であるか否かが判断される。ステップＳ１２５で“ＹＥＳ”の場合には、つまり、処理対象のブロック２０８が非表示にされたブロック２０８の場合には、当該ブロック２０８の表示を行わずに、処理は図２４のステップＳ１４７に進む。
【０１７６】
一方、ステップＳ１２５で“ＮＯ”の場合、つまり、スライサ２１８によって非表示にされないブロック２０８の場合には、ＣＰＵコア３４は、ステップＳ１２７でブロックデータを参照して、ブロック２０８の「存在しているかどうか」フラグがオンであるか否かを判断する。ステップＳ１２７で“ＮＯ”の場合、つまり、このブロック２０８が存在していない場合には、処理は図２４のステップＳ１４７に進む。
【０１７７】
一方、ステップＳ１２７で“ＹＥＳ”の場合、つまり、ブロック２０８が存在している場合には、ＣＰＵコア３４は、ステップＳ１２９で「マークされているかどうか」フラグがオンであるか否かを判断する。ステップＳ１２９で“ＹＥＳ”の場合には、ＣＰＵコア３４は、ステップＳ１３１で、ブロック２０８の色をマーク付け用の色に設定する。なお、ブロック２０８を表示する際の色の設定データは、データ記憶領域３０２の所定領域に記憶される。これにより、ブロック２０８は、マーク付け用の所定の色で表示されることとなる。
【０１７８】
一方、ステップＳ１２９で“ＮＯ”の場合には、ＣＰＵコア３４は、ステップＳ１３３で、ブロック２０８の色を初期の色に設定する。これにより、当該ブロック２０８は、初期の所定の色で表示されることとなる。
【０１７９】
ステップＳ１３１またはＳ１３３を終了すると、ＣＰＵコア３４は、ステップＳ１３５で、ブロックデータを参照して、ブロック２０８の「ミスしたかどうか」フラグがオンであるか否かを判断する。ステップＳ１３５で“ＹＥＳ”の場合、ＣＰＵコア３４は、ステップＳ１３７で、ブロック２０８のテクスチャとしてミスを示すテクスチャを設定する。なお、ブロック２０８を表示する際のテクスチャの設定データは、データ記憶領域３０２に記憶される。これにより、ブロック２０８は、たとえば表面に亀裂の入ったブロック２０８を示すミスの画像（図５参照）で表示されることとなる。
【０１８０】
ステップＳ１３７を終了し、または、ステップＳ１３５で“ＮＯ”の場合、ＣＰＵコア３４は、ステップＳ１３９で、ブロックデータを参照して、ブロック２０８の各面について、「ヒント数字を見せるか隠すか」フラグはオンであるか否かを判断する。ステップＳ１３９で“ＹＥＳ”の場合、つまり、いずれかの面でヒント数字２１０を表示する場合には、ＣＰＵコア３４は、ステップＳ１４１で、当該面のヒント数字テクスチャを、記憶領域３１６のヒント数字テクスチャの種類の情報に基づいて設定する。これにより、ブロック２０８の面のうち該当する面には、ヒント数字２１０が表示されることとなる。
【０１８１】
ステップＳ１４１を終了し、または、ステップＳ１３９で“ＮＯ”の場合には、ＣＰＵコア３４は、ステップＳ１４３で、ブロック２０８の座標を回転行列で変換する。つまり、ブロック座標系からワールド座標系に変換したブロック２０８の座標を算出する。なお、この変換では、回転量に基づいた回転行列だけでなく、ブロック座標系をワールド座標系に変換する変換行列も使用される。算出されたブロック２０８のワールド座標系での座標データは、データ記憶領域３１２の所定領域に記憶される。
【０１８２】
そして、ステップＳ１４５で、ＣＰＵコア３４は、ＧＰＵ４６を用いてブロック２０８を表示する。具体的には、ブロック２０８は、ステップＳ１３１、Ｓ１３３、Ｓ１３７またはＳ１４１で設定されたデータおよびステップＳ１４３で算出された座標データに基づいてＧＰＵ４６によってＶＲＡＭ５４のバッファに描画される。したがって、ブロック２０８がカメラから見て最前に配置されている場合には、当該ブロック２０８が、所定の表示タイミングでＬＣＤコントローラ５０によってＬＣＤ１４に表示される。
【０１８３】
続いて、図２４のステップＳ１４７で、ＣＰＵコア３４は、全ブロック２０８の処理が終了したか否かを判断する。ステップＳ１４７で“ＮＯ”の場合、処理は、図２３のステップＳ１２３に戻って、次のブロック２０８を処理対象として選択し、当該ブロック２０８を表示するための処理（ステップＳ１２５−Ｓ１４５）を行う。ステップＳ１４７で“ＹＥＳ”と判断されるまで、上記処理が繰返される。
【０１８４】
そして、ステップＳ１４７で“ＹＥＳ”と判断されると、つまり、全てのブロック２０８について処理が終了した場合には、ＣＰＵコア３４は、ステップＳ１４９で、包含サイズの直方体の座標を回転行列で変換する。つまり、スライサ２１８によって非表示になった部分にワイヤフレーム２２２を描画するために、包含サイズの直方体をブロック座標系で生成し、当該座標をワールド座標系に変換する。なお、この変換の際にも、回転量に基づいた回転行列だけでなく、ブロック座標系からワールド座標系への変換行列も使用される。
【０１８５】
ステップＳ１５１で、ＣＰＵコア３４は、ＧＰＵ４６を用いて直方体の裏向きのポリゴンの一番外側を描画することによって、スライサ２１８で非表示になった部分にワイヤフレーム２２２を表示する。具体的には、ワイヤフレーム２２２は、ＧＰＵ４６によってＶＲＡＭ５４のバッファに描画される。したがって、ワイヤフレーム２２２は、所定の表示タイミングでＬＣＤコントローラ５０によってＬＣＤ１４に表示される（図１１参照）。
【０１８６】
また、ステップＳ１５３で、ＣＰＵコア３４は、スライサ２１８の座標を回転行列で変換する。つまり、スライサ２１８の座標をブロック座標系からワールド座標系に変換する。なお、この変換の際にも、回転量に基づいた回転行列だけでなく、ブロック座標系からワールド座標系への変換行列も使用される。
【０１８７】
そして、ステップＳ１５５で、ＣＰＵコア３４は、ＧＰＵ４６を用いてスライサ２１８を表示する。具体的には、スライサ２１８は、ＧＰＵ４６によってＶＲＡＭ５４のバッファに描画される。したがって、スライサ２１８がカメラから見て最前に配置されている場合には、当該スライサ２１８は所定のタイミングでＬＣＤコントローラ５０によってＬＣＤ１４に表示される。ステップＳ１５５を終了すると、この描画処理が終了され、処理は図１８のステップＳ２５に進む。
【０１８８】
図１８のステップＳ２５では、ＣＰＵコア３４は、ブロックデータを参照して、存在しているブロック２０８の「残すべきかどうか」フラグが全てオンであるか否かを判断する。つまり、ゲームクリア条件が満足されたか否かを判断する。なお、存在しているブロック２０８は、「存在しているかどうか」フラグがオンであるブロック２０８である。
【０１８９】
ステップＳ２５で“ＹＥＳ”の場合、つまり、立体パズル２０６が解かれたと判断される場合には、ＣＰＵコア３４は、ステップＳ２７でゲームクリア処理を実行する。このゲームクリア処理では、完成モデル２２４の３Ｄモデルデータが記憶されている場合、残ったブロック２０８が完成モデル２２４の３Ｄモデルデータに差し換えられて描画が行われ、完成モデル２２４がＬＣＤ１４に表示される（図１３参照）。また、ユーザに対する評価が行われてよい。たとえば、立体パズル２０６の難易度、解答に要した時間およびミス回数等に基づいて、ユーザの得点や複数段階評価によるランクなどが算出されて表示される。
【０１９０】
一方、ステップＳ２５で“ＮＯ”の場合、ＣＰＵコア３４は、ステップＳ２９で制限時間オーバになったか否か、または、ミス回数が所定値に達したか否かを判断する。つまり、ゲームオーバ条件が満足されたか否かを判断する。なお、ゲーム開始からの経過時間はステップＳ３の処理でカウントされている。また、ミス回数は、ブロックデータを参照して、「ミスしたかどうか」フラグがオンであるブロック２０８の数をカウントすることによって算出され得る。
【０１９１】
ステップＳ２９で“ＮＯ”の場合、つまり、ゲームオーバ条件が満足されていない場合には、処理は図１７のステップＳ３に戻る。したがって、ステップＳ２５でゲームクリア条件が満足され、またはステップＳ２９でゲームオーバ条件が満足されるまで、ステップＳ３−Ｓ２３の処理が繰返される。
【０１９２】
一方、ステップＳ２９で“ＹＥＳ”の場合、ＣＰＵコア３４は、ステップＳ３１でゲームオーバ処理を実行する。ゲームオーバ処理では、たとえば、「ゲームオーバ」のテキストが画面に表示される。また、ゲームクリア処理と同様に、ユーザに対する評価が行われてよく、立体パズル２０６の難易度等に基づいて得点やランクなどが算出されて表示される。ステップＳ２７またはＳ３１を終了すると、このゲーム処理を終了する。
【０１９３】
この実施例によれば、複数のブロック２０８が仮想３次元空間において３次元方向に配置されることによって形成された立体パズル２０６と、当該立体パズル２０６の各ブロック列において残すべきブロック２０８を探すためのヒント情報を表示し、ユーザに不要なブロックを削除させることによって、パズルを解かせるようにした。したがって、ユーザは、ヒント情報を手がかりにして立体パズルを彫刻するような感覚で立体パズルを解くことができ、その結果所定の３次元モデルを完成させることができる。このように、複数のブロック２０８からなる立体パズル２０６から不要なブロック２０６のみを削除することでパズルを解くという、斬新で、しかも興趣性の高い３次元パズルゲームを提供することができる。
【０１９４】
なお、上述の実施例では、ヒント数字２１０をブロック２０８の表面に表示するようにしたが、他の実施例では、スライサ２１８と同じような位置など、ブロック２０８の外側に表示するようにしてもよい。
【０１９５】
また、上述の各実施例では、ヒント数字２１０が常に表示されるようにしているが、他の実施例では、ユーザの所定の操作があったときまたは一定時間ごとなど、所定のタイミングで表示するようにしてもよく、その場合、パズルの難易度を高めることができる。
【０１９６】
また、上述の各実施例では、各ブロック列のヒント数字２１０を同時にすべて表示するようにしているが、他の実施例では、ブロック列ごとに切り替えてヒント数字２１０を表示するようにしてもよい。たとえばブロック２０８が各ブロック列に対応する面を有していないような形状の場合であっても、各ブロック列のヒント数字２１０を、切替によって当該ブロック２０８に表示できる。
【０１９７】
また、上述の各実施例では、ＲＯＭ２８ａに予め記憶しておいた各ブロック２０８の「残すべきかどうか」フラグに基づいて、各ブロック２０８の各表面のヒント数字２１０を算出して、ヒント数字テクスチャの種類に関するブロックデータを生成するようにしていた。しかし、他の実施例では、各ブロック２０８の各表面のヒント数字２１０を示すデータを静的な問題データとして予め記憶しておき、ヒント数字２１０を示すデータから各ブロック２０８の「残すべきかどうか」フラグを算出して、「残すべきかどうか」フラグに関するブロックデータを動的に生成するようにしてもよい。
【０１９８】
また、上述の各実施例では、残すべきブロック２０８を探すヒントとなるヒント情報として、ブロック列で残すべきブロック２０８の数を示すヒント数字２１０を表示するようにしていたが、ヒント情報は、ブロック列の中から残すべきブロック２０８を特定可能な情報であればよいので、他の実施例では、別の情報が表示されてもよい。
【０１９９】
また、上述の各実施例では、立体パズル２０６は、複数のブロック２０８が直方体または立方体形状に配置されることによって形成された。しかし、問題としての立体パズル２０６は、複数のブロック２０８が立体的に、つまり、３次元方向に配置されることによって形成されていればよく、立体パズル２０６の初期形状は適宜変更されてよい。たとえば、立体パズル２０６の初期形状は、球形、四角錘など他の幾何学的形状であってよいし、あるいは、果物、動物やキャラクタなど何らかの物体の形状などであってもよい。
【０２００】
また、上述の各実施例では、ブロック２０８は立方体形状であったが、他の実施例では、ブロック２０８は球形など他の形状に形成されてもよい。
【０２０１】
また、上述の各実施例では、スライサ２１８を用いて立体ブロック２０６のブロック座標系の各軸方向で任意の位置を指示することによって、非表示にするブロック２０８を指示するようにしていたが、非表示にするブロック２０８の指示の方法は適宜変更されてよい。たとえば、タッチされたブロック２０８が非表示にされるようにしてもよい。
【０２０２】
また、上述の各実施例では、画面上の任意の位置を指示するためのポインティングデバイスとしてタッチパネル２４を用いたが、他の実施例では、ペンタブレット、タッチパッド、コンピュータマウスのような他のポインティングデバイスを用いることも可能である。ただし、指示位置をユーザに明示するためにマウスポインタのような指示画像を表示するのが望ましい。また、座標が常時指示されるマウスなどのデバイスの場合、ボタンのオン／オフ等によって入力の有無を区別するようにしてよい。
【０２０３】
また、他の実施例では、ブロック２０８またはスライサ２１８の指示は、方向指示スイッチ２２ａなど操作スイッチ２２で行われるようにしてもよい。たとえば、ポインタ（指示画像）の位置を方向指示スイッチ２２ａでブロック２０８またはスライサ２１８上に動かし、動作スイッチ２２ｄの操作で当該ブロック２０８またはスライサ２１８を指示するようにしてもよい。あるいは、ブロック２０８またはスライサ２１８上に表示されるカーソルを方向指示スイッチ２２ａで動かし、動作スイッチ２２ｄの操作で当該ブロック２０８またはスライサ２１８を指示するようにしてもよい。なお、削除指示とマーク付け指示は、たとえば、使用する動作スイッチ２２を変えたり、ポインタまたはカーソルの種類を変えたりすること等によって、区別可能である。
【図面の簡単な説明】
【０２０４】
【図１】図１はこの発明のゲーム装置の一実施例を示す図解図である。
【図２】図２は図１に示すゲーム装置の電気的構成の一例を示すブロック図である。
【図３】図３はゲーム開始時の画面の一例を示す図解図である。
【図４】図４は削除されたブロックおよびマーク付けされたブロックを含む画面の一例を示す図解図である。
【図５】図５は削除指示のミスがあったブロックを含む画面の一例を示す図解図である。
【図６】図６はカメラ、タッチ座標および立体パズルの関係と視線を説明するための図解図である。
【図７】図７はブロックをサーフェスの集合として捉える考え方を説明するための図解図である。
【図８】図８は３＊３＊３のブロックからなる立体パズルを平面の集合として捉える考え方を説明するための図解図である。
【図９】図９は視線と平面の交差判定を説明するための図解図である。
【図１０】図１０は回転操作により回転された立体パズルを含む画面の一例を示す図解図である。
【図１１】図１１はスライサの操作により表示された内部のブロックを含む画面の一例を示す図解図である。
【図１２】図１２は解決直前の立体パズルを含む画面の一例を示す図解図である。
【図１３】図１３は完成モデルを含む画面の一例を示す図解図である。
【図１４】図１４はゲームオーバ時の画面の一例を示す図解図である。
【図１５】図１５はメモリマップの一例の一部を示す図解図である。
【図１６】図１６はメモリマップの一例の他の一部を示す図解図である。
【図１７】図１７はゲーム装置の動作の一例の一部を示すフロー図である。
【図１８】図１８は図１７の続きを示すフロー図である。
【図１９】図１９は図１７におけるブロック削除処理の動作の一例を示すフロー図である。
【図２０】図２０は図１７におけるブロックマーク処理の動作の一例を示すフロー図である。
【図２１】図２１は図１７における回転処理の動作の一例を示すフロー図である。
【図２２】図２２は図１７におけるスライサ処理の動作の一例を示すフロー図である。
【図２３】図２３は図１７における描画処理の動作の一例の一部を示すフロー図である。
【図２４】図２４は図２３の続きを示すフロー図である。
【符号の説明】
【０２０５】
１０  …ゲーム装置
１２，１４  …ＬＣＤ
２４  …タッチパネル
２８  …メモリカード
２８ａ  …ＲＯＭ
３４  …ＣＰＵコア
４２  …ＲＡＭ
４４，４６  …ＧＰＵ
５０  …ＬＣＤコントローラ
５２，５４  …ＶＲＡＭ
２０６  …立体パズル
２０８  …ブロック
２１０  …ヒント数字
【図１】
2010022462.tif 000003
【図２】
2010022462.tif 000004
【図３】
2010022462.tif 000005
【図４】
2010022462.tif 000006
【図５】
2010022462.tif 000007
【図６】
2010022462.tif 000008
【図７】
2010022462.tif 000009
【図８】
2010022462.tif 000010
【図９】
2010022462.tif 000011
【図１０】
2010022462.tif 000012
【図１１】
2010022462.tif 000013
【図１２】
2010022462.tif 000014
【図１３】
2010022462.tif 000015
【図１４】
2010022462.tif 000016
【図１５】
2010022462.tif 000017
【図１６】
2010022462.tif 000018
【図１７】
2010022462.tif 000019
【図１８】
2010022462.tif 000020
【図１９】
2010022462.tif 000021
【図２０】
2010022462.tif 000022
【図２１】
2010022462.tif 000023
【図２２】
2010022462.tif 000024
【図２３】
2010022462.tif 000025
【図２４】
2010022462.tif 000026