説明

パズルゲームプログラムおよびパズルゲーム装置

【課題】今までにないパズルゲームを提供すること。
【解決手段】ゲーム装置10はLCD12およびLCD14を含み、LCD14上にはタッチパネル24が設けられる。LCD12およびLCD14には、それぞれ、ソケットオブジェクトが設けられた歯車オブジェクトを含むゲーム画面が表示される。プレイヤがタッチ操作すると、これに応じてLCD14に表示されたゲーム画面上の歯車オブジェクトが回転し、これに伴って、LCD12に表示されたゲーム画面上の1または複数の歯車オブジェクトが回転する。すると、歯車オブジェクトのソケットオブジェクトに保持されたボールオブジェクトが、歯車オブジェクト間を移動する。すべてのボールオブジェクトがそれと同じ色が付された歯車オブジェクトのソケットオブジェクトに受容(保持)されたとき、パズルゲームのクリアとなる。

【発明の詳細な説明】
【技術分野】
【0001】
この発明はパズルゲームプログラムおよびパズルゲーム装置に関し、特にたとえば、パズルゲームをプレイするための、パズルゲームプログラムおよびパズルゲーム装置に関する。
【背景技術】
【0002】
この種の従来のパズルゲームの一例が、特許文献1に開示される。この特許文献1に開示されるパズルゲームでは、たとえば、表示画面内に表示された複数の球のうちの任意の球を中心としてその周囲の玉を回転移動させる。このパズルゲームでは、表示画面内に規則正しく正三角形の格子模様に様々な属性の複数の玉が表示される。そして、コントローラの操作によって選択された中心座標と半径とに基づいて、該当する複数の玉がある場合には、最小単位の形の属性を玉と同一の属性に変え、画面上の玉が同一属性の玉で囲まれている場合には、囲まれた玉と同一の属性に変える。
【0003】
また、この種のパズルゲームの他の例が非特許文献1に示される。この非特許文献1に開示されるパズルゲームでは、色の異なる三角形のオブジェクトがランダムにゲーム画面上方から落下し、ゲーム空間に配置される。プレイヤは、六角形状のダイヤルを移動および回転させることにより、同じ色の三角形オブジェクトを用いて六角形を作る。すると、その六角形がゲーム画面上から消える。つまり、六角形を構成する6つの三角形オブジェクトがゲーム空間から消去される。
【特許文献1】特開4002−303265
【非特許文献1】http://www.nintendo.co.jp/n08/bit_g/index.html 「DIALHEX」
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかし、特許文献1のパズルゲームは、或る玉を中心としてその周りの玉を回転移動させるだけなので、玉の移動の自由度が乏しく単調で意外性が無く、飽きられやすいという問題がある。同様に、非特許文献1のパズルゲームでは、ダイヤルで囲まれる複数の三角形のオブジェクトを回転させるだけなので、飽きられやすいという問題がある。
【0005】
それゆえに、この発明の主たる目的は、新規な、パズルゲームプログラムおよびパズルゲーム装置を提供することである。
【0006】
また、この発明の他の目的は、斬新なパズルゲームをプレイできる、パズルゲームプログラムおよびパズルゲーム装置を提供することである。
【課題を解決するための手段】
【0007】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0008】
第1の発明は、記憶手段、表示手段および操作手段を備えるパズルゲーム装置のパズルゲームプログラムであって、パズルゲーム装置のコンピュータに、ゲーム画像表示ステップ、回転処理ステップ、関係判別ステップ、および移動処理ステップを実行させる。ゲーム画像表示ステップは、記憶手段に記憶される画像データを用いて、少なくとも1つの受容部が設けられた回転オブジェクトを複数配置するとともに、少なくとも1つの移動オブジェクトがいずれかの受容部に受容されたゲーム画像を表示手段に表示する。回転処理ステップは、プレイヤの操作に応じて操作手段から入力される操作データに従って回転オブジェクトを回転させる。関係判別ステップは、回転処理ステップによって回転オブジェクトを回転させた結果、移動オブジェクトが受容された第1受容部と、当該第1受容部が設けられる回転オブジェクトとは異なる他の回転オブジェクトに設けられた第2受容部とが所定の関係になったか否かを判別する。そして、移動処理ステップは、関係判別ステップによって所定の関係になったことが判別されたとき、当該移動オブジェクトを第1受容部から第2受容部に移動するようにゲーム画像を更新する。
【0009】
請求項1の発明では、パズルゲーム装置(10)は、記憶手段(28,42)、表示手段(12,14)および操作手段(22,24)を備える。パズルゲームプログラムは、このパズルゲーム装置のコンピュータに、ゲーム画像表示ステップ(34,S3,S53,S123)、回転処理ステップ(34,S7)、関係判別ステップ(34,S9)、および移動処理ステップ(34,S11)を実行させる。ゲーム画像表示ステップは、記憶手段に記憶される画像データを用いて、少なくとも1つの受容部が設けられた回転オブジェクトを複数配置するとともに、少なくとも1つの移動オブジェクトがいずれかの受容部に受容されたゲーム画像(300,320)を表示手段に表示する。回転処理ステップは、プレイヤの操作に応じて操作手段から入力される操作データに従って回転オブジェクト(302,304,306,322,324,326)を回転させる。たとえば、プレイヤが、回転オブジェクト上で、スライド操作するとき、このスライド操作に従って回転オブジェクトを回転させる。関係判別ステップは、回転処理ステップによって回転オブジェクトを回転させた結果、移動オブジェクト(312a,312b,314a,314b,316a,316b)が受容された第1受容部(302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326b)と、当該第1受容部が設けられる回転オブジェクトとは異なる他の回転オブジェクトに設けられた第2受容部(302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326b)とが所定の関係になったか否かを判別する。たとえば、移動オブジェクトが移動可能な設定(接続設定)のなされた第1受容部と第2受容部とが、一直線上またはほぼ一直線上に並んだ状態になったかどうかを判別する。そして、移動処理ステップは、関係判別ステップによって所定の関係になったことが判別されたとき、記憶手段に記憶された移動オブジェクトの位置データを更新して、当該移動オブジェクトを第1受容部から第2受容部に移動するようにゲーム画像を更新する。
【0010】
第1の発明によれば、受容部が設けられた複数の回転オブジェクトを回転させることによって、或る回転オブジェクトの受容部に受容されている移動オブジェクトを他の回転オブジェクトの受容部に移動させていくので、斬新なパズルゲームを提供することができる。
【0011】
第2の発明は第1の発明に従属し、記憶手段には、移動オブジェクトおよび回転オブジェクトのそれぞれの属性が設定されており、移動オブジェクトの属性と移動オブジェクトが受容された回転オブジェクトの属性とが同一か否かを判別する属性判別ステップ、および属性判別ステップによって同一であると判別されたとき、ゲームの進行を変化させるゲーム処理ステップをコンピュータにさらに実行させる。
【0012】
第2の発明では、記憶手段には、移動オブジェクトおよび回転オブジェクトのそれぞれの属性(たとえば、色)が設定(記憶)されている。パズルゲームプログラムは、属性判別ステップ(34,S13)およびゲーム処理ステップ(34,S15)をコンピュータにさらに実行させる。属性判別ステップは、移動オブジェクトの属性と移動オブジェクトが受容された回転オブジェクトの属性とが同一か否かを判別する。ゲーム処理ステップは、属性判別ステップによって同一であると判別されたとき、ゲームの進行を変化させる。たとえば、すべての移動オブジェクトの属性と、移動オブジェクトが受容された回転オブジェクトの属性とが一致したとき、パズルを解いた(ゲームクリア)と判別する。
【0013】
第2の発明によれば、プレイヤは移動オブジェクトが同じ属性の回転オブジェクトに受容されるように戦略的に回転オブジェクトを回転させることを要求されるので、面白さに優れたパズルゲームを提供することができる。
【0014】
第3の発明は第1または第2の発明に従属し、回転オブジェクトは、プレイヤの操作を許容する第1回転オブジェクトと、プレイヤの操作を許容しない第2回転オブジェクトとを含み、回転処理ステップは、プレイヤの操作に応じて操作手段から入力される操作データに従って第1回転オブジェクトを回転させたとき、第1回転オブジェクトの回転に基づいて第2回転オブジェクトを回転させる。
【0015】
第3の発明では、回転オブジェクトは、プレイヤの操作を許容する第1回転オブジェクト(322,324,326)と、プレイヤの操作を許容しない第2回転オブジェクト(302,304,306)とを含む。回転処理ステップは、プレイヤの操作に応じて操作手段から入力される操作データに従って第1回転オブジェクトを回転させたとき、第1回転オブジェクトの回転に基づいて第2回転オブジェクトを回転させる。たとえば、第1回転オブジェクトが回転させると、これに対応して、同じ方向に同じ回転量(角度)だけ第2回転オブジェクトを回転させる。ただし、第2回転オブジェクトの回転方向は逆向きでもよく、その回転量は第1回転オブジェクトの回転量よりも多くても少なくてもよい。
【0016】
第3の発明によれば、プレイヤの操作によって回転させた回転オブジェクトに連動して対応する他の回転オブジェクトも回転させるので、戦略性の高いパズルゲームを提供することができる。
【0017】
第4の発明は第3の発明に従属し、回転オブジェクトは、複数の第1回転オブジェクトおよび複数の第2回転オブジェクトを含み、回転処理ステップは、少なくとも1つの第1回転オブジェクトの回転に基づいて、1つまたは複数の第2回転オブジェクトを回転させる。
【0018】
第4の発明では、回転オブジェクトは、複数の第1回転オブジェクトおよび複数の第2回転オブジェクトを含む。回転処理ステップは、少なくとも1つの第1回転オブジェクトの回転に基づいて、1つまたは複数の第2回転オブジェクトを回転させる。つまり、1つの第1回転オブジェクトに連動して、2つ以上の第2回転オブジェクトが回転される。この場合、第1回転オブジェクトと第2回転オブジェクトとの数が同じであれば、第1回転オブジェクトに連動しない第2オブジェクトも存在し得る。
【0019】
第4の発明によれば、第3の発明と同様に、戦略性の高いパズルゲームを提供することがでる。
【0020】
第5の発明は第1ないし第4の発明に従属し、回転処理ステップによって回転オブジェクトを回転させた結果に基づいて、回転オブジェクトに設定される基準位置に対する第1受容部の第1角度と他の回転オブジェクトに設定される基準位置に対する第2受容部の第2角度とをそれぞれ算出する角度算出ステップをコンピュータにさらに実行させ、関係判別ステップは、第1角度と第2角度との差が所定範囲内であるか否かを判別し、移動処理ステップは、関係判別ステップによって差が所定範囲内であることが判別されたとき、記憶手段に記憶された移動オブジェクトの位置データを更新して、当該移動オブジェクトを第1受容部から第2受容部に移動するようにゲーム画像を更新する。
【0021】
第5の発明では、パズルゲームプログラムは、角度算出ステップ(34,S81)をコンピュータにさらに実行させる。この角度算出ステップは、回転処理ステップによって回転オブジェクトを回転させた結果に基づいて、回転オブジェクトに設定される基準位置に対する第1受容部の第1角度と他の回転オブジェクトに設定される基準位置に対する第2受容部の第2角度とをそれぞれ算出する。関係判別ステップは、第1角度と第2角度との差が所定範囲内であるか否かを判別する。ただし、実施例においては、円盤状の回転オブジェクトを配置し、すべての回転オブジェクトの基準位置を同じ位置に設定し、また、所定の関係は第1受容部と第2受容部とが一直線上或いはほぼ一直線上に並ぶことを意味するため、第1角度と第2角度との差から180度引いた角度が所定範囲内であるか否かを判別するようにしてある。移動処理ステップは、関係判別ステップによって差が所定範囲内であることが判別されたとき、記憶手段に記憶された移動オブジェクトの位置データを更新して、当該移動オブジェクトを第1受容部から第2受容部に移動するようにゲーム画像を更新する。
【0022】
第5の発明によれば、2つの回転オブジェクトの各受容部が所定の関係になったか否かを2つの受容部の角度差に基づいて判別するので、簡単な処理で判別することができる。
【0023】
第6の発明は第1ないし第5の発明に従属し、プレイヤの操作によって指示された画面上の位置を操作手段から入力される操作データに従って検出する位置検出ステップ、および位置検出ステップによって検出された位置が回転オブジェクトを指示しているか否かを判別する位置判別ステップをコンピュータにさらに実行させ、回転処理ステップは、位置判別ステップによって回転オブジェクトを指示していることが判別されたとき、所定時間毎の位置変化に基づいて回転オブジェクトを回転させる。
【0024】
第6の発明では、パズルゲームプログラムは、位置検出ステップ(34,S33,S35)および位置判別ステップ(34,S37)をコンピュータにさらに実行させる。位置検出ステップは、プレイヤの操作によって指示された画面上の位置を操作手段から入力される操作データに従って検出する。位置判別ステップは、位置検出ステップによって検出された位置が回転オブジェクトを指示しているか否かを判別する。回転処理ステップは、位置判別ステップによって回転オブジェクトを指示していることが判別されたとき、所定時間毎の位置変化に基づいて回転オブジェクトを回転させる。
【0025】
第6の発明によれば、プレイヤの操作によって指示された画面上の位置に従って回転オブジェクトを回転させるので、直感的に操作することができ、操作性を向上させることができる。
【0026】
第7の発明は、ゲーム画像表示手段、回転処理手段、関係判別手段、および移動処理手段を備えるパズルゲーム装置である。ゲーム画像表示手段は、少なくとも1つの受容部が設けられた回転オブジェクトを複数配置するとともに、少なくとも1つの移動オブジェクトがいずれかの受容部に受容されたゲーム画像を表示する。回転処理手段は、プレイヤの操作に応じて回転オブジェクトを回転させる。関係判別手段は、回転処理手段によって回転オブジェクトを回転させた結果、移動オブジェクトが受容された第1受容部と、当該第1受容部が設けられる回転オブジェクトとは異なる他の回転オブジェクトに設けられた第2受容部とが所定の関係になったか否かを判別する。そして、移動処理手段は、関係判別手段によって所定の関係になったことが判別されたとき、移動オブジェクトを第2受容部に移動させる。
【0027】
第7の発明においても、第1の発明と同様に、斬新なパズルゲームを提供することができる。
【発明の効果】
【0028】
この発明によれば、受容部が設けられた複数の回転オブジェクトを回転させることによって、或る回転オブジェクトの受容部に受容されている移動オブジェクトを他の回転オブジェクトの受容部に移動させるので、斬新なパズルゲームを提供することができる。
【0029】
この発明の上述の目的,その他の目的,特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【0030】
図1を参照して、この発明の実施例であるゲーム装置10は、後述するように、パズルゲームプログラムを記憶することにより、パズルゲーム装置として機能する。このゲーム装置10は、第1の液晶表示器(LCD)12および第2のLCD14を含む。LCD12およびLCD14は、所定の配置位置となるようにハウジング16に収納される。この実施例では、ハウジング16は、上側ハウジング16aと下側ハウジング16bとによって構成され、LCD12は上側ハウジング16aに収納され、LCD14は下側ハウジング16bに収納される。したがって、LCD12とLCD14とは縦(上下)に並ぶように近接して配置される。
【0031】
なお、この実施例では、表示器としてLCDを用いるようにしてあるが、LCDに代えて、EL(Electronic Luminescence)ディスプレイやプラズマディスプレイを用いるようにしてもよい。
【0032】
図1からも分かるように、上側ハウジング16aは、LCD12の平面形状よりも少し大きな平面形状を有し、一方主面からLCD12の表示面を露出するように開口部が形成される。一方、下側ハウジング16bは、その平面形状が上側ハウジング16aと略同じであり、その略中央部にLCD14の表示面を露出するように開口部が形成される。下側ハウジング16bのLCD14の左方には電源スイッチ18が設けられる。
【0033】
また、上側ハウジング16aには、LCD12を挟んで左右に、スピーカ36aおよび36b(図2)のための音抜き孔20aおよび20bが形成される。そして、下側ハウジング16bには、マイク(図示せず)のためのマイク孔20cが形成されるとともに、操作スイッチ22(22a,22b,22c,22d,22e,22Lおよび22R)が設けられる。
【0034】
また、上側ハウジング16aと下側ハウジング16bとは、上側ハウジング16aの下辺(下端)と下側ハウジング16bの上辺(上端)の一部とが回動可能に連結されている。したがって、たとえば、ゲームをプレイしない場合には、LCD12の表示面とLCD14の表示面とが対面するように、上側ハウジング16aを回動させて折りたたんでおけば、LCD12の表示面およびLCD14の表示面に傷がつくなどの破損を防止することができる。ただし、上側ハウジング16aと下側ハウジング16bとは、回動可能に連結せずに、それらを一体的(固定的)に設けたハウジング16を形成するようにしてもよい。
【0035】
操作スイッチ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の上側面の左右角部に配置される。
【0036】
方向指示スイッチ22aは、ディジタルジョイスティックとして機能し、4つの押圧部の1つを操作することによって、ユーザないしプレイヤによって操作可能なプレイヤキャラクタ(またはプレイヤオブジェクト)の移動方向を指示したり、カーソルの移動方向を指示したりする等に用いられる。また、各押圧部には、特定の役割を割り当てることができ、4つの押圧部の1つを操作することによって、割り当てられた役割を指示(指定)することができる。
【0037】
スタートスイッチ22bは、プッシュボタンで構成され、ゲームを開始(再開)したり、一時停止(Pause)したりする等に用いられる。また、セレクトスイッチ22cは、プッシュボタンで構成され、ゲームモードの選択等に用いられる。
【0038】
動作スイッチ22dすなわちAボタンは、プッシュボタンで構成され、方向指示以外の動作、すなわち、プレイヤキャラクタに打つ(パンチ)、投げる、つかむ(取得)、乗る、ジャンプするなどの任意のアクションをさせることができる。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かす等を指示することができる。また、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。動作スイッチ22eすなわちBボタンは、プッシュボタンで構成され、セレクトスイッチ22cで選択したゲームモードの変更やAボタン22dで決定したアクションの取り消し等のために用いられる。
【0039】
動作スイッチ22fすなわちXボタン、および動作スイッチ22gすなわちYボタンは、プッシュボタンで構成され、Aボタン22dとBボタン22eだけでは、ゲーム進行ができないときに、補助的な操作に用いられる。ただし、Xボタン22fおよびYボタン22gは、Aボタン22dおよびBボタン22eと同様の操作に用いることも可能である。もちろん、ゲームプレイにおいてXボタン22fとYボタン22gとを必ずしも使用しなくてよい。
【0040】
動作スイッチ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に割り当てられた役割を、他の役割に変更することができる。
【0041】
また、LCD14の上面には、タッチパネル24が装着される。タッチパネル24としては、たとえば、抵抗膜方式、光学式(赤外線方式)および静電容量結合式のいずれかの種類のものを用いることができる。また、タッチパネル24は、その上面をスティック26ないしはペン(スタイラスペン)或いは指(以下、これらを「スティック26等」という場合がある。)で、押圧したり、撫でたり、触れたりすることにより操作(タッチ操作)すると、スティック26等の操作位置の座標を検出して、検出した座標(検出座標)に対応する座標データを出力する。
【0042】
なお、この実施例では、LCD14(LCD12も同じ、または略同じ。)の表示面の解像度は256dot×192dotであり、タッチパネル24の検出精度も表示画面に対応して256dot×192dotとしてあるが、タッチパネル24の検出精度は表示画面の解像度よりも低くてもよく、高くてもよい。
【0043】
LCD12およびLCD14には異なるゲーム画面が表示されてもよい。たとえば、レースゲームでは一方のLCDに運転席からの視点による画面を表示し、他方のLCDにレース(コース)全体の画面を表示することができる。また、RPGでは、一方のLCDにマップやプレイヤキャラクタ等のキャラクタを表示し、他方のLCDにプレイヤキャラクタが所有するアイテムを表示することができる。さらに、一方のLCD(この実施例では、LCD14)にゲームの操作画面(ゲーム画面)を表示し、他方のLCD(この実施例では、LCD12)に当該ゲームに関する情報(得点やレベルなど)を含む他のゲーム画面を表示することができる。さらには、2つのLCD12およびLCD14を合わせて1つの画面として用いることにより、プレイヤキャラクタが倒さなければならない巨大な怪物(敵キャラクタ)を表示することもできる。
【0044】
したがって、プレイヤはスティック26等でタッチパネル24を操作することにより、LCD14の画面に表示されるプレイヤキャラクタ、敵キャラクタ、アイテムキャラクタ、操作オブジェクトなどの画像を指示(操作)したり、コマンドを選択(入力)したりすることができる。また、3次元ゲーム空間に設けられる仮想カメラ(視点)の方向(視線の向き)を変化させたり、ゲーム画面(マップ)のスクロール(徐々に移動表示)方向を指示したりすることもできる。
【0045】
なお、ゲームの種類によっては、タッチパネル24を用いることにより、その他の入力指示も可能である。たとえば、座標入力指示を入力したり、LCD14において文字,数字,記号等を手書き入力したりすることができる。
【0046】
このように、ゲーム装置10は、2画面分の表示部となるLCD12およびLCD14を有し、いずれか一方(この実施例では、LCD14)の上面にタッチパネル24が設けられるので、2画面(12,14)と2系統の操作部(22,24)とを有する構成になっている。
【0047】
また、この実施例では、スティック26は、たとえば下側ハウジング16bに設けられる収納部(図1では点線で示す)に収納することができ、必要に応じて取り出される。ただし、スティック26を設けない場合には、その収納部も設ける必要はない。
【0048】
さらに、ゲーム装置10はメモリカード(またはカートリッジ)28を含み、このメモリカード28は着脱自在であり、下側ハウジング16bの裏面ないしは下端(底面)に設けられる挿入部30(図1では点線で示す)に挿入される。図1では省略するが、挿入部30の奥部には、メモリカード28の挿入方向先端部に設けられるコネクタ(図示せず)と接合するためのコネクタ32(図2参照)が設けられており、したがって、メモリカード28が挿入部30に挿入されると、コネクタ同士が接合され、ゲーム装置10のCPUコア34(図2参照)がメモリカード28にアクセス可能となる。
【0049】
なお、図1では表現できないが、上側ハウジング16aの音抜き孔20aおよび20bと対応する位置であり、この上側ハウジング16aの内部にはスピーカ36aおよび36b(図2参照)が設けられる。
【0050】
また、図1では省略するが、たとえば、下側ハウジング16bの裏面側には、電池収容ボックスが設けられ、また、下側ハウジング16bの底面側には、音量スイッチ、外部拡張コネクタおよびイヤフォンジャックなどが設けられる。
【0051】
図2はゲーム装置10の電気的な構成を示すブロック図である。図2を参照して、ゲーム装置10は電子回路基板38を含み、この電子回路基板38には上述のCPUコア34等の回路コンポーネントが実装される。CPUコア34は、バス40を介して前述のコネクタ32に接続されるとともに、RAM42、第1のグラフィック処理ユニット(GPU)44、第2のGPU46、入出カインターフエース回路(以下、「I/F回路」という。)48およびLCDコントローラ50が接続される。
【0052】
コネクタ32には、上述したように、メモリカード28が着脱自在に接続される。メモリカード28は、ROM28aおよびRAM28bを含み、図示は省略するが、ROM28aおよびRAM28bは、互いにバスで接続され、さらに、コネクタ32と接合されるコネクタ(図示せず)に接続される。したがって、上述したように、CPUコア34は、ROM28aおよびRAM28bにアクセスすることができるのである。
【0053】
ROM28aは、ゲーム装置10で実行すべきゲームのためのゲームプログラム、画像データ(文字やオブジェクトの画像、背景画像、アイテム画像、アイコン(ボタン)画像、メッセージ画像など)およびゲームに必要な音(音楽)のデータ(音データ)等を予め記憶する。RAM(バックアップRAM)28bは、そのゲームの途中データやゲームの結果データなどを記憶(セーブ)する。
【0054】
RAM42は、バッファメモリないしはワーキングメモリとして使用される。つまり、CPUコア34は、メモリカード28のROM28aに記憶されたゲームプログラム、画像データおよび音データ等をRAM42にロードし、ロードしたゲームプログラムを実行する。また、CPUコア34は、ゲームの進行に応じて一時的に発生するデータ(ゲームデータやフラグデータ)をRAM42に記憶しつつゲーム処理を実行する。
【0055】
なお、ゲームプログラム、画像データおよび音データ等は、ROM28aから一度に全部、または部分的かつ順次的に読み出され、RAM42に記憶(ロード)される。
【0056】
ただし、メモリカード28のROM28aには、ゲーム以外の他のアプリケーションについてのプログラムおよび当該アプリケーションの実行に必要な画像データが記憶される。また、必要に応じて、音(音楽)データが記憶されてもよい。かかる場合には、ゲーム装置10では、当該アプリケーションが実行される。
【0057】
GPU44およびGPU46は、それぞれ、描画手段の一部を形成し、たとえばシングルチップASICで構成され、CPUコア34からのグラフィックスコマンド(作画命令)を受け、そのグラフィックスコマンドに従って画像データを生成する。ただし、CPUコア34は、グラフィックスコマンドに加えて、画像データの生成に必要な画像生成プログラム(ゲームプログラムに含まれる。)をGPU44およびGPU46のそれぞれに与える。
【0058】
また、GPU44には、第1のビデオRAM(以下、「VRAM」という。)52が接続され、GPU46には、第2のVRAM54が接続される。GPU44およびGPU46が作画コマンドを実行するにあたって必要なデータ(画像データ:ポリゴンやテクスチャ等のデータ)は、GPU44およびGPU46が、それぞれ、第1のVRAM52および第2のVRAM54にアクセスして取得する。
【0059】
なお、CPUコア34は、描画に必要な画像データをGPU44およびGPU46を介して第1のVRAM52および第2のVRAM54に書き込む。GPU44はVRAM52にアクセスして描画のための画像データを作成し、GPU46はVRAM54にアクセスして描画のための画像データを作成する。
【0060】
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に出力する。
【0061】
なお、LCDコントローラ50は、VRAM52およびVRAM54から直接画像データを読み出したり、GPU44およびGPU46を介してVRAM52およびVRAM54から画像データを読み出したりする。
【0062】
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から出力する。
【0063】
図3は、図1および図2に示すゲーム装置10を用いて、この実施例の仮想ゲーム(パズルゲーム)をプレイする場合に、LCD12に表示されるゲーム画面300およびLCD14に表示されるゲーム画面320の一例を示す。ゲーム画面300は、回転オブジェクト(歯車オブジェクト)302、304、306を含む。3つの歯車オブジェクト302,304,306は、縦方向に一直線に並んで表示される。歯車オブジェクト302には、受容部としての2つのソケットオブジェクト302a,302bが設けられ(図5参照)、このソケットオブジェクト302a,302bに、ボールオブジェクト312a,312bが保持されている。歯車オブジェクト304には、2つのソケットオブジェクト304a,304bが設けられ(図5参照)、このソケットオブジェクト304a,304bに、ボールオブジェクト314a,314bが保持されている。歯車オブジェクト306には、2つのソケットオブジェクト306a,306bが設けられ(図5参照)、このソケットオブジェクト306a,306bに、ボールオブジェクト316a,316bが保持されている。
【0064】
また、ゲーム画面320は、3つの歯車オブジェクト322,324,326を含み、3つの歯車オブジェクト322,324,326は縦方向に一直線に並んで表示される。歯車オブジェクト322には2つのソケットオブジェクト322a,322bが設けられ、歯車オブジェクト324には2つのソケットオブジェクト324a,324bが設けられ、そして、歯車オブジェクト326には2つのソケットオブジェクト326a,326bが設けられる。
【0065】
ただし、図3に示すゲーム画面300およびゲーム画面320は単なる一例である。たとえば、ボールオブジェクト312a,312b,314a,314b,316a,316は、いずれのソケットオブジェクト302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326bに保持されていてもよい。また、ゲーム画面300に表示される歯車オブジェクト302,304,306の配列およびゲーム画面320に表示される歯車オブジェクト322,324,326の配列は異なる配列であってもよい。
【0066】
この実施例のパズルゲームについて簡単に説明すると、上述したように、LCD14上にはタッチパネル24が設けられ、プレイヤは、スティック26を用いて、歯車オブジェクト322,324,326上でスライド操作することにより、当該歯車オブジェクト322,324,326を回転させることができる。また、このとき、歯車オブジェクト322,324,326と連動する歯車オブジェクト302,304,306も回転される。図3に示す例では、歯車オブジェクト302と歯車オブジェクト322とが連動する。また、図示は省略するが、歯車オブジェクト304と歯車オブジェクト324とが連動する。さらに、図示は省略するが、歯車オブジェクト306と歯車オブジェクト326とが連動する。
【0067】
たとえば、或る歯車オブジェクト(322,324,326)に対応する他の歯車オブジェクト(322,324,326)は、当該或る歯車オブジェクト(322,324,326)と同じ方向に回転してもよいし、逆方向に回転してもよい。また、この実施例では、回転量(回転角度)は同じにしてあるが、多くても、少なくてもよい。さらに、1つの歯車オブジェクト(322,324,326)に、2つ以上の歯車オブジェクト(302,304,306)を対応付けるようにしてもよい。これらは、このパズルゲームのプログラマないし開発者が自在に設定することができる。
【0068】
また、図3に示すように、ボールオブジェクト312a,312b,314a,314b,316a,316bには、色(図面の都合上、斜線模様、縞模様、網目模様で示してある)が付されており、同様に、歯車オブジェクト322,324,326のそれぞれにも、色が付されている。図3からも分かるように、ボールオブジェクト312a,312bおよび歯車オブジェクト322には、同じ色(図3では「斜線模様」)が付されている。また、ボールオブジェクト314a,314bおよび歯車オブジェクト324には、同じ色(図3では「縦縞模様」)が付されている。さらに、ボールオブジェクト316a,316bおよび歯車オブジェクト326には、同じ色(図3では「網目模様」)が付されている。
【0069】
なお、この実施例では、歯車オブジェクト302,304,306,322,324,326のそれぞれには、2つのソケットオブジェクト302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326bが設けられるようにしてある。しかし、これは単なる例示であり、1つの歯車オブジェクトには、少なくとも1つのソケットオブジェクトが設けられればよく、3つ以上設けるようにしてもよい。ただし、後述するように、歯車オブジェクトは所定角度(この実施例では、15度)毎に回転・停止可能とするため、この所定角度毎にソケットオブジェクトを設けたときの数が、ソケットオブジェクトの最大数となる。
【0070】
上述したように、歯車オブジェクト322,324,326を回転させることにより、歯車オブジェクト302,304,306も回転される。隣接する歯車オブジェクト302,304,306,322,324,326のソケットオブジェクト302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326bが所定の関係を満たすとき、ボールオブジェクト312a,312b,314a,314b,316a,316bは、当該所定の関係を満たす一方のソケットオブジェクトから他方のソケットオブジェクトへ移動する。
【0071】
たとえば、図4(A)に示すように、ゲーム画面320において、歯車オブジェクト322のソケットオブジェクト322bには、ボールオブジェクト314a(または314b)が保持されており、この歯車オブジェクト322がプレイヤのタッチ操作によって回転される。すると、図4(B)に示すように、歯車オブジェクト322のソケットオブジェクト322bと、歯車オブジェクト324のソケットソケットオブジェクト324bとが一直線上に並ぶ。このとき、ボールオブジェクト314a(または314b)は、ソケットオブジェクト322a(または322b)からソケットオブジェクト324a(または324b)に移動する。つまり、ボールオブジェクト314a(または314b)は、歯車オブジェクト322から歯車オブジェクト324に移動される。
【0072】
このようにして、ボールオブジェクト312a,312b,314a,314b,316a,316bを移動させ、図5に示すように、ボールオブジェクト312a,312b,314a,314b,316a,316bの各々が、同じ色の付された歯車オブジェクト322,324,326に移動されると、パズルゲームがクリアとなる。
【0073】
詳細な説明は省略するが、ゲーム画面300とゲーム画面320とは連結されており、歯車オブジェクト306から歯車オブジェクト322に向けて、ボールオブジェクト312a,312b,314a,314b,316a,316bを移動させることができる。つまり、通常の場合、ボールオブジェクト312a,312b,314a,314b,316a,316bは、ゲーム画面300の上部からゲーム画面320の下部に向けて移動される。ただし、歯車オブジェクト326から歯車オブジェクト302にボールオブジェクト312a,312b,314a,314b,316a,316bを移動させることもできる。これは、ボールオブジェクト312a,312b,314a,314b,316a,316bが移動不能になり、いわゆる「手詰まり」になるのを防止するためである。ただし、ゲームのレベル等によっては、下のゲーム画面320から上のゲーム画面300に向けて、ボールオブジェクト312a,312b,314a,314b,316a,316bを移動させないようにしてもよい。
【0074】
以下、図面を用いて、歯車オブジェクト302,304,306,322,324,326の回転、ソケットオブジェクト302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326b同士の所定の関係、ボールオブジェクト312a,312b,314a、314b,316a,316bの移動について、具体的に説明することにする。
【0075】
図6を参照して、プレイヤの操作(タッチ操作)に従った歯車オブジェクト322,324,326の回転(回転量の算出方法)について説明する。なお、図6では、簡単のため、ソケットオブジェクト322a,322b,324a,324b,326a,326bおよびボールオブジェクト312a,312b,314a,314b,316a,316bは省略してある。
【0076】
図6に示すように、歯車オブジェクト302,304,306,322,324,326上でタッチ操作(スライド操作)を実行したと仮定する。ただし、f0は現在のフレーム(現フレーム)のタッチ位置であり、f1は、その1つ手前のフレーム(直前フレーム)のタッチ位置である。また、フレームは画面更新単位時間(この実施例では、1/60秒)である。このタッチ操作に応じて、歯車オブジェクト322,324,326の中心cを中心とする当該歯車オブジェクト322,324,326の回転量Lが算出される。
【0077】
まず、歯車オブジェクト322,324,326の中心cの座標(中心座標)と現フレームのタッチ位置(タッチ座標)f0とからベクトルV0が求められる。ただし、ベクトルV0は、中心座標が始点であり、タッチ位置f0が終点である。次に、このベクトルV0を正規化したベクトルU0が求められる。ベクトルU0は、ベクトルV0の単位ベクトルである。続いて、現フレームのタッチ座標f0に対応する歯車オブジェクト322,324,326の円周上の位置r0が数1に従って求められる。
【0078】
[数1]
r0=|f0−c|×r+c
ただし、|f0−c|は、ベクトルV0(=f0−c)を正規化した単位ベクトルU0である。
【0079】
同様に、直前フレームのタッチ位置f1に対応する歯車オブジェクト322,324,326の円周上の位置r1が数2に従って求められる。
【0080】
[数2]
r1=|f1−c|×r+c
ただし、|f1−c|は、ベクトルV1(=f1−c)を正規化した単位ベクトルを意味する。
【0081】
また、数1および数2に従って求められた円周上の位置(位置座標)r0と位置r1とから、ベクトルrVが求められる。このベクトルrVは、位置r1を始点とし、位置r0を終点とする。そして、数3に従って、歯車オブジェクト322,324,326の回転量Lが求められる。
【0082】
[数3]
L=(U0x×(−rVy))+(U0y×rVx)×k
(0<k<1)
ただし、U0xはベクトルU0のX成分であり、U0yはベクトルU0のY成分であり、rVxはベクトルrVのX成分であり、そして、rVyはベクトルrVのY成分である。
【0083】
このようにして算出された回転量Lに従って、歯車オブジェクト322,324,326は回転(回転表示)され、これに伴って、それらと連動する歯車オブジェクト302,304,306も回転される。ただし、この実施例では、時計周りが正の回転方向であり、反時計周りが負の回転方向である。
【0084】
ここで、図7に示すように、ボールオブジェクトおよび不可視ソケットオブジェクトは、ゲーム画面300およびゲーム画面320を表示するときに、それぞれの角度オフセット値に従って配置される。この実施例では、基準位置ないし基準方向は、歯車オブジェクト302,304,306,322,324,326および後述する不可視歯車オブジェクト402,404,406,422,424,426(図8参照)の上方向である。この上方向を0度とした場合の角度オフセット値がそれぞれ設定されるのである。
【0085】
ただし、図7において、baは、歯車オブジェクトのソケットオブジェクトに保持されるボールオブジェクトの角度オフセット値であり、s´aは、当該歯車オブジェクトに対応して設けられる不可視歯車オブジェクトの角度オフセット値である。また、この実施例では、基準位置に対する左方向(反時計周り)の回転角度のオフセット値をマイナスで示し、逆に、基準位置に対する右方向(時計周り)の回転角度のオフセット値をプラスで示してある。つまり、角度オフセット値は、−180度から+180度の間で設定される。
【0086】
また、歯車オブジェクト302,304,306,322,324,326は、プレイヤの操作に従って回転され、これに従ってボールオブジェクト312a,312b,314a,314b,316a,316bも回転される。このため、歯車オブジェクト302,304,306,322,324,326およびボールオブジェクト312a,312b,314a,314b,316a,316bの角度オフセット値は、回転される度にそのオフセット値が更新される。
【0087】
したがって、歯車オブジェクト302,304,306,322,324,326を回転させる場合には、上述のようにして算出された回転量Lにオフセット値が加算され、隣接する歯車オブジェクトに設けられるソケットオブジェクト同士の位置関係(後述する角度差A)が判断される。また、同様に、ボールオブジェクトと当該ボールオブジェクトが設けられる歯車オブジェクトに隣接する歯車オブジェクトに対して設けられる不可視ソケットオブジェクトとの位置関係(後述する角度差A´)が判断される。
【0088】
ただし、後述するように、不可視歯車オブジェクトは回転しないため、これに設けられる不可視のソケットオブジェクト(不可視ソケットオブジェクト)については、角度オフセット値のみを考慮すればよく、回転量については考慮する必要がない。
【0089】
また、この実施例では、歯車オブジェクト302,304,306,322,324,326は、回転量Lだけ回転するようにしてあるが、所定の角度毎に回転・停止するように、回転後の位置を補正するようにしてもよい。たとえば、回転量Lに従うソケットオブジェクト302a,302b,34a,304b,306a,306b,322a,322b,324a,324b,326a,326bの回転角度が所定角度の整数倍±7.5であれば、当該整数倍の角度になるように回転量Lが調整される。
【0090】
たとえば、回転量Lが37度である場合には、15度×2(30度)+7度であるため、このときの回転量Lは30度に調整される。また、回転量Lが55度である場合には、15×4(60度)−5度であるため、このときの回転量Lは60度に調整される。
【0091】
次に、ソケットオブジェクト302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326b同士の所定の関係について説明する。
【0092】
図8(A)および図8(B)に示すように、ゲーム画面300およびゲーム画面320に対して、歯車オブジェクトのそれぞれに対応する不可視歯車オブジェクトが配置されたレイヤ400およびレイヤ420が設けられる。図示は省略するが、ゲーム画面300およびゲーム画面320についてのゲーム画像が描画されたレイヤの下側すなわち視点から見て奥に、レイヤ400およびレイヤ420は配置されるため、レイヤ400およびレイヤ420がゲーム画面300およびゲーム画面320に表示されることはない。ただし、後述する不可視歯車オブジェクトや不可視ソケットオブジェクトを透明にし、これらが配置されるレイヤも透明にする場合には、レイヤ400および420はゲーム画面300やゲーム画面320のゲーム画像が描画されるレイヤよりも手前(視点側)に配置されるようにしてもよい。
【0093】
図8(A)に示すように、レイヤ400には、歯車オブジェクト302,304,306のそれぞれに対応して、不可視の円盤オブジェクト(以下、「不可視歯車オブジェクト」ということにする)402,404,406が設けられる。不可視歯車オブジェクト402には、不可視ソケットオブジェクト402a,402bが設けられ、不可視歯車オブジェクト404には、不可視ソケットオブジェクト404a,404bが設けられ、不可視歯車オブジェクト406には、不可視ソケットオブジェクト406a,406bが設けられる。
【0094】
また、図8(B)に示すように、レイヤ420には、歯車オブジェクト322,324,326のそれぞれに対応して、不可視歯車オブジェクト422,424,426が設けられる。不可視歯車オブジェクト422には、不可視ソケットオブジェクト422a,422bが設けられ、不可視歯車オブジェクト424には、不可視ソケットオブジェクト424a,424bが設けられ、不可視歯車オブジェクト426には、不可視ソケットオブジェクト426a,426bが設けられる。
【0095】
不可視歯車オブジェクト402,404,406,422,424,426は、固定的に配置され、歯車オブジェクト302,304,306,322,324,326とは異なり、回転しない。したがって、不可視ソケットオブジェクト402a,402b,404a,404b,406a,406b,422a,422b,424a,424b,426a,426bの位置が変化することもない。
【0096】
不可視歯車オブジェクト402,404,406,422,424,426および不可視ソケットオブジェクト402a,402b,404a,404b,406a,406b,422a,422b,424a,424b,426a,426bは、対応する歯車オブジェクト302,304,306,322,324,326のソケットオブジェクト302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326bが所定の関係を有するか否かを判定するために設けられる。ただし、不可視ソケットオブジェクト402a,402b,404a,404b,406a,406b,422a,422b,424a,424b,426a,426bは、接続設定の有る歯車オブジェクト302,304,306,322,324,326に対応してのみ設けられる。
【0097】
ここで、図9を用いて、接続設定について説明する。図9を参照して、歯車オブジェクトC1,C2,C3が隣接して一直線上に配置され、それぞれに対応して、不可視歯車オブジェクトB1,B2,B3が設定されていると仮定する。
【0098】
なお、図9では、歯車オブジェクトC1−C3と、不可視歯車オブジェクトB1−B3が同一平面に配置されているように記載してあるが、実際には、上述したように、異なるレイヤに配置されている。
【0099】
図9に示すように、歯車オブジェクトC1と歯車オブジェクトC2との間では、接続設定が無い。このため、たとえ歯車オブジェクトC1のソケットオブジェクトS1(またはS2)と歯車オブジェクトC2のソケットオブジェクトS3(またはS4)とが一直線上に並んだとしても、歯車オブジェクトC1から歯車オブジェクトC2に、または、歯車オブジェクトC2から歯車オブジェクトC1に、ボールオブジェクト(図9では省略)が移動することはない。かかる場合には、接続状態(ボールオブジェクトが移動可能な状態)を判断しなくてよいため、不可視歯車オブジェクトB1と不可視歯車オブジェクトB2とでは、それらが接近する側に、不可視ソケットオブジェクトは設定されていない。
【0100】
しかし、歯車オブジェクトC2と歯車オブジェクトC3との間では、接続設定が有る。具体的には、歯車オブジェクトC2に対して、歯車オブジェクトC2から歯車オブジェクトC3にボールオブジェクトが移動可能であることの接続設定がなされる。このため、不可視歯車オブジェクトB2と不可視歯車オブジェクトB3とでは、それらが接近する側に、それぞれ、不可視ソケットオブジェクトBS1および不可視ソケットオブジェクトBS2が設けられる。
【0101】
このような場合に、歯車オブジェクトC2のソケットオブジェクトS3(またはS4)が、不可視歯車オブジェクトB2の不可視ソケットオブジェクトBS1と重なる位置(この実施例では、角度差が5度未満である。以下、同じ。)に在り、かつ、歯車オブジェクトC3のソケットオブジェクトS5(またはS6)が、不可視歯車オブジェクトB3の不可視ソケットオブジェクトBS2と重なる位置に在るとき、所定の関係が満たされ、ソケットオブジェクトS3(またはS4)とソケットオブジェクトS5(またはS6)とが接続状態であることがフラグ(後述する「接続フラグ」)によって設定される。つまり、所定の関係は、接続設定の有る2つの歯車オブジェクトに設けられるソケットオブジェクトが、それぞれ不可視ソケットオブジェクトに重なる位置に存在することを意味する。このとき、2つのソケットオブジェクトは一直線上或いはほぼ一直線上に並ぶ。
【0102】
ここで、図10を参照して、隣接する2つの歯車オブジェクトC11,C12に設けられるソケットオブジェクトS11,S12が接続状態であるかどうかを判断する方法について説明する。図10では、歯車オブジェクトC11の回転量はLであり、角度オフセット値はsaである。一方、歯車オブジェクトC12の回転量はL´であり、角度オフセット値はs´aである。ただし、この実施例では、回転量L,L´を算出するための基準位置をすべての歯車オブジェクト(302,304,306,322,324,326)に対して同じ位置(方向)に設定してある。したがって、隣接する2つの歯車オブジェクトC11,C12のうち、着目する一方の歯車オブジェクトC11の回転量をLとし、これに隣接する他方の歯車オブジェクトC12の回転量をL´とすると、ソケットオブジェクトS11とソケットオブジェクトS12との角度差Aは数4で得られる。角度オフセット値sa,s´aは、歯車オブジェクトC11,C12を表示する時の基準位置に対するずれによる角度で決定されるが、一度回転された後は、基準位置に対する回転後の角度に更新される。
【0103】
[数4]
A=|(sa+L)−(s´a+L´)−180|
ただし、|・|は絶対値を意味する。なお、この実施例では、すべての歯車オブジェクト(302,304,306,322,324,326)に対して同じ位置(方向)に基準位置を設定してあるため、角度差Aを求める際に、180(度)減算するようにしてあるが、隣接する歯車オブジェクトの基準位置を180度ずらすようにすれば、180(度)減算する必要はない。
【0104】
そして、数4に従って算出された角度差Aが所定角度(たとえば、5度)未満である場合には、接続状態であることが設定され、角度差Aが所定角度以上であれば、接続状態であることは設定されない。
【0105】
図9に戻って、接続状態であることが設定されている場合に、歯車オブジェクトC2のソケットオブジェクトS3(またはS4)に保持されるボールオブジェクトが、歯車オブジェクトC3のソケットオブジェクトS5(またはS6)に移動され、保持される。ただし、接続状態であることが設定された場合であっても、歯車オブジェクトC2のソケットオブジェクトS3(またはS4)にボールオブジェクトが保持されていない場合には、当然のことながら、ボールオブジェクトが歯車オブジェクトC3のソケットオブジェクトS5(またはS6)に移動されることはない。
【0106】
なお、ここでは、歯車オブジェクトC3から歯車オブジェクトC2への接続設定は無いため、接続状態であることが設定されている場合であっても、歯車オブジェクトC3のソケットオブジェクトS5(またはS6)から歯車オブジェクトC2のソケットオブジェクトS3(またはS4)にボールオブジェクトが移動することはない。
【0107】
次に、図11に示すように、ボールオブジェクトが歯車オブジェクトC11から歯車オブジェクトC12に移動されるときの、歯車オブジェクトC11のソケットオブジェクト(図示せず)に保持されたボールオブジェクトの位置と、当該ボールオブジェクトを受け容れるソケットオブジェクトとの位置とを、数5および数6に示す。
【0108】
[数5]
ボールオブジェクトの位置座標のX成分およびY成分
x=(p+q)×cos(sa)+(p+q)×(−sin(sa))
y=(p+q)×sin(sa)+(p+q)×cos(sa)
[数6]
ソケットオブジェクトの位置座標のX成分およびY成分
x=p×cos(sa)+(−sin(sa))
y=p×sin(sa)+p×cos(sa)
ただし、pは、歯車オブジェクトC12の中心から歯車オブジェクトC12の不可視ソケットオブジェクトの中心までの距離である。また、qは、歯車オブジェクトC12の不可視ソケットオブジェクトの中心から歯車オブジェクトC11のボールオブジェクトの中心までの距離である。
【0109】
このボールオブジェクトおよびソケットオブジェクトの位置座標を用いてボールオブジェクトが移動される。ただし、ボールオブジェクトが歯車オブジェクトC11から歯車オブジェクトC12に移動したときに、距離qはリセットされる。具体的には、距離qが0(q=0)になるまで、1フレーム毎に距離qが減算される。したがって、ボールオブジェクトが歯車オブジェクトC11から歯車オブジェクトC12に移動する様子がゲーム画面300およびゲーム画面320に表示される。
【0110】
ただし、ボールオブジェクトが移動可能かどうかは、或る歯車オブジェクトのソケットオブジェクトに保持されたボールオブジェクトと、当該或る歯車オブジェクトと接続設定の有る他の歯車オブジェクトに対応して当該ボールオブジェクトが移動されるべき位置に設けられる不可視オブジェクトとの角度差A´に基づいて判断される。この角度差A´は数7に従って算出される。角度差A´の算出方法は角度差Aの算出方法と同様である。ただし、ボールオブジェクトの回転量は、当該ボールオブジェクトを保持するソケットオブジェクトの回転量Lと同じである。また、不可視ソケットオブジェクトは、固定的に設けられるため、角度オフセット値bsaのみが考慮される。図11からも分かるように、不可視ソケットオブジェクトの角度オフセット値bsaを決定する基準位置も、歯車オブジェクトと同様に、不可視歯車オブジェクトの上方向である。
【0111】
[数7]
A´=|bsa−(sa+L)−180|
この角度差A´が所定角度(この実施例では、5度)未満であるとき、ボールオブジェクトが移動可能であることが判断される。そして、ボールオブジェクトが保持されるソケットオブジェクトと、角度差A´を求めた不可視ソケットオブジェクトに対応するソケットオブジェクトとが接続状態である場合に、ボールオブジェクトが移動されるのである。
【0112】
図12は、図2に示したRAM42のメモリマップを示す図解図である。図12に示すように、RAM42は、プログラム記憶領域70およびデータ記憶領域72を含む。プログラム記憶領域70には、パズルゲームプログラムが記憶され、このパズルゲームプログラムは、ゲームメイン処理プログラム70a,画像生成プログラム70b,画像表示プログラム70c,画像更新プログラム70d,指示位置検出プログラム70e,歯車オブジェクト回転処理プログラム70f,ソケット接続判別プログラム70g,ボール移動処理プログラム70hおよびゲームクリア処理プログラム70iなどによって構成される。
【0113】
ゲームメイン処理プログラム70aは、この実施例のパズルゲームのメインルーチンを処理するためのプログラムである。画像生成プログラム70bは、後述する画像データ(ポリゴンやテクスチャなどのデータ)を用いて、各オブジェクトを含むゲーム画像を生成するためのプログラムである。また、画像生成プログラム70bは、後述するポリゴンデータ(100bなど)を用いて、各不可視歯車オブジェクトを含むレイヤも生成する。画像表示プログラム70cは、画像生成プログラム70bに従って生成されゲーム画像を、ゲーム画面(300,320)としてLCD12,14に表示するためのプログラムである。画像更新プログラム70dは、LCD12,14に表示されるゲーム画像(ゲーム画面)を更新するためのプログラムである。
【0114】
指示位置検出プログラ70eは、タッチパネル24からの座標データの有無を検出し、座標データが有る場合に、当該座標データを取得してデータ記憶領域72に記憶するプログラムである。歯車オブジェクト回転処理プログラム70fは、プレイヤの操作に従って歯車オブジェクト(302,304,306,322,324,326)を回転させるプログラムである。この歯車オブジェクト回転処理プログラム70fは、プレイヤが直接的に回転させる歯車オブジェクト(322,324,326)のみならず、それに連動する歯車オブジェクト(302,304,306)の回転も制御する。
【0115】
ソケット接続判別プログラム70gは、隣接する歯車オブジェクト(302,304,306,322,324,326)に設けられるソケットオブジェクト(302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326b)同士が接続状態であるかどうかを判別するためのプログラムである。具体的には、着目する歯車オブジェクト(302,304,306,322,324,326)の着目するソケットオブジェクト(302a,302b,304a,304b,306a,306b,322a,322b,324a,324b,326a,326b)が、対応する不可視ソケットオブジェクト(402a,402b,404a,404b,406a,406b,422a,422b,424a,424b,426a,426b)に重なったとき、隣接する歯車オブジェクトとの接続設定の有無が判別される。次に、着目するソケットオブジェクトと、その接続設定が有る歯車オブジェクトに設けられるソケットオブジェクトとの角度差Aが算出される。この角度差Aに基づいて接続状態であるかどうかが判断される。この実施例では、角度差Aが所定角度(たとえば、5度)未満である場合に、接続状態であることを判断する。そして、接続状態であることが判断されると、接続状態である2つのソケットオブジェクトに対して接続状態であることを示すデータないしフラグがRAM42に記憶(設定)される。
【0116】
ただし、ソケットオブジェクトが不可視ソケットオブジェクトに重なるかどうかは、角度差Bが所定角度(たとえば、5度)未満であるかどうかで判断される。角度差Bが所定角度未満である場合に、ソケットオブジェクトが不可視ソケットオブジェクトに重なると判断される。ただし、角度差Bは数8に従って算出される。
【0117】
[数8]
B=|bsa−(sa+L)|
ボール移動処理プログラム70hは、歯車オブジェクト(302,304,306,322,324,326)に保持されたボールオブジェクト(312a,312b,314a,314b,316a,316b)を、他の歯車オブジェクトに移動させるためのプログラムである。具体的には、まず、ボールオブジェクト(312a,312b,314a,314b,316a,316b)と、当該ボールオブジェクトが保持された歯車オブジェクト(302,304,306,322,324,326)以外の他の歯車オブジェクトに対応して設けられた不可視ソケットオブジェクト(402a,402b,404a,404b,406a,406b,422a,422b,424a,424b,426a,426b)との角度差A´を算出する。この角度差A´が所定角度(たとえば、5度)未満であり、ボールオブジェクトを保持するソケットオブジェクト(302a,302b,304a,304b,306a,306b,322a,322b,324a,324b)と、当該不可視ソケットオブジェクトに対応するソケットオブジェクトとが接続状態である場合に、接続設定に従って当該ボールオブジェクトが移動される。
【0118】
ゲームクリア処理プログラム70iは、パズルゲームをクリアしたかどうかを判定し、パズルゲームをクリアしたと判定したときに、クリア処理を実行するためのプログラムである。たとえば、パズルを解くことができた場合に、当該面ないしレベルをクリアした旨をゲーム画面300(またはゲーム画面320)に表示し、次の面ないしレベルのパズルゲームをプレイ可能にする。ただし、この実施例では、すべてのボールオブジェクト312a,312b,314a,314b,316a,316bが、同じ色の付された歯車オブジェクト322,324,326に保持されたときに、ゲームクリア(パズルを解いた)と判断される。
【0119】
図示は省略するが、パズルゲームプログラムは、ゲーム音出力プログラムおよびバックアッププログラムも含む。ゲーム音出力プログラムは、音(音楽)データを用いて、効果音,音声(擬声音),BGMのようなゲームに必要な音を出力するためのプログラムである。バックアッププログラムは、RAM42に記憶されたゲームデータ(途中データ,結果データ)をメモリカード28のRAM28bに記憶(セーブ)するためのプログラムである。
【0120】
また、データ記憶領域72には、指示位置記憶領域72aおよびオブジェクトデータ記憶領域72bが設けられる。また、データ記憶領域72には、得点データ72cが記憶され、そして、タッチオンフラグ72dが設けられる。
【0121】
指示位置記憶領域72aには、現フレームのタッチ位置の座標データ720および直前フレームのタッチ位置の座標データ722が記憶される。ただし、パズルゲームを開始した直後では、直前フレームについてのタッチ座標の座標データ722は記憶されていない。詳細な説明は省略するが、現フレームのタッチ位置の座標データ720が記憶される前に、指示位置記憶領域72aに記憶された座標データ720が直前フレームのタッチ位置の座標データに記憶(上書き)される。
【0122】
オブジェクトデータ記憶領域72bは、さらに、歯車オブジェクトデータ記憶領域724、ボールオブジェクトデータ記憶領域726および不可視歯車オブジェクトデータ記憶領域728を含む。
【0123】
図13に示すように、歯車オブジェクトデータ記憶領域724は、第1歯車オブジェクトデータ80,第2歯車オブジェクトデータ82,…を記憶する。以下、第1歯車オブジェクトデータ80についてのみ説明するが、第2歯車オブジェクトデータ82などの他の歯車オブジェクトデータについても同様である。
【0124】
図13に示すように、第1歯車オブジェクトデータ80は、画像データ80a,位置データ80b,色データ80c,回転量データ80d,連動歯車設定データ80e,接続設定データ80fおよびソケットオブジェクトデータ80gを含む。
【0125】
画像データ80aは、第1歯車オブジェクト(後述するソケットオブジェクトを除く。)を描画するための画像データ(ポリゴンやテクスチャなどのデータ)である。ただし、この画像データ80aによって、第1歯車オブジェクトの大きさ(および形状)が決定される。位置データ80bは、第1歯車オブジェクトの3次元位置の座標データである。ただし、この第1歯車オブジェクトが配置されるレイヤ(400)の位置(Z方向の位置)が別途記憶されている場合には、3次元仮想空間の奥行き方向(Z軸方向)の成分を除いて、このレイヤ上の位置(2次元座標)を記憶しておけばよい。
【0126】
色データ80cは、第1歯車オブジェクトに付される色についてのデータである。回転量データ80dは、プレイヤのタッチ操作に応じて、上記の数3に従って算出された回転量Lのデータ(角度データ)である。連動歯車設定データ80eは、第1歯車オブジェクトと連動する歯車(他の歯車オブジェクト)についての識別情報のデータないし他の歯車オブジェクトデータが記憶されたアドレスポインタである。この他の歯車オブジェクトは、上述した回転量データ80dによって、その回転量が決定される。ただし、回転方向は、回転量データ80の符号(+,−)で決定されるが、回転方向が反転される場合には、その符号が逆にされる。また、回転量を変化させる場合には、変化に応じた倍率が回転量データ80が示す回転量Lに掛け算される。
【0127】
接続設定データ80fは、第1歯車オブジェクトと接続設定されている他の歯車オブジェクトの識別情報のデータないし他の歯車オブジェクトデータが記憶されたアドレスポインタである。ただし、この接続設定データ80fに記憶されるのは、第1歯車オブジェクトから他の歯車オブジェクトにボールオブジェクトが移動可能である場合の当該他の歯車オブジェクトの識別情報のデータ等である。したがって、他の歯車オブジェクトから第1歯車オブジェクトにボールオブジェクトが移動可能である場合には、当該他の歯車オブジェクトの接続設定データに当該第1歯車オブジェクトの識別情報のデータないし第1歯車オブジェクトデータ80が記憶されたアドレスポインタが記憶される。
【0128】
ソケットオブジェクトデータ80gは、第1歯車オブジェクトに設けられるソケットオブジェクトについてのデータであり、第1ソケットオブジェクトデータ800,第2ソケットオブジェクトデータ802,…を含む。以下、第1ソケットオブジェクトデータ800についてのみ説明するが、第2ソケットオブジェクトデータ802などの他のソケットオブジェクトデータについても同様である。
【0129】
図13に示すように、第1ソケットオブジェクトデータ800は、画像データ800a,位置データ800b,角度オフセット値データ800c,接続フラグ800dおよび一致フラグ800eを含む。
【0130】
画像データ800aは、第1ソケットオブジェクトを描画するための画像データ(ポリゴンやテクスチャなどのデータ)である。位置データ800bは、第1ソケットオブジェクトの位置(3次元位置)の座標データである。この第1ソケットオブジェクトが配置されるレイヤ(400)のZ座標が別途記憶されている場合には、当該レイヤ上における第1ソケットオブジェクトの2次元座標の座標データが記憶される。角度オフセット値データ800cは、上述したように、当該第1ソケットオブジェクトが設けられる第1歯車オブジェクトの基準位置に対する当該第1ソケットオブジェクトの位置についての角度saの角度データである。
【0131】
接続フラグ800dは、第1ソケットオブジェクトが他のソケットオブジェクトと接続状態にあるか否かを判別するためのフラグである。たとえば、接続フラグ800dは、1ビットのレジスタで構成され、接続フラグ800dがオン(成立)である場合に、データ値「1」がレジスタに記憶され、接続フラグ800dがオフ(不成立)である場合に、データ値「0」がレジスタに記憶される。ただし、第1ソケットオブジェクトが他のソケットオブジェクトと接続状態にある場合に、接続フラグ800dはオンされる。一方、第1ソケットオブジェクトが他のソケットオブジェクトと接続状態にない場合には、接続フラグ800dはオフされる。この接続フラグ800dのオン/オフは、ソケット接続判別プログラム70gに従って実行される。
【0132】
一致フラグ800eは、第1ソケットオブジェクトに保持されるボールオブジェクトに付された色と、当該第1ソケットオブジェクトが設けられる歯車オブジェクトに付された色とが一致するか否かを判別するためのフラグである。この一致フラグ800eは、1ビットのレジスタで構成され、一致フラグ800eがオンである場合に、データ値「1」がレジスタに記憶され、一致フラグ800eがオフである場合に、データ値「0」がレジスタに記憶される。ただし、第1ソケットオブジェクトに保持されるボールオブジェクトに付された色と、当該第1ソケットオブジェクトが設けられる歯車オブジェクトに付された色とが一致する場合に、一致フラグ800eはオンされる。一方、第1ソケットオブジェクトに保持されるボールオブジェクトに付された色と、当該第1ソケットオブジェクトが設けられる歯車オブジェクトに付された色とが一致しない場合には、一致フラグ800eはオフされる。
【0133】
図14は図12に示したボールオブジェクトデータ記憶領域726を具体的に示す図解図である。ボールオブジェクトデータ記憶領域726は、パズルゲームで使用される第1ボールオブジェクトや第2ボールオブジェクトのデータ(90,92)などを記憶する。以下、第1ボールオブジェクトデータ90についてのみ説明するが、第2ボールオブジェクトデータ92などの他のボールオブジェクトデータについても同様である。
【0134】
図14に示すように、第1ボールオブジェクトデータ90は、画像データ90a,位置データ90b,色データ90cおよび角度オフセット値データ90dを含む。
【0135】
画像データ90aは、第1ボールオブジェクトを描画するための画像データ(ポリゴンやテクスチャなどのデータ)である。ただし、この画像データによって第1ボールオブジェクトの大きさ(形状)が決定される。位置データ90bは、第1ボールオブジェクトの位置(3次元位置)の座標データである。ただし、第1ボールオブジェクトが配置されるレイヤ(400)のZ座標を別途記憶しておく場合には、このレイヤ上における第1ボールオブジェクトの2次元座標の座標データが記憶される。色データ90cは、第1ボールオブジェクトに付された色についてのデータである。角度オフセット値データ90dは、当該第1ボールオブジェクトが保持される歯車オブジェクトの基準位置に対する当該ボールオブジェクトの位置についての角度baの角度データである。
【0136】
図15は図12に示した不可視歯車オブジェクトデータ記憶領域728を具体的に示した図解図である。図15に示すように、不可視歯車オブジェクトデータ記憶領域728には、第1不可視歯車オブジェクトデータ100,第2不可視歯車オブジェクトデータ102,…が記憶される。以下、第1不可視歯車オブジェクトデータ100についてのみ説明するが、第2不可視歯車オブジェクトデータ102などの他の不可視歯車オブジェクトデータについても同様である。
【0137】
図15に示すように、第1不可視歯車オブジェクトデータ100は、位置データ100a,ポリゴンデータ100bおよび不可視ソケットオブジェクトデータ100cを含む。
【0138】
位置データ100aは、第1不可視歯車オブジェクトの位置(3次元位置)の座標データである。ただし、第1不可視歯車オブジェクトが配置されるレイヤ(420)のZ座標が別途記憶されている場合には、このレイヤ上における2次元座標の座標データが記憶される。ポリゴンデータ100bは、第1不可視歯車オブジェクトを形成するためのポリゴンデータである。なお、ポリゴンデータ100bによって第1不可視歯車オブジェクトが形成されるため、その大きさ(この実施例では、半径ないし直径)はポリゴンデータ100bによって規定される。
【0139】
不可視ソケットオブジェクトデータ100cは、第1不可視ソケットオブジェクトデータ1000,第2不可視ソケットオブジェクトデータ1002,…を含む。以下、第1不可視ソケットオブジェクトデータ1000についてのみ説明するが、第2不可視ソケットオブジェクトデータ1002などの他の不可視ソケットオブジェクトデータについても同様である。
【0140】
図15に示すように、第1不可視ソケットオブジェクトデータ1000は、位置データ1000a、ポリゴンデータ1000bおよび角度オフセット値データ1000cを含む。
【0141】
位置データ1000aは、第1不可視ソケットオブジェクトの位置(3次元位置)の座標データである。ただし、第1不可視ソケットオブジェクトが配置されるレイヤ(420)のZ座標が決定されている場合には、このレイヤ上の2次元位置の座標データが記憶される。ポリゴンデータ1000bは、第1不可視ソケットオブジェクトを形成するためのポリゴンデータであり、その大きさ(この実施例では、半径ないし直径)も規定する。角度オフセット値データ1000cは、この第1不可視ソケットオブジェクトが設けらる第1不可視歯車オブジェクトの基準位置に対する当該第1不可視ソケットオブジェクトの位置についての角度s´aの角度データである。
【0142】
図12に戻って、上述したように、データ記憶領域72には、得点データ72cが記憶される。この得点データ72cは、ゲームの進行に応じて加算されるパズルゲームについての得点の数値データである。ただし、得点のみならず、プレイヤないしプレイヤキャラクタのレベルについてのデータも記憶するようにしてもよい。
【0143】
また、上述したように、データ記憶領域72には、タッチオンフラグ72dが設けられる。タッチオンフラグ72dは、タッチ入力(タッチ操作)の有無を判別するためのフラグである。たとえば、タッチオンフラグ72dは1ビットのレジスタで構成され、タッチオンフラグ72dがオンされると、データ値「1」がレジスタに設定され、タッチオンフラグ72dがオフされると、データ値「0」がレジスタに設定される。ただし、タッチ操作が有る場合に、タッチオンフラグ72dはオンされ、タッチ操作が無い場合に、タッチオンフラグ72dはオフされる。なお、タッチ操作の有無は、座標データの有無で容易に知ることができる。
【0144】
具体的には、図2に示したCPUコア34が図16に示すフロー図に従って全体処理を実行する。図16に示すように、CPUコア34は全体処理を開始すると、ステップS1で、初期設定する。たとえば、ゲームを最初から開始する場合には、CPUコア34は、RAM42のバッファ領域をクリアしたり、各種フラグやタイマをリセットしたりする。また、ゲームを前回の続きから開始する場合には、CPUコア34は、RAM42のバッファ領域をクリアしたり、RAM28bに記憶されたセーブデータをロードしたりする。
【0145】
続くステップS3では、ゲーム画像を表示する。ここでは、図3に示したように、ゲーム画面300がLCD12に表示されるとともに、ゲーム画面320がLCD14に表示される。次のステップS5では、タッチオンフラグ72dがオンであるかどうかを判断する。つまり、タッチ操作が有るかどうかを判断するのである。ステップS5で“NO”であれば、つまりタッチオンフラグ72dがオフであれば、タッチ操作が無いと判断して、そのままステップS13に進む。
【0146】
しかし、ステップS5で“YES”であれば、つまりタッチオンフラグ72dがオンであれば、タッチ操作が有ると判断して、ステップS7で、後述する歯車オブジェクト回転処理(図17参照)を実行し、ステップS9で、後述するソケット接続判別処理(図18および図19参照)を実行し、ステップS11で、後述するボール移動処理(図20および図21参照)を実行してから、ステップS13に進む。
【0147】
ステップS13では、すべての一致フラグ(800e等)がオンであるかどうかを判断する。つまり、ボールオブジェクト312a,312b,314a,314b,316a,316bが、それぞれ、同じ色が付されている歯車オブジェクト322,324,326のソケットオブジェクト322a,322b,324a,324b,326a,326bに保持された状態であるかどうかを判断する。
【0148】
ステップS13で“NO”であれば、つまりいずれか1つの一致フラグでもオフであれば、ゲームクリアでないと判断して、そのままステップS17に進む。一方、ステップS13で“YES”であれば、つまりすべての一致フラグがオンであれば、ゲームクリアであると判断して、ステップS15で、ゲームクリア処理を実行して、ステップS17に進む。
【0149】
ステップS17では、ゲーム終了かどうかを判断する。つまり、ゲームオーバになったり、プレイヤによってゲーム終了の指示が与えられたりしたかどうかを判断する。ステップS17で“NO”であれば、つまりゲーム終了でなければ、ゲームを続行すると判断して、ステップS3に戻る。一方、ステップS17で“YES”であれば、つまりゲーム終了であれば、そのまま全体処理を終了する。
【0150】
図17は図16に示したステップS7の歯車オブジェクト回転処理のフロー図である。図17に示すように、CPUコア34は、歯車オブジェクト回転処理を開始すると、ステップS31で、変数iをリセットする(i=1)。ただし、変数iは歯車オブジェクトをカウントするために設定される。以下、同様である。次に、ステップS33では、直前フレームのタッチ位置f1を読み出し、ステップS35では、現フレームのタッチ位置f0を読み出す。つまり、CPUコア34は、データ記憶領域72に記憶された座標データ720および座標データ722を読み出す。
【0151】
続くステップS37では、タッチ位置f0およびタッチ位置f1が歯車オブジェクトi上であるかどうかを判断する。つまり、歯車オブジェクトi上でタッチ操作されているかどうかを判断するのである。ステップS37で“NO”であれば、つまりタッチ位置f0またはタッチ位置f1のいずれか一方でも歯車オブジェクトi上でなければ、当該歯車オブジェクトiを回転させるためのタッチ操作ではないと判断して、そのままステップS55に進む。
【0152】
しかし、ステップS37で“YES”であれば、つまりタッチ位置f0およびタッチ位置f1が歯車オブジェクトi上であれば、ステップS39で、歯車オブジェクトiの中心cと現フレームのタッチ位置f0からベクトルV0を求める。さらに、ステップS41で、ベクトルV0を正規化してベクトルU0を求める。ただし、上述したように、ベクトルU0はベクトルV0の単位ベクトルである。
【0153】
続いて、ステップS43で、数1に従って、現フレームのタッチ位置f0に対応する円周上の位置r0を求め、ステップS45で、数2に従って、直前フレームのタッチ位置f1に対応する円周上の位置r1を求め、ステップS47で、位置r0と位置r1とからベクトルrVを求める。そして、ステップS49で、数3に従って、回転量Lを求める。
【0154】
その後、ステップS51で、回転量Lに基づいて歯車オブジェクトiを回転処理する。また、ステップS53で、歯車オブジェクトiに連動する歯車オブジェクトjを回転量Lに基づいて回転処理する。たとえば、歯車オブジェクトjは、歯車オブジェクトiと同じ角度だけ、同じ方向または反対方向に回転される。図示は省略するが、このステップS53の回転処理が実行されたときに、ソケットオブジェクトの角度オフセット値データ(800cなど)およびボールオブジェクトの角度オフセット値データ(90dなど)が更新される。
【0155】
ステップS55では、変数iを1加算する(i=i+1)。そして、ステップS57では、変数iが最大値imaxを超えたかどうかを判断する。ただし、最大値imaxは歯車オブジェクトの総数である。ステップS57で“NO”であれば、つまり変数iが最大値imax以下であれば、そのままステップS33に戻って、次の歯車オブジェクトiについての処理を実行する。一方、ステップS57で“YES”であれば、つまり変数iが最大値imaxを超えていれば、すべての歯車オブジェクトiについての処理を終了したと判断して、全体処理にリターンする。
【0156】
図18および図19は、図16に示したステップS9のソケット接続判別処理のフロー図である。図18に示すように、CPUコア34は、ソケット接続判別処理を開始すると、ステップS71で、変数iを初期化する(i=1)。続くステップS73では、歯車オブジェクトiの接続設定が有るかどうかを判断する。ステップS73で“NO”であれば、つまり歯車オブジェクトiの接続設定が無ければ、そのまま図19に示すステップS95に進む。
【0157】
しかし、ステップS73で“YES”であれば、つまり歯車オブジェクトiの接続設定が有れば、ステップS75で、変数sを初期設定する(s=1)。ただし、変数sは、歯車オブジェクトiに設けられるソケットオブジェクトsを識別するために設定される。以下、同様である。続いて、ステップS77で、変数s´を初期設定する(s´=1)。ただし、変数s´は、歯車オブジェクトiと接続設定される他の歯車オブジェクトi´に設けられるソケットオブジェクトs´を識別するために設定される。続いて、ステップS79では、歯車オブジェクトiに設けられるソケットオブジェクトsが不可視ソケットオブジェクトbsと重なるかどうかを判断する。具体的には、角度差Bを数8に従って算出し、この角度差Bが所定角度(たとえば、5度)未満であるかどうかを判断するのである。
【0158】
ステップS79で“NO”であれば、つまり歯車オブジェクトiに設けられるソケットオブジェクトsが不可視ソケットオブジェクトbsと重ならない場合には、そのまま図19に示すステップS93に進む。一方、ステップS79で“YES”であれば、つまり歯車オブジェクトiに設けられるソケットオブジェクトsが不可視ソケットオブジェクトbsと重なる場合には、ステップS81で、歯車オブジェクトiに設けられるソケットオブジェクトsと、当該歯車オブジェクトiと接続設定された歯車オブジェクトi´に設けられるソケットオブジェクトs´との角度差Aを数4に従って算出する。
【0159】
次に、図19に示すステップS83で、角度差Aが一定角度mよりも大きいかどうかを判断する。この実施例では、一定角度mは5度に設定されるが、0度〜360度の間で任意に設定することが可能である。ステップS83で“YES”であれば、つまり角度差Aが一定角度m未満であれば、ステップS85で、ソケットオブジェクトsとソケットオブジェクトs´とを接続状態に設定して、つまり当該ソケットオブジェクトsについての接続フラグをオンして、ステップS89に進む。一方、ステップ83で“NO”であれば、つまり角度差Aが一定角度m以上であれば、ステップS87で、ソケットオブジェクトsとソケットオブジェクトs´とを非接続状態に設定して、つまり当該ソケットオブジェクトsの接続フラグをオフして、ステップS89に進む。
【0160】
ステップS89では、変数s´を1加算する(s´=s´+1)。つまり、次のソケットオブジェクトs´について、接続状態の有無の設定処理を実行するのである。したがって、この実施例では、1つのソケットオブジェクトsに対して1つのソケットオブジェクトs´が接続状態とされるため、ステップS83で“YES”であり、ステップS85の処理を実行した場合にはそのままステップS97に進むようにしてもよい。
【0161】
次のステップS91では、変数s´が最大値s´maxであるかどうかを判断する。ここで、最大値s´maxは歯車オブジェクトi´に設けられるソケットオブジェクトs´の総数である。つまり、ステップS91では、CPUコア34は、歯車オブジェクトi´の全てのソケットオブジェクトs´についての処理を終了したかどうかを判断する。
【0162】
ステップS91で“NO”であれば、つまり変数s´が最大値s´max以下であれば、図18に示したステップS79に戻る。一方、ステップS91で“YES”であれば、つまり変数s´が最大値s´maxを超えれば、ステップS93で、変数sを1加算する(s=s+1)。続くステップS95では、変数sが最大値smaxを超えているかどうかを判断する。
【0163】
ステップS95で“NO”であれば、つまり変数sが最大値smax以下であれば、そのまま図18に示したステップS77に戻る。一方、ステップS95で“YES”であれば、つまり変数sが最大値smaxを超えていれば、ステップS97で、変数iを1加算する(i=i+1)。そして、ステップS99では、変数iが最大値imaxを超えているかどうかを判断する。
【0164】
ステップS99で“NO”であれば、つまり変数iが最大値imax以下であれば、そのまま図18に示したステップS73に戻る。一方、ステップS99で“YES”であれば、つまり変数iが最大値imaxを超えれば、図16に示した全体処理にリターンする。
【0165】
図20および図21は、図16のステップS11に示したボール移動処理のフロー図である。図20に示すように、CPUコア34は、ボール移動処理を開始すると、ステップS111で、変数bを初期化する(b=1)。ここで、変数bは、ボールオブジェクトbを識別するために設定される。続くステップS113で、ボールオブジェクトbの回転角度B(B=sa+L)を算出する。次のステップS115では、変数bsを初期化する(bs=1)。ここで、変数bsは、不可視ソケットオブジェクトbsを識別するために設定される。次のステップS117では、ボールオブジェクトbと不可視ソケットオブジェクトbsとの角度差A´を数7に従って算出する。
【0166】
続いて、ステップS119では、角度差A´が一定角度k未満であるかどうかを判断する。この実施例では、一定角度kは5度に設定されるが、0度〜360度の間で任意に設定することができる。ステップS119で“NO”であれば、つまり角度差A´が一定角度k以上であれば、そのまま図21に示すステップS133に進む。一方、ステップS119で“YES”であれば、つまり角度差A´が一定角度k未満であれば、ステップS121で、ボールオブジェクトbを保持するソケットオブジェクトsと、不可視ソケットオブジェクトbsに対して設けられた歯車オブジェクトi´に設けられるソケットオブジェクトs´の接続フラグがオンであるかどうかを判断する。
【0167】
ステップS121で“NO”であれば、つまりボールオブジェクトbを保持するソケットオブジェクトsと、不可視ソケットオブジェクトbsに対して設けられた歯車オブジェクトに設けられるソケットオブジェクトs´の接続フラグがオフであれば、そのままステップS133に進む。一方、ステップS121で“YES”であれば、つまりボールオブジェクトbを保持するソケットオブジェクトsと、不可視ソケットオブジェクトbsに対して設けられた歯車オブジェクトに設けられるソケットオブジェクトs´の接続フラグがオンであれば、ステップS123で、ボールオブジェクトbをソケットオブジェクトs´に移動して、図21に示すステップS125で、ボールオブジェクトbとソケットオブジェクトs´が設けられる歯車オブジェクトi´の色データを照合する。
【0168】
続くステップS127では、ボールオブジェクトbと歯車オブジェクトi´との色が一致するかどうかを判断する。ステップS127で“YES”であれば、つまりボールオブジェクトbと歯車オブジェクトi´との色が一致すれば、ステップS129で、当該ソケットオブジェクトs´に設定される一致フラグをオンして、ステップS133に進む。一方、ステップS127で“NO”であれば、つまりボールオブジェクトbと歯車オブジェクトi´との色が一致しなければ、ステップS131で、当該ソケットオブジェクトs´に設定される一致フラグをオフして、ステップS133に進む。
【0169】
ステップS133では、変数bsを1加算する(bs=bs+1)。そして、ステップS135で、変数bsが最大値bsmaxを超えるかどうかを判断する。ステップS135で“NO”であれば、つまり変数bsが最大値bsmax以下であれば、図20に示したステップS117に戻る。一方、ステップS135で“YES”であれば、つまり変数bsが最大値bsmaxを超えれば、ステップS137で、変数bを1加算する(b=b+1)。
【0170】
そして、ステップS139で、変数bが最大値bmaxを超えるかどうかを判断する。ステップS139で“NO”であれば、つまり変数bが最大値bmax以下であれば、図20に示したステップS113に戻る。一方、ステップS139で“YES”であれば、つまり変数bが最大値bmaxを超えれば、図16に示した全体処理にリターンする。
【0171】
この実施例によれば、歯車オブジェクトを回転させてボールオブジェクトを移動させることにより、パズルゲームをプレイするので、今までにないパズルゲームを楽しむことができる。
【0172】
なお、この実施例では、分かり易くするために、歯車オブジェクトに対応して不可視歯車オブジェクトが設けられるようにしたが、少なくとも不可視ソケットオブジェクトを設定しておけばよいため、不可視歯車オブジェクトは省略することができる。かかる場合には、図15を用いて説明した位置データ100aおよびポリゴンデータ100bなど、不可視歯車オブジェクトに関するデータを省略することができる。
【0173】
また、この実施例では、見た目と一致させて直感的にパズルゲームをプレイできるように、歯車オブジェクトやボールオブジェクトの形状を円形にしたが、この形状に限定される必要はない。たとえば、歯車オブジェクトやボールオブジェクトは、三角形や四角形のような多角形、または星型のような任意の形状であってもよい。
【0174】
さらに、この実施例では、ポインティングデバイスとして、タッチパネルを用いるようにしたが、ペンタブレット、タッチパッド、コンピュータマウスのような他のポインティングデバイスを用いることも可能である。ただし、他のポインティングデバイスを用いる場合には、画面上の指示位置を示すためのマウスポインタのような指示画像を表示する必要がある。
【0175】
さらにまた、ゲーム装置の構成は、上述の実施例の構成に限定されるべきでない。たとえば、LCDは1つでもよく、タッチパネルは2つのLCDのそれぞれに設けるようにしてもよい。
【図面の簡単な説明】
【0176】
【図1】図1はこの発明のゲーム装置の一実施例を示す図解図である。
【図2】図2は図1に示すゲーム装置の電気的な構成を示すブロック図である。
【図3】図3は図1に示すゲーム装置の第1のLCDおよび第2のLCDに表示されるゲーム画面の一例を示す図解図である。
【図4】図4は図1に示すゲーム装置の第2のLCDに表示されるゲーム画面の他の実施例を示す図解図である。
【図5】図5は図1に示すゲーム装置の第1のLCDおよび第2のLCDに表示されるゲーム画面の他の例を示す図解図である。
【図6】図6はゲーム画面に表示される歯車オブジェクトがプレイヤの操作に従って回転される回転量の算出方法を説明するための図解図である。
【図7】図7は歯車オブジェクトに設けられるソケットオブジェクトに保持されるボールオブジェクトおよび当該歯車オブジェクトに対応して設けられる不可視ソケットオブジェクトの角度オフセット値を説明するための図解図である。
【図8】図8は図1に示すゲーム装置の第1のLCDおよび第2のLCDに表示されるゲーム画面のそれぞれに対応して設けられる不可視歯車オブジェクトのレイヤを示す図解図である。
【図9】図9は歯車オブジェクト同士の接続設定の有無を説明するための図解図である。
【図10】図10は隣接する2つの歯車オブジェクトに設けられるソケットオブジェクトの接続状態を説明するための図解図である。
【図11】図11は接続状態に有るソケットオブジェクト間をボールオブジェクトが移動する場合における、当該ボールオブジェクトの位置と、当該ボールオブジェクトを保持する歯車オブジェクトに隣接する歯車オブジェクトに対応して設けられる不可視ソケットオブジェクトとの位置を説明するための図解図である。
【図12】図12は図2に示すRAMのメモリマップの一例を示す図解図である。
【図13】図13は図12に示すデータ記憶領域に設けられる歯車オブジェクトデータ記憶領域の具体的な内容を示す図解図である。
【図14】図14は図12に示すデータ記憶領域に設けられるボールオブジェクトデータ記憶領域の具体的な内容を示す図解図である。
【図15】図15は図12に示すデータ記憶領域に設けられる不可視歯車オブジェクトデータ記憶領域の具体的な内容を示す図解である。
【図16】図16は図2に示すCPUコアのゲーム全体処理を示すフロー図である。
【図17】図17は図2に示すCPUコアの歯車オブジェクト回転処理を示すフロー図である。
【図18】図18は図2に示すCPUコアのソケット接続判別処理の一部を示すフロー図である。
【図19】図19は図2に示すCPUコアのソケット接続判別処理の他の一部であって、図18に後続するフロー図である。
【図20】図20は図2に示すCPUコアのボール移動処理の一部を示すフロー図である。
【図21】図21は図2に示すCPUコアのボール移動処理の他の一部であって、図20に後続するフロー図である。
【符号の説明】
【0177】
10 …ゲーム装置
12,14 …LCD
16,16a,16b …ハウジング
22 …操作スイッチ
24 …タッチパネル
26 …スティック
28 …メモリカード
28a …ROM
28b,42 …RAM
34 …CPUコア
36a,36b …スピーカ
44,46 …GPU
48 …I/F回路
50 …LCDコントローラ
52,54 …VRAM

