図1を参照して、この発明の一実施例であるゲーム装置10は、第1の液晶表示器(LCD)12および第2のLCD14を含む。このLCD12およびLCD14は、所定の配置位置となるようにハウジング16に収納される。この実施例では、ハウジング16は、上側ハウジング16aと下側ハウジング16bとによって構成され、LCD12は上側ハウジング16aに収納され、LCD14は下側ハウジング16bに収納される。したがって、LCD12とLCD14とは縦(上下)に並ぶように近接して配置される。
なお、この実施例では、表示器としてLCDを用いるようにしてあるが、LCDに代えて、EL(Electronic Luminescence)ディスプレイやプラズマディスプレイを用いるようにしても良い。また、据置型ゲーム機や業務用ゲーム機などの場合には、CRTディスプレイなどを用いるようにしても良い。
図1からも分かるように、上側ハウジング16aは、LCD12の平面形状よりも少し大きな平面形状を有し、一方主面からLCD12の表示面を露出するように開口部が形成される。一方、下側ハウジング16bは、その平面形状が上側ハウジング16aよりも横長に選ばれ、横方向の略中央部にLCD14の表示面を露出するように開口部が形成される。また、下側ハウジング16bには、音抜き孔18が形成されるとともに、操作スイッチ20(20a,20b,20c,20d,20e,20Lおよび20R)が設けられる。
また、上側ハウジング16aと下側ハウジング16bとは、上側ハウジング16aの下辺(下端)と下側ハウジング16bの上辺(上端)の一部とが回動可能に連結されている。したがって、たとえば、ゲームをプレイしない場合には、LCD12の表示面とLCD14の表示面とが対面するように、上側ハウジング16aを回動させて折りたたんでおけば、LCD12の表示面およびLCD14の表示面に傷がつくなどの破損を防止することができる。ただし、上側ハウジング16aと下側ハウジング16bとは、回動可能に連結せずに、それらを一体的(固定的)に設けたハウジング16を形成するようにしても良い。
操作スイッチ20は、方向指示スイッチ(十字スイッチ)20a,スタートスイッチ20b、セレクトスイッチ20c、動作スイッチ(Aボタン)20d、動作スイッチ(Bボタン)20e、動作スイッチ(Lボタン)20Lおよび動作スイッチ(Rボタン)20Rを含む。スイッチ20a,20bおよび20cは、下側ハウジング16bの一方主面であり、LCD14の左側に配置される。また、スイッチ20dおよび20eは、下側ハウジング16bの一方主面であり、LCD14の右側に配置される。さらに、スイッチ20Lおよびスイッチ20Rは、それぞれ、下側ハウジング16bの上端(天面)の一部であり、上側ハウジング16aとの連結部以外に当該連結部を挟むように、左右に配置される。
方向指示スイッチ20aは、ディジタルジョイスティックとして機能し、4つの押圧部の1つを操作することによって、プレイヤによって操作可能なプレイヤキャラクタ(またはプレイヤオブジェクト)の移動方向を指示したり、カーソルの移動方向を指示したりする等に用いられる。スタートスイッチ20bは、プッシュボタンで構成され、ゲームを開始(再開)したり、一時停止したりする等に用いられる。セレクトスイッチ20cは、プッシュボタンで構成され、ゲームモードの選択等に用いられる。
動作スイッチ20dすなわちAボタンは、プッシュボタンで構成され、方向指示以外の動作、すなわち、プレイヤキャラクタに打つ(パンチ)、投げる、つかむ(取得)、乗る、ジャンプするなどの任意のアクションをさせることができる。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かす等を指示することができる。また、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。動作スイッチ20eすなわちBボタンは、プッシュボタンで構成され、セレクトスイッチ20cで選択したゲームモードの変更やAボタン20dで決定したアクションの取り消し等のために用いられる。
動作スイッチ(左押しボタン)20Lおよび動作スイッチ(右押しボタン)20Rは、プッシュボタンで構成され、左押しボタン(Lボタン)20Lおよび右押しボタン(Rボタン)20Rは、Aボタン20dおよびBボタン20eと同様の操作に用いることができ、また、Aボタン20dおよびBボタン20eの補助的な操作に用いることができる。
また、LCD14の上面には、タッチパネル22が装着される。タッチパネル22としては、たとえば、抵抗膜方式、光学式(赤外線方式)および静電容量結合式のいずれかの種類のものを用いることができる。また、タッチパネル22は、その上面(検出面)をスティック24ないしはペン(スタイラスペン)或いは指(以下、これらを「スティック24等」という場合がある。)で、押圧したり、撫でたり、触れたりすることにより操作すると、スティック24等の操作位置の座標を検出して、検出した座標(検出座標)に対応する座標データを出力する。
この実施例では、LCD14(LCD12も同じ、または略同じ。)の表示面の解像度は256dot×192dotであり、タッチパネル22の検出面の検出精度もその解像度に対応して256dot×192dotとしてある。ただし、タッチパネル22の検出面の検出精度は、LCD14の表示面の解像度よりも低くてもよく、高くても良い。なお、以下の説明では、タッチパネル22の検出座標は、左上隅を原点(0,0)とし、右水平方向をX軸正方向、下垂直方向をY軸正方向として説明する(LCD14(12)の座標系も同様)。また、3次元ゲーム空間(ゴルフコース)は、水平面にXY座標があり、鉛直方向にZ軸があるとして説明する。
LCD12およびLCD14には異なるゲーム画像(ゲーム画面)を表示することができる。したがって、プレイヤはスティック24等でタッチパネル22を操作することにより、LCD14の画面に表示されるプレイヤキャラクタ、敵キャラクタ、アイテムキャラクタ、文字情報、アイコン等のキャラクタ画像を指示(指定)したり、動作(移動)させたり、コマンドを選択したりすることができる。また、3次元ゲーム空間に設けられる仮想カメラ(視点)の方向を変化させたり、ゲーム画面をスクロール(徐々に移動表示)させたりすることもできる。
このように、ゲーム装置10は、2画面分の表示部となるLCD12およびLCD14を有し、いずれか一方(この実施例では、LCD14)の上面にタッチパネル22が設けられるので、2画面(12,14)と2系統の操作部(20,22)とを有する構成になっている。
また、この実施例では、スティック24は、たとえば上側ハウジング16aの側面(右側面)近傍に設けられる収納部(収納穴)26に収納することができ、必要に応じて取り出される。ただし、スティック24を設けない場合には、収納部26を設ける必要もない。
さらに、ゲーム装置10はメモリカード(またはゲームカートリッジ)28を含み、このメモリカード28は着脱自在であり、下側ハウジング16bの裏面ないしは下端(底面)に設けられる挿入口30から挿入される。図1では省略するが、挿入口30の奥部には、メモリカード28の挿入方向先端部に設けられるコネクタ(図示せず)と接合するためのコネクタ46(図2参照)が設けられており、したがって、メモリカード28が挿入口30に挿入されると、コネクタ同士が接合され、ゲーム装置10のCPUコア42(図2参照)がメモリカード28にアクセス可能となる。
なお、図1では表現できないが、下側ハウジング16bの音抜き孔18と対応する位置であり、この下側ハウジング16bの内部にはスピーカ32(図2参照)が設けられる。
また、図1では省略するが、たとえば、下側ハウジング16bの裏面側には、電池収容ボックスが設けられ、また、下側ハウジング16bの底面側には、電源スイッチ、音量スイッチ、外部拡張コネクタおよびイヤフォンジャックなどが設けられる。
図2はゲーム装置10の電気的な構成を示すブロック図である。図2を参照して、ゲーム装置10は電子回路基板40を含み、この電子回路基板40にはCPUコア42等の回路コンポーネントが実装される。CPUコア42は、バス44を介してコネクタ46に接続されるととともに、RAM48、第1のグラフィック処理ユニット(GPU)50、第2のGPU52、入出カインターフエース回路(以下、「I/F回路」という。)54およびLCDコントローラ60が接続される。
コネクタ46には、上述したように、メモリカード28が着脱自在に接続される。メモリカード28は、ROM28aおよびRAM28bを含み、図示は省略するが、ROM28aおよびRAM28bは、互いにバスで接続され、さらに、コネクタ46と接合されるコネクタ(図示せず)に接続される。したがって、上述したように、CPUコア42は、ROM28aおよびRAM28bにアクセスすることができるのである。
ROM28aは、ゲーム装置10で実行すべき仮想ゲーム(実施例では、ゴルフゲーム)のためのゲームプログラム、画像(キャラクタ画像、背景画像、アイテム画像、アイコン(ボタン)画像、メッセージ画像など)データおよびゲームに必要な音(音楽)のデータ(音データ)等を予め記憶する。RAM(バックアップRAM)28bは、そのゲームの途中データやゲームの結果データを記憶(セーブ)する。
RAM48は、バッファメモリないしはワーキングメモリとして使用される。つまり、CPUコア42は、メモリカード28のROM28aに記憶されたゲームプログラム、画像データおよび音データ等をRAM48にロードし、ロードしたゲームプログラムを実行する。また、CPUコア42は、ゲームの進行に応じて一時的に発生するデータ(ゲームデータやフラグデータ)をRAM48に記憶しつつゲーム処理を実行する。
なお、ゲームプログラム、画像データおよび音データ等は、ROM28aから一度に全部、または部分的かつ順次的に読み出され、RAM48に記憶(ロード)される。
GPU50およびGPU52は、それぞれ、描画手段の一部を形成し、たとえばシングルチップASICで構成され、CPUコア42からのグラフィックスコマンド(作画命令)を受け、そのグラフィックスコマンドに従ってゲーム画像データを生成する。ただし、CPUコア42は、グラフィックスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラム(ゲームプログラムに含まれる。)をGPU50およびGPU52のそれぞれに与える。
また、GPU50には、第1のビデオRAM(以下、「VRAM」という。)56が接続され、GPU52には、第2のVRAM58が接続される。GPU50およびGPU52が作画コマンドを実行するにあたって必要なデータ(画像データ:キャラクタデータやテクスチャ等のデータ)は、GPU50およびGPU52が、それぞれ、第1のVRAM56および第2のVRAM58にアクセスして取得する。なお、CPUコア42は、描画に必要な画像データをGPU50およびGPU52を介して第1のVRAM56および第2のVRAM58に書き込む。GPU50はVRAM56にアクセスして描画のためのゲーム画像データを作成し、GPU52はVRAM58にアクセスして描画のためのゲーム画像データを作成する。
VRAM56およびVRAM58は、LCDコントローラ60に接続される。LCDコントローラ60はレジスタ62を含み、レジスタ62はたとえば1ビットで構成され、CPUコア42の指示によって「0」または「1」の値(データ値)を記憶する。LCDコントローラ60は、レジスタ62のデータ値が「0」である場合には、GPU50によって作成されたゲーム画像データをLCD12に出力し、GPU52によって作成されたゲーム画像データをLCD14に出力する。また、LCDコントローラ60は、レジスタ62のデータ値が「1」である場合には、GPU50によって作成されたゲーム画像データをLCD14に出力し、GPU52によって作成されたゲーム画像データをLCD12に出力する。
なお、LCDコントローラ60は、VRAM56およびVRAM58から直接ゲーム画像データを読み出したり、GPU50およびGPU52を介してVRAM56およびVRAM58からゲーム画像データを読み出したりする。
I/F回路54には、操作スイッチ20,タッチパネル22およびスピーカ32が接続される。ここで、操作スイッチ20は、上述したスイッチ20a,20b,20c,20d,20e,20Lおよび20Rであり、操作スイッチ20が操作されると、対応する操作信号(操作データ)がI/F回路54を介してCPUコア42に入力される。また、タッチパネル22からの座標データがI/F回路54を介してCPUコア42に入力される。さらに、CPUコア42は、ゲーム音楽(BGM)、効果音またはゲームキャラクタの音声(擬制音)などのゲームに必要な音データをRAM48から読み出し、I/F回路54を介してスピーカ32から出力する。
図3は、この実施例のゲーム装置10のLCD12およびLCD14に表示されるゲーム画面100およびゲーム画面120の例を示す図解図である。図3を参照して、LCD12に表示されるゲーム画面100には、その略中央にプレイヤキャラクタ102が表示され、ゴルフコースの一部が背景として表示される。つまり、プレイヤキャラクタ102の後方に仮想カメラ(図示せず)が設定され、プレイヤキャラクタおよび3次元ゲーム空間であるゴルフコースの一部が撮影され、撮影画像がゲーム画面100として表示される。また、ゲーム画面100では、プレイヤキャラクタ102はゴルフボール(以下、単に「ボール」という。)106を打つ体勢(アドレス)に入った状態を示してある。ゲーム画面100は、後述するゲーム画面120を用いたプレイヤの操作に応じて変化され、主として、プレイヤキャラクタ102がゴルフクラブ(以下、単に「クラブ」という。)104をスイングし、ボール106を打撃し、当該ボール106が移動(飛ぶ、転がる、カップに入る等)するアニメーションを表示したり、ボール106が移動するときに、ボール106に追随して仮想カメラを移動し、当該仮想カメラによってボール106およびゴルフコースを撮影した画像を表示したりする。
なお、ゲーム画面100には、プレイヤが選択したクラブ104の種類、そのクラブ104を用いた場合のプレイヤキャラクタ102の飛距離、ボール106の打撃位置および地面(ライ)の飛距離に対する影響が数値等で表示される。ただし、これらの情報に限定される必要はなく、ホール全体を示す縮小画像、風の方向および天候などを表示するようにしても良い。また、このような内容は、ゲーム画面100に表示する必要はなく、後述するゲーム画面120に表示するようにしても良い。さらには、必要に応じて、選択的にゲーム画面100またはゲーム画面120に表示するようにしても良い。
ゲーム画面120は、プレイヤがプレイヤキャラクタ102にボール106を打撃(ショット)させるための操作をするための画面である。このゲーム画面120には、ボール106とは異なるボール(以下、説明の都合上、「ターゲットボール」と呼ぶことにする。)122が画面上部に表示される。具体的には、ターゲットボール122は、インパクトライン124上であり、図3に示す例では、当該インパクトライン124の中心(中央)に表示される。このターゲットボール122は、スライド操作によって通過または打撃するための目標(所定領域)である。また、ゲーム画面120には、プレイヤキャラクタ102がボール106を打撃する時の力(打撃力)の最大値(100%)を示すフルショットライン126が表示される。また、ゲーム画面120には、スティック24でタッチオンした位置に、クラブヘッドの画像128が表示される。さらにまた、ターゲットボール122の上方には、ゲーム画面100におけるボール106の飛び方すなわち球筋(ストレート、フェードまたはドロー)を示す指示画像130が表示される。
この実施例では、上述したように、プレイヤがゲーム画面120(タッチパネル22)上で、タッチ入力をすることにより、ゲーム画面100に表示されたプレイヤキャラクタ102にボール106を打撃させる。なお、この実施例では、LCD14の画面全体に打撃操作のためのゲーム画面120を表示するようにしたが、ゲーム画面120をLCD14の一部領域に表示するようにしても良い。これ以降では、図面を用いて、ゲーム画面120の表示例およびタッチ入力例について、具体的に説明する。
まず、プレイヤは、プレイヤキャラクタ102にボール106を打撃させる操作(打撃操作)を行う前に、図4に示すようなメニュー画面200をLCD14に表示させて、プレイヤキャラクタ102が使用するクラブ104の種類およびショット(打撃)の種類を変更(設定)することができる。この実施例では、プレイヤキャラクタ102がボール106を打撃する前では、ボール106の現在位置の状態(ライの状態)やその現在位置からピンまでの距離に応じて、適切なクラブ104が自動的に選択されるため、クラブ104をプレイヤの戦略等により変更可能にしてある。また、この実施例では、プレイヤキャラクタ102がボール106を打撃する前では、選択されたクラブ104の種類に拘わらず、ショットの種類(以下、「ショットタイプ」という。)は「ノーマルショット」に予め設定されるため、これもプレイヤの戦略等により変更可能にしてある。
メニュー画面200は、選択中のクラブ104の種類を表示するとともに、ショットタイプ(ノーマルショット(N)、チップショット(C)、ロブショット(L)、ピッチショット(P)およびピッチ&ランショット(R))を選択および表示するための上部表示部202およびクラブ104の種類を選択するためのボタン表示部204を含む。さらに、上部表示部202は、選択中のクラブ104の種類を表示する第1表示部202aおよびショットタイプを選択するためのボタンを表示する第2表示部202bを含む。たとえば、プレイヤは、所望のクラブ104の種類およびショットタイプを、タッチ入力(タッチ操作)により選択することができる。
なお、図4では、ボタンの内部に斜線を施すことにより、クラブ104の種類として、ドライバー(1番ウッド・クラブ(1W))が選択され、ショットタイプとして、ノーマルショット(N)が選択された状態を示してある。実際には、色反転や輝度の違い等により、選択状態が表現される。
また、このメニュー画面200は、プレイヤが所定のアイコンないしボタンをタッチ操作することにより、LCD14に表示される。ただし、セレクトスイッチ20cのようなスイッチ20の操作により、表示させるようにしても良い。
このように、クラブ104の種類およびショットタイプを選択(変更)した後、ショット方向(打ち出し基準方向)が設定される。ここで、打ち出し基準方向とは、クラブ104がボール106に真っ直ぐヒットして、ボール106が真っ直ぐ飛ぶ場合の方向を意味する。また、ここで設定されるショット方向は、水平面における方向であり、3次元仮想空間のXY平面におけるベクトルデータとして設定され、ボール106の現在位置からピン(カップ)に向かう方向に自動的に設定される。ただし、プレイヤは十字スイッチ20aの操作に応じてショット方向を変更することが可能である。具体的には、十字スイッチ20aの左指示部を操作することによって、ショット方向は、ボール106の現在位置を中心として、現在の方向から左方向に回転し、十字スイッチ20aの右指示部を操作することによって、右方向に回転する。
なお、十字スイッチ20aの操作に代えて、LCD14上に表示されるタッチパネル22による操作としても良い。また、鉛直面におけるボール106の方向(以下、分かり易く説明するために、「打ち出し角度」と言う。)は、クラブ104のロフト角データ等に基づいて、別途設定される。
この後、プレイヤは、ゲーム画面120上において打撃操作を行う。たとえば、プレイヤがスティック24を用いて、図3に示すゲーム画面120のインパクトライン124よりも下側の領域(後述するショットエリア(1)またはエリア(3))をタッチオンすると、タッチオンした位置の座標(タッチオン座標)に応じて、プレイヤキャラクタ102の打撃力およびスタンスが決定される。ただし、ターゲットボール122の表示領域内は、ショットエリアから除外しても構わない。決定されたスタンスによって、プレイヤキャラクタ102が打撃するボール106の打ち出し(飛び出し)方向が補正され、サイドスピン値(水平方向の回転(スピン)方向および回転量を示す値)が決定される。ただし、スタンスによって、サイドスピン値のみを決定しても良い。
ここで、決定される打ち出し方向は、ボール106の直進方向(前述の通り、決定された打ち出し基準方向)を基準(0度)とした場合における水平方向(左右方向)の角度(−90度〜90度)である。また、決定されるサイドスピン値は、ボール106の横回転(サイドスピン;左右の回転)の回転方向および回転量を示す値であり、縦回転(トップスピンまたはバックスピン)は図示しない設定画面(設定領域)で別途設定することができる。
また、ゲーム画面120では、水平方向の直線上であれば、スティック24によって、いずれの位置をタッチオン(指示)した場合であっても、同じ打撃力が設定される。すなわち、タッチ座標のY座標が同じであれば同じ打撃力が設定される。ここで、インパクトライン124とフルショットライン126との直線距離(説明の都合上、「第1直線距離」という。)に対応する打撃力を100%とし、その第1直線距離に対するタッチ座標のY座標とインパクトライン124との直線距離(説明の都合上、「第2直線距離」)の比率を算出する。算出した比率を100%に掛ければ、打撃力(ショットパワー値)が算出(決定)される。ただし、タッチ座標がフルショットエリア(図6参照)内であれば、上述のような演算は不要であり、ショットパワー値は100%に決定される。このように、タッチオン時のタッチ座標のY座標に基づいて打撃力が設定される。より具体的には、タッチオン時のY座標とインパクトライン124のY座標(またはターゲットボール122の中心のY座標)の差分に基づいて打撃力が設定される。
この実施例では、ショットパワー値を視認可能にしてある。ただし、簡単のため、ショットパワー値は一の位を切り捨てる(または、四捨五入する)ことにより、0〜100%の間で、10%毎に表示するようにしてある。具体的には、図5(A)に示すように、フルショットライン126上をスティック24でタッチした場合には、ショットパワー値が100%に決定され、そのショットパワー値「100%」が表示されるとともに、ショットパワーライン127が表示される。なお、図5(A)に示す例では、フルショットライン126上にショットパワーライン127が表示される。また、図5(A)(図5(B)も同じ。)では、ショットパワーライン127を分かり易く示すために、斜線を設けてある。しかし、実際には、線の色彩や模様を変えることにより、ショットパワーライン127は、インパクトライン124やフルショットライン126と区別される。また、インパクトライン124とフルショットライン126との間をスティック24でタッチした場合には、上述した算出方法でショットパワー値が算出される。たとえば、図5(B)には、ショットパワー値が30%に決定された場合に、そのショットパワー値「30%」とショットパワーライン127とが表示される様子が示される。
また、ボール106の飛距離Fは、打撃力(ショットパワー値)等を用いて数1に従って算出される。ただし、Kはクラブ(1W〜PT)104に応じて設定された最大飛距離(クラブ飛距離)である。Pは上述したように算出されるショットパワー値(打撃力)であり、0〜100%の値を持つ。Tはスイング時間が規定時間以上となった場合の補正値(スイング時間補正値)であり、1〜100%の値を持ち、マイナス補正される。なお、スイング時間については後述する。Lはボール106の現在位置のライの状態によって決定される補正値(ライ補正値)であり、0〜99%の値で決定され、マイナス補正される。
[数1]
F=K×P×(100−T)×(100−L)×α
なお、αは上述した補正値とは異なる補正値であり、コース(ホール)の風や雨またはその両方による補正値、打点設定(弾道の高さ)すなわちショットタイプによる補正値、スイング速度に基づく打撃力(ショットパワー)の補正値(パワーロス補正値)、打ち出し角度補正(インパクト時)およびスピン補正値(トップスピンまたはバックスピン)などであり、また、重力・空気抵抗・揚力・反発係数・摩擦係数なども含む。ただし、これらのいずれか1つで補正値αを決定してもよく、2つ以上の組み合わせで決定するようにしても良い。
また、この実施例では、図5(A)および図5(B)に示したように、ターゲットボール122からのY方向の距離が離れるに従ってショットパワー値が大きくなるように設定され、さらには飛距離Fが長くなるようにしてある。しかし、ゲームの種類によっては、ターゲットボール122からの距離が離れる(長くなる)に従って、パラメータが小さくされるようにしても良い。この場合には、たとえば、パラメータの小さい方が有利なゲーム展開となる。
なお、この実施例では、タッチY座標が同じであれば同じ打撃力が設定されるようにしたが、ターゲットボール122からの2次元距離が大きくなるに従って打撃力が大きくなるようにしても良い。この場合、同じ打撃力が設定される座標はターゲットボール122を中心とする同心円上(半円)に設定される。
また、上述したように、タッチオン座標(より具体的にはタッチオン時のX座標)に基づいて、プレイヤキャラクタ102のスタンスが決定される。図3に戻って、具体的には、スティック24でタッチオンした位置がゲーム画面120の中央から左側(左寄り)である場合には、クローズドスタンスとされる。また、スティック24でタッチオンした位置がゲーム画面120の中央から右側(右寄り)である場合には、オープンスタンスとされる。さらに、スティック24でタッチオンした位置がゲーム画面120の中央ないしその近傍である場合には、スクェアスタンスが設定される。ただし、スクェアスタンスが設定されるゲーム画面120の中央およびその近傍は、図3において点線で示す範囲である。つまり、この実施例では、スクェアスタンスが設定される範囲は、ターゲットボール122の横方向の幅と同じ或いは略同じに設定される。
後述するように、ターゲットボール122の位置は移動される場合があるため、厳密には、ターゲットボール122の中心を通り、垂直方向に延びる直線(以下、「スタンス基準線140」という。)に基づいてスタンスを設定するようにしてある。したがって、スタンス基準線140から一定距離(この実施例では、ターゲットボール122の半径である。以下、同じ。)以上右側をタッチした場合には、オープンスタンスに設定される。また、スタンス基準線140から一定距離以上左側をタッチした場合には、クローズドスタンスが設定される。さらに、スタンス基準線140の左右一定距離未満である場合には、スクェアスタンスが設定される。これは、ターゲットボール122が移動されても同様であり、ターゲットボール122の移動に従ってスタンス基準線140も移動される。ただし、スタンス基準線140はゲーム画面120には表示されない。
上述のように決定されるスタンスは、ボール106の打ち出し方向に影響を与えるとともに、ボール106のサイドスピン値を決定するために使用される。ボール106の打ち出し方向は、前述の打ち出し基準方向(ベクトル)を、上述のように決定されるスタンスに応じて補正することにより決定される。具体的には、オープンスタンスの場合は打ち出し基準方向を水平方向の左方向に補正する。より具体的には、打ち出し基準方向ベクトルに水平方向の左方向(打ち出し基準方向を正面とする左方向)のベクトルを加える。加えるベクトルの大きさはタッチ座標のX座標によって変化する。クローズドスタンスの場合は打ち出し基準方向を水平方向の右方向に補正する。
また、ボール106のサイドスピン値は、スピンの方向およびスピンの量を示すが、オープンスタンスの場合は、フェードボール(右方向のスピン)を示す値が設定され、クローズドスタンスの場合は、ドローボール(左方向のスピン)を示す値が設定される。このように決定されるサイドスピン値は、打ち出し後のボール106の水平方向の移動方向を変化させるために利用され、典型的には、前回のフレーム(画面更新単位時間(1/60秒))におけるボール106の水平方向の移動方向ベクトルに対して、サイドスピン値が示すスピンの方向のベクトルを加えて、今回のフレームにおける水平方向の移動方向ベクトルが決定される。ただし、スピンの方向のベクトルの大きさは、タッチ座標のX座標によって変化する。また、後述するように、サイドスピン値は、プレイヤのタッチ入力(打撃操作)に応じて補正される。つまり、プレイヤの操作の仕方によって水平方向(移動方向)ベクトルが補正されるのである。
なお、タッチオン時のX座標と、ターゲットボール122の中心のX座標(スタンス基準線140のX座標)との差が大きいほど、打ち出し方向を大きく補正し、また、サイドスピン値(スピンの量)が大きくなるように設定される。また、たとえば、ボール106の移動とともにサイドスピン値(スピンの量)を減衰させても良い。
また、打ち出し方向や、打ち出し後のボール106の移動方向は、風速・風向きによる補正値や重力・空気抵抗・揚力・反発係数・摩擦係数によって補正をしても良い。
このように、プレイヤがスティック24でゲーム画面120(タッチパネル22)上をタッチオンすると、そのタッチオン座標(2次元座標)に基づいて、打撃力およびスタンスが設定されるのである。具体的には、タッチオン座標のY座標に基づいて打撃力が設定され、タッチオン座標のX座標に基づいてスタンスが設定される。また、スタンスによって、打ち出し方向が補正され、サイドスピン値が決定される。ただし、後述するように、タッチオン座標は、スイング操作(スライド操作)のやり直しにより、更新される場合がある。
なお、上述したように、LCD14の解像度とタッチパネル22の検出精度とは同じであり、また、座標係も同じであるため、タッチ座標に基づいて、LCD14上のタッチ位置(操作位置)を容易に特定することができる。
また、打撃力を設定する範囲(ショットエリア)の大きさは、使用するクラブに応じて変化される。図6(A)には、ドライバー(1W)を用いる場合のショットエリア(1)を示すゲーム画面120が表示される。また、図6(B)には、パター(PT)を用いる場合のショットエリア(1)を示すゲーム画面120が表示される。図6(A)および図6(B)に示す例では、ショットエリア(1)は、フルショットエリア(2)とそれ以外の(他の)エリア(3)とによって構成される。また、ショットエリア(1)以外のインパクトエリア(4)が設けられる。上述したように、ショットエリア(1)の大きさは変化されるが、フルショットエリア(2)は固定的に設けられる。つまり、他のエリア(3)およびインパクトエリア(4)の大きさが変化されるのである。この実施例では、使用するクラブ104に応じて、インパクトライン124の位置を上下に変更することにより、インパクトライン124とフルショットライン126との間の距離を変化させた。しかし、フルショットライン126の位置を上下に変更することにより、インパクトライン124とフルショットライン126との間の距離を変化させるようにしても良い。もちろん、両方のラインを上下に移動させても良い。こうして、インパクトライン124および/またはフルショットライン126を移動させたときには、各Y座標に対応する打撃力も変更される。
一般的に、実際のゴルフをプレイする場合には、長いクラブになるにつれてショット(インパクト)の難易度が高く、逆に短いクラブになるにつれてショットの難易度は低くなる。このため、図6(B)に示すように、PTを用いる場合には、ショットエリア(1)を小さくして、フルショットライン126からターゲットボール122までの距離を短くし、スライド操作(スイング操作)すなわち打撃操作を簡単にしているのである。また、ショットエリア(1)の大きさを変化させるのは、ボール106の移動距離(飛距離、転がる距離)の大小を決定するためでもある。ただし、クラブ104の種類に拘わらず、打撃力の大きさは0〜100%で設定される。この0〜100%で表される打撃力が、プレイヤキャラクタ102および当該プレイヤキャラクタ102が使用するクラブ104の種類に応じて設定されるクラブ飛距離Kである。ただし、実際の飛距離Fは、上述したように、数1に従って算出される。
なお、PTの場合のショットエリア(1)の大きさが最小であり、図示は省略するが、1WとPTとの間のクラブ104では、1WからPTに向けてクラブ104の長さが短くなるにつれて、ショットエリア(1)が次第に小さくなるように変化される。ただし、PTの場合のショットエリア(1)の大きさは、他のクラブ104とは別扱いとしても良い。たとえば、PTの場合は、或る程度ショットエリア(1)を大きくしても良い。
また、上述したように、タッチオン座標のX座標によって、スタンスが設定される。タッチオン座標のX座標に応じてスタンスが設定されると、後述するように、設定されたスタンスに応じて、ゲーム画面100に表示されるクラブ104のフェイスの向きが分かるように、ゲーム画面120に表示されるクラブヘッドの画像128の向きが変化される(図7〜図9参照)。したがって、たとえば、図7に示すように、スティック24で、ゲーム画面120(ここでは、フルショットエリア(2))の中央またはその近傍をタッチオンすると、スクウェアスタンスが設定され、ターゲットボール122に対してクラブフェイスが正面を向くようにクラブヘッドの画像128が表示される。また、図8の点線で示すように、スティック24で、ゲーム画面120(ここでは、フルショットエリア(2))の中央から右側をタッチオンすると、オープンスタンスが設定され、ターゲットボール122に対してクラブフェイスが正面を向くようにクラブヘッドの画像128が表示される。さらに、図9に示すように、スティック24で、ゲーム画面120(ここでは、フルショットエリア(2))の中央から左側をタッチオンすると、クローズドスタンスが設定され、ターゲットボール122に対してクラブフェイスが正面を向くようにクラブヘッドの画像128が表示される。
ただし、図7〜図9は、ターゲットボール122はゲーム画面120の中央に表示されている場合のクラブヘッドの画像128の表示例を示してある。
このように、タッチオンにより、プレイヤキャラクタ102の打撃力およびスタンスが設定されると、そのタッチオンの操作に続いて(連続して、すなわち、タッチオフせずに)、プレイヤがスティック24等をスライドさせて、スティック24等でターゲットボール122を打撃するように操作(打撃操作)する。
以下、図7〜図9を用いて打撃操作について説明する。図7に示すゲーム画面120では、プレイヤがスティック24を用いて、フルショットエリア(2)であり、ゲーム画面120の中央をタッチオンした後に、白抜き矢印で示すように、ゲーム画面120上をその下から上に向けて真っ直ぐスライド操作して、スティック24(スライド操作の軌跡)がターゲットボール122上を通過している様子を示してある。この場合には、打撃操作の後、ゲーム画面100では、プレイヤキャラクタ102が打撃したボール106が真っ直ぐ飛んで行く様子のアニメーションが表示される。つまり、いわゆるストレートボールとなる。
ただし、図7では、スライド操作の軌跡がターゲットボール122の中心またはその近傍を通過した場合についてのボール106の球筋を説明してある。なお、後述するように、スライド操作の軌跡がターゲットボール122を通過する位置(インパクト位置ないしインパクト点)に応じて、インパクトがグッドショット、プッシュボールのショット、プルボールのショットまたはミスショットのいずれかに分類され、ボール106の球筋に変化が与えられる。これは、図8および図9に示す場合についても同様である。
また、図8に示すゲーム画面120では、プレイヤがスティック24を用いて、フルショットエリア(2)であり、ゲーム画面120の中央から右寄りをタッチオンした後に、白抜き矢印で示すように、ゲーム画面120上をその下から左斜め上に向けてスライド操作して、スティック24(スライド操作の軌跡)がターゲットボール122上を通過している様子が示される。つまり、アウトサイドイン軌道でスイングさせる操作入力が実行された状態を示す。この場合には、ゲーム画面100では、プレイヤキャラクタ102が打撃したボール106は打ち出し基準方向を基準として左斜め方向に飛び出し、その向きに或る程度真っ直ぐ飛んだ後に右方向に曲がるような球筋となる。つまり、いわゆるフェードボールとなる。
ここで、ボール106の曲がり具合は、タッチオン座標がゲーム画面120に表示されるターゲットボール122の中央(スイング基準線140)からどのくらい離れているかに応じて決定される。つまり、サイドスピン値に応じて決定される。たとえば、図10(A)に示すように、タッチオン座標P1がターゲットボール122の中央からの距離D=d1(<d2)である場合に比べて、図10(B)に示すように、タッチオン座標P2がターゲットボール122の中央からの距離D=d2である場合の方が、同じインパクト点(たとえば、ターゲットボール122の中心)をスライド操作しても、ボール106の曲がり具合は大きくなる(前述のサイドスピン値が大きく設定される)。また、図10(A)および図10(B)に示すように、タッチオン座標に応じて指示画像130の曲がり具合が変化するため、プレイヤはボール106の曲がり具合を直感的に知ることができる。
ただし、図10(A)および図10(B)から分かるように、タッチオン座標がターゲットボール122の中心から横方向に離れるに従って、ターゲットボール122までの距離が長くなるため、打撃操作(スライド操作)の難易度が高くなる。すなわち、フェードボールやドローボールを駆使しようとすると、ゲーム操作の難易度が上がるようになっている。ただし、図10(A)では、スライド操作する距離、すなわちタッチ座標とターゲットボール122の中心(中心座標)との距離Lをl1(<l2)で表し、図10(B)では、距離Lをl2で表してある。
なお、上述したように、スライドする距離が長くなると、打撃操作が困難になるが、打撃操作が熟練すれば、打撃するボール106の球筋を自在に操ることができ、難易度の高いコース或いはコース内の難しい場所であってもミスショットを無くしてゲームプレイできるのである。
図9に戻って、このゲーム画面120では、プレイヤがスティック24を用いて、フルショットエリア(2)であり、ゲーム画面120の中央から左寄りをタッチオンした後に、白抜き矢印で示すように、ゲーム画面120上をその下から右斜め上に向けてスライド操作して、スティック24(スライド操作の軌跡)がターゲットボール122上を通過している様子が示される。つまり、インサイドアウト軌道でスイングさせる操作入力が実行された状態を示す。この場合には、ゲーム画面100では、プレイヤキャラクタ102が打撃したボール106は右斜め方向に飛び出し、その向きに或る程度真っ直ぐ飛んだ後に左方向に曲がるような球筋となる。つまり、いわゆるドローボールとなる。
なお、タッチオン座標に応じてボール106の曲がり具合が変化する点と、スライドの距離が長くなるにつれて打撃操作の難易度が高くなる点は、図10を用いて説明したのと同様であるため、同様の説明は省略することにする。
図11(A)および図11(B)は、ゲーム画面120の他の例を示す図解図である。図11(A)に示すゲーム画面120では、ターゲットボール122は、画面中央から左寄りに表示される。つまり、ターゲットボール122は、通常(中央)よりもX軸マイナス方向に移動して表示されている。一方、図11(B)に示すゲーム画面120では、ターゲットボール122は、画面中央から右寄りに表示されるつまり、ターゲットボール122は、通常よりもX軸プラス方向に移動して表示されている。図11(A)は、右打ちのプレイヤキャラクタ102がつま先下がり(左打ちではつま先上がり)の場所でショットする場合に表示されるゲーム画面120である。一方、図11(B)は、右打ちのプレイヤキャラクタ102がつま先上がり(左打ちではつま先下がり)の場所でショットする場合に表示されるゲーム画面120である。
このように、プレイヤキャラクタ102がショットする場合に、ボール106の現在位置における地面の傾斜状態(ライの状態)または当該プレイヤキャラクタ102の姿勢に応じて、ターゲットボール122の位置を変化させるのは、実際にゴルフをプレイする場合と同様にショットの困難さを表現するためである。つまり、右打ちのプレイヤがつま先下がりでショットする場合には、ドローボールを打つのは困難であり、逆に、つま先上がりでショットする場合には、フェードボールを打つのは困難である。また、つま先下がりでドローボールを打った場合やつま先上がりでフェードボールを打った場合には、ボールは殆ど曲がらない。逆に、つま先下がりではフェードボール(またはスライス)になりやすく、つま先上がりではドローボール(またはフック)になりやすい。このため、そのような場合の打撃操作をリアルに表現するために、ターゲットボール122の位置を左右に移動させるようにしてある。具体的には、図11(A)に示すゲーム画面120では、ターゲットボール122の左側の範囲が狭いため、ドローボールが打ち難い。また、ドローボールを打ったとしても殆ど曲がらない。一方、図11(B)に示すゲーム画面120では、ターゲットボール122の右側の範囲が狭いため、フェードボールが打ち難い。また、フェードボールを打ったとしても殆ど曲がらない。
また、ターゲットボール122の位置は、次のようにして算出される。たとえば、仮想ゲームのマップデータ(地形データ)が高さについてのデータのみを有している場合には、プレイヤキャラクタ102の位置における地形の高さh1とボール106の位置における地形の高さh2とを地形データから取得して、その高低差dを数3に従って求めることができる。そして、数4に従って、ターゲットボール122の表示位置(ターゲットボール座標)のX座標x(dot)が決定される。
なお、プレイヤキャラクタ102の位置は、ボール106の位置を基準として、打ち出し基準方向に直交する方向に所定距離だけ(右打ちの場合は左方向に、左打ちの場合は右方向に)伸ばしたXY位置における地表位置(X,Y,Z)に設定される。すなわち、プレイヤキャラクタ102のXY位置とボール106のXY位置を結ぶ水平面方向は打ち出し基準方向と直交する。なお、右打ちか左打ちかをプレイヤが選択可能として当該選択のデータを記憶し、当該データに基づいて、プレイヤキャラクタ102の画像を変更するとともに、上述のプレイヤキャラクタ102の位置の決め方を変更するようにしても良い。
[数3]
d(m)=h2−h1
[数4]
d<−0.1(m)のとき、x=96+(d+0.1)×k×96
d>0.1(m)のとき、x=96+(d−0.1)×k×96
ただし、−0.1≦d≦0.1の場合には、すなわち高低差d=±10cm以下では、ターゲットボール122の表示位置は変化させない。また、数4において、「96」は、LCD14の横方向のdot数(192)の半分である。ここでは、高低差dに応じて、ターゲットボール122の表示位置をLCD14の画面中央から左または右に移動させるようにしてあるため、中央を表わす数値「96」が使用される。さらに、数4において、「k」はターゲットボール122の表示位置の移動幅を割り出すための調整値であり、たとえば、「3」に設定される。
なお、数3および数4に従って算出した結果、ターゲットボール122がゲーム画面120からはみ出してしまう場合には、ゲーム画面120内に収まるように、ターゲットボール座標は補正される。
このように、算出した高低差dに応じてターゲットボール122の位置を移動させるようにしてあるが、マップデータ(地形データ)が傾斜角度を含む場合には、数3に示すような計算は不要であり、地形データを参照することにより、プレイヤキャラクタ102の現在位置とボール106の現在位置との関係から、ボール106の現在位置における左右の傾斜および傾斜量を取得することができる。そして、左右の傾斜および傾斜量に応じて、ターゲットボール122の位置を移動させることができる。
図12(A)および図12(B)は、打撃操作(スライド操作)を説明するための図解図である。図12(A)および図12(B)では、プレイヤによるスライド操作の軌跡142を実線で示してある。ただし、図12(B)では、後述するように、プレイヤによるスライド操作に基づいて延長される仮想スライド操作の軌跡142を点線で示してある。また、図12(A)および図12(B)では、プレイヤによるスライド操作が実行されたとき、ゲーム装置10で検出される座標データに対応する点(位置座標)を示してある。ただし、スライド操作の終了時点を0フレームとしてある。
図12(A)は、フルショットエリア(2)にタッチオンし、それに継続(連続)して、インパクトライン124を超えるように、ゲーム画面120の左斜め上方にスライド操作した場合に、1フレーム毎に検出される座標データに対応する点を書いた図解図である。この図12(A)に示す例では、スライド操作の終了時点(タッチオフ)における座標は位置Aで示す点であり、スライド操作の開始時点(タッチオン)における座標は位置Fで示す点である。位置Aから位置Fまでの間に存在する位置B、位置C、位置Dおよび位置Eは、スライド操作の開始から終了までの間に1フレーム毎に検出される座標に対応する。このように、スライド操作を終了したときの座標すなわちタッチオフしたときの座標(タッチオフ座標)がインパクトライン124を超える場合には、そのスライド操作の軌跡142で、後述するインパクトの判定を行う。
また、かかる場合には、スイング速度は、インパクトライン124を超えた時点の座標(ここでは、位置A)とその直前(1フレーム手前)の座標(ここでは、位置B)との距離に基づいて求められる。たとえば、タッチオンからタッチオフまでにフレーム毎に入力される座標データをすべて記憶しておけば、インパクトライン124を超えた時点に検出された座標データとその直前に検出された座標データとを取得して、2つの座標データが示す座標点間の距離を算出することができる。そして、算出した距離を1フレーム(1/60秒)で割る(除算する)ことにより、スイング速度が求められる。このスイング速度は、上述したように、飛距離Fの算出に用いることができる。具体的には、スイング速度が小さいほど、または、スイング速度が一定以下の場合に、打撃力が低下するように前述のαを設定しても良い。また、スイング速度が一定以下の場合には、ミスショットとしても良いし、打撃操作を無効としても良い。
なお、スイング速度は、各座標間の距離の平均値としても良いし、インパクトライン124を越えた時点の座標とタッチオンの座標との間の距離をかかった時間で割った値としても良い。
ただし、図13(A)〜図13(D)に示すように、スライド操作によりターゲットボール122を打撃する、つまりスライド操作の軌跡142がターゲットボール122に接触する態様は様々である。図13(A)は図12(A)で示した場合と同様に、スライド操作(軌跡142)は、ターゲットボール122上を通過した後に終了(タッチオフ)される。図13(B)では、スライド操作がターゲットボール122内で終了される。図13(C)では、図13(A)および図13(B)とは異なり、スライド操作が、インパクトライン124を通過した後に、ターゲットボール122上を通過して終了する。図13(D)では、スライド操作がターゲットボール122の表面(輪郭線)で終了する。
このような態様のすべてについての接触を判定する必要があるため、スライド操作の軌跡142がターゲットボール122に接触するかどうかを判断する。具体的には、まず、現在のタッチ座標がターゲットボール122の表示領域に含まれるか否かが毎フレーム判断される。ここで、現在のタッチ座標がターゲットボール122の表示領域に含まれる場合には、スライド操作の軌跡142がターゲットボール122に接触していると判断する。しかし、現在のタッチ座標がターゲットボール122の表示領域に含まれていない場合には、現在のタッチ座標がインパクトライン124を超えたかどうかを判断する。現在のタッチ座標がインパクトライン124を超えていない場合には、スライド操作の継続中、終了または中断として、各々に応じた処理が実行される。しかし、現在のタッチ座標がインパクトライン124を超えた場合には、次のようにして、スライド操作の軌跡142がターゲットボール122に接触するかどうかを判断する。すなわち、インパクトライン124を越えたまたはターゲットボール122の表示領域に含まれた時点のタッチ座標(説明の便宜上、「第1座標」という。以下、同じ。)とその第1座標の直前(1フレーム前)に検出された座標(説明の便宜上、「第2座標」という。)とを結ぶ線分がターゲットボール122の表示領域を通るか否かを判断するようにしてある。これによって、スライド操作の軌跡142がターゲットボール122上を通過したにも拘わらず、ターゲットボール122の表示領域内のタッチ座標が検出されない場合にも対応できる。ただし、タッチ座標のサンプリング周期が十分に短い等の場合には、単に、現在のタッチ座標がターゲットボール122の表示領域に含まれ、または、インパクトライン124を越えるか否かを判定するのみでも構わない。
なお、図12(B)に示すように、スライド操作軌跡を延長して仮想スライド操作軌跡を求める場合には、後述する仮想タッチ座標がターゲットボール122の表示領域に含まれるか、または、インパクトライン124を越えたかを判定し、インパクトライン124を越えた仮想タッチ座標とその直前の仮想タッチ座標とを結ぶ線分がターゲットボール122の表示領域を通るか否かが判断される。
また、この実施例では、第1座標と第2座標とを結ぶ線分がターゲットボール122の表示領域を通るかどうかを判断するようにしてあるが、図13(C)に示すように、スライド操作(軌跡142)がインパクトライン124を超えた後に、ターゲットボール122の表示領域を通る場合には、その判断を適切に行うことができない。したがって、厳密には、現在のタッチ座標がターゲットボール122の表示領域に含まれる前に、インパクトライン124を超えた場合には、第1座標と第2座標とを結ぶ線分を延長して、延長した線分すなわち直線がターゲットボール122の表示領域を通るか否かを判定する。その直線がターゲットボール122の表示領域を通る場合には、さらにタッチ座標の検出を続ける。そして、ターゲットボール122の表示領域にタッチ座標が含まれたとき、当該タッチ座標を第1座標とし、その1フレーム手前で検出されたタッチ座標を第2座標とするようにしてある。ただし、延長した線分(直線)がターゲットボール122の表示領域を通らない場合には、タッチ座標の検出を終了して、軌跡142がターゲットボール122に接触していないと判断される。たとえば、後述する図13(F)に示す場合と同様に、空振りと判定される。
また、図13(E)に示すように、スライド操作がターゲットボール122に接触することなく、かつ、インパクトライン124を超えずに終了した場合には、スイングを途中で止めたと判定して、スライド操作を始めからやり直す。また、図13(F)に示すように、スライド操作がターゲットボール122に接触しないが、インパクトライン124を超えて終了した場合には、空振りと判定して、後述する空振り処理を実行する。
また、図示は省略するが、スライド操作をターゲットボール122が表示される方向とは逆向きに行った場合にも、スライド操作を始めからやり直すことができる。スライド操作をターゲットボール122が表示される方向とは逆向きに行ったか否かは、たとえば、今回検出されたタッチ座標が、前回検出されたタッチ座標に比べて、ターゲットボール122の位置から遠いかどうかで判定することができる。ただし、今回検出されたタッチ座標のY座標が、前回検出されたタッチ座標のY座標に比べて大きいことを判定しても良い。
スライド操作をターゲットボール122が表示される方向とは逆向きに行った場合には、逆方向へのスライド操作を止めた時点の座標がタッチオンの座標すなわち打撃操作(スライド操作)の開始点とみなされて、当該座標に応じて、打撃力やスタンスが決定される。たとえば、開始点とみなされるのは、今回検出されたタッチ座標が、前回検出されたタッチ座標に比べて、ターゲットボール122の位置から近くなった場合の当該今回検出されたタッチ座標、または、今回検出されたタッチ座標のY座標が、前回検出されたタッチ座標のY座標に比べて小さくなった場合の当該今回検出されたタッチ座標である。
このようにするのは、実際のゴルフにおいても、スイングを途中で止めて、スイングを始めからやり直すことがあるためである。ただし、スライド操作が停止しているまたはスライド速度が遅い場合にも、スイングを初めからやり直すことができる。スライド操作が停止しているまたはスライド速度が遅いと判断するのは、たとえば、今回検出されたタッチ座標と前回検出されたタッチ座標が一致する場合、または、今回検出されたタッチ座標と前回検出されたタッチ座標との間の距離が閾値より小さい場合である。
スイング(スライド操作)を途中で止めて、初めからやり直す場合には、今回検出されたタッチ座標と前回検出されたタッチ座標が一致しなくなった場合の当該今回検出されたタッチ座標、または、今回検出されたタッチ座標と前回検出されたタッチ座標との間の距離が閾値より大きくなった場合の当該今回検出されたタッチ座標がタッチオン時の座標すなわち打撃操作の開始点とみなされて、打撃力やスタンスが決定される。
なお、図13(A)〜図13(F)に示すような接触の判定は、後述するスライド操作の軌跡142を延長する場合も同じである。ただし、かかる場合には、第1座標はタッチオフの座標ではなく、延長した毎フレームの仮想タッチ座標である。第2座標は、第1座標の直前(1フレーム前)の位置として予測された座標である。
また、図13(A)〜図13(F)では、簡単のため、ゲーム画面120の一部を示してある。
図12(B)に戻って、インパクトライン124を越える前に、スライド操作を途中で止めて、スライド操作の軌跡142を延長する場合について説明する。なお、図12(B)では、スライド操作の軌跡142の一部を点線で示すが、この点線で示す部分が延長された仮想スライド操作の軌跡142である。図12(B)は、フルショットエリア(2)にタッチオンし、それに継続して、ゲーム画面120の左斜め上方にスライド操作し、インパクトライン124の手前でスライド操作を終了した場合に、1フレーム毎に検出される座標データに対応する点およびスライド操作を終了した後に延長される1フレーム毎の座標データ(仮想タッチ座標データ)に対応する点を書いた図解図である。この場合には、図12(A)に示した場合とは異なり、スライド操作がインパクトライン124を超えていないため、スライド操作を終了した後の軌跡142を、計算により求めるようにしてある。
具体的には、タッチオンの位置からタッチオフの位置までの距離(スライド距離)を算出するとともに、タッチオンからタッチオフまでの時間(スライド時間)を取得する。このスライド時間は、後述する、スライド操作時間基準タイマ770によってカウントされる(図21参照)。ただし、タッチオンの位置は、スライド操作の開始位置であり、スライド(スイング)操作をやり直す場合には、更新される。そして、スライド距離とスライド時間とにより、スライド操作の軌跡142を延長するための初速度を算出する(スライド距離/スライド時間)。また、スライド操作の軌跡142を延長する方向を、タッチオフ座標を終点(ここでは、移動位置E)とし、その直前のフレームで検出されたタッチ座標(ここでは、移動位置F)を始点とするベクトルの方向で決定する。そして、算出した初速度をスカラとするベクトル(速度ベクトル)が所定の倍率(0.94倍)で次第に減速するように、タッチオフ後の各フレームにおける仮想タッチ座標が算出される。
また、単純にタッチオフ後の各フレームにおけるスライド距離を所定の倍率で短くするように、各フレームの座標を延長(算出)するようにしても良い。かかる場合には、タッチオフ座標とその直前のフレームで検出されたタッチ座標との2点(ここでは、位置Eの点と位置Fの点)を通る直線上であり、スライド操作の方向に当該2点で区切られる線分の長さに、所定の倍率(0.94倍)を掛けて得られた長さを足した位置(ここでは、位置D)を、タッチオフ座標を検出したフレームの次のフレームについての座標に決定する。そして、その2点で区切られる線分の長さが所定の倍率で、1フレーム毎に短くされるように、タッチオフ後の各フレームの座標を予測する。したがって、図12(B)に示すように、位置Dから位置Cおよび位置Bを経て位置Aに向かうに従って、次第に仮想タッチ座標の間隔が狭くなっている。つまり、線分DCの長さは線分EDの長さの0.94倍であり、線分CBの長さは線分DCの長さの0.94倍であり、線分BAの長さは線分CBの長さの0.94倍である。
図示は省略するが、計算により延長した仮想タッチ座標がインパクトライン124を超える前(またはターゲットボール122に接触する前)に、1フレーム期間におけるスライド(座標点間)の距離が一定値未満となってしまった場合には、スライド操作の軌跡142の延長を終了し、つまり、スライド操作を途中で止めたと判断し、スライド操作(スイング)をやり直す。
ただし、スライド操作があった場合には、必ずスイングをさせるようにしても良い。かかる場合には、たとえば、タッチオフ座標とその1フレーム手前の座標との2点を結ぶ線分の長さを減衰させずに、または、増加させて、タッチオフ後のフレーム毎の座標を延長するようにすれば良い。逆に、スライド操作があった場合であっても、スライド操作がインパクトライン124を超えない場合には、スイングさせないようにすることもできる。かかる場合には、スライド操作の軌跡142を延長せずに、スライド操作をやり直すことになる。
なお、インパクトの判定処理は後述するため、ここでは省略する。また、スイング速度の算出方法は、図12(A)を用いて説明した場合と同様であるため、重複した説明は省略する。
また、詳細な説明は省略するが、スライド操作(打撃操作)か否かを正確に判別するために、タッチ座標を検出毎に、当該タッチ座標とその1フレーム手前で検出されたタッチ座標との差分(距離)を算出し、その差分が一定値以下である場合には、スライド操作ではないと判断するようにしてある。言い換えると、スライドの速度が一定値以下である場合には、スライド操作(打撃操作)ではないと判断してある。これにより、手振れ等による誤操作を防止することができ、また、スライド操作(スライド操作の軌跡142の延長する場合を含む。)を、途中で止めてスイングをやり直すことができる。
図14は、インパクトを判定するための判定領域1220を示す図解図である。この判定領域1220は、ターゲットボール122に対応して設けられ、この実施例では、ターゲットボール122の直径と同じ或いは略同じ長さに設定される。判定領域1220は、その中央にグッドショットエリア(I)を含む。グッドショットエリア(I)の左右には、プッシュショットエリア(II)(または(III))およびプルショットエリア(III)(または(II))が設けられる。つまり、右打ちのプレイヤキャラクタ102では、グッドショットエリア(I)の左側の領域がプッシュショットエリア(II)となり、その右側の領域がプルショットエリア(III)となる。一方、左打ちのプレイヤキャラクタ102では、グッドショットエリア(I)の左側の領域がプルショットエリア(II)となり、その右側の領域がプッシュショットエリア(III)となる。以下、簡単のため、プレイヤキャラクタ102が右打ちである場合について説明することにする。さらに、プッシュショットエリア(II)およびプルショットエリア(III)の外側には、ミスショットエリア(IV)が設けられる。
インパクトの判定は、上述したように、スライド操作の軌跡142がインパクトライン124を超えた場合、または、スライド操作の軌跡142がインパクトライン124を超えないで、当該軌跡142がターゲットボール122に接触した場合に行われる。言い換えると、スライド操作の軌跡142がショットエリア(1)からインパクトエリア(4)またはターゲットボール122の表示領域に入ったときに、インパクトが判定される。具体的には、第1座標knと第2座標kmとを通る直線(以下、「スイング基準線」という。)q1が、上述したような判定領域1220のうちのどの領域を通過するかで、インパクトを判定する。図15(A)に示す判定方法では、第1座標knと第2座標kmとを通るスイング基準線q1に対して直交し、かつターゲットボール122の中心を通る直線q2上にインパクトの判定領域1220が来るように、判定領域1220を回転させ、このとき、スイング基準線q1が通る領域によってインパクトが判定される。ただし、スイング基準線q1とインパクトの判定領域1220とが交わる点(上述の「インパクト点」)が含まれる領域によってインパクトを判定するようにしてある。
なお、スイング基準線q1によってインパクトを判定するのは、ターゲットボール122に接触する位置やその内部でスライド操作の軌跡142が終了する場合などを考慮するためである。
ただし、インパクトの判定方法は、図15(A)に示す方法に限定される必要はなく、他の方法で判定するようにしても良い。たとえば、ターゲットボール122の中心座標とインパクト点(スイング基準線q1と直線q2が交わる点)との距離に応じて判定しても良いし、また、図15(B)に示す例では、インパクトの判定領域1220をインパクトライン124(線分q2)上に固定的に設定しておき、スイング基準線q1上であり、第1座標knと第2座標kmとの中点からインパクトライン124に垂下した線分(または直線)q3が通るエリアによってインパクトが判定される。かかる場合には、直線q3とインパクトの判定領域1220(インパクトライン124)との交点がインパクト点に決定される。
たとえば、グッドショットエリア(I)と判定された場合には、目標(着弾予想点)に対してボール106が真っ直ぐ飛んで行く(前述の打ち出し方向やサイドスピン値が補正されない)。つまり、ストレートボールは、そのまま真っ直ぐ飛んで行く。また、ドローボールやフェードボールでは、予めボール106にスピンがかけられているが、目標に対してずれが生じない。つまり、フックやスライスの曲がりが発生しない。ただし、ここでは、後述するように、スライド操作の軌跡142に基づくサイドスピン値の補正は考慮していない。
また、プッシュボールエリア(II)と判定された場合には、目標に対してボール106が右方向に打ち出される。具体的には、前述の打ち出し方向が水平方向の右方向に補正され、および/または、サイドスピン値はボール106が右方向に曲がるような値に補正される。具体的には、ボール106の軌道の全体に対して右方向の移動ベクトルが加算される。この場合、スライド操作の軌跡142が通過する位置が判定領域1220の中央(ターゲットボール122の中心)から左方にずれるに従って、右方向への打ち出し角度が大きくされる。つまり、移動ベクトルの大きさが大きくなる。詳細な説明は省略するが、この移動ベクトルの算出(決定)方法は様々であり、スライド操作の軌跡142とターゲットボール122の中心との距離に応じて線形的に(段階的に)大きくなるように算出されたり、予め距離に応じた値を決めておいたりしてもよい。
一方、スライド操作の軌道がプルボールエリア(III)を通過する場合には、目標に対してボール106が左方向に打ち出される。具体的には、前述の打ち出し方向が水平方向の左方向に補正され、および/または、サイドスピン値はボール106が左方向に曲がるような値に補正される。具体的には、ボール106の軌道の全体に対して左方向の移動ベクトルが加算される。また、この場合、スライド操作の軌跡142が通過する位置が判定領域1220の中央(ターゲットボール122の中心)から右方にずれるに従って、左方向への打ち出し角度が大きくされる。なお、移動ベクトルの算出(決定)方法は、プッシュボールの場合と同様である。
さらに、ミスショットエリア(IV)と判定された場合には、打撃力(ショットパワー値)、ライの状態、クラブの種類およびバックスピンの設定(スピン設定)に応じて、テンプラ(超高弾道ショット:ミスショットでボール106が高く上がりすぎてしまうこと。)、シャンク(ボール106がクラブフェイスのネック寄りに当たること。このとき、ボール106は急激に右に飛ぶ。)、ダフ(または、チョロ:ミスショットでわずかしかボール106が転がらないこと。)またはトップ(ボール106がクラブフェイスの下の方に当り、ボール106がドライブして飛距離が出ないこと。)となる。
このように、プレイヤはスライド操作により、プレイヤキャラクタ102にボール106を打撃させるようにし、スライド操作の軌跡142に基づいて、ターゲットボール122に対応して設けられる判定領域1220を用いてインパクトを判定するため、ゲーム難易度(ゲームのレベルや使用するボール106の難易度)を変化させる場合には、ターゲットボール122の大きさを変化させるようにすれば良い。また、ターゲットボール122の大きさにあわせて、判定領域1220の大きさも調整される。なお、ターゲットボール122の画像を大きさ毎に記憶しておいても良いし、計算処理により画像の大きさを変更しても良い。また、判定領域1220のデータ(エリアデータ)も同様である。
たとえば、図16(A)に示すように、ターゲットボール122の大きさが大きい場合には、ターゲットボール122を通過させること、さらには、中央領域を通過するようにスライド操作することが比較的簡単である。つまり、ゲーム難易度が低い。また、図16(B)に示すように、ターゲットボール122の大きさが中くらいである場合には、ゲーム難易度は中くらいである。さらに、図16(C)に示すように、ターゲットボール122の大きさが小さい場合には、ターゲットボール122上をスライド操作することが比較的困難であり、さらに、ターゲットボール122の中央領域を通過するようにスライド操作するには熟練を要する。つまり、ゲーム難易度が高い。たとえば、使用するクラブ104の種類に応じてターゲットボール122の大きさすなわちインパクトの判定領域1220の大きさを変化させるようにすることができる。また、ゲームの開始に先立って、「練習(ゲーム難易度:低)」、「アマチュア(ゲーム難易度:中)」、「プロフェッショナル(ゲーム難易度:高)」のように、ゲーム難易度を選択可能にしておき、選択したゲーム難易度に応じてターゲットボール122の大きさを変化させることもできる。さらに、ゲーム中にゲームの進行状況に応じてゲーム難易度を決定(設定)し、設定したゲーム難易度に応じてターゲットボール122の大きさを変化させることもできる。たとえば、ボール106が深いラフに置かれた状況においては、アイアンクラブを選択した場合よりも、ウッドクラブを選択した場合の方がゲーム難易度が高く設定される。
なお、図16(A)〜図16(C)では、ターゲットボール122の大きさを大、中、小で表し、ゲーム難易度を高、中、低で表したが、これらは、図示した3つの場合における相対的なターゲットボール122の大きさやゲーム難易度である。また、ゲーム難易度を3段階で設定可能にするため、ターゲットボール122の大きさを3段階で変化させたが、ゲーム難易度を変化させるためには、ターゲットボール122の大きさを少なくとも2段階以上で変化させるようにすれば良い。
また、ターゲットボール122の大きさを変更しないでも、インパクトの判定領域1220内の各領域の大きさの割合を変化させることにより、ゲーム難易度を変化させることもできる。たとえば、図17(A)に示すように、グッドショットエリア(I)を大きくした場合には、インパクトし易いが、ボール106の飛距離が出ないように設定することができる。また、図17(B)に示すように、プッシュショットエリア(II)およびプルショットエリア(III)を大きくした場合には、ボール106が曲がり易くなるように設定することができる。さらに、図17(C)に示すように、ミスショットエリア(IV)を大きくした場合には、インパクトし難いが、ボール106の飛距離が出るように設定することができる。
なお、図17(A)〜図17(C)は、単なる例示であり、これらに限定されるべきでない。たとえば、ゲーム難易度をさらに低くするためには、ミスショットエリア(IV)を無くし、グッドショットエリア(I)を図17(A)に示した場合よりもさらに大きくすることも考えられる。
このように、ターゲットボール122の大きさや判定領域1220内に設けられる各エリアの大きさの割合を変化させることにより、ゲーム難易度を変化させることができる。これは、プレイヤによって設定することもでき、ゲームの進行やプレイヤないしプレイヤキャラクタ102のレベルに応じて自動で設定することもできる。
また、プレイヤのスライド操作の軌跡142に基づいて、ボール106のサイドスピン値が補正される。図18(A)には、或る場面において、ゲーム画面120上で、プレイヤがスライド操作した場合の軌跡142を示す図解図である。以下、スライド操作の軌跡142に基づくサイドスピン値の補正値の算出方法およびその補正値を用いたボール106の軌道の補正方法について説明する。
まず、サイドスピン値の補正値を算出する場合には、図18(A)に示すように、タッチオンの位置とターゲットボール122の表示位置(中心位置;この座標はゲームプログラムに記憶されている)122aとを結ぶ直線が基準線(スライド基準線)144として決定される。ただし、タッチオンの位置は、上述したように、スライド操作の開始位置である。また、この実施例では、タッチオンの位置と表示位置122aとを結ぶ直線をスライド基準線144として決定するようにしてあるが、これに限定される必要はない。たとえば、タッチオンの位置から所定方向(X軸に平行な方向やY軸に平行な方向など)に延びる直線、または、タッチオンの位置とタッチオフの位置とを結ぶ直線、或いは、スライド操作の軌跡142の平均方向を示す直線をスライド基準線144として決定するようにしてもよい。なお、詳細な説明は省略するが、所定方向は、予め決定されてもよく、ゲームの進行に応じて適宜変更されてもよい。たとえば、基準線はY軸方向に予め決定することができ、ライの状態やスタンスに応じて基準線の方向を変更することもえきる。また、同様に、詳細な説明は省略するが、平均方向を示す直線は、たとえば、スライド操作の軌跡142上の複数の点に基づいて算出される回帰直線である。
次に、スライド操作の軌跡142とスライド基準線144との差分が検出される。具体的には、スライド操作の軌跡142からいくつかの点spn(nは整数)をサンプリングし、そのサンプリングした点spnとスライド基準線144との差分が検出される。この実施例では、スライド基準線144を所定間隔(所定距離)で分割した場合に、当該所定距離毎にスライド基準線144と直交する線がスライド操作の軌跡142と交差する点をサンプルとして取得する。つまり、図18(B)に示すように、スライド基準線144の始点(タッチオンの位置)と終点(ターゲットボール122の表示位置122a)との間を、所定距離毎に分割した点xn(ここでは、x1,x2,x3,x4,x5)の各々を通り、スライド基準線144に直交する線と、スライド操作の軌跡142との交点をサンプリングする。次に、サンプリングされた点spnとスライド基準線144との距離(直線距離)すなわち差分dxnを、各々のサンプル(点spn)について検出する。図18(B)に示す例では、サンプルの点sp1では差分dx1が検出され、点sp2では差分dx2が検出され、点sp3では差分dx3が検出され、点sp4では差分dx4(=0)が検出され、点sp5では差分dx5が検出され、終点sp6では差分dx6が検出される。これらの差分の各々を用いて、順次サイドスピン値が補正される。つまり、ボール106の軌道が補正される。
図19(A)は、3次元仮想空間をボール106が移動(飛行)する際のZ軸方向(垂直方向)の軌道を示す図解図である。詳細な説明は省略するが、このようなZ軸方向の軌道は、使用するクラグ104や打球位置によって予め決定される。なお、実際には、上述したように、ボール106の現在位置からピンに向かう方向(プレイヤによって変更された場合には変更後の方向)がボール106の移動方向(ここでは、Y軸方向))である。以下、同様である。
また、図19(B)は、3次元仮想空間をボール106が移動する際のX軸方向(水平方向)の軌道を示す図解図である。ここでは、フェードボールを打った場合の軌道を示す。ただし、図19(B)に示す水平方向の軌道は、サイドスピン値を補正していない場合の軌道である。サイドスピン値の補正値は、スライド基準線144に対してスライド操作の軌跡142が左側にずれた場合には左回転のスピンをかけるように決定され、逆に、スライド基準線144に対してスライド操作の軌跡142が右側にずれた場合には右回転のスピンをかけるように決定される。
ただし、上述したように、サイドスピン値は、ボール106が移動(飛行)する際の水平方向の移動方向ベクトルの変化ベクトルの向きおよび大きさを示す(サイドスピン値の大きさが当該変化ベクトルの大きさに関連し、また、当該変化ベクトルは直前に移動方向ベクトルに直交する方向であってサイドスピン値の正負に応じて方向が決定される)。したがって、上述のようにして求められた差分を用いて、サイドスピン値の補正値として決定される。たとえば、補正値は、数5に従って算出される。
[数5]
補正値=±差分dxn×k(nは1以上の整数)
ただし、kは比例係数である。また、補正値の符号は、補正する方向が右方向である場合にプラスとなり、補正する方向が左方向である場合にマイナスとなる。
なお、この補正値の算出方法は単なる例示であり、これに限定される必要はない。たとえば、差分dxnが大きくなるについてスピンのかかり具合をよりきつくしたい場合には、差分dxnを二乗するようにしてもよい。
図19(C)は、水平方向における軌道の補正量を示す。ただし、ショット後のボールがYnの位置に到達する毎に、サイドスピン補正値を順次用いて移動方向ベクトルを補正するようにしてある。各補正量(移動ベクトルの大きさ)は、上述した変化量であり、その方向はスライド操作の軌跡142がスライド基準線144からずれる方向と同じである。
たとえば、サンプル数に応じた間隔で、ボール106のY軸方向の飛行距離が等間隔に分割される。図18(B)に示した例では、サンプル数は「5」であるため、ボール106の飛行距離が6等分される。つまり、スライド基準線144を等間隔に分割した点x1,x2,x3,x4,x5は、図18(A)〜図18(C)に示す、ボール106のY軸方向の位置Y1,Y2,Y3,Y4,Y5に対応する。位置Y1,Y2,Y3,Y4,Y5の各々で、すなわち、ショット後のボールのY座標が位置Y1、Y2、Y3・・・に到達する毎に、算出された補正値を順次利用して水平方向の移動方向ベクトルが補正される。この補正は単なるベクトルの和(差)であるため、詳細な説明は省略する。
なお、ショット後の所定時間毎にサイドスピン値の補正値を順次利用してもよいし、ショット後の移動距離が所定距離になる毎にサイドスピン値の補正値を順次利用してもよい。
図20は、図2に示したRAM48のメモリマップの一例を示す図解図である。この図20を参照して、RAM48は、プログラム記憶領域70およびデータ記憶領域72を含む。プログラム記憶領域70には、ゲームプログラム(打撃処理プログラムを含む。)が記憶され、このゲームプログラムは、ゲームメイン処理プログラム70a、画像生成プログラム70b、画像表示プログラム70c、各種設定プログラム70d、タッチ座標検出プログラム70e、スライド操作開始プログラム70f、スライド操作プログラム70g、スライド操作の軌跡142延長プログラム70h、スライド操作判定プログラム70i、スライド操作中断プログラム70j、インパクト判定プログラム70k、サイドスピン補正値算出プログラム70m、ショット前プログラム70nおよび軌道補正プログラム70pなどによって構成される。
ゲームメイン処理プログラム70aは、仮想ゲーム(この実施例では、ゴルフゲーム)のメインルーチンを処理するためのプログラムである。画像生成プログラム70bは、後述する画像データ72aを用いて、ゲーム画面100およびゲーム画面120のそれぞれに対応するゲーム画像を生成するためのプログラムである。画像表示プログラム70cは、画像生成プログラム70bに従って生成されたゲーム画像をLCD12やLCD14に表示するためのプログラムである。また、ゲームキャラクタをモーション(アニメーション)表示したり、必要に応じて、画面効果(演出)を表示(表現)したりする。
各種設定プログラム70dは、プレイヤキャラクタ102が使用するクラブ104を決定(変更)したり、ショット方向を決定(変更)したり、ボール106の縦スピン(トップスピンまたはバックスピン)を設定(変更)したり、ショットタイプを決定(変更)したりするためのプログラムである。タッチ座標検出プログラム70eは、タッチパネル22からの座標データを一定時間(1フレーム)毎に検出し、データ記憶領域72に記憶(バッファリング)するためのプログラムである。
スライド操作開始プログラム70fは、スライド操作の開始に先立って、プレイヤによるタッチ入力を検出し、タッチオン時の位置座標を記憶したり、スライド操作(スイング)についての時間をカウントするタイマ(後述するスライド操作時間基準タイマ762、スライド操作停止時間基準タイマ764)をスタートさせたりするためのプログラムである。
スライド操作プログラム70gは、ショットパワー値Pを決定したり、ショットパワー値Pを表示したり、クラブ104の種類に応じてインパクトライン124を表示したり、クラブヘッドの画像128を表示したり、プレイヤキャラクタ102のスタンスを決定したり、スライド操作に対応する軌跡142を表示したりするためのプログラムである。スライド操作の軌跡142延長プログラム70hは、スライド操作がインパクトライン124を超えず、しかもターゲットボール122に接触しないで終了(タッチオフ)されたとき、スライド操作の軌跡142を延長するためのプログラムである。
スライド操作判定プログラム70iは、スライド操作の継続中、中断またはやり直しを判定するためのプログラムである。スライド操作中断判定プログラム70jは、スライド操作判定プログラム70iによってスライド操作を継続すると判定された後に、ターゲットボール122とは逆向きにスライド操作した場合やスライド操作を停止した時間が一定時間以上である場合やタッチ座標の変化量が一定距離以下である場合等に、スライド操作を中断するためのプログラムである。
インパクト判定プログラム70kは、プレイヤのすライド操作の軌跡142に応じてインパクトを判定するためのプログラムである。具体的には、上述したように、プレイヤのスライド操作の軌跡142が判定領域1220のいずれの領域を通過するかに応じて、グッドショット、プッシュショット、プルショットまたはミスショットを判定する。ミスショットの場合には、さらに、シャンク、チョロまたはテンプラを判定する。サイドスピン補正値算出プログラム70mは、スライド操作の軌跡142に基づくサイドスピン値の補正値を算出するためのプログラムである。具体的には、上述したように、スライド操作の軌跡142上のいくつかの点spnについて、この点spnとスライド基準線144との差分dxnを検出し、検出した差分dxnに基づいてサイドスピン値の補正値を算出する。
ショット前プログラム70nは、インパクト判定プログラム70kによって判定されたインパクト、ライの状態、選択中のクラブ104の種類に応じてボール106の移動に関するパラメータ(打ち出し方向補正値、打ち出し角度補正値、スピン補正値、パワーロス補正値)を決定するためのプログラムである。これにより、ナイスショット、グッドショット、ミスショット(フック、スライス、テンプラ、シャンク、チョロ)および空振りが決定される。
軌道補正プログラム70pは、上述のサイドスピン補正値算出プログラム70mに従って算出されたサイドスピン値の補正値に基づいて、ボール106の軌道(移動方向)を補正するためのプログラムである。
なお、図示は省略するが、プログラム記憶領域70には、音再生プログラムやバックアッププログラムなども記憶される。音再生プログラムは、ゲーム音楽(BGM)、音(効果音)、音声(擬声音)のようなゲームに必要な音を再生(出力)するためのプログラムである。バックアッププログラムは、所定のイベントやプレイヤの指示に従って、ゲームデータ(途中データ,結果データ)をメモリカード28に記憶(セーブ)するためのプログラムである。
データ記憶領域72には、様々なデータやフラグが記憶され、また、タイマが設けられる。データ記憶領域72の具体的な内容は図21に示される。図21を参照して、データ記憶領域72は、画像データ720、マップデータ(地形データ)722、選択クラブデータ724、ショット方向データ726、縦スピンデータ728、ショットタイプ設定データ730、フルショットライン位置データ732、インパクトライン位置データ734、ターゲットボールサイズデータ736、ターゲットボール位置データ738、ライ状態データ740、タッチ座標の履歴データ742、タッチ初期位置データ744、タッチ現在位置データ746、タッチ直前位置データ748、ショットパワー値データ750、スタンス値データ752、スイング速度補正データ754、インパクト結果データ756、インパクト点データ758、打ち出し方向補正データ760、打ち出し角度補正データ762、パワーロス補正データ764、サイドスピン補正データ766、縦スピン補正データ768などのデータを記憶する。また、データ記憶領域72には、スライド操作時間基準タイマ770およびスライド操作停止時間基準タイマ772などのタイマが設けられる。さらに、データ記憶領域72は、スイング処理フラグ774、タッチオンフラグ776、スイング速度補正フラグ778およびナイスショットフラグ780などのフラグを記憶する。
画像データ720は、プレイヤキャラクタ102、クラブ104やボール106のような他のキャラクタおよびコースやホールのような背景オブジェクトなどの画像を生成するためのデータ(ポリゴンデータやテクスチャデータ等)である。また、ゲーム画像120を表示するためのターゲットボール画像データ等も含まれる。マップデータ(地形データ)722は、仮想ゲーム(たとえば、ゴルフゲーム)についてのマップデータであり、コースの形状、コース内の地面の高さ(高低)ないし傾斜、コース内のフェアウェイ、ラフ、ベアグランド、ハザード、バンカー、グリーン(グリーンエッジを含む。)、樹木、カートロードなどの配置位置などのデータを含む。
選択クラブデータ724は、ボール106とピンとの距離で予め決定された、または、プレイヤが設定(変更)したクラブ104、すなわちプレイヤキャラクタ102に使用させるクラブ104についてのパラメータ(データ)である。クラブ104のパラメータとしては、飛距離、ロフト角、打ち出し角、初速、バックスピンおよびサイドスピンなどの値(数値)が該当する。ショット方向データ726は、この実施例における打ち出し基準方向を示すデータであり、現在のボール106の位置とピンとを結ぶ直線で予め決定される、または、プレイヤによって設定(変更)されるショットの方向についてのデータである。プレイヤキャラクタ102がボール106を打撃する前では、ボール106の現在位置とピン(ホール)とを結ぶ直線方向がショット方向として予め決定されており、プレイヤは、このショット方向を戦略により変更することができるのである。ただし、ショット方向は変更しなくても良い。
縦スピンデータ728は、打撃するボール106にかける縦方向のスピン(たとえば、トップスピンまたはバックスピン)についてのデータである。具体的には、縦スピンデータ728は、スピンの方向およびスピンの量(以下、これらをまとめて「縦スピン値」と言うことがある。)のデータであり、これらはプレイヤによって設定(変更)される。ただし、プレイヤが何ら指示しない場合には、縦スピン値は設定されない。
ショットタイプ設定データ730は、プレイヤが選択したショットタイプ(ノーマルショット、チップショット、ロブショット、ピッチショットまたはピッチ&ラン)による補正値のデータである。この補正値によって補正されるのは、選択クラブデータ724が示すクラブ104のパラメータに含まれる初速とロフト角についての値(数値)である。
フルショットライン位置データ732は、LCD14に表示されるゲーム画面120に設けられるショットエリア(1)におけるフルショットエリア(2)とその他のエリア(3)とを区切るフルショットライン126を表示するための座標(図3に示したスイング操作の方向では、水平座標(Y座標))データである。ただし、フルショットライン126は、予め決定(固定)されている。
インパクトライン位置データ734は、ショットエリア(1)とインパクトエリア(4)とを区切るインパクトライン124を表示する水平座標(Y座標)のデータである。上述したように、インパクトライン124の位置(表示位置)は、プレイヤキャラクタ102が使用するクラブ104の種類に応じて変化される。
ターゲットボールサイズデータ736は、ターゲットボール122の大きさ(半径ないし直径)を規定するためのデータであり、たとえば、ゲームの難易度に応じて変化される。ターゲットボール位置データ738は、ターゲットボール122の表示位置のデータである。上述したように、ボール106の置かれた場所の左右の傾斜(つま先上がり、つま先下がり)の状態により、ターゲットボール122の表示位置122aが決定される。図3に示したようなゲーム画面120を表示する場合には、その左右のずれ量すなわちX座標のデータをターゲットボール位置データ738として記憶すれば良い。ただし、Y座標はインパクトライン位置データ734が示す座標である。
ライ状態データ740は、ボール106の置かれた位置の地面(ライ)の状態を示すデータである。具体的には、ティアップ、グリーン、グリーンエッジ、フェアウェイ、ラフ(浅・普通・深)、バンカー(浅・普通・目玉)、木、カートロード、ベアグランド、ハザードの別を示すデータである。このデータに基づいて、ボール106の飛距離Fが変化され(数1参照)、また、このデータに応じたライの状態に相当するテクスチャ画像をゲーム画面120に表示することにより、プレイヤにライの状態を視認させることができる。
タッチ座標の履歴データ742は、タッチ座標検出プログラム70eに従って検出された座標データを時系列に従って記憶(バッファリング)したデータ群(座標データ群)である。この履歴データ742が示す座標データ群を用いて、軌跡142が計算され、軌跡142に基づくサイドスピン値の補正値が算出される。タッチ初期位置データ744は、プレイヤがタッチオンした位置(タッチ座標)の座標データである。このタッチ初期位置データ744が示すタッチ座標のY座標にショットパワーライン127が表示される。タッチ現在位置データ746は、現在(現フレーム)のタッチ座標の座標データである。このタッチ現在位置データ746は、スライド操作が開始されてから終了するまでの間、1フレーム毎に更新される。クラブヘッドの画像128は、このタッチ現在位置データ746が示す座標に、そのフェイスの中心が来るように表示される。ただし、このとき、クラブヘッドの画像128は、そのフェイスがターゲットボール122を向くように、その中心を回転させて表示される。したがって、タッチ現在位置座標データ746が更新されると、クラブヘッドの画像128の表示も更新される。タッチ直前位置データ748は、現在のタッチ座標の直前(1フレーム前)に検出されたタッチ座標の座標データである。したがって、タッチ現在位置データ746が更新されるときに、タッチ直前位置データ748も更新される。具体的には、タッチ現在位置データ746がタッチ直前位置データ748としてコピーされた後、タッチ現在位置データ746が更新される。タッチ現在位置データ746とタッチ直前位置データ748とを結ぶ直線が軌跡142の一部としてLCD14のゲーム画面120に表示される。つまり、ショットエリア(1)に軌跡142が描画される。
ショットパワー値データ750は、ショットパワー値Pについての数値データであり、0〜100%の間で設定される。ショットパワー値Pの決定方法は、上述したとおりである。このショットパワー値データ750は、飛距離Fの算出に用いられるのみならず、ショットパワー値Pをゲーム画面120に表示する際に参照される。ただし、上述したように、ショットパワー値Pは、一の位を切り捨てて、10%単位でショットパワーライン127の近傍に表示される。
スタンス値データ752は、タッチ初期位置データ744が示すタッチ座標(タッチオン座標)とスタンス基準線140との水平距離についての数値データである。具体的には、タッチオン座標がスタンス基準線140の右側である場合には、水平距離の符号はプラスで示され、逆に、タッチオン座標がスタンス基準線140の左側である場合には、水平距離の符号はマイナスで示される。ただし、タッチ座標がスタンス基準線140上であれば、水平距離は±0である。このスタンス値データ752は、スタンスを設定したり、ボール106の球筋(打ち出し方向の補正、サイドスピンによるボール106の軌道の補正)を決定したりする場合のみならず、指示画像130の表示にも利用される。つまり、上述したように、スタンス(スタンス値データ752)に応じて、指示画像130の表示が変化される(図7〜図9参照)。
スイング速度補正データ754は、スイング速度に基づいて算出したスイング速度の補正値についての数値データである。スイング速度の補正値は、後述するスライド操作時間基準タイマ770からスイング時間を取得し、スイング開始からインパクトまでの時間が一定時間以上経過した場合に、その経過時間に応じて設定(算出)される。このとき、後述するスイング速度補正フラグ778がオン(成立)される。ただし、スイング時間が一定時間未満である場合には、スイング速度の補正値は設定されず、このとき、スイング速度補正フラグ778はオフ(不成立)される。
インパクト結果データ756は、スイング基準線q1とインパクト領域1220とから判定したインパクトの状態(結果)、すなわち「グッドショット(グッド)」、「プッシュショット(プッシュ)」、「プルショット(プル)」、「ミスショット(ミス)」または「空振り」の別を示すデータである。このインパクト結果データ756に基づいて、LCD12のゲーム画面100に表示されるボール106の移動に変化が与えられる。ただし、「空振り」の場合には、ボール106は移動しない。インパクト点データ758は、スイング基準線q1とインパクト領域1220とが交差する点(インパクト点)の座標データである。インパクト結果データ756が「プッシュ」または「プル」を示すとき、後述するショット前処理において、インパクト点データ758が示すインパクト点の座標に基づいて、打ち出し方向が補正され、サイドスピン値が補正される。
打ち出し方向補正データ760は、ボール106の打ち出し方向(水平方向)の補正値についての数値データである。打ち出し方向は、ショット方向データ726が示すショット方向を0度(基準)とした場合に、右方向に0〜90度、左方向に0〜90度で表わされる。ただし、打ち出し方向は、右方向をプラスとし、左方向をマイナスとしてある。この打ち出し方向の補正値は、上述したインパクト点データ758が示すインパクト点の座標に基づいて算出される。打ち出し角度補正データ762は、ボール106の打ち出し角度(垂直方向の角度)の補正値についての数値データである。打ち出し角度は、ボール106が地面に置かれた状態から直進する場合を0度として、上方向に10〜60度で表わされる。打ち出し角度補正値は、縦スピンデータ728が示すスピン値に基づいて算出される。
パワーロス補正データ764は、パワーロス補正値についての数値データであり、スイング速度に応じて決定(算出)される。具体的には、ショットパワー値データ748が示すショットパワー値Pの補正値である。サイドスピン補正データ766は、上述したサイドスピン補正値算出プログラム70mに従って算出されたサイドスピン値の補正値のデータである。ただし、右方向への移動(右回転のスピン)についての補正値はプラスで表わされ、左方向への移動(左回転のスピン)についての補正値はマイナスで表わされる。縦スピン補正データ768は、トップスピンまたはバックスピンについての補正値のデータである。トップスピンは、30〜50%の間で補正され、バックスピンは0〜30%の間で補正される。ただし、トップスピンはプラスで表わされ、バックスピンはマイナスで表わされる。
スライド操作時間基準タイマ770は、スライド操作の開始からスライド操作の終了(軌跡142を予測する場合には予測の終了)までの時間(スイング操作の時間)をカウントするタイマである。上述したように、このスライド操作時間基準タイマ770のカウント値(スイング時間)に基づいてスイング速度補正値が算出される。スライド操作停止時間基準タイマ772は、スライド操作が停止されている時間(スイング操作停止の時間)をカウントするタイマである。
スイング処理フラグ774は、スイング操作すなわちスライド操作が行われているかどうかを判別するためのフラグである。具体的には、スライド操作中では、スイング処理フラグ774はオンされ、スライド操作を終了または中断すると、スイング処理フラグ774はオフされる。タッチオンフラグ776は、タッチオンの状態か否かを判別するためのフラグである。具体的には、タッチオンの状態では、タッチオンフラグ776はオンされ、タッチオフの状態では、タッチオンフラグ776はオフされる。
スイング速度補正フラグ778は、スイング速度の補正処理を実行する否かを判別するためのフラグである。上述したように、スイング速度の補正値が設定されると、スイング速度補正フラグ778はオンされ、逆に、スイング速度の補正値が設定されなければ、スイング速度補正フラグ778はオフされる。ナイスショットフラグ780は、LCD12に表示されるゲーム画面100において、ナイスショットを演出するか否かを判別するためのフラグであり、ナイスショットを演出する場合にはオンされ、ナイスショットを演出しない場合にはオフされる。このナイスショットフラグ780は、インパクトの判定結果が「グッド」を示し、さらに、所定の条件(この実施例では、ショットパワー値=100%かつスイング速度補正値=0%)を満たす場合に、オンされる。これ以外は、ナイスショットフラグ780はオフである。つまり、この実施例では、ナイスショットは、グッドショットよりもさらに良いショットであることを意味する。
なお、図示は省略するが、データ記憶領域72には、サウンドデータやゲーム中に発生する他のゲームデータやフラグも記憶される。
具体的には、図2に示したCPUコア42が図22に示す打撃処理のフロー図を処理する。なお、図22に示す打撃処理では、打撃操作だけでなく、クラブ選択入力、ショット方向入力、縦方向のスピン値の入力、ショットタイプの入力などの処理も打撃処理として説明する。
図22を参照して、CPUコア42は打撃処理を開始すると、ステップS1で、各種設定処理(図23参照)を実行し、ステップS3で、画面表示処理(図24参照)し、そして、ステップS5で、スライド操作開始処理(図25参照)を実行する。次のステップS7では、スライド操作を開始したかどうかを判断する。ここでは、タッチオンフラグ776がオフ状態からオン状態に変化したかを判断する。タッチオンフラグ776がオフ状態或いはオン状態のまま、または、オン状態からオフ状態に変化すれば、ステップS7で“NO”となり、スライド操作を開始していないと判断し、そのままステップS1に戻る。しかし、タッチオンフラグ776がオフ状態からオン状態に変化すれば、スライド操作を開始したと判断して、ステップS9で、スライド操作(1)処理(図26および図27参照)を実行する。
続いて、ステップS11で、スライド操作(2)処理(図28および図29参照)を実行し、ステップS13で、スライド操作判定処理(図31)を実行し、ステップS15で、スライド操作の継続かどうかを判断する。ここでは、スイング処理フラグ774がオンであるかどうかを判断する。ステップS15で“YES”であれば、つまりスイング処理フラグ774がオンであれば、スライド操作の継続であると判断して、ステップS17で、スライド操作中断判定処理(図32参照)を実行し、ステップS19で、スライド操作を中断するかどうかを判断する。ここでは、スイング処理フラグ774がオフであるかどうかを判断する。ステップS19で“NO”であれば、つまりスイング処理フラグ774がオンであれば、スライド操作を中断しないと判断して、ステップS11に戻る。一方、ステップS19で“YES”であれば、つまりスイング処理フラグ774がオフであれば、スライド操作をやり直すべく、ステップS1に戻る。
また、ステップS15で“NO”であれば、つまりスイング処理フラグ774がオフであれば、スライド操作の終了であると判断して、ステップS21で、インパクト判定処理(図33および図34参照)を実行し、ステップS23で、ショット前処理(図35〜図38参照)を実行し、そして、ステップS25で、ショット演出処理(図40参照)を実行して、打撃処理を終了する。
図23は、図22のステップS1に示す各種設定処理のフロー図である。図23を参照して、CPUコア42は、各種設定処理を開始すると、ステップS31で、クラブ104の変更(設定)であるかどうかを判断する。ステップS31で“NO”であれば、つまりクラブ104の変更でなければ、そのままステップS35に進む。しかし、ステップS31で“YES”であれば、つまりクラブ104の変更であれば、ステップS33で、変更したクラブ104のパラメータを選択クラブデータ724としてRAM48に記憶(更新)して、ステップS35に進む。
ステップS35では、ショット方向の変更(設定)であるかどうかを判断する。ステップS35で“NO”であれば、つまりショット方向の変更でなければ、そのままステップS39に進む。しかし、ステップS35で“YES”であれば、つまりショット方向の変更であれば、ステップS37で、変更したショット方向に対応するショット方向データ726をRAM48に記憶(更新)して、ステップS39に進む。
ステップS39では、縦スピンの設定変更であるかどうかを判断する。ステップS39で“NO”であれば、つまり縦スピンの設定変更でなければ、そのままステップS43に進む。しかし、ステップS39で“YES”であれば、つまり縦スピンの設定変更であれば、ステップS41で、変更した縦スピン値に対応する縦スピンデータ728をRAM48に記憶(更新)して、ステップS43に進む。
ステップS43では、ショットタイプの変更(設定)であるかどうかを判断する。ステップS43で“NO”であれば、つまりショットタイプの変更でなければ、そのまま各種設定処理をリターンする。しかし、ステップS43で“YES”であれば、つまりショットタイプの変更であれば、ステップS45で、変更したショットタイプの補正値に対応するショットタイプ設定データ730をRAM48に記憶して、各種設定処理をリターンする。
図24は、図22のステップS3の画面表示処理を示すフロー図である。図24を参照して、CPUコア42は、画面表示処理を開始すると、ステップS51で、フルショットライン126の水平座標(Y座標)に対応するフルショットライン位置データ732をRAM48に記憶する。次のステップS53では、フルショットライン位置データ732が示す水平座標の位置にフルショットライン126を表示する。次に、ステップS55で、選択クラブデータ724が示すパラメータから、インパクトライン124の水平座標を取得し、ステップS57で、インパクトライン124の水平座標すなわちインパクトライン位置データ734をRAM48に記憶し、ステップS59で、インパクトライン位置データ734が示す水平座標の位置にインパクトライン124を表示する。つまり、プレイヤキャラクタ102が使用するクラブ104の種類に応じてインパクトライン124の表示される。
続いて、ステップS61では、ゲーム難易度から、ターゲットボール122の大きさを取得する。上述したように、ゲーム難易度は、使用するクラブ104に応じて変化させたり、ゲームの開始に先立って選択しておいたり、ゲームの進行状況に応じて変化したりする。また、ゲーム難易度が低いほど、ターゲットボール122は大きくされ、ゲーム難易度が高いほど、ターゲットボール122は小さくされる。上述したように、ゲーム難易度は3段階で設定され、ステップS61では、段階に応じたターゲットボール122の大きさが取得されるのである。ターゲットボール122の大きさを取得すると、ステップS63で、ターゲットボール122の大きさすなわちターゲットボールサイズデータ736をRAM48に記憶する。
次に、ステップS65で、ボール106の現在位置の左右傾斜(傾斜および傾斜量)を取得(算出)する。つまり、上述したように、プレイヤキャラクタ102とボール106との高低差dを数3に従って算出し、左右傾斜を数4に従って算出する。ボール106の現在位置の左右傾斜を取得すると、ステップS67で、ボール106の現在位置の左右傾斜で決定されるターゲットボール122の位置122a(ターゲットボール座標x)すなわちターゲットボール位置データ738をRAM48に記憶する。そして、ステップS69で、ターゲットボール位置データ738が示す位置122aを中心にターゲットボール122を表示する。
次に、ステップS71では、ボール106の現在位置におけるライの状態を取得する。上述した仮想ゲームのマップデータ(地形データ)722からライの状態を取得する。ライの状態を取得すると、ステップS73で、ボール106の現在位置におけるライの状態すなわちライ状態データ740をRAM48に記憶する。そして、ステップS75で、ライ状態データ740が示すライ状態に相当するテクスチャ画像をLCD14に表示して、画面表示処理をリターンする。つまり、ステップS71〜ステップS75の処理を実行することにより、現在のボール106のライ状態に応じたゲーム画面120が表示され、スイング操作(スライド操作)を実行するプレイヤにリアリティを与えることができる。たとえば、ボール106の現在位置のライ状態がバンカーであれば、砂地にターゲットボール122が置いてあるようなゲーム画面120が表示される。
図25は、図22のステップS5に示したスライド操作開始処理を示すフロー図である。図25を参照して、CPUコア42は、スライド操作開始処理を開始すると、ステップS81で、タッチ入力を検出する。なお、図示は省略するが、スライド操作開始処理の開始時に、タッチ座標の履歴データ742はリセット(消去)される。次のステップS83では、タッチ入力があるかどうかを判断する。ここでは、タッチパネル22からタッチ座標の座標データが入力されたかどうかを判断する。ステップS83で“NO”であれば、つまりタッチ入力が無ければ、そのままステップS81に戻る。一方、ステップS83で“YES”であれば、つまりタッチ入力があれば、ステップS85で、タッチオンフラグ776をオンし、ステップS87で、スイング処理フラグ774をオンし、ステップS89で、今回検出したタッチ座標(タッチオン座標)の座標データをタッチ現在位置データ746としてRAM48に記憶する。
続くステップS91では、タッチオン座標の座標データを、タッチ初期位置データ744としてRAM48に記憶(コピー)する。また、ステップS93で、タッチオン座標の座標データを、タッチ直前位置データ748として記憶(コピー)する。そして、ステップS95で、スライド操作時間基準タイマ770をスタートし、ステップS97で、スライド操作停止時間基準タイマ772をスタートして、スライド操作開始処理をリターンする。
図26および図27は、図22に示したステップS9のスライド操作(1)処理を示すフロー図である。このスライド操作(1)処理では、主として、タッチオン座標に基づいて、ショットパワー値Pおよびスタンスを設定(決定)する。図26を参照して、CPUコア42は、スライド操作(1)処理を開始すると、ステップS101で、タッチ初期位置データ744からタッチ座標(ここでは、タッチオン座標)を取得する。次のステップS103では、ターゲットボール位置データ738からターゲットボール座標x(ターゲットボール122の表示位置122a)を取得し、ステップS105で、タッチ座標とターゲットボール座標xとからクラブ表示角度を算出する。具体的には、タッチ座標とターゲットボール座標xとを結ぶ直線(線分)とクラブフェイスが直交するように、クラブ表示角度が算出される。
次に、ステップS107で、タッチ座標とターゲットボール座標xとからスタンス値を求め(算出し)、そのスタンス値に対応するスタンス値データ752をRAM48に記憶する。続くステップS109では、現在のクラブ種類、表示角度で、タッチオン座標にクラブヘッドを表示する。つまり、選択クラブデータ724が示すクラブ種類およびステップS105において算出したクラブ表示角度で、タッチ座標にクラブヘッドの画像128をLCD14に表示するのである。このとき、タッチ座標がクラブフェイスの中心と重なり、ステップS105で算出したクラブ表示角度となるように、クラブヘッドの画像128が表示される。
続いて、ステップS111では、タッチ座標上を水平方向にショットパワーライン127を表示し、ステップS113で、ショットパワーライン127の表示位置(水平(Y)座標)をRAM48に記憶する。次に、ステップS115で、インパクトライン124の水平座標(Y座標)を取得し、ステップS117で、フルショットライン126の水平座標(Y座標)を取得する。そして、ステップS119で、ショットパワーライン127、インパクトライン124、フルショットライン126の相対位置から、ショットパワー値を算出する。この算出方法は上述したとおりである。
図27に示すように、次のステップS121では、ショットパワー値が100%以上であるかどうかを判断する。ステップS121で“NO”であれば、つまりショットパワー値が100%未満であれば、そのままステップS125に進む。しかし、ステップS121で“YES”であれば、つまりショットパワー値が100%以上であれば、ステップS123で、ショットパワー値を100%に補正して、ステップS125に進む。つまり、ステップS121およびS123の処理により、ショットパワー値が100%を超えないように、制限してある。
ステップS125では、ショットパワー値に対応するショットパワー値データ750をRAM48に記憶する。次のステップS127では、ショットパワー値をショットパワーライン127の近傍であり、ゲーム画面120の左端に表示する(図5参照)。ただし、表示されるショットパワー値は10%単位である。
続いて、ステップS129では、スタンス値を取得する。つまり、スタンス値データ752が読み出される。次のステップS131では、スタンス値が一定値(たとえば、ターゲットボール122の半径)未満であるかどうかを判断する。具体的には、スタンス基準線140の垂直座標(X座標)とタッチオン座標のX座標との距離がターゲットボール122の半径未満であるかどうかを判断するのである。ステップS131で“YES”であれば、つまりスタンス値が一定値未満であれば、ステップS133で、スクェアスタンスに設定して、ステップS141に進む。たとえば、図示しないスクェアスタンスについてのフラグをオンする。このとき、オープンスタンスについてのフラグ(図示せず)およびクローズドスタンスについてのフラグ(図示せず)の両方をオフする。
しかし、ステップS131で“NO”であれば、つまりスタンス値が一定値以上であれば、ステップS135で、タッチオン座標がスタンス基準線140の右側かどうかを判断する。具体的には、スタンス値の符号がプラスであるかどうかを判断する。ステップS135で“YES”であれば、つまりタッチオン座標がスタンス基準線140の右側であれば、ステップS137で、オープンスタンスに設定して、ステップS141に進む。ここでは、たとえば、オープンスタンスのフラグをオンし、スクェアスタンスのフラグおよびクローズドスタンスのフラグをオフする。
また、ステップS135で“NO”であれば、つまりタッチオン座標がスタンス基準線140の左側であれば、クローズドスタンスに設定して、ステップS141に進む。ここでは、たとえば、クローズドスタンスのフラグをオンし、スクェアスタンスのフラグおよびオープンスタンスのフラグをオフする。ステップS141では、ターゲットボール122上部に球筋すなわち指示画像130を表示する。ただし、ステップS141において表示される指示画像130の曲がり量および方向は、スタンス値に応じて変化される。つまり、ステップS141では、スタンス値データ752を参照して、適切な指示画像130を表示するのである。そして、ステップS143では、サイドスピン値を決定して、スライド操作(1)処理をリターンする。このステップS143では、プレイヤキャラクタ102が打撃したボール106の飛行中の横方向(X軸方向)の軌道を決定する移動方向ベクトルがショット方向、ショットタイプおよびスタンス値に基づいて算出(決定)される。
図28および図29は、図22に示したステップS11のスライド操作(2)処理を示すフロー図である。このスライド操作(2)処理では、主として、スライド操作による軌道142を描画する。図28に示すように、CPUコア42は、スライド操作(2)処理を開始すると、ステップS151で、タッチ入力を検出する。次のステップS153では、タッチオン状態かどうかを判断する。つまり、タッチオンフラグ776がオンであるかどうかを判断する。ステップS153で“NO”であれば、つまりタッチオンフラグ776がオフであれば、タッチオフ状態と判断して、ステップS171で、図30に示すスライド操作の軌跡142の延長処理を実行して、図29に示すように、スライド操作(2)処理をリターンする。
しかし、ステップS153で“YES”であれば、つまりタッチオン状態であれば、ステップS155で、ステップS151において検出したタッチ入力(タッチ座標)を取得し、ステップS157で、タッチ座標をRAM48に記憶する。つまり、タッチ現在位置データ746が更新される。続くステップS159では、直前のタッチ座標を取得する。つまり、タッチ直前位置データ748が示すタッチ座標を取得する。
続いて、ステップS161で、スライド操作の軌跡142を表示するための描画エリアをショットエリア(1)でトリミングし、ステップS163で、現在のタッチ位置と直前のタッチ座標とを結ぶライン(直線)でスライド操作の軌跡142を表示する。そして、ステップS165で、タッチ位置の変化があるかどうかを判断する。つまり、スライド操作(スイング操作)であるかどうかを判断する。ここでは、タッチ位置の変化を正確に判断するために、現在のタッチ位置と直前のタッチ位置とが一定距離以上離れているかどうかを判断する。これにより、単なる手振れがスライド操作として判断されるのを回避してある。
ステップS165で“YES”であれば、つまりタッチ位置の変化があれば、スライド操作であると判断して、ステップS167で、スイング停止時間基準タイマ770をリスタート(リセットおよびスタート)して、図29に示すステップS173に進む。一方、ステップS165で“NO”であれば、つまりタッチ位置の変化がなければ、スライド操作でないと判断して、ステップS169で、スイング停止時間基準タイマ772のカウントを進めて、ステップS173に進む。
図29に示すステップS173では、ターゲットボール座標xを取得する。つまり、ターゲットボール位置データ738を読み出す。次のステップS175で、現在のタッチ座標とターゲットボール座標xとからクラブ表示角度を算出し、ステップS177で、現在のクラブ種類、表示角度で、タッチ座標にクラブヘッドの画像128を表示する。なお、ステップS175およびS177の処理は、上述したステップS105およびS109の処理とそれぞれ同じであるため、詳細な説明は省略することにする。そして、ステップS179で、現在のタッチ座標を直前のタッチ座標として記憶し、スライド操作(2)処理をリターンする。つまり、ステップS179では、タッチ現在位置データ746をタッチ直前位置データ748にコピーするのである。
図30は、図28に示したステップS171のスライド操作の軌跡142延長処理を示すフロー図である。図30に示すように、CPUコア42は、スライド操作の軌跡142延長処理を開始すると、ステップS191で、スライド操作の軌跡142の延長処理が2回目以降であるかどうかを判断する。図示は省略するが、たとえば、スライド操作の軌跡142の延長処理の回数をカウントするカウンタをRAM48のデータ記憶領域72等に設けておき、スライド操作の軌跡142の延長処理を実行する毎にカウンタをインクリメントし、打撃処理の開始時または終了時に、カウンタをリセット(カウント値を0に設定)すれば良い。
ステップS191で“YES”であれば、つまりスライド操作の軌跡142の延長処理が2回目以降であれば、そのままステップS201に進む。一方、ステップS191で“NO”であれば、つまりスライド操作の軌跡142の延長処理が初回(1回目)であれば、ステップS193で、スライド距離を算出する。具体的には、CPUコア42は、RAM48からタッチ初期位置データ744およびタッチ現在位置データ746を読み出し、現在のタッチ座標と初期位置のタッチ座標との差分(距離)を算出する。続くステップS195では、スライド操作時間基準タイマ770のタイマ値(カウント値)を参照して、スライド時間を取得する。そして、ステップS197で、スライド操作の軌跡142を延長するための初速度(スライド距離/スライド時間)を算出する。また、ステップS199で、速度ベクトルを取得し、ステップS201に進む。具体的には、ステップS199では、タッチ直前位置データ748が示す直前のタッチ座標を始点とし、タッチ現在位置データ746が示す現在のタッチ座標を終点とするベクトルの方向を算出する。そして、ステップS197で算出した初速度を、算出したベクトルのスカラとして、速度ベクトルを取得するのである。
ステップS201では、移動距離を算出する。つまり、スライド速度が所定の倍率(0.94倍)になるように、大きさを変化させた速度ベクトルを求める。次のステップS203では、ステップS201で算出した移動距離で、速度ベクトルが示す方向に、スライド操作の軌跡142をゲーム画面120に表示する。そして、ステップS205で、直前のタッチ座標(タッチ直前位置データ748)を更新し、ステップS207で、現在のタッチ座標(タッチ現在位置データ746)を更新して、スライド操作の軌跡142の延長処理をリターンする。つまり、ステップS205では、スライド操作の軌跡142を延長する前における現在のタッチ座標を直前のタッチ座標として記憶し、ステップS207では、スライド操作の軌跡142を延長する際に算出した速度ベクトルの終点を現在のタッチ座標として記憶する。
図31は、図22に示したステップS13のスライド操作判定処理を示すフロー図である。図31に示すように、CPUコア42は、スライド操作判定処理を開始すると、ステップS221で、RAM48を参照して、タッチ現在位置データ746が示す現在のタッチ座標を取得する。次のステップS223では、現在のタッチ座標がインパクトエリア(4)内かどうかを判断する。ここでは、現在のタッチ座標のY座標が、インパクトライン位置データ734が示すY座標よりも小さいかどうかを判断する。
ステップS223で“YES”であれば、つまり現在のタッチ座標がインパクトエリア(4)内であれば、そのままステップS229に進む。一方、ステップS223で“NO”であれば、つまり現在のタッチ座標がインパクトエリア(4)内でなければ、ステップS225で、現在のタッチ座標がターゲットボールエリア内かどうかを判断する。ここでは、現在のタッチ座標が、ターゲットボール122の表示領域に含まれる座標と一致するかどうかを判断する。ステップS225で“YES”であれば、つまり現在のタッチ座標がターゲットボールエリア内であれば、そのままステップS229に進む。一方、ステップS225で“NO”であれば、つまり現在のタッチ座標がターゲットボールエリア内でなければ、ステップS227で、スライド操作の軌跡142の延長終了かどうかを判断する。ここでは、速度ベクトルの速度(スライド速度)が一定値以下になったかどうかを判断する。ステップS227で“NO”であれば、つまりスライド速度が一定値を超えている場合には、スライド操作の軌跡142の延長を続行すると判断して、図32に示すスライド操作中断判定処理にリターン(ジャンプ)する。一方、ステップS227で“YES”であれば、つまりスライド速度が一定値以下である場合には、スライド操作の軌跡142の延長を終了すると判断して、そのままスライド操作判定処理をリターンする。
ステップS229では、スイング操作時間基準タイマ770のタイマ値(カウント値)からスライド操作の時間を取得する。次のステップS231では、スライド操作(スイング操作)の時間が一定時間以上であるかどうかを判断する。ステップS231で“NO”であれば、つまりスライド操作の時間が一定時間未満であれば、そのままステップS239に進む。しかし、ステップS231で“YES”であれば、つまりスライド操作の時間が一定時間以上であれば、ステップS233で、スライド操作の時間からスイング速度補正値を算出し、ステップS235で、スイング速度補正値に対応するスイング速度補正データ754をRAM48に記憶し、ステップS237で、スイング速度補正フラグ778をオンして、ステップS239に進む。つまり、スライド操作の速度が遅い場合には、ターゲットボール122およびその中心(中央)をスライドし易くなるため、ボール106の飛距離Fが短くなるように補正するようにしてある。
ステップS239では、スライド操作を終了すべく、スイング処理フラグ774をオフして、ステップS241で、スイング(スライド操作)に関するデータ、フラグ、タイマをすべて初期化して、スライド操作判定処理をリターンする。ただし、ステップS241では、スイング速度補正データ754およびスイング速度補正フラグ778は初期化されない。
図32は、図22に示したステップS17のスライド操作中断判定処理を示すフロー図である。図32に示すように、CPUコア42は、スライド操作中断判定処理を開始すると、ステップS251で、RAM48を参照して、タッチ現在位置データ746が示す現在のタッチ座標を取得する。続くステップS253で、RAM48を参照して、タッチ直前位置データ748が示す直前のタッチ座標を取得する。次のステップS255では、インパクトエリア(4)とは逆向きにスライド操作したかどうかを判断する。つまり、直前のタッチ座標を始点とし、現在のタッチ座標を終点とするベクトルの向きが下向きであるかどうかを判断する。または、直前のタッチ座標のY座標が現在のタッチ座標のY座標よりも小さいかどうかを判断する。
ステップS255で“YES”であれば、つまりインパクトエリア(4)とは逆向きにスライド操作した場合には、スイング操作の中断(やり直し)であると判定して、ステップS263に進む。一方、ステップS255で“NO”であれば、つまりインパクトエリア(4)とは逆向きにスライド操作していない場合には、ステップS257で、現在のタッチ座標がショットエリア(1)外に出たかどうかを判断する。上述のゲーム画面120では省略したが、ショットエリア(1)およびインパクトエリア(4)の左右(いずれか一方でも可。)には、各種設定のためのボタンないしアイコンを表示する領域が設けられており、ステップS257では、当該領域に現在のタッチ座標が入ったかどうかを判断しているのである。
ステップS257で“YES”であれば、つまり現在のタッチ座標がショットエリア(1)外に出た場合にも、スイング操作の中断(やり直し)であると判定して、ステップS263に進む。一方、ステップS257で“NO”であれば、つまり現在のタッチ座標がショットエリア(1)外に出ていない場合には、ステップS259で、スライド操作停止時間基準タイマ772のタイマ値(カウント値)を参照して、スライド操作停止の時間を取得する。そして、ステップS261で、一定時間以上、スライド操作を停止したかどうかを判断する。ステップS261で“NO”であれば、つまり一定時間以上、スライド操作を停止していなければ、スライド操作の継続中であると判定して、そのままスライド操作中断判定処理をリターンする。一方、ステップS261で“YES”であれば、つまり一定時間以上、スライド操作を停止していれば、スライド操作の中断(やり直し)であると判定して、ステップS263に進む。
ステップS263では、スライド操作を中断すべく、スイング処理フラグ774をオフし、ステップS265で、スイング(スライド操作)に関するデータ、フラグ、タイマをすべて初期化して、スライド操作中断判定処理をリターンする。なお、スライド操作を中断する場合には、図22に示したように、最初から打撃処理を実行するため、上述したスライド操作判定処理とは異なり、ステップS265では、スイング速度補正データ754やスイング速度補正フラグ778も初期化される。
図33および図34は、図22に示したステップS21のインパクト判定処理を示すフロー図である。なお、このインパクト判定処理では、簡単のため、右打ちのプレイヤキャラクタ102の場合について説明するが、左打ちのプレイヤキャラクタ102では、プッシュショットエリアとプルショットエリアとが逆になるだけである(図14参照)。図33に示すように、CPUコア42は、インパクト判定処理を開始すると、ステップS281で、スライド操作の軌跡142とターゲットボール122の接触を確認する。次のステップS283では、軌跡142がターゲットボール122に接触したかどうかを判断する。ステップS283で“NO”であれば、つまり軌跡142がターゲットボール122に接触していなければ、ステップS285で、インパクト結果として「空振り」を記憶する。つまり、「空振り」を示すインパクト結果データ756をRAM48に記憶する。以下、インパクト結果を記憶する場合について同様である。
しかし、ステップS283で“YES”であれば、つまり軌跡142がターゲットボール122に接触すれば、ステップS287で、スイング基準線q1を確定する。続くステップS289では、インパクト点を確定し、ステップS291で、インパクト点の座標すなわちインパクト点データ758をRAM48に記憶する。
続くステップS293では、インパクト点がグッドショットエリア(I)内であるかどうかを判断する。ステップS293で“YES”であれば、つまりインパクト点がグッドショットエリア(I)内であれば、ステップS295で、「グッド」を示すインパクト結果データ756をRAM48に記憶して、図34に示すように、インパクト判定処理をリターンする。一方、ステップS293で“NO”であれば、つまりインパクト点がグッドショットエリア(I)内でなければ、ステップS297で、インパクト点がプッシュショットエリア(II)内であるかどうかを判断する。ステップS297で“YES”であれば、つまりインパクト点がプッシュショットエリア(II)内であれば、ステップS299で、「プッシュ」を示すインパクト結果データ756をRAM48に記憶して、インパクト判定処理をリターンする。
しかし、ステップS297で“NO”であれば、つまりインパクト点がプッシュショットエリア(II)内でなければ、図34に示すステップS301で、インパクト点がプルショットエリア(III)内であるかどうかを判断する。ステップS301で“YES”であれば、つまりインパクト点がプルショットエリア(III)内であれば、ステップS303で、「プル」を示すインパクト結果データ756をRAM48に記憶して、インパクト判定処理をリターンする。一方、ステップS301で“NO”であれば、つまりインパクト点がミスショットエリア(IV)内であれば、ステップS305で、「ミス」を示すインパクト結果データ756をRAM48に記憶して、インパクト判定処理をリターンする。
図35〜図38は、図22に示したステップS23のショット前処理を示すフロー図である。なお、このショット前処理も、上述のインパクト判定処理と同様に、右打ちのプレイヤキャラクタ102について説明することにする。図35を参照して、CPUコア42は、ショット前処理を開始すると、ステップS321で、RAM48を参照して、インパクト結果データ756が示すインパクト結果を取得する。次のステップS323では、インパクト結果が「空振り」を示すかどうかを判断する。
ステップS323で“YES”であれば、つまりインパクト結果が「空振り」を示す場合には、図37に示すように、そのままショット前処理をリターンする。一方、ステップS323で“NO”であれば、つまりインパクト結果が「空振り」を示していない場合には、ステップS325で、インパクト結果が「プッシュ」を示すかどうかを判断する。ステップS325で“YES”であれば、つまりインパクト結果が「プッシュ」を示す場合には、ステップS327で、RAM48を参照して、インパクト点データ758が示すインパクト点の座標を取得する。続くステップS329では、インパクト点の座標から打ち出し方向補正値(たとえば、0〜30度)を算出する。ここでは、インパクトの判定領域1220の中心からのインパクト点のずれ量(距離)を検出し、その距離に応じて、打ち出し方向補正値が算出される。たとえば、距離が長くなるにつれて、打ち出し方向補正値が線形的(段階的)に変化される。ただし、逆に、距離が短くなるにつれて、打ち出し方向補正値が線形的(段階的)に変化させるようにしても良い。そして、ステップS331で、算出した打ち出し方向補正値に対応する打ち出し方向補正データ760をRAM48に記憶して、図36に示すステップS349に進み、後述するスライド操作の軌跡に基づくサイドスピン補正値算出処理(図39参照)を実行して、図37に示すように、ショット前処理をリターンする。
しかし、ステップS325で“NO”であれば、つまりインパクト結果が「プッシュ」を示していない場合には、図36に示すステップS333で、インパクト結果が「プル」を示すかどうかを判断する。ステップS333で“YES”であれば、つまりインパクト結果が「プル」を示している場合には、ステップS335で、RAM48を参照して、インパクト点データ758が示すインパクト点の座標を取得する。続くステップS337では、インパクト点の座標から打ち出し方向補正値(たとえば、0〜−30度)を算出する。ここでは、インパクト結果が「プッシュ」の場合と同様に、インパクトの判定領域1220の中心からのインパクト点のずれ量(距離)を検出し、その距離に応じて、打ち出し方向補正値が算出される。たとえば、距離が長くなるにつれて、打ち出し方向補正値がマイナス方向に線形的(段階的)に変化される。または、距離が短くなるにつれて、打ち出し方向補正値がマイナス方向に線形的(段階的)に変化される。そして、ステップS339で、算出した打ち出し方向補正値に対応する打ち出し方向補正データ760をRAM48に記憶して、ステップS349に進む。
しかし、ステップS333で“NO”であれば、つまりインパクト結果が「プル」を示していない場合には、ステップS341で、インパクト結果が「グッド」を示しているかどうかを判断する。ステップS341で“NO”であれば、つまりインパクト結果が「グッド」を示していなければ、インパクト結果が「ミス」を示していると判断して、図37に示すステップS351に進む。一方、ステップS341で“YES”であれば、つまりインパクト結果が「グッド」を示す場合には、ステップS343で、ショットパワー値とスイング速度補正値とを取得する。つまり、CPUコア42は、RAM48を参照して、ショットパワー値データ750が示すショットパワー値およびスイング速度補正データ754が示すスイング速度補正値を取得する。
そして、ステップS345で、ショットパワー値が100%であり、かつ、スイング速度補正値が0%であるかどうかを判断する。ただし、スイング速度補正値が0%であるかどうかの判断に変えて、スイング速度補正フラグ778がオフであるかどうかを判断するようにしても良い。ステップS345で“NO”であれば、つまりショットパワー値が100%未満であったり、または、スイング速度補正値が1パーセント以上であったり、或いは、それら両方であったりする場合には、そのままステップS349に進む。一方、ステップS345で“YES”であれば、つまりショットパワー値が100%であり、かつ、スイング速度補正値が0%である場合には、「ナイスショット」であると判断して、ステップS347で、ナイスショットフラグ780をオンして、ステップS349に進む。
上述したように、インパクト結果が「ミス」を示す場合には、図37に示すステップS351で、RAM48を参照して、ショットパワー値データ750が示すショットパワー値が100%であるかどうかを判断する。ステップS351で“NO”であれば、つまりショットパワー値が100%でなければ、そのままステップS361に進む。しかし、ステップS351で“YES”であれば、つまりショットパワー値が100%であれば、ステップS353で、RAM48を参照して、ライ状態データ740が示すライ状態が「ティアップ」であるかどうかを判断する。つまり、ティショットであるかどうかを判断するのである。
ステップS353で“NO”であれば、つまりライ状態が「ティアップ」でなければ、ティショットでないと判断して、ステップ361に進む。一方、ステップS353で“YES”であれば、つまりライ状態が「ティアップ」であれば、ティショットであると判断して、ミスショットのタイプを「テンプラ」に決定する。具体的には、ステップS355で、打ち出し角度補正値を30度〜60度でランダムに(乱数で)決定して、対応する打ち出し角度補正データ762をRAM48に記憶する。また、ステップS357では、パワーロス補正値を20%〜50%でランダムに(乱数で)決定して、対応するパワーロス補正データ764をRAM48に記憶する。そして、ステップS359で、縦スピン(バックスピン)補正値を0%〜−30%でランダムに(乱数で)決定して、対応する縦スピン補正データ768をRAM48に記憶して、ショット前処理をリターンする。
また、ステップS361では、RAM48を参照して、選択クラブデータ724が示すクラブ104がアイアン(ここでは、ウェッジも含む。)であるかどうかを判断する。ステップS361で“NO”であれば、つまり選択中のクラブ104がアイアンでなけば、図38に示すステップS369に進む。一方、ステップS361で“YES”であれば、つまり選択中のクラブ104がアイアンであれば、ステップ363で、右側のミスショットエリア(IV)をインパクトしたかどうかを判断する。ステップS363で“NO”であれば、つまり右側のミスショットエリア(IV)をインパクトしていない場合には、ステップS369に進む。一方、ステップS363で“YES”であれば、つまり右側のミスショットエリア(IV)をインパクトした場合には、ミスショットのタイプを「シャンク」に決定する。具体的には、ステップS365で、打ち出し方向補正値を60度〜90度でランダムに(乱数で)決定し、対応する打ち出し方向補正データ760をRAM48に記憶する。そして、ステップS367で、パワーロス補正値を30〜80%でランダムに(乱数で)決定し、対応するパワーロス補正データ764をRAM48に記憶して、ショット前処理をリターンする。
なお、このショット前処理では、プレイヤキャラクタ102が右打ちの場合について説明してあるが、左打ちの場合には、ステップS363で、左側のミスショットエリア(IV)をインパクトしたかどうかが判断される。
図38に示すように、ステップS369では、スピン設定がバックスピンであるかどうかを判断する。ここでは、CPUコア42は、RAM48を参照して、縦スピン補正データ768が示すスピン補正値の符号がマイナスであるかどうかを判断する。ステップS369で“YES”であれば、つまりスピン設定がバックスピンであれば、ミスショットのタイプを「ダフ」に決定する。具体的には、ステップS371で、打ち出し角度補正値を10度〜40度でランダムに(乱数で)決定し、対応する打ち出し角度補正データ762をRAM48に記憶する。また、ステップS373で、打ち出し方向補正値を−45度〜45度でランダムに(乱数で)決定し、対応する打ち出し方向補正データ760をRAM48に記憶する。さらに、ステップS375で、パワーロス補正値を40%〜90%でランダムに(乱数で)決定し、対応するパワーロス補正データ764をRAM48に記憶する。そして、ステップS377で、縦スピン(バックスピン)補正値を0〜−10%でランダムに(乱数で)決定し、対応する縦スピン補正データ768をRAM48に記憶(更新)して、図37に示したように、ショット前処理をリターンする。
しかし、ステップS369で“NO”であれば、つまりスピン設定がバックスピンでなければ、ミスショットのタイプを「トップ」に決定する。具体的には、ステップS379で、打ち出し角度補正値を10度〜40度でランダムに(乱数で)決定し、対応する打ち出し角度補正データ762をRAM48に記憶する。また、ステップS381で、打ち出し方向補正値を−10度〜10度でランダムに(乱数で)決定し、対応する打ち出し方向補正データ760をRAM48に記憶する。さらに、ステップ383で、パワーロス補正値を50%〜70%でランダムに(乱数で)決定し、対応するパワーロス補正データ764をRAM48に記憶する。そして、ステップS385で、縦スピン(トップスピン)補正値を30%〜50%でランダムに(乱数で)決定し、対応する縦スピン補正データ768をRAM48に記憶(更新)して、ショット前処理をリターンする。
このように、ショット前処理では、インパクトの判定結果に基づいて、ボール106の移動に関するパラメータ(の補正値)が決定されるのである。
なお、この実施例では、ミスショットのタイプに従って、打ち出し角度補正値、打ち出し方向補正値、パワーロス補正値、縦スピン補正値をランダムに(乱数で)決定するようにしてあるが、上述した「プッシュ」または「プル」の場合と同様に、インパクト点に応じて線形的(段階的)に決定するようにしても良い。
また、ショット前処理では、ミスショットのタイプを「テンプラ」、「シャンク」、「ダフ」または「トップ」のいずれかに決定するようにしてあるが、選択中のクラブ104がPTである場合にはいずれのタイプにも決定されない。
図39は、図36に示したステップS349のスライド操作の軌跡に基づくサイドスピン補正値算出処理を示すフロー図である。図39に示すように、CPUコア42は、スライド操作の軌跡に基づくサイドスピン補正値算出処理を開始すると、ステップS391で、スライド操作の開始位置の座標を取得する。ここでは、CPUコア42は、タッチ初期位置データ744を参照して、タッチオンの位置を取得する。続くステップS393では、スライド基準線144を決定する。
続いて、ステップS395では、スライド基準線144を等間隔に分割し、分割した点xn(nは整数)を通り、スライド基準線144に直交する線とスライド操作の軌跡142が交わるタッチ座標spnを取得する。つまり、上述したように、スライド基準線144の始点(タッチオンの位置)と終点(ターゲットボール122の表示位置122a)との間を、所定距離毎に分割した位置xnの各々を通り、スライド基準線144に直交する線と、スライド操作の軌跡142との交点spnをサンプリングする。ただし、スライド操作の軌跡142は、タッチ座標の履歴データ742を参照して決定される。なお、図示は省略するが、スライド操作の軌跡142を延長した場合には、その延長した場合の1フレーム毎のタッチ座標は、RAM48に記憶(一時記憶)されるため、スライド操作の軌跡142の決定は可能である。
次に、ステップS397で、取得したタッチ座標spnとスライド基準線144との距離(差分)dxnを算出する。続くステップS399では、距離dxnの各々についてサイドスピン値の補正値を、数5に従って算出し、サイドスピン補正データ766をデータ記憶領域72に記憶して、スライド操作の軌跡に基づくサイドスピン補正値算出処理をリターンする。
なお、差分dxnの各々についてのサイドスピン値の補正値は、対応するタッチ座標spnが軌跡142上でタッチオンの位置に近い順番に(すなわち、sp1、sp2、sp3・・・に対応する、dx1、dx2、dx3・・・の順番に)データ記憶領域72に記憶される。または、たとえば順番識別データを付すなどして、その順番が分かるように記憶されても構わない。
また、タッチ座標spnまたは差分dxnをデータ記憶領域72に順次記憶しておき、それからサイドスピン補正値を算出する処理は、ショット演出処理(図40)のS421において実行しても構わない。
図40は、図22に示したステップS25のショット演出処理を示すフロー図である。図40に示すように、CPUコア42は、ショット演出処理を開始すると、ステップS411で、ショットモーション表示する。つまり、LCD12に表示されるゲーム画面100において、プレイヤキャラクタ102がクラブ104をスイングする動作(または、ボール106を打つ動作)のモーション(アニメーション)を表示する。ただし、インパクト結果が「空振り」を示す場合には、プレイヤキャラクタ102がボール106を空振りするアニメーションが表示される。続くステップS413では、RAM48を参照して、スイング速度補正フラグ778がオンであるかどうかを判断する。ステップS413で“YES”であれば、つまりスイング速度補正フラグ778がオンであれば、そのままステップS419に進む。一方、ステップS413で“NO”であれば、つまりスイング速度補正フラグ778がオフであれば、ステップS415で、ナイスショットフラグ780がオンであるかどうかを判断する。
ステップS415で“NO”であれば、つまりナイスショットフラグ780がオフであれば、そのままステップS419に進む。一方、ステップS415で“YES”であれば、つまりナイスショットフラグ780がオンであれば、ステップS417で、ナイスショット演出を実行して、ステップS419に進む。たとえば、ナイスショットを表現するために、効果音を鳴らしたり、ボール106が移動する様子を華やかに表示したり、ナイスショットを示す文字をテキスト表示したりする。これらは、少なくとも1つ実行すればよく、2つ以上の組み合わせで複合的に実行するようにしてもよい。
ステップS419では、弾道計算(飛距離Fと打球方向Dの計算)を行う。ここで、飛距離Fおよび打球方向Dは、数1および数2に従ってそれぞれ算出される。次にステップS421では、ステップS419で計算した弾道を再計算する。つまり、スライド操作の軌跡142に基づくサイドスピン値の補正値によって弾道を補正する。
なお、データ記憶領域72に記憶されたサイドスピン補正データ766は、記憶された順番に(または順番データの示す順番に)読み出して、順次使用する。すなわち、図18において、差分dx1に対応するサイドスピン補正データ、差分dx2に対応するサイドスピン補正データ、差分dx3に対応するサイドスピン補正データ・・・の順番に使用される。ただし、ステップS421は、毎フレーム実行せずに、たとえば、所定フレーム数毎やボール106が所定距離移動する毎に、実行してもよい。
続いて、ステップS423では、LCD12の画面表示処理を実行する。この画面表示処理では、計算および補正された弾道に従って仮想空間内をボール106が移動(飛んだり、転がったり)する様子がゲーム画面100として表示される。ただし、「空振り」の場合には、ボール106は移動されず、たとえば、プレイヤキャラクタ102がティグランドで絶望する様子がゲーム画面100として表示される。そして、ステップS425で、ショット結果を表示して、ショット演出処理をリターンする。たとえば、ショット結果としては、飛距離が数値で表示されたり、ピンまでの残りの距離が数値表示されたり、ボール106の現在位置についてのライの状態が表示されたりする。
この実施例によれば、タッチパネルが配置されるLCDに表示されるボールを打撃するようにスライド操作することにより、プレイヤキャラクタにボールを打撃させることができるので、簡単で直感的な操作が可能である。このため、リアリティのあるゲームを楽しむことができる。
また、この実施例では、プレイヤのタッチ入力がボールの飛距離や軌道(弾道)に影響するため、プレイヤが実際にボールを打撃するような感覚を得ることができる。つまり、リアリティのあるゲームを楽しむことができる。
なお、この実施例では、2つのLCDを設けて2つのゲーム画面を表示する場合について説明したが、1つのLCDを設けて、これに対応してタッチパネルを設けておき、当該LCDに1つのゲーム画面を表示するようにしても良い。かかる場合には、たとえば、打撃操作が終了するまでは、上述の実施例で示したゲーム画面120を表示し、打撃操作が終了すると、上述の実施例で示したゲーム画面100を表示するようにすれば良い。
また、この実施例では、2つのLCDを設けたゲーム装置について説明したが、1つのLCDの表示領域を2つに分割し、少なくともいずれか一方の表示領域に対応してタッチパネルを設けるようにしても良い。この場合、縦長のLCDを設ける場合には、縦に2つ表示領域が並ぶようにLCDの表示領域を分割し、横長のLCDを設ける場合には、横に2つの表示領域が並ぶようにLCDの表示領域を分割するようにすれば良い。
さらに、この実施例では、タッチパネルのようなポインティングデバイスを用いるようにしたが、これに限定されるべきではない。ラップトップ型のPCに用いらえるタッチパッド、ペンタブレット、コンピュータマウスなども用いることができる。なお、コンピュータマウスの場合には、マウスのボタン操作をタッチ操作に対応付けることができる。
さらにまた、この実施例では、タッチオン座標に基づいて、スタンスと打撃力とを決定するようにしたが、少なくとも1つのパラメータを決定するようにしても良い。また、タッチオンからタッチオフまでに検出されるいずれか1つまたは2つ以上の座標を用いて、少なくとも1つのパラメータを決定するようにすることも可能である。さらに、タッチ位置の直交座標の各成分に基づいてパラメータを決定したが、極座標の各成分に基づいてパラメータを決定するようにしても良い。
なお、この実施例では、スライド基準線を等間隔に分割した点xnを通る直線と交差するスライド操作の軌跡142上の点spnとスライド基準線との距離dxnに基づいてサイドスピン値の補正値を算出するようにしたが、これに限定される必要はない。たとえば、図41(A)に示すように、スライド操作の軌跡142上であり、一定時間毎に検出される点spn(すなわち、一定時間毎に検出されるタッチ座標そのもの)とスライド基準線144との距離dxnに基づいてサイドスピン値の補正値を算出するようにしてもよい。かかる場合には、図41(B)に示すように、一定時間毎に検出された点sp1,sp2,sp3,sp4,sp5,sp6は、ボール106のY軸方向の位置Y1,Y2,Y3,Y4,Y5,Y6に対応する。したがって、上述の実施例と同様に、位置Y1,Y2,Y3,Y4,Y5,Y6の各々で、すなわち、ショット後のボールのY座標が位置Y1、Y2、Y3・・・に到達する毎に、算出された補正値を順次利用して水平方向の移動方向ベクトルが補正される。
したがって、かかる場合には、図39に示したフロー図に代えて、図42に示すフロー図に従ってスライド操作の軌跡に基づくサイドスピン補正値算出処理が実行される。つまり、ステップS395´で、一定時間毎のタッチ座標(点spn)を取得するようにしてある。なお、他の処理は、図39に示した処理と同じであるため、重複した説明は省略する。
また、この実施例では、各距離dxnについて補正値を求めて、各々を順次使用して、ボール106の軌道を補正するようにしたが、これに限定される必要はない。たとえば、すべての距離dxnの平均値を算出し、この平均値を用いて軌道全体を補正するようにしてもよい。かかる場合には、図39に示したフロー図に代えて、図43に示すフロー図に従ってスライド操作の軌跡に基づくサイドスピン補正値補正処理が実行される。つまり、ステップS397で、各距離dxnを算出すると、ステップS401において、すべての距離dxnについての平均値が算出され、この平均値に基づいて補正値が算出される。ただし、平均値は、距離dxnの絶対値で算出してもよいし、スライド基準線144を基準(中心)として左右で異なる符号を付した距離dxnを用いて算出してもよい。また、平均値に代えて、すべての距離dxnの和を用いて補正値を算出するようにしてもよい。
また、本実施例では、複数の距離dxnについて補正値を求めてそれらに基づいて、ボール106の軌道を補正するようにしたが、これに限定される必要はない。例えば、軌跡142上の所定の1点(たとえば、タッチオン後の所定時間経過後の1点、所定距離スライド後の1点、軌跡が所定領域に入った最初の点、または、所定領域から出た最後の点など)についての距離dxによりサイドスピン補正値を算出してそれをゲーム制御で利用してもよい。
さらに、本実施例では、距離dxをサイドスピンの補正値として利用したが、サイドスピン値そのものとして利用してもかまわない。
さらにまた、この実施例では、スライド基準線は、スライド操作の軌跡に基づいてボール106のサイドスピン値の補正値を算出するための基準としてのみ説明したが、これに限定されるべきではない。スライド基準線が示す方向に基づいて、サイドスピン値を設定したり、打ち出し方向を決定したりすることも可能である。つまり、スライド基準線の方向をゲームの入力値として用いることができる。