【特許請求の範囲】
【請求項1】
記憶手段、表示手段および操作手段を備えるパズルゲーム装置のパズルゲームプログラムであって、
前記パズルゲーム装置のコンピュータに、
前記記憶手段に記憶される画像データを用いて、少なくとも1つの受容部が設けられた回転オブジェクトを複数配置するとともに、少なくとも1つの移動オブジェクトがいずれかの受容部に受容されたゲーム画像を前記表示手段に表示するゲーム画像表示ステップ、
プレイヤの操作に応じて前記操作手段から入力される操作データに従って前記回転オブジェクトを回転させる回転処理ステップ、
前記回転処理ステップによって前記回転オブジェクトを回転させた結果、前記移動オブジェクトが受容された第1受容部と、当該第1受容部が設けられる回転オブジェクトとは異なる他の回転オブジェクトに設けられた第2受容部とが所定の関係になったか否かを判別する関係判別ステップ、および
前記関係判別ステップによって所定の関係になったことが判別されたとき、前記移動オブジェクトを前記第1受容部から前記第2受容部に移動するように前記ゲーム画像を更新する移動処理ステップを実行させる、パズルゲームプログラム。
【請求項2】
前記記憶手段には、前記移動オブジェクトおよび前記回転オブジェクトのそれぞれの属性が設定されており、
前記移動オブジェクトの属性と前記移動オブジェクトが受容された回転オブジェクトの属性とが同一か否かを判別する属性判別ステップ、および
前記属性判別ステップによって同一であると判別されたとき、ゲームの進行を変化させるゲーム処理ステップを前記コンピュータにさらに実行させる、請求項1記載のパズルゲームプログラム。
【請求項3】
前記回転オブジェクトは、前記プレイヤの操作を許容する第1回転オブジェクトと、前記プレイヤの操作を許容しない第2回転オブジェクトとを含み、
前記回転処理ステップは、前記プレイヤの操作に応じて前記操作手段から入力される操作データに従って前記第1回転オブジェクトを回転させたとき、前記第1回転オブジェクトの回転に基づいて前記第2回転オブジェクトを回転させる、請求項1または2記載のパズルゲームプログラム。
【請求項4】
前記回転オブジェクトは、複数の前記第1回転オブジェクトおよび複数の前記第2回転オブジェクトを含み、
前記回転処理ステップは、少なくとも1つの前記第1回転オブジェクトの回転に基づいて、1つまたは複数の前記第2回転オブジェクトを回転させる、請求項3記載のパズルゲームプログラム。
【請求項5】
前記回転処理ステップによって前記回転オブジェクトを回転させた結果に基づいて、前記回転オブジェクトに設定される基準位置に対する前記第1受容部の第1角度と他の前記回転オブジェクトに設定される基準位置に対する前記第2受容部の第2角度とをそれぞれ算出する角度算出ステップを前記コンピュータにさらに実行させ、
前記関係判別ステップは、前記第1角度と前記第2角度との差が所定範囲内であるか否かを判別し、
前記移動処理ステップは、前記関係判別ステップによって前記差が所定範囲内であることが判別されたとき、前記記憶手段に記憶された前記移動オブジェクトの位置データを更新して、当該移動オブジェクトを前記第1受容部から前記第2受容部に移動するように前記ゲーム画像を更新する、請求項1ないし4のいずれかに記載のパズルゲームプログラム。
【請求項6】
プレイヤの操作によって指示された画面上の位置を前記操作手段から入力される操作データに従って検出する位置検出ステップ、および
前記位置検出ステップによって検出された位置が前記回転オブジェクトを指示しているか否かを判別する位置判別ステップを前記コンピュータにさらに実行させ、
前記回転処理ステップは、前記位置判別ステップによって前記回転オブジェクトを指示していることが判別されたとき、所定時間毎の位置変化に基づいて前記回転オブジェクトを回転させる、請求項1ないし5のいずれかに記載のパズルゲームプログラム。
【請求項7】
少なくとも1つの受容部が設けられた回転オブジェクトを複数配置するとともに、少なくとも1つの移動オブジェクトがいずれかの受容部に受容されたゲーム画像を表示するゲーム画像表示手段、
プレイヤの操作に応じて前記回転オブジェクトを回転させる回転処理手段、
前記回転処理手段によって前記回転オブジェクトを回転させた結果、前記移動オブジェクトが受容された第1受容部と、当該第1受容部が設けられる回転オブジェクトとは異なる他の回転オブジェクトに設けられた第2受容部とが所定の関係になったか否かを判別する関係判別手段、および
前記関係判別手段によって所定の関係になったことが判別されたとき、前記移動オブジェクトを前記第2受容部に移動させる移動処理手段を備える、パズルゲーム装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate


【公開番号】特開2008−295530(P2008−295530A)
【公開日】平成20年12月11日(2008.12.11)
【国際特許分類】
【出願番号】特願2007−141936(P2007−141936)
【出願日】平成19年5月29日(2007.5.29)
【出願人】(000233778)任天堂株式会社 (1,115)
【出願人】(507176781)有限会社ヴィテイ (3)
【Fターム(参考)】