<第1実施例>
図1を参照して、この発明の一実施例であるゲーム装置10は、第1の液晶表示器(LCD)12および第2のLCD14を含む。このLCD12およびLCD14は、所定の配置位置となるようにハウジング16に収納される。この実施例では、ハウジング16は
、上側ハウジング16aと下側ハウジング16bとによって構成され、LCD12は上側ハウジング16aに収納され、LCD14は下側ハウジング16bに収納される。したがって、LCD12とLCD14とは縦(上下)に並ぶように近接して配置される。
なお、この第1実施例では、表示器として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等の操作位置の座標を検出して、検出した座標(検出座標)に対応する座標データを出力する。
この第1実施例では、LCD14(LCD12も同じ、または略同じ。)の表示面の解像度は256dot×192dotであり、タッチパネル22の検出面の検出精度もその解像度に対応して256dot×192dotとしてある。ただし、タッチパネル22の検出面の検出精度は、LCD14の表示面の解像度よりも低くてもよく、高くても良い。なお、以下の説明では、タッチパネルの検出座標は、左上隅を(0,0)とし、右水平方向をX軸正方向、下垂直方向をY軸正方向として説明する(LCDの座標系も同様)。また、3次元ゲーム空間(ゴルフコース)は、水平面にXY座標があり、鉛直方向にZ軸があるとして説明する。
LCD12およびLCD14には異なるゲーム画像(ゲーム画面)を表示することができる。したがって、プレイヤはスティック24等でタッチパネル22を操作することにより、LCD14の画面に表示されるプレイヤキャラクタ、敵キャラクタ、アイテムキャラクタ、文字情報、アイコン等のキャラクタ画像を指示(指定)したり、動作(移動)させたり、コマンドを選択したりすることができる。また、3次元ゲーム空間に設けられる仮想カメラ(視点)の方向を変化させたり、ゲーム画面をスクロール(徐々に移動表示)させたりすることもできる。
このように、ゲーム装置10は、2画面分の表示部となるLCD12およびLCD14を有し、いずれか一方(この第1実施例では、LCD14)の上面にタッチパネル22が設けられるので、2画面(12,14)と2系統の操作部(20,22)とを有する構成になっている。
また、この第1実施例では、スティック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からのグラフィックスコマンド(graphics
command :作画命令)を受け、そのグラフィックスコマンドに従ってゲーム画像データ
を生成する。ただし、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は、この第1実施例のゲーム装置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が表示される。 この第1実施例では、上述したように、プレイヤがゲーム画面120(タッチパネル22)上で、タッチ入力をすることにより、ゲーム画面100に表示されたプレイヤキャラクタ102にボール106を打撃させる。なお、本実施例では、LCD14の画面全体に打撃操作のためのゲーム画面120を表示するようにしたが、ゲーム画面120をLCD14の一部領域に表示するようにしても良い。これ以降では、図面を用いて、ゲーム画面120の表示例およびタッチ入力例について、具体的に説明する。
まず、プレイヤは、プレイヤキャラクタ102にボール106を打撃させる操作(打撃操作)を行う前に、図4に示すようなメニュー画面200をLCD14に表示させて、プレイヤキャラクタ102が使用するクラブ104の種類およびショット(打撃)の種類を変更(設定)することができる。この第1実施例では、プレイヤキャラクタ102がボール106を打撃する前では、ボール106の現在位置の状態(ライの状態)やその現在位置からピンまでの距離に応じて、適切なクラブ104が自動的に選択されるため、クラブ104をプレイヤの戦略等により変更可能にしてある。また、この第1実施例では、プレ
イヤキャラクタ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座標)の差分に基づいて打撃力が設定される。
この第1実施例では、ショットパワー値を視認可能にしてある。ただし、簡単のため、ショットパワー値は一の位を切り捨てる(または、四捨五入する)ことにより、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つ以上の組み合わせで決定するようにしても良い。
また、この第1実施例では、図5(A)および図5(B)に示したように、ターゲットボール122からのY方向の距離が離れるに従ってショットパワー値が大きくなるように設定され、さらには飛距離Fが長くなるようにしてある。しかし、ゲームの種類によっては、ターゲットボール122からの距離が離れる(長くなる)に従って、パラメータが小さくされるようにしても良い。この場合には、たとえば、パラメータの小さい方が有利なゲーム展開となる。
なお、本実施例では、タッチY座標が同じであれば同じ打撃力が設定されるようにしたが、ターゲットボール122からの2次元距離が大きくなるに従って打撃力が大きくなるようにしても良い。この場合、同じ打撃力が設定される座標はターゲットボール122を中心とする同心円上(半円)に設定される。
また、上述したように、タッチオン座標(より具体的にはタッチオン時のX座標)に基づいて、プレイヤキャラクタ102のスタンスが決定される。図3に戻って、具体的には、スティック24でタッチオンした位置がゲーム画面120の中央から左側(左寄り)である場合には、クローズドスタンスとされる。また、スティック24でタッチオンした位置がゲーム画面120の中央から右側(右寄り)である場合には、オープンスタンスとされる。さらに、スティック24でタッチオンした位置がゲーム画面の中央ないしその近傍である場合には、スクェアスタンスが設定される。ただし、スクェアスタンスが設定されるゲーム画面120の中央およびその近傍は、図3において点線で示す範囲である。つまり、この第1実施例では、スクェアスタンスが設定される範囲は、ターゲットボール122の横方向の幅と同じ或いは略同じに設定される。
後述するように、ターゲットボール122の位置は移動される場合があるため、厳密には、ターゲットボール122の中心を通り、垂直方向に延びる直線(以下、「スタンス基準線140」という。)に基づいてスタンスを設定するようにしてある。したがって、スタンス基準線140から一定距離(この実施例では、ターゲットボール122の半径である。以下、同じ。)以上右側をタッチした場合には、オープンスタンスに設定される。また、スタンス基準線140から一定距離以上左側をタッチした場合には、クローズドスタンスが設定される。さらに、スタンス基準線140の左右一定距離未満である場合には、スクェアスタンスが設定される。これは、ターゲットボール122が移動されても同様であり、ターゲットボール122の移動に従ってスタンス基準線140も移動される。ただし、スタンス基準線140はゲーム画面120には表示されない。
上述のように決定されるスタンスは、ボール106の打ち出し方向に影響を与えるとともに、ボール106のサイドスピン値を決定するために使用される。ボール106の打ち出し方向は、前述の打ち出し基準方向(ベクトル)を、上述のように決定されるスタンスに応じて補正することにより決定される。具体的には、オープンスタンスの場合は打ち出し基準方向を水平方向の左方向に補正する。より具体的には、打ち出し基準方向ベクトルに水平方向左方向(打ち出し基準方向を正面とする左方向)のベクトルを加える。加えるベクトルの大きさはタッチ座標のX座標によって変化する。クローズドスタンスの場合は打ち出し基準方向を水平方向の右方向に補正する。
また、ボール106のサイドスピン値は、スピンの方向およびスピンの量を示すが、オープンスタンスの場合は、フェードボール(右方向のスピン)を示す値が設定され、クローズドスタンスの場合は、ドローボール(左方向のスピン)を示す値が設定される。このように決定されるサイドスピン値は、打ち出し後のボール106の水平方向の移動方向を変化させるために利用され、典型的には、前回のフレームにおけるボール106の水平方向の移動方向ベクトルに対して、サイドスピン値が示すスピンの方向のベクトルを加えて
、今回のフレームにおける水平方向の移動方向ベクトルが決定される。ただし、スピンの方向のベクトルの大きさは、タッチ座標のX座標によって変化する。また、ボールの移動とともにサイドスピン値(スピンの量)を減衰させても良い。
なお、タッチオン時のX座標と、ターゲットボール122の中心のX座標(スタンス基準線140のX座標)との差が大きいほど、打ち出し方向を大きく補正し、また、サイドスピン値(スピンの量)が大きくなるように設定される。
また、打ち出し方向や、打ち出し後のボールの移動方向は、風速・風向きによる補正値や重力・空気抵抗・揚力・反発係数・摩擦係数によって補正をしても良い。
このように、プレイヤがスティック24でゲーム画面120(タッチパネル22)上をタッチオンすると、そのタッチオン座標(2次元座標)に基づいて、打撃力およびスタンスが設定されるのである。具体的には、タッチオン座標のY座標に基づいて打撃力が設定され、タッチオン座標のX座標に基づいてスタンスが設定される。また、スタンスによって、打ち出し方向が補正され、サイドスピン値が設定される。ただし、後述するように、タッチオン座標は、スイング操作(スライド操作)のやり直しにより、更新される場合がある。
なお、タッチオン座標のX座標に基づいて、打ち出し方向の補正のみを行っても良いし、サイドスピン値のみを設定しても良い。
また、LCD14の解像度とタッチパネル22の検出精度とを同じにしてあるため、タッチパネル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)を小さくして、フルショットラインからターゲットボール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は、画面中央から左
寄りに表示される(通常よりもX軸マイナス方向に移動している)。一方、図11(B)に示すゲーム画面120では、ターゲットボール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フレーム(フレーム:画面更新単位時間(1/60秒))としてある。
図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)に戻って、インパクトラインを越える前に、スライド操作を途中で止めて、スライド操作の軌跡142を延長する場合について説明する。なお、図12(B)では、スライド操作の軌跡142の一部を点線で示すが、この点線で示す部分が延長された仮想スライド軌跡である。図12(B)は、フルショットエリア(2)にタッチオンし、それに継続して、ゲーム画面120の左斜め上方にスライド操作し、インパクトライン124の手前でスライド操作を終了した場合に、1フレーム毎に検出される座標データに対応する点およびスライド操作を終了した後に延長される1フレーム毎の座標データ(仮想タ
ッチ座標データ)に対応する点を書いた図解図である。この場合には、図12(A)に示した場合とは異なり、スライド操作がインパクトライン124を超えていないため、スライド操作を終了した後の軌跡142を、計算により求めるようにしてある。
具体的には、タッチオンの位置からタッチオフの位置までの距離(スライド距離)を算出するとともに、タッチオンからタッチオフまでの時間(スライド時間)を取得する。なお、第1実施例では、省略するが、タッチオンからタッチオフまでの時間をカウントするタイマが設けられる。そして、スライド距離とスライド時間とにより、スライド操作の軌跡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に対応して設けられ、この第1実施例では、ターゲットボール122の直径と同じ或いは略同じ長さに設定される。判定領域1220は、その中央にグッドショットエリア(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)に示す方法に限定される必要はなく、他の方法で判定するようにしても良い。たとえば、ターゲットボールの中心座標とインパクト点(スイング基準線q1と直線q2が交わる点)との距離に応じて判定しても良いし、また、図15(B)に示す例では、インパクトの判定領域1220をインパクトライン124(線分q2)上に固定的に設定しておき、スイング基準線q1上であり、第1座標knと第2座標kmとの中点からインパクトライン124に垂下した線分(または直線)q3が通るエリアによってインパクトが判定される。かかる場合には、直線q3とインパクトの判定領域1220(インパクトライン124)との交点がインパクト点に決定される。
たとえば、グッドショットエリア(I)と判定された場合には、目標(着弾予想点)に
対してボール106が真っ直ぐ飛んで行く(前述の打ち出し方向やサイドスピン値が補正されない)。つまり、ストレートボールは、そのまま真っ直ぐ飛んで行く。また、ドローボールやフェードボールでは、予めボール106にスピンがかけられているが、目標に対
してずれが生じない。つまり、フックやスライスの曲がりが発生しない。
また、プッシュボールエリア(II)と判定された場合には、目標に対してボール106が右方向に打ち出される(前述の打ち出し方向が水平方向の右方向に補正され、および/
または、サイドスピン値が右方向に曲がるような値に補正される)。また、スライド操作の軌跡142が通過する位置が判定領域1220の中央(ターゲットボール122の中心)から左方にずれるに従って、右方向への打ち出し角度が大きくされる。一方、スライド操作の軌道がプルボールエリア(III)を通過する場合には、目標に対してボール106
が左方向に打ち出される(前述の打ち出し方向が水平方向の左方向に補正され、および/または、サイドスピン値が左方向に曲がるような値に補正される)。また、スライド操作の軌跡142が通過する位置が判定領域1220の中央(ターゲットボール122の中心)から右方にずれるに従って、左方向への打ち出し角度が大きくされる。
さらに、ミスショットエリア(IV)と判定された場合には、打撃力(ショットパワー値)に応じて、シャンク(ボール106がクラブフェイスのネック寄りに当たること。このとき、ボール106は急激に右に飛ぶ。)またはチョロ(ミスショットでわずかしかボール106が転がらないこと。)となる。また、ショットパワー値に拘わらず、ランダムでテンプラ(超高弾道ショット:ミスショットでボール106が高く上がりすぎてしまうこと。)となる。この第1実施例では、ショットパワー値が40〜100%の場合には、シャンクとなり、ショットパワーが0〜39%の場合には、チョロとなる。
このように、プレイヤはスライド操作により、プレイヤキャラクタ102にボール106を打撃させるようにし、スライド操作の軌跡142に基づいて、ターゲットボール122に対応して設けられる判定領域1220を用いてインパクトを判定するため、ゲーム難易度(ゲームのレベルや使用するボール106の難易度)を変化させる場合には、ターゲットボール122の大きさを変化させるようにすれば良い。また、ターゲットボール122の大きさにあわせて、判定領域1220の大きさも調整される。なお、ターゲットボール122の画像を大きさごとに記憶しておいても良いし、計算処理により画像の大きさを変更しても良い。また、判定領域のエリアデータも同様である。
たとえば、図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のレベルに応じて自動で設定することもできる。
図18は、図2に示したRAM48のメモリマップの一例を示す図解図である。この図18を参照して、RAM48は、プログラム記憶領域480およびデータ記憶領域482を含む。プログラム記憶領域480には、ゲームプログラム(打撃処理プログラムを含む。)が記憶され、このゲームプログラムは、ゲームメイン処理プログラム480a、画像生成プログラム480b、画像表示プログラム480c、打撃パワー決定プログラム480d、スタンス決定プログラム480e、スライド操作処理プログラム480fおよびインパクト判定処理プログラム480gなどによって構成される。
ゲームメイン処理プログラム480aは、仮想ゲーム(実施例では、ゴルフゲーム)のメインルーチンを処理するためのプログラムである。画像生成プログラム480bは、後述する画像データ482aを用いて、ゲーム画面100およびゲーム画面120のそれぞれに対応するゲーム画像を生成するためのプログラムである。画像表示プログラム480cは、画像生成プログラム480bに従って生成されたゲーム画像をLCD12やLCD14に表示するためのプログラムである。また、ゲームキャラクタをモーション(アニメーション)表示したり、必要に応じて、画面効果(演出)を表示(表現)したりする。
打撃パワー決定プログラム480dは、プレイヤのタッチ入力に基づくタッチ座標に応じて、プレイヤキャラクタ102の打撃力を決定するためのプログラムである。スタンス決定プログラム480eは、プレイヤのタッチ入力に基づくタッチ座標に応じて、プレイヤキャラクタ102のスタンスを決定するためのプログラムである。スライド操作処理プログラム480fは、プレイヤによるスライド操作を検出し、検出したスライド操作に応じて、プレイヤキャラクタ102にスイングさせる、すなわちボール106を打たせるためのプログラムである。ただし、上述したように、プレイヤのスライド操作がインパクトライン124を超えない場合には、延長されるスライド操作の仮想スライド軌跡142を算出する。また、スライド操作の速度が一定値未満(停止している場合を含む。)である
場合やスライド操作の方向がターゲットボール122の表示される位置とは逆向きである場合には、スライド操作を始めからやり直す。インパクト判定処理プログラム480gは、プレイヤのスライド操作の軌跡142に応じてインパクトを判定するためのプログラムである。具体的には、上述したように、プレイヤのスライド操作の軌跡142が判定領域1220のいずれの領域を通過するかに応じて、グッドショット、プッシュショット、プルショットまたはミスショットを判定する。ミスショットの場合には、さらに、シャンク、チョロまたはテンプラを判定する。
なお、図示は省略するが、プログラム記憶領域480には、音再生プログラムやバックアッププログラムなども記憶される。音再生プログラムは、ゲーム音楽(BGM)、音(効果音)、音声(擬声音)のようなゲームに必要な音を再生(出力)するためのプログラムである。バックアッププログラムは、所定のイベントやプレイヤの指示に従って、ゲームデータ(途中データ,結果データ)をメモリカード28に記憶(セーブ)するためのプログラムである。
また、データ記憶領域482には、画像データ482a、タッチ座標データ482b、基準タッチ座標データ482c、スイング時間データ482d、ホール属性データ482eおよびライ情報データ482fなどのデータが記憶され、その他にもゴルフコースの仮想空間の地形データも記憶される。
画像データ482aは、プレイヤキャラクタ102、クラブ104やボール106のような他のキャラクタおよびコースやホールのような背景オブジェクトなどの画像を生成するためのデータ(ポリゴンデータやテクスチャデータ等)である。また、ゲーム画像120を表示するためのターゲットボール画像データ等も含まれる。タッチ座標データ482bは、プレイヤのタッチ入力に応じてタッチパネル22から入力される座標データであり、タッチオンからタッチオフまでに入力される複数の座標データが記憶(一時記憶)される。このタッチ座標データ482bは、後述する打撃処理(図19〜図23参照)を実行するときに用いられ、打撃操作が終了すると、消去される。基準タッチ座標データ482cは、スライド速度を算出するための基準となる座標データであり、打撃処理において更新される。
スライド操作時間データ482dは、スライド操作開始(タッチオン)からスライド操作終了(タッチオフ)までの時間のデータ(数値データ)である。ホール属性データ482eは、プレイ中のホールにおける天候(晴れ、曇り、雨など)や風(向き、強さ)のような属性についてのデータ(ないしフラグ)である。ライ情報データ482fは、ホールにおいて、ボール106が静止している位置(場所)やその状態を示す情報のデータである。具体的には、ボール106が止まっている位置がフェアウェイ、ラフ、バンカー、ウォーターハザードであるかどうかを示す情報やラフやバンカーで静止している場合のボール106の埋まり具合を示す情報が該当する。
また、データ記憶領域482には、スライドフラグ482gおよびスライド時間カウンタ482hが設けられる。スライドフラグ482gは、スライド操作(スイング操作)中か否かを判断するためのフラグである。スライド操作中であれば、スライドフラグ482gはオン(成立)される。一方、スライド操作中でなければ、スライドフラグ482gはオフ(不成立)される。スライドフラグ482gは、たとえば、1ビットのレジスタで構成され、オンの場合にはレジスタのデータ値が「1」に設定され、オフの場合にはレジスタのデータ値が「0」に設定される。スライド時間カウンタ482hは、スライド操作の時間をカウントするためのカウンタ(タイマ)であり、スライドフラグ482gがオンされると、カウントを開始(リセットおよびスタート)し、スライドフラグ482gがオフされると、カウントを終了する。
なお、図示は省略するが、データ記憶領域482には、サウンドデータやゲーム中に発生する他のゲームデータやフラグも記憶される。
具体的には、図2に示したCPUコア42が図19〜図23に示すフロー図に従って打撃処理を実行する。なお、図示は省略するが、図19〜図23に示す打撃処理は、ゴルフゲームについてのメインルーチンに含まれるサブルーチンであり、メインルーチンでは、打撃処理の他に、画像生成処理、画像表示処理、音再生処理、バックアップ処理およびゲーム終了処理等が実行される。なお、前述のように、ショット入力に関する処理は、打撃操作の他に、クラブ選択入力、ショット方向入力、縦方向のスピン値の入力、ショットタイプの入力などがあるが、図19に示す打撃処理は、打撃操作に関する処理のみを説明している。
図19を参照して、CPUコア42は打撃処理を開始すると、ステップS1で、タッチ入力を検出する。つまり、タッチパネル22から入力される座標データを検出する。続くステップS3では、タッチ入力があるかどうかを判断する。つまり、タッチパネル22から座標データが入力されたかどうかを判断する。ステップS3で“NO”であれば、つまり座標データが入力されなければ、タッチ入力が無いと判断して、そのままステップS1に戻る。ただし、タッチ入力は、1フレーム毎に検出される(S1)。なお、1フレーム内に数回検出してもかまわない。
一方、ステップS3で“YES”であれば、つまり座標データが入力されれば、タッチ入力があると判断して、ステップS5で、タッチ座標を取得する。具体的には、検出した座標データをデータ記憶領域482に記憶する。続くステップS7では、ステップS5で検出したタッチ座標を基準タッチ座標に設定する。つまり、ステップS5で検出した座標データを基準座標データ482cとしてデータ記憶領域482に記憶(コピー)する。
続いて、ステップS9では、ステップS5で検出したタッチ座標(基準タッチ座標)のX座標が画面(ゲーム画面120)の中央であるかどうかを判断する。つまり、タッチ座標のX座標がターゲットボール122の幅に収まっているかどうかを判断する。ステップS9で“YES”であれば、つまりタッチ座標のX座標が画面中央であれば、ステップS11で、プレイヤキャラクタ102をスクェアスタンスで表示し、ステップS13で、ボール106の軌道をストレートボールに決定して、図20に示すステップS25に進む。
一方、ステップS9で“NO”であれば、つまりタッチ座標のX座標が画面中央でなければ、ステップS15で、タッチ座標のX座標が画面中央より左側(左寄り)かどうかを判断する。ステップS15で“YES”であれば、つまりタッチ座標のX座標が画面中央より左側であれば、ステップS17で、プレイヤキャラクタ102をクローズドスタンスで表示し、ステップS19で、ボール106の軌道をドローボールに決定して、ステップS25に進む。しかし、ステップS15であれば、つまりタッチ座標のX座標が画面中央より右側(右寄り)であれば、ステップS21で、プレイヤキャラクタ102をオープンスタンスで表示し、ステップS23で、ボール106の軌道をフェードボールに決定して、ステップS25に進む。
このように、ステップS9〜S23においては、タッチ座標のX座標に基づいて、プレイヤキャラクタ102のスタンスを決定し、また、打球する際のボール106の軌道を決定しているのである。
図20に示すように、ステップS25では、タッチ座標(基準タッチ座標)のY座標に基づいて基本パワー(打撃力)を決定する。続くステップS27では、タッチ位置に、ク
ラブヘッドの画像128が表示される。このとき、スクェアスタンスでは、クラブフェイスがターゲットボール122に対して正面を向くように表示される。また、クローズドスタンスでは、クラブフェイスがターゲットボール122に対して正面を向くように表示される。さらに、オーブンスタンスでは、クラブフェイスがターゲットボール122に対して正面を向くように表示される。
続くステップS29では、タッチ入力を検出し、ステップS31では、タッチ入力があるかどうかを判断する。ステップS31で“NO”であれば、つまりタッチ入力がなければ、ステップS33で、クラブヘッドの画像128を消去して、図19に示すステップS1に戻って、打撃力とスタンスの再設定を待機する。つまり、スライド操作を始めからやり直す。一方、ステップS31で“YES”であれば、つまりタッチ入力があれば、ステップS35で、タッチ座標を取得する。そして、ステップS37で、タッチ位置が移動したかどうかを判断する。ただし、手振れによるタッチ位置の移動をスライド操作(スイング操作)と判断しないようにするために、ここでは、前回検出されたタッチ位置に比べて、一定距離(たとえば、3〜5dot)以上移動したかどうかを判断するようにしてある。
ステップS37で“NO”であれば、つまりタッチ位置が移動していなければ、スライド操作ではないと判断し、ステップS29に戻る。一方、ステップS37で“YES”であれば、つまりタッチ位置が移動していれば、スライド操作であると判断し、ステップS39で、座標の移動量(差)と移動方向とを算出する。続くステップS41では、移動方向が下向きかどうかを判断する。つまり、スライド操作の向き(移動方向)がターゲットボール122の表示方向とは逆向きかどうかを判断する。つまり、移動後のタッチ位置のY座標が移動前のタッチ位置のY座標よりも方が大きいかどうかを判断するのである。ステップS41で“YES”であれば、つまり移動方向が下向きである場合には、スライド操作を始めからやり直すと判断して、ステップS45に進む。一方、ステップS41で“NO”であれば、つまり移動方向が下向きでなければ、ステップS43で、移動量はスイングであるかどうかを判断する。つまり、連続するフレームの座標間の距離(差)が一定値以上であるかどうかを判断する。言い換えると、スライド速度が一定値以上であるかどうかに応じて、プレイヤキャラクタ102にスイングさせるための操作であるかどうかを判断しているのである。
ステップS43で“YES”であれば、つまり移動量がスイングであれば、図21に示すステップS47に進む。しかし、ステップS43で“NO”であれば、つまり移動量がスイングでなければ、ステップS45で、移動先を基準タッチ位置(基準タッチ位置データ482c)とし、図19に示すステップS9に戻る。つまり、スイング動作をさせるためのスライド操作でない場合には、始めからスライド操作をやり直すと判断して、移動先(移動後)のタッチ位置に基づいてスタンスおよび打撃力を再設定するのである。
図21に示すように、ステップS47では、スライドフラグ482gをオンする。続くステップS49では、スライド時間カウンタ482hをスタートし、ステップS51で、タッチ入力を検出する。続いて、ステップS53では、タッチ入力があるかどうかを判断する。ステップS53で“NO”であれば、つまりタッチ入力がなければ、ステップS65に進む。一方、ステップS53で“YES”であれば、つまりタッチ入力があれば、ステップS55で、タッチ座標を取得する。そして、ステップS57で、タッチ位置が移動しているかどうかを判断する。ステップS57で“NO”であれば、つまりタッチ位置が移動していなければ、そのままステップS51に戻る。
しかし、ステップS57で“YES”であれば、つまりタッチ位置が移動していれば、ステップS59で、座標の移動量と移動方向とを算出して、ステップ59で、座標の移動
量と移動方向を算出し、ステップS61で、移動方向が下向きかどうかを判断する。ステップS61で“NO”であれば、つまり移動方向が下向きでなければ、図22に示すステップS71に進む。一方、ステップS61で“YES”であれば、つまり移動方向が下向きであれば、ステップS63で、スイングフラグ482gをオフし、ステップS65で、移動先のタッチ座標を基準タッチ位置として、図19に示したステップS9に戻る。
また、ステップS53で“NO”であれば、つまりタッチ入力がなければ(タッチオフになったら)、ステップS67で、最後に検出したタッチ座標のY座標がインパクトライン124を超えたかどうかを判断する。図示は省略するが、ここでは、タッチ座標のY座標がインパクトライン124を超えずに、ターゲットボール122に接触したかどうかも判断する。後述するステップS71においても同じである。ステップS67で“YES”であれば、つまり最後に検出したタッチ座標のY座標がインパクトライン124を超えていれば、図22に示すステップS75にそのまま進む。一方、ステップS67で“NO”であれば、つまり最後に検出したタッチ座標のY座標がインパクトライン124を超えていなければ、ステップS69で、インパクトライン124までのスライド操作の軌跡142を計算して、ステップS75に進む。
なお、この第1実施例では、簡単のため、ステップS69で、インパクトラインまでのスライド軌跡142を計算すると、ステップS75に進むようにしてあるが、実際には、上述したように、スライド操作の速度を計算して、スライド操作の速度に応じて、スライド操作をやり直すか否かを判断する処理をしても良い。
図22に示すように、ステップS71では、最後に検出したタッチ座標のY座標がインパクトライン124を超えたかどうかを判断する。ステップS71で“NO”であれば、つまり最後に(ステップS55で)検出したタッチ座標のY座標がインパクトライン124を超えていなければ、スライド操作継続中であると判断し、ステップS73で、当該タッチ座標(タッチ位置)を新しいタッチ位置として、ステップS51に戻る。ただし、このとき、ステップS51では、次のフレームにおけるタッチ入力が検出される。
しかし、ステップS71で“YES”であれば、つまり最後に検出したタッチ座標のY座標がインパクトライン124を超えていれば、または、最後に検出したタッチ座標がターゲットボール122に接触していれば、ステップS75で、スライド時間カウンタ482hを停止する。このスライド時間カウンタ482hのカウント値が上述したスイング時間補正値Tであり、飛距離Fの算出に用いられる。続いて、ステップS77では、インパクトを判定する。つまり、スライド操作の軌道がターゲットボール122上を通過しているかどうか、およびスライド操作の軌道がターゲットボール122上を通過している場合には、その軌道が判定領域1220内のいずれの領域を通過しているのかを検出し、インパクトを判定する。
続くステップS79では、空振りかどうかを判断する。つまり、スライド操作の軌道がターゲットボール122上を通過していないかどうかを判断する。ステップS79で“YES”であれば、つまりスライド操作の軌道がターゲットボール122上を通過していなければ、空振りであると判断して、ステップS81で、空振り処理に決定し、ステップS93で、プレイヤキャラクタ102の打撃動作およびボール106の移動を表示して、打撃処理を終了する。たとえば、空振り処理が決定されると、ステップS93では、プレイヤキャラクタ102がスイングを開始し、ボール106を空振りする様子のアニメーションがゲーム画面100として表示されるのである。このように、どのような打撃をするかを決定した後に、プレイヤキャラクタ102のスイングが開始されるので、プレイヤは、ゲーム画面120を用いて打撃操作(スライド操作)をした後に、ゲーム画面100を見ることにより、どのようにボール106が移動するかを容易に確認することができる。以
下、同様である。ただし、空振り処理の場合には、ボール106は移動されない。
しかし、ステップS79で“NO”であれば、つまりスライド操作の軌道がターゲットボール122上を通過していれば、ステップS83で、インパクトがグッドショットとして判定されたかどうかを判断する。ステップS83で“NO”であれば、つまりインパクトがグッドショットとして判定されなければ、図23に示すステップS95に進む。しかし、ステップS83で“YES”であれば、つまりインパクトがグッドショットとして判定されれば、ステップS85で、ショットパワー(打撃力)が100%であるかどうかを判断する。
ステップS85で“NO”であれば、つまりショットパワーが100%でなければ、ステップS91で、通常ショット処理に決定して、ステップS93に進む。かかる場合には、ステップS93では、スタンスに応じたスイングをして、ボール106を打撃するようにプレイヤキャラクタ102の動作がアニメーション表示され、その後、スタンスに応じた軌道でボール106が移動(飛ぶ、跳ねる、転がる、止まる)する様子がアニメーション表示される。ただし、このときのボール106の飛距離Fは数1に従って算出される。以下、同様である。一方、ステップS85で“YES”であれば、つまりショットパワーが100%であれば、ステップS87で、マイナス補正値(この第1実施例では、スイング時間補正値Tおよびライ補正値L)が0%かどうかを判断する。ステップS87で“NO”であれば、つまりマイナス補正値が0%でなければ、ステップS91に進む。
なお、スイング速度による補正値(補正値αに含まれる。)を飛距離Fの算出に考慮する場合には、スイング時間補正値Tおよびライ補正値Lに加えて、スイング速度による補正値が0%であるかどうかも判断される。
一方、ステップS87で“YES”であれば、つまりマイナス補正値が0%であれば、ステップS89で、ナイスショット処理に決定し、ステップS93に進む。かかる場合には、ステップS93では、たとえば、上述した通常ショット処理と同様に、スタンスに応じたスイングをして、ボール106を打撃するようにプレイヤキャラクタ102の動作がアニメーション表示され、その後、スタンスに応じた軌道でボール106が移動する様子がアニメーション表示される。ただし、ナイスショットを表現するために、効果音を鳴らしたり、ボール106が移動する様子を華やかに表示したり、ナイスショットを示す文字をテキスト表示したりする。これらは少なくとも1つ実行すればよく、2つ以上の組み合わせで複合的に実行するようにしても良い。
図23を参照して、ステップS95では、インパクトがプッシュショットとして判定されたかどうか判断する。ステップS95で“YES”であれば、つまりインパクトがプッシュショットとして判定されれば、ステップS97で、プッシュショット処理に決定し、図22に示したように、ステップS93に進む。かかる場合には、たとえば、ステップS93では、上述した通常ショット処理と同様に、スタンスに応じたスイングをして、ボール106を打撃するようにプレイヤキャラクタ102の動作がアニメーション表示され、その後、スタンスに応じた軌道でボール106が飛び出し、或る程度ボールが飛んだ後に、ボール106がスライスするように、アニメーション表示される。ただし、スライス量は、上述したように、判定領域1220の中央からスライド操作の軌道が通過する位置までの距離に応じて決定される。
一方、ステップS95で“NO”であれば、つまりインパクトがプッシュショットとして判定されなければ、ステップS99で、インパクトがプルショットとして判定されたかどうかを判断する。ステップS99で“YES”であれば、つまりインパクトがプルショットとして判定されれば、ステップS101で、プルショット処理に決定して、ステップ
S93に進む。かかる場合には、たとえば、ステップS93では、上述した通常ショット処理と同様に、スタンスに応じたスイングをして、ボール106を打撃するようにプレイヤキャラクタ102の動作がアニメーション表示され、その後、スタンスに応じた軌道でボール106が飛び出し、或る程度ボール106が飛んだ後に、ボール106がフックする様子がアニメーション表示される。ただし、フック量は、判定領域1220の中央からスライド操作の軌道が通過する位置までの距離に応じて決定される。
しかし、ステップS99で“NO”であれば、つまりインパクトがプルショットとして判定されなければ、ステップS103で、テンプラかどうかを判断する。つまり、インパクトがミスショットとして判定され、ランダムでテンプラに決定されたかどうかを判断する。ステップS103で“YES”であれば、つまりミスショットがテンプラに決定されれば、ステップS105で、テンプラ処理に決定して、ステップS93に進む。かかる場合には、たとえば、ステップS93では、上述した通常ショット処理と同様に、スタンスに応じたスイングをして、ボール106を打撃するようにプレイヤキャラクタ102の動作がアニメーション表示され、その後、超高弾道でボール106が移動する様子がアニメーション表示される。ただし、かかる場合には、同じショットパワーであっても、通常ショットの場合よりも飛距離が短くされる。
一方、ステップS103で“NO”であれば、つまりミスショットがテンプラに決定されなければ、ステップS107で、インパクトがミスショットとして判定され、基本パワー値(打撃力)が40%以上であるかどうかを判断する。ステップS107で“YES”であれば、つまりインパクトがミスショットとして判定され、基本パワー値が40%以上であれば、ステップS109で、シャンク処理に決定し、ステップS93に進む。かかる場合には、たとえば、ステップS93では、上述した通常ショット処理と同様に、スタンスに応じたスイングをして、ボール106を打撃するようにプレイヤキャラクタ102の動作がアニメーション表示され、その後、打撃したボール106が急激に右方向に飛び出す様子がアニメーション表示される。また、ステップS107で“NO”であれば、つまりインパクトがミスショットエリアとして判定され、基本パワー値が40%未満であれば、ステップS111で、チョロ処理に決定し、ステップS93に進む。かかる場合には、たとえば、ステップS93では、上述した通常ショット処理と同様に、スタンスに応じたスイングをして、ボール106を打撃するようにプレイヤキャラクタ102の動作がアニメーション表示され、その後、打撃したボール106がわずかだけ転がる(飛ぶ)様子がアニメーション表示される。
この第1実施例によれば、タッチパネルが配置されるLCDに表示されるボールを打撃するようにスライド操作することにより、プレイヤキャラクタにボールを打撃させることができるので、簡単で直感的な操作が可能である。
また、この第1実施例では、タッチオン座標によって、プレイヤキャラクタのスタンスおよび打撃力を決定でき、つまりボールの飛距離やその軌跡142を決定でき、スライド操作によってインパクトが判定され、判定結果がボールの軌道に影響するため、実際にゴルフをプレイしている感覚を得ることができる。つまり、リアリティのあるゲームを楽しむことができる。
なお、この第1実施例では、2つのLCDを設けて2つのゲーム画面を表示する場合について説明したが、1つのLCDを設けて、これに対応してタッチパネルを設けておき、当該LCDに1つのゲーム画面を表示するようにしても良い。かかる場合には、たとえば、打撃操作が終了するまでは、実施例で示したゲーム画面120を表示し、打撃操作が終了すると、実施例で示したゲーム画面100を表示するようにすれば良い。
また、この第1実施例では、2つのLCDを設けたゲーム装置について説明したが、1つのLCDの表示領域を2つに分割し、少なくともいずれか一方の表示領域に対応してタッチパネルを設けるようにしても良い。この場合、縦長のLCDを設ける場合には、縦に2つ表示領域が並ぶようにLCDの表示領域を分割し、横長のLCDを設ける場合には、横に2つの表示領域が並ぶようにLCDの表示領域を分割するようにすれば良い。
さらに、この第1実施例では、タッチパネルのようなポインティングデバイスを用いるようにしたが、これに限定されるべきではない。ラップトップ型のPCに用いらえるタッチパッド、ペンタブレット、コンピュータマウスなども用いることができる。なお、コンピュータマウスの場合には、マウスのボタン操作をタッチ操作に対応付けることができる。
さらにまた、この第1実施例では、タッチオン座標に基づいて、スタンスと打撃力とを決定するようにしたが、少なくとも1つのパラメータを決定するようにしても良い。また、タッチオンからタッチオフまでに検出されるいずれか1つまたは2つ以上の座標を用いて、少なくとも1つのパラメータを決定するようにすることも可能である。さらに、タッチ位置の直交座標の各成分に基づいてパラメータを決定したが、極座標の各成分に基づいてパラメータを決定するようにしても良い。
また、この第1実施例では、ゲーム画面120では、縦方向(画面下から画面上)に向けてスライド操作することにより、プレイヤキャラクタ102にボール106を打撃させるようにした。しかし、横方向(左→右,右→左)にスライド操作することにより、プレイヤキャラクタ102にボール106を打撃させることもできる。たとえば、スライド操作の方向を選択するためのボタンないしアイコンを、図4に示したメニュー画面200に表示しておき、ボタン(アイコン)を指示(オン)することにより、スライド操作の方向を選択することができる。スライド操作の方向が決定されると、対応するスライド操作の方向のフラグ(図示しないが、RAM48に記憶される。)がオンされ、このフラグに基づいてゲーム画面120の表示が制御される。また、かかる場合には、図24または図25に示すようなゲーム画面100およびゲーム画面120を表示するようにすれば良い。図24に示す例では、プレイヤは、ゲーム画面120の右から左に向けてスライド操作することにより、プレイヤキャラクタ102に打撃させることになる。かかる場合には、LCD12に表示されるゲーム画面100では、右打ちのプレイヤキャラクタ102がプレイヤに背中を向けるように表示される。ただし、プレイヤキャラクタ102が打撃を終了した後では、球筋を分かり易く示すために、LCD12では、図7〜図9に示したようなゲーム画面100に切り替えられる。このことは、図25に示す場合についても同様である。また、図25に示す例では、プレイヤは、ゲーム画面120の左から右に向けてスライド操作することにより、プレイヤキャラクタ102に打撃させることになる。かかる場合には、LCD12に表示されるゲーム画面100では、ボール106を打撃するまでは、右打ちのプレイヤキャラクタ102がプレイヤに正面を向くように表示される。
なお、図24や図25におけるゲーム画面120を表示するための画像データは、図3におけるゲーム画面120を表示するための画像データとは別に記憶しておいても良いし、図3における画像データから演算処理により生成してもかまわない。また、ターゲットボールの表示領域や、ショットエリア・インパクトライン・フルショットラインの位置などの定義データも、それぞれ記憶しておいても良いし、演算処理により生成してもかまわない。
このように、横方向にスライド操作をする場合には、タッチオン座標のX座標によって打撃力が決定され、タッチオン座標のY座標によってスタンスが決定される。ただし、実際には、打撃力とスタンスとの算出処理等を、図3等に示したように、下から上向きにス
ライド操作する場合と同じにするため、タッチ入力の座標(タッチ入力X座標,タッチ入力Y座標)を変換するようにしてある。その変換式は、数5および数6に示される。数5が図24に示したように、右から左にスライド操作して、プレイキャラクタ102に打撃させる場合の変換式である。また、数6が図25に示したように、左から右にスライド操作して、プレイヤキャラクタ102に打撃させる場合の変換式である。
[数5]
変換後のタッチ入力X座標=192−タッチ入力Y座標+32
変換後のタッチ入力Y座標=タッチ入力X座標−32
[数6]
変換後のタッチ入力X座標=タッチ入力Y座標+32
変換後のタッチ入力Y座標=192−タッチ入力X座標+32
ただし、「192」は、LCD14の横方向のdot数である。また、「32」は、上述の第1実施例では図示を省略したが、ゲーム画面120のショットエリア(1)およびインパクトエリア(4)以外の領域(たとえば、左右の領域)に表示されるメニュー画面(またはアイコン,ボタン)の幅に相当するdot数であり、これを座標変換するときに考慮しているのである。
さらに、この第1実施例では、ゴルフゲームをプレイする場合のゲーム画面120を例示し、その操作方法(打撃操作の方法)について説明したが、これに限定されるべきではない。以下に、他のゲームで表示されるゲーム画面120の例を図示して説明するが、簡単のため、上述の実施例で示したゲーム画面120と同じ内容については同じ参照番号を付すとともに、同じ呼び方をすることにする。
たとえば、サッカーゲームにおいて、プレイヤキャラクタにボールを蹴る動作をさせることもできる。かかる場合には、図26に示すようなゲーム画面120がLCD14に表示される。このゲーム画面120では、上述の実施例で示した場合と同様に、インパクトライン124にボール(図面では分かり難いが、ここでは「サッカーボール」)122が表示される。また、スティック24でLCD14(タッチパネル22)上をタッチオンすると、スパイク(シューズ)の画像142が表示される。図26に示すゲーム画面120では、タッチ位置(タッチオン座標)のX座標によって、縦回転のボール、回転の無いボール、カーブ回転のボールまたはシュート回転のボールが決定される。ただし、ゲーム画面120の中央またはその近傍をタッチオンした場合には、縦回転のボールまたは回転の無いボールに決定されるが、これは、キックのパワーに応じて選択的に決定したり、ランダムに決定したりすることができる。また、タッチオン座標のゲーム画面120の中央からの横方向の距離に応じて、プレイヤキャラクタが蹴ったボールの曲がり具合が変化する点は、上述の実施例の場合と同じである。さらに、タッチオン座標のY座標で、キックのパワーが決定される。
また、このサッカーゲームにおいても、ターゲットボール122に対応して判定領域1220が設けられ、スライド操作の軌道が通過する領域に応じてボールの軌道に影響が与えられる。たとえば、スライド操作の軌道がグッドショットエリア(I)を通過した場合
には、プレイヤの意図したとおりに、プレイヤキャラクタが蹴ったボールが移動する。ただし、一定の条件を満たす場合には、特別なシュートを打ったりすることができる。また、スライド操作の軌道がプッシュショットエリア(II)やプルショットエリア(III)を
通過した場合には、プレイヤキャラクタが蹴ったボールの軌道がプレイヤの意図した方向から右または左にずれてしまう。さらに、スライド操作の軌道がミスショットエリア(IV)を通過した場合には、プレイヤキャラクタが蹴ったボールはプレイヤの意図した方向に移動しなかったり(飛んでいかなかったり)、(超)高弾道で飛んでいってしまったり、ほんのわずかしか移動しなかったりする。さらにまた、スライド操作の軌道がターゲット
ボール122(判定領域1220)上を通過しなければ、プレイヤキャラクタはボールを空振りする。
図示は省略するが、たとえば、LCD12には、プレイキャラクタを中心とするサッカーゲームのゲーム画面がアニメーション表示される。したがって、プレイヤは、プレイヤキャラクタがゲーム画面に表示されるボールを蹴るタイミングで、スティック24を用いてLCD14(タッチパネル22)上でターゲットボール122を蹴る操作(スライド操作)をするのである。たとえば、LCD12には、プレイヤキャラクタがフリーキック、パスまたはシュートなどのキック動作のアニメーションがゲーム画面として表示される。
また、図27は、野球ゲームにおいてLCD14に表示されるゲーム画面120の例を示す図解図である。このゲーム画面120では、インパクトライン124上にはホームベース152が表示される。たとえば、プレイヤは、スティック24を用いてLCD14(タッチパネル22)上で、タッチオンすると、タッチオン座標に対応する位置にボール(ここでは、野球のボール)150が表示される。野球ゲーム(厳密には、守備側でピッチングする際)では、たとえば、タッチオン座標のX座標に応じて、縦回転のボール(ストレート、ナックル)、回転の無いボール(フォーク)、カーブ回転のボール(カーブ、スライダー)またはシュート回転のボール(シュート、シンカー)が決定される。つまり、ピッチャーのようなプレイヤキャラクタの投球の球種が決定される。また、タッチオン座標のY座標に応じて、プレイヤキャラクタの投球の際における腕の振り量が決定される。これは、プレイヤキャラクタが投げるボールの最高速度は球種によって異なり、球種毎に設定される最高速度に腕の振り量を掛け算することにより、リアリティのある投球を実現させるためである。また、タッチオン座標のゲーム画面120の中央からの横方向の距離によって、プレイヤキャラクタが投げるボールの曲がり具合が変化するのは、上述の実施例と同様である。
また、上述の実施例と同様に、ホームベース152に対応して判定領域1220が設けられる。したがって、たとえば、スライド操作の軌跡142がグッドショットエリア(I)を通過する場合には、プレイヤキャラクタが投球したボールが、プレイヤの意図した通りの球種(球筋)で、意図したコースに移動する。ただし、一定の条件を満たす場合には、魔球を投げたりすることができる。また、スライド操作の軌道がプッシュショットエリア(II)やプルショットエリア(III)を通過した場合には、プレイヤキャラクタが投げ
たボールの軌道がプレイヤの意図したコースから右または左にずれてしまう。さらに、スライド操作の軌道がミスショットエリア(IV)を通過した場合には、プレイヤキャラクタが投げたボールはプレイヤの意図したコースとは全く反対に飛んでいったり、選択した球種の変化をしなかったり、タッチオンにより決定された腕の振り量に相当する速度が出なかったりする。或いは、プレイヤが投げたボールは、意図したコースに向かって飛んで行くが、ストライクゾーンよりも高すぎたり低すぎたりする。さらにまた、スライド操作の軌道がホームベース152(判定領域1220)上を通過しなければ、プレイヤキャラクタの投げたボールは明らかにホームベースを通らないコースに移動し、場合によってはデッドボールとなる。
図示は省略するが、たとえば、LCD12には、ピッチャーマウンドにプレイヤキャラクタ(ピッチャー)がプレイヤに対面するように立ち、画面手前にバッター(対戦チームのキャラクタ)がバッターボックスに立ち、ピッチャーが投球し、バッターがバットをスイングするアニメーションがゲーム画面として表示される。したがって、プレイヤは、選択したチームが守備側となったときに、ピッチャーに投球させる操作(スライド操作)をするのである。また、バッターがボールを打った場合には、打球が飛んで行く様子等のアニメーションやさらに守備についたキャラクタが、たとえば、打球を追いかける、捕球する、ボールを投げるなどの動作のアニメーションがゲーム画面として表示される。一方、
バッターがボールを打たなかった場合には、見逃したり、空振りしたり、キャッチャーがボールを捕球したりする動作のアニメーションがゲーム画面として表示される。
さらに、対戦ゲームやロールプレイングゲーム(RPG)における戦闘シーンでは、図28に示すようなゲーム画面120をLCD14に表示して、スライド操作により、敵キャラクタへの攻撃操作をすることができるようにすることもできる。図28に示すゲーム画面120では、インパクトライン124上に敵キャラクタ160が表示される。たとえば、戦闘シーンで、プレイヤがスティック24を用いてLCD14(タッチパネル22)上をタッチオンすると、そのタッチオン座標に対応する位置には、たとえば、魔法の属性(種類)に応じて予め決定された画像(または、プレイヤキャラクタの画像)が表示される。ただし、図28においては、簡単のため、図示は省略してある。ここでは、タッチオン座標のX座標に応じて、魔法の属性(種類)が決定される。つまり、ゲーム画面120の中央からの横方向の距離に応じて、異なる魔法が選択されるのである。また、タッチオン座標のY座標に応じて、魔法の強さが決定される。
ただし、魔法に限定される必要はなく、攻撃の種類およびその攻撃の強さを決定するようにしても良い。たとえば、タッチオン座標のX座標に応じて、パンチ、キック、投げ飛ばすなどの攻撃の種類を選択(決定)することができる。このとき、タッチオン座標のY座標に応じて、パンチ力やキック力を決定することができる。また、武器を用いた戦闘シーンなどでは、タッチオン座標のX座標に応じて、使用する武器を選択(決定)することができ、タッチオン座標のY座標に応じて、武器による攻撃の強さを決定することができる。
また、この対戦ゲームやRPGの戦闘シーンにおいても、上述の実施例と同様の判定領域1220が敵キャラクタ160に対応して設けられ、スライド操作の軌道が通過する領域に応じて攻撃の効果に影響が与えられる。たとえば、スライド操作の軌道がグッドショットエリア(I)を通過した場合には、プレイヤの意図したとおりに、プレイヤキャラク
タの攻撃が敵キャラクタに加えられる。したがって、たとえば、予め設定されている数値だけ、敵キャラクタの生命力を削減することができる。ただし、一定の条件を満たす場合には、予め設定されている数値以上の生命力を削減したり、一撃で敵キャラクタを死滅させたりすることもできる。
また、スライド操作の軌道がプッシュショットエリア(II)やプルショットエリア(III)を通過した場合には、プレイヤキャラクタの攻撃力が少し低下して、予め設定されて
いる数値よりも少し少ない数値だけ、敵キャラクタの生命力が削減される。さらに、スライド操作の軌道がミスショットエリア(IV)を通過した場合には、プレイヤキャラクタの攻撃がかなり低下して、予め設定されている数値よりも大幅に少ない数値だけ、敵キャラクタの生命力が削減される。さらにまた、スライド操作の軌道がターゲットボール122(判定領域1220)を通過しなければ、プレイヤキャラクタは魔法をかけることができず、攻撃に失敗したり、味方キャラクタに誤って攻撃してしまったりする。
ただし、判定領域1220内の各領域を敵キャラクタの各部位(盾等の防御アイテムも含む。)に対応させるようにしても良い。たとえば、判定領域1220の中央に、敵キャラクタの急所(頭部や胸部)を割り当て、判定領域1220の外側に行くにつれて、比較的ダメージが少なくなるように、急所以外の部位や盾等の防御アイテムを割り当てるようにすることもできる。このようにしても、スライド操作の軌跡142により、敵キャラクタに与えるダメージ、すなわちプレイヤキャラクタの攻撃による影響に変化を与えることができる。
図示は省略するが、たとえば、LCD12には、プレイキャラクタと敵キャラクタとの
戦闘シーンのゲーム画面がアニメーション表示される。したがって、プレイヤは、プレイヤキャラクタの攻撃のタイミングで、スティック24を用いてLCD14(タッチパネル22)上で敵キャラクタ160に魔法をかける(攻撃する)操作(スライド操作)をするのである。たとえば、LCD12には、プレイヤキャラクタや敵キャラクタが攻撃する様子、プレイヤキャラクタや敵キャラクタがダメージを受ける様子、攻撃の成功したり失敗したりした様子などのアニメーションがゲーム画面として表示される。
なお、横方向にスライド操作する場合に、図26〜図28に示したゲーム画面120の向き等が変更できる点は、図24や図25に示したゴルフゲームの場合と同様である。
<第2実施例>
第2実施例のゲーム装置10は、ゴルフゲームにおける打撃処理をより詳しくしく説明するとともに、移動体としてのボール106の移動に関するパラメータの設定をより詳しく説明した以外は上述の第1実施例と同じであるため、重複した説明は省略する。ただし、この第2実施例では、ボール106の移動に関するパラメータの設定方法(設定の条件)が第1実施例とは異なる点があるが、スライド操作に応じて当該パラメータが設定される点は同じである。
図29はRAM48のメモリマップの例を示す図解図である。なお、説明の都合上、同じプログラムやデータ等であっても、第1実施例に示した参照符号とは異なる番号を付してある。図29に示すように、RAM48はプログラム記憶領域70およびデータ記憶領域72を含む。プログラム記憶領域70は、ゲームプログラムを記憶し、このゲームプログラムは、ゲームメインプログラム70a、画像生成プログラム70b、画像表示プログラム70c、各種設定プログラム70d、スライド操作開始プログラム70e、スライド操作プログラム70f、スライド軌跡延長プログラム70g、スライド操作判定プログラム70h、スライド操作中断プログラム70i、インパクト判定プログラム70jおよびショット前プログラム70kなどによって構成される。
ゲームメイン処理プログラム70a、画像生成プログラム70b、画像表示プログラム70cおよびインパクト判定プログラム70jは、第1実施例で示した、ゲームメイン処理プログラム480a、画像生成プログラム480b、画像表示プログラム480cおよびインパクト判定処理プログラム480gのそれぞれと同じであるため、重複した説明は省略する。
各種設定プログラム70dは、プレイヤキャラクタ102が使用するクラブ104を決定(変更)したり、ショット方向を決定(変更)したり、ボール106のスピン(トップスピンまたはバックスピン)を設定(変更)したり、ショットタイプを決定(変更)したりするためのプログラムである。スライド操作開始プログラム70eは、スライド操作の開始に先立って、プレイヤによるタッチ入力を検出し、タッチオン時の位置座標を記憶したり、スライド操作(スイング)についての時間をカウントするタイマ(後述するスライド操作時間基準タイマ762、スライド操作停止時間基準タイマ764)をスタートさせたりするためのプログラムである。
スライド操作プログラム70fは、ショットパワー値Pを決定したり、ショットパワー値Pを表示したり、クラブ104の種類に応じてインパクトライン124を表示したり、クラブヘッドの画像128を表示したり、プレイヤキャラクタ102のスタンスを決定したり、スライド操作に対応する軌跡142を表示したりするためのプログラムである。スライド軌跡延長プログラム70gは、スライド操作がインパクトライン124を超えず、しかもターゲットボール122に接触しないで終了(タッチオフ)されたとき、スライド操作の軌跡142を延長するためのプログラムである。
スライド操作判定プログラム70hは、スライド操作の継続中、中断またはやり直しを判定するためのプログラムである。スライド操作中断判定プログラムは、スライド操作判定プログラム70hによってスライド操作を継続すると判定された後に、ターゲットボール122とは逆向きにスライド操作した場合やスライド操作を停止した時間が一定時間以上である場合やタッチ座標の変化量が一定距離以下である場合等に、スライド操作を中断するためのプログラムである。
ショット前プログラム70kは、インパクト判定プログラム70jによって判定されたインパクト、ライの状態、選択中のクラブ104の種類に応じてボール106の移動に関するパラメータ(打ち出し方向補正値、打ち出し角度補正値、スピン補正値、パワーロス補正値)を決定するためのプログラムである。これにより、ナイスショット、グッドショット、ミスショット(フック、スライス、テンプラ、シャンク、チョロ)および空振りが決定される。
なお、図示は省略するが、プログラム記憶領域70に、音再生プログラムやバックアッププログラムなどが記憶される点は、第1実施例の場合と同じである。 データ記憶領域72には、様々なデータやフラグが記憶され、また、タイマが設けられる。データ記憶領域72の具体的な内容は図30に示される。図30を参照して、データ記憶領域72は、画像データ720、マップデータ(地形データ)722、選択クラブデータ724、ショット方向データ726、ボールスピンデータ728、ショットタイプ設定データ730、フルショットライン位置データ732、インパクトライン位置データ734、ターゲットボールサイズデータ736、ターゲットボール位置データ738、ライ状態データ740、タッチ初期位置データ742、タッチ現在位置データ744、タッチ直前位置データ746、ショットパワー値データ748、スタンス値データ750、スイング速度補正データ752、インパクト結果データ754、インパクト点データ756、打ち出し方向補正データ758、打ち出し角度補正データ760、パワーロス補正データ762、スピン補正データ764などのデータを記憶する。また、データ記憶領域72には、スライド操作時間基準タイマ766およびスライド操作停止時間基準タイマ768などのタイマが設けられる。さらに、データ記憶領域72は、スイング処理フラグ770、タッチオンフラグ772、スイング速度補正フラグ774およびナイスショットフラグ776などのフラグを記憶する。
画像データ720は、第1実施例で説明した画像データ482aと同じであるため、重複した説明は省略する。マップデータ(地形データ)722は、仮想ゲーム(たとえば、ゴルフゲーム)についてのマップデータである。マップデータ(地形データ)722は、コースの形状、コース内の地面の高さ(高低)ないし傾斜、コース内のフェアウェイ、ラフ、ベアグランド、ハザード、バンカー、グリーン(グリーンエッジを含む。)、樹木、カートロードなどの配置位置などのデータを含む。
選択クラブデータ724は、ボール106とピンとの距離で予め決定された、または、プレイヤが設定(変更)したクラブ104、すなわちプレイヤキャラクタ102に使用させるクラブ104についてのパラメータ(データ)である。クラブ104のパラメータとしては、飛距離、ロフト角、打ち出し角、初速、バックスピンおよびサイドスピンなどの値(数値)が該当する。ショット方向データ726は、第1実施例における打ち出し基準方向を示すデータであり、現時のボール106の位置とピンとを結ぶ直線で予め決定される、または、プレイヤによって設定(変更)されるショットの方向についてのデータである。プレイヤキャラクタ102がボール106を打撃する前では、ボール106の現在位置とピン(ホール)とを結ぶ直線方向がショット方向として予め決定されており、プレイヤは、このショット方向を戦略により変更することができるのである。ただし、ショット方向は変更しなくても良い。
ボールスピンデータ728は、打撃するボール106にかける縦方向のスピン(たとえば、トップスピンまたはバックスピン)についてのデータである。具体的には、ボールスピンデータ728は、スピンの方向およびスピンの量(以下、これらをまとめて「スピン値」と言うことがある。)のデータであり、これらはプレイヤによって設定(変更)される。ただし、プレイヤが何ら指示しない場合には、スピン値は設定されない。
ショットタイプ設定データ730は、プレイヤが選択したショットタイプ(ノーマルショット、チップショット、ロブショット、ピッチショットまたはピッチ&ラン)による補正値のデータである。この補正値によって補正されるのは、選択クラブデータ724が示すクラブ104のパラメータに含まれる初速とロフト角についての値(数値)である。
フルショットライン位置データ732は、LCD14に表示されるゲーム画面120に設けられるショットエリア(1)におけるフルショットエリア(2)とその他のエリア(3)とを区切るフルショットライン126を表示するための座標(図3に示したスイング操作の方向では、水平座標(Y座標))データである。ただし、フルショットライン126は、予め決定(固定)されている。
なお、図24および図25に示したスイング操作の方向では、フルショットライン126を表示する座標は、垂直座標(X座標)である。これ以降では、簡単のため、図3に示したゲーム画面120について説明することにするが、図24および図25に示したゲーム画面120では、図3に示したゲーム画面120を左または右に90度回転させれば良い。
インパクトライン位置データ734は、ショットエリア(1)とインパクトエリア(4)とを区切るインパクトライン124を表示する水平座標(Y座標)のデータである。第1実施例で説明したように、インパクトライン124の位置(表示位置)は、プレイヤキャラクタ102が使用するクラブ104の種類に応じて変化される。
ターゲットボールサイズデータ736は、ターゲットボール122の大きさ(半径ないし直径)を規定するためのデータであり、たとえば、ゲームの難易度に応じて変化される。ただし、図27および図28に示したように、円形でない画像(152,160)をターゲットボール122に変えて表示する場合には、画像(152,160)の中心から基準点(ホームベースの1の角、敵キャラクタの頭頂点)までの距離のデータが記憶される。ターゲットボール位置データ738は、ターゲットボール122の表示位置のデータである。第1実施例で説明したように、ボール106の置かれた場所の左右の傾斜(つま先上がり、つま先下がり)の状態により、ターゲットボール122の表示位置が決定される。図3に示したようなゲーム画面120を表示する場合には、その左右のずれ量すなわちX座標のデータをターゲットボール位置データ738として記憶すれば良い。ただし、Y座標はインパクトライン位置データ734が示す座標である。
ライ状態データ740は、ボール106の置かれた位置の地面(ライ)の状態を示すデータである。具体的には、ティアップ、グリーン、グリーンエッジ、フェアウェイ、ラフ(浅・普通・深)、バンカー(浅・普通・目玉)、木、カートロード、ベアグランド、ハザードの別を示すデータである。このデータに基づいて、ボール106の飛距離Fが変化され(数1参照)、また、このデータに応じたライの状態に相当するテクスチャ画像をゲーム画面120に表示することにより、プレイヤにライの状態を視認させることができる。
タッチ初期位置データ742は、プレイヤがタッチオンした位置(タッチ座標)の座標
データである。このタッチ初期位置データ742が示すタッチ座標のY座標にショットパワーライン127が表示される。タッチ現在位置データ744は、現在(現フレーム)のタッチ座標の座標データである。このタッチ現在位置データ744は、スライド操作が開始されてから終了するまでの間、1フレーム毎に更新される。クラブヘッドの画像128は、このタッチ現在位置データ744が示す座標に、その中心が来るように表示される。ただし、このとき、クラブヘッドの画像128は、そのフェイスがターゲットボール122を向くように、その中心を回転させて表示される。したがって、タッチ現在位置座標データ744が更新されると、クラブヘッドの画像128の表示も更新される。タッチ直前位置データ746は、現在のタッチ座標の直前(1フレーム前)に検出されたタッチ座標の座標データである。したがって、タッチ現在位置データ744が更新されるときに、タッチ直前位置データ746も更新される。具体的には、現在位置データ744がタッチ直前位置データ746としてコピーされた後、現在位置データ744が更新される。タッチ現在位置データ744とタッチ直前位置データ746とを結ぶ直線が軌跡142の一部としてLCD14のゲーム画面120に表示される。つまり、ショットエリア(1)に軌跡142が描画される。
ショットパワー値データ748は、ショットパワー値Pについての数値データであり、0〜100%の間で設定される。ショットパワー値Pの決定方法は、第1実施例で説明したとおりである。このショットパワー値データ748は、飛距離Fの算出に用いられるのみならず、ショットパワー値Pをゲーム画面120に表示する際に参照される。ただし、第1実施例で説明したように、ショットパワー値は、一の位を切り捨てて、10%単位でショットパワーライン127の近傍に表示される。
スタンス値データ750は、タッチ初期位置データ742が示すタッチ座標(タッチオン座標)とスタンス基準線140との水平距離についての数値データである。具体的には、タッチオン座標がスタンス基準線140の右側である場合には、水平距離の符号はプラスで示され、逆に、タッチオン座標がスタンス基準線140の左側である場合には、水平距離の符号はマイナスで示される。ただし、タッチ座標がスタンス基準線140上であれば、水平距離は±0である。このスタンス値データ748は、スタンスを設定したり、ボール106の球筋(打ち出し方向の補正、サイドスピンによるボール106の軌道の補正)を決定したりする場合のみならず、指示画像130の表示にも利用される。つまり、第1実施例で示したように、スタンス(スタンス値データ748)に応じて、指示画像130の表示が変化される(図7〜図9参照)。
スイング速度補正データ752は、スイング速度に基づいて算出したスイング速度の補正値についての数値データである。スイング速度の補正値は、後述するスライド操作時間基準タイマ766からスイング時間を取得し、スイング開始からインパクトまでの時間が一定時間以上経過した場合に、その経過時間に応じて設定(算出)される。このとき、後述するスイング速度補正フラグ774がオン(成立)される。ただし、スイング時間が一定時間未満である場合には、スイング速度の補正値は設定されず、このとき、スイング速度補正フラグ774はオフ(不成立)される。
インパクト結果データ754は、スイング基準線q1とインパクト領域1220とから判定したインパクトの状態(結果)、すなわち「グッドショット(グッド)」、「プッシュショット(プッシュ)」、「プルショット(プル)」、「ミスショット(ミス)」または「空振り」の別を示すデータである。このインパクト結果データ754に基づいて、LCD12のゲーム画面100に表示されるボール106の移動に変化が与えられる。ただし、「空振り」の場合には、ボール106は移動しない。インパクト点データ756は、スイング基準線q1とインパクト領域1220とが交差する点(インパクト点)の座標データである。インパクト結果データ754が「プッシュ」または「プル」を示すとき、後
述するショット前処理において、インパクト点データ756が示すインパクト点の座標に基づいて、打ち出し方向が補正され、サイドスピン値が補正される。
打ち出し方向補正データ758は、ボール106の打ち出し方向(水平方向)の補正値についての数値データである。打ち出し方向は、ショット方向データ726が示すショット方向を0度(基準)とした場合に、右方向に0〜90度、左方向に0〜90度で表わされる。ただし、打ち出し方向は、右方向をプラスとし、左方向をマイナスとしてある。この打ち出し方向の補正値は、上述したインパクト点データ756が示すインパクト点の座標に基づいて算出される。打ち出し角度補正データ760は、ボール106の打ち出し角度(垂直方向の角度)の補正値についての数値データである。打ち出し角度は、ボール106が地面に置かれた状態から直進する場合を0度として、上方向に10〜60度で表わされる。打ち出し角度補正値は、ボールスピンデータ728が示すスピン値に基づいて算出される。
パワーロス補正データ762は、パワーロス補正値についての数値データであり、スイング速度に応じて決定(算出)される。具体的には、ショットパワー値データ748が示すショットパワー値Pの補正値である。スピン補正データ764は、トップスピンまたはバックスピンについての補正値である。トップスピンは、30〜50%の間で補正され、バックスピンは0〜30%の間で補正される。ただし、トップスピンはプラスで表わされ、バックスピンはマイナスで表わされる。
スライド操作時間基準タイマ766は、スライド操作の開始からスライド操作の終了(軌跡142を予測する場合には予測の終了)までの時間(スイング操作の時間)をカウントするタイマである。上述したように、このスライド操作時間基準タイマ766のカウント値(スイング時間)に基づいてスイング速度補正値が算出される。スライド操作停止時間基準タイマ768は、スライド操作が停止されている時間(スイング操作停止の時間)をカウントするタイマである。
スイング処理フラグ770は、スイング操作すなわちスライド操作が行われているかどうかを判別するためのフラグである。具体的には、スライド操作中では、スイング処理フラグ770はオンされ、スライド操作を終了または中断すると、スイング処理フラグ770はオフされる。タッチオンフラグ772は、タッチオンの状態か否かを判別するためのフラグである。具体的には、タッチオンの状態では、タッチオンフラグ772はオンされ、タッチオフの状態では、タッチオンフラグ772はオフされる。
スイング速度補正フラグ774は、スイング速度の補正処理を実行する否かを判別するためのフラグである。上述したように、スイング速度の補正値が設定されると、スイング速度補正フラグ774はオンされ、逆に、スイング速度の補正値が設定されなければ、スイング速度補正フラグ774はオフされる。ナイスショットフラグ776は、LCD12に表示されるゲーム画面100において、ナイスショットを演出するか否かを判別するためのフラグであり、ナイスショットを演出する場合にはオンされ、ナイスショットを演出しない場合にはオフされる。このナイスショットフラグ776は、インパクトの判定結果が「グッド」を示し、さらに、所定の条件(この第2実施例では、ショットパワー値=100%かつスイング速度補正値=0%)を満たす場合に、オンされる。これ以外は、ナイスショットフラグ776はオフである。つまり、この第2実施例では、ナイスショットは、グッドショットよりもさらに良いショットであることを意味する。
具体的には、CPUコア42が図31に示す打撃処理のフロー図を処理する。なお、図31に示す打撃処理では、打撃操作だけでなく、クラブ選択入力、ショット方向入力、縦方向のスピン値の入力、ショットタイプの入力などの処理も打撃処理として説明する。
図31を参照して、CPUコア42は打撃処理を開始すると、ステップS201で、各種設定処理(図32参照)を実行し、ステップS203で、画面表示処理(図33参照)し、そして、ステップS205で、スライド操作開始処理(図34参照)を実行する。次のステップS207では、スライド操作を開始したかどうかを判断する。ここでは、タッチオンフラグ772がオフ状態からオン状態に変化したかを判断する。タッチオンフラグ772がオフ状態或いはオン状態のまま、または、オン状態からオフ状態に変化すれば、ステップS207で“NO”となり、スライド操作を開始していないと判断し、そのままステップS201に戻る。しかし、タッチオンフラグ772がオフ状態からオン状態に変化すれば、スライド操作を開始したと判断して、ステップS209で、スライド操作(1)処理(図35および図36参照)を実行する。
続いて、ステップS211で、スライド操作(2)処理(図37および図38参照)を実行し、ステップS213で、スライド操作判定処理(図40)を実行し、ステップS215で、スライド操作の継続かどうかを判断する。ここでは、スイング処理フラグ770がオンであるかどうかを判断する。ステップS215で“YES”であれば、つまりスイング処理フラグ770がオンであれば、スライド操作の継続であると判断して、ステップS217で、スライド操作中断判定処理(図41参照)を実行し、ステップS219で、スライド操作を中断するかどうかを判断する。ここでは、スイング処理フラグ770がオフであるかどうかを判断する。ステップS219で“NO”であれば、つまりスイング処理フラグ770がオンであれば、スライド操作を中断しないと判断して、ステップS211に戻る。一方、ステップS219で“YES”であれば、つまりスイング処理フラグ770がオフであれば、スライド操作をやり直すべく、ステップS201に戻る。
また、ステップS215で“NO”であれば、つまりスイング処理フラグ770がオフであれば、スライド操作の終了であると判断して、ステップS221で、インパクト判定処理(図42および図43参照)を実行し、ステップS223で、ショット前処理(図44〜図47参照)を実行し、そして、ステップS225で、ショット演出処理(図48参照)を実行して、打撃処理を終了する。
図32は、図31のステップS201に示す各種設定処理のフロー図である。図32を参照して、CPUコア42は、各種設定処理を開始すると、ステップS231で、クラブ104の変更(設定)かどうかを判断する。ステップS231で“NO”であれば、つまりクラブ104の変更でなければ、そのままステップS235に進む。しかし、ステップS231で“YES”であれば、つまりクラブ104の変更であれば、ステップS233で、変更したクラブ104のパラメータを選択クラブデータ724としてRAM48に記憶(更新)して、ステップS235に進む。
ステップS235では、ショット方向の変更(設定)かどうかを判断する。ステップS235で“NO”であれば、つまりショット方向の変更でなければ、そのままステップS239に進む。しかし、ステップS235で“YES”であれば、つまりショット方向の変更であれば、変更したショット方向に対応するショット方向データ726をRAM48に記憶(更新)して、ステップS239に進む。
ステップS239では、スピン(縦方向のスピン)の設定変更かどうかを判断する。ステップS239で“NO”であれば、つまりスピンの設定変更でなければ、そのままステップS243に進む。しかし、ステップS239で“YES”であれば、つまりスピンの設定変更であれば、ステップS241で、変更したスピン値に対応するボールスピンデータ728をRAM48に記憶(更新)して、ステップS243に進む。
ステップS243では、ショットタイプの変更(設定)かどうかを判断する。ステップ
S243で“NO”であれば、つまりショットタイプの変更でなければ、そのまま各種設定処理をリターンする。しかし、ステップS243で“YES”であれば、つまりショットタイプの変更であれば、ステップS245で、変更したショットタイプの補正値に対応するショットタイプ設定データ730をRAM48に記憶して、各種設定処理をリターンする。
図33は、図31のステップS203の画面表示処理を示すフロー図である。図31を参照して、CPUコア42は、画面表示処理を開始すると、ステップS251で、フルショットライン126の水平座標(Y座標)に対応するフルショットライン位置データ732をRAM48に記憶する。次のステップS253では、フルショットライン位置データ732が示す水平座標の位置にフルショットライン126を表示する。次に、ステップS255で、選択クラブデータ724が示すパラメータから、インパクトライン124の水平座標を取得し、ステップS257で、インパクトライン124の水平座標すなわちインパクトライン位置データ734をRAM48に記憶し、ステップS259で、インパクトライン位置データ734が示す水平座標の位置にインパクトライン124を表示する。つまり、プレイヤキャラクタ102が使用するクラブ104の種類に応じてインパクトライン124の表示される。
続いて、ステップS261では、ゲーム難易度から、ターゲットボールの大きさを取得する。上述したように、ゲーム難易度は、使用するクラブ104に応じて変化させたり、ゲームの開始に先立って選択しておいたり、ゲームの進行状況に応じて変化したりする。また、ゲーム難易度が低いほど、ターゲットボール122は大きくされ、ゲーム難易度が高いほど、ターゲットボール122は小さくされる。第1実施例で説明したように、ゲーム難易度は3段階で設定され、ステップS261では、段階に応じたターゲットボール122の大きさが取得されるのである。ターゲットボール122の大きさを取得すると、ステップS263で、ターゲットボール122の大きさすなわちターゲットボールサイズデータ736をRAM48に記憶する。
次に、ステップS265で、ボール106の現在位置の左右傾斜(傾斜および傾斜量)を取得(算出)する。つまり、第1実施例で説明したように、プレイヤキャラクタ102とボール106との高低差dを数3に従って算出し、左右傾斜を数4に従って算出する。ボール106の現在位置の左右傾斜を取得すると、ステップS267で、ボール106の現在位置の左右傾斜で決定されるターゲットボール122の位置(ターゲットボール座標x)すなわちターゲットボール位置データ738をRAM48に記憶する。そして、ステップS269で、ターゲットボール位置データ738が示す位置にターゲットボール122を表示する。
次に、ステップS271では、ボール106の現在位置におけるライの状態を取得する。上述した仮想ゲームのマップデータ(地形データ)722からライの状態を取得する。ライの状態を取得すると、ステップS273で、ボール106の現在位置におけるライの状態すなわちライ状態データ740をRAM48に記憶する。そして、ステップS275で、ライ状態データ740が示すライ状態に相当するテクスチャ画像をLCD14に表示して、画面表示処理をリターンする。つまり、ステップS271〜ステップS275の処理を実行することにより、現在のボール106のライ状態に応じたゲーム画面120が表示され、スイング操作(スライド操作)を実行するプレイヤにリアリティを与えることができる。たとえば、ボール106の現在位置のライ状態がバンカーであれば、砂地にターゲットボール122が置いてあるようなゲーム画面120が表示される。
図34は、図31のステップS205に示したスライド操作開始処理を示すフロー図である。図34を参照して、CPUコア42は、スライド操作開始処理を開始すると、ステ
ップS281で、タッチ入力を検出する。次のステップS283では、タッチ入力があるかどうかを判断する。ここでは、タッチパネル22からタッチ座標の座標データが入力されたかどうかを判断する。ステップS283で“NO”であれば、つまりタッチ入力が無ければ、そのままステップS281に戻る。一方、ステップS283で“YES”であれば、つまりタッチ入力があれば、ステップS285で、タッチオンフラグ772をオンし、ステップS287で、スイング処理フラグ770をオンし、ステップS289で、今回検出したタッチ座標(タッチオン座標)の座標データをタッチ現在位置データ744としてRAM48に記憶する。
続くステップS291では、タッチオン座標の座標データを、タッチ初期位置データ742としてRAM48に記憶(コピー)する。また、ステップS293で、タッチオン座標の座標データを、タッチ直前位置データ746として記憶(コピー)する。そして、ステップS295で、スライド操作時間基準タイマ766をスタートし、ステップS297で、スライド操作停止時間基準タイマ768をスタートして、スライド操作開始処理をリターンする。
図35および図36は、図31に示したステップS209のスライド操作(1)処理を示すフロー図である。このスライド操作(1)処理では、主として、タッチオン座標に基づいて、ショットパワー値Pおよびスタンスを設定(決定)する。図35を参照して、CPUコア42は、スライド操作(1)処理を開始すると、ステップS301で、タッチ初期位置データ742からタッチ座標(ここでは、タッチオン座標)を取得する。次のステップS303では、ターゲットボール位置データ738からターゲットボール座標(ターゲットボール122の位置)を取得し、ステップS305で、タッチ座標とターゲットボール座標xとからクラブ表示角度を算出する。具体的には、タッチ座標とターゲットボール座標xとを結ぶ直線(線分)とクラブフェイスが直交するように、クラブ表示角度が算出される。
次に、ステップS307で、タッチ座標とターゲットボール座標xとからスタンス値を求め(算出し)、そのスタンス値に対応するスタンス値データ750をRAM48に記憶する。続くステップS309では、現在のクラブ種類、表示角度で、タッチオン座標にクラブヘッドを表示する。つまり、選択クラブデータ724が示すクラブ種類およびステップS305において算出したクラブ表示角度で、タッチ座標にクラブヘッドの画像128をLCD14に表示するのである。このとき、タッチ座標がクラブフェイスの中心と重なり、ステップS305で算出したクラブ表示角度となるように、クラブヘッドの画像128が表示される。
続いて、ステップS311では、タッチ座標上を水平方向にショットパワーライン127を表示し、ステップS313で、ショットパワーライン127の表示位置(水平(Y)座標)をRAM48に記憶する。次に、ステップS315で、インパクトライン124の水平座標(Y座標)を取得し、ステップS317で、フルショットライン126の水平座標(Y座標)を取得する。そして、ステップS319で、ショットパワーライン127、インパクトライン124、フルショットライン126の相対位置から、ショットパワー値を算出する。この算出方法は第1実施例で説明したとおりである。
図36に示すように、次のステップS321では、ショットパワー値が100%以上であるかどうかを判断する。ステップS321で“NO”であれば、つまりショットパワー値が100%未満であれば、そのままステップS325に進む。しかし、ステップS321で“YES”であれば、つまりショットパワー値が100%以上であれば、ショットパワー値を100%に補正して、ステップS325に進む。つまり、ステップS321およびS323の処理により、ショットパワー値が100%を超えないように、制限してある
。
ステップS325では、ショットパワー値に対応するショットパワー値データ748をRAM48に記憶する。次のステップS327では、ショットパワー値をショットパワーライン127の近傍であり、ゲーム画面120の左端に表示する(図5参照)。ただし、表示されるショットパワー値は10%単位である。
続いて、ステップS329では、スタンス値を取得する。つまり、スタンス値データ750が読み出される。次のステップS331では、スタンス値が一定値(たとえば、ターゲットボール122の半径)未満であるかどうかを判断する。具体的には、スタンス基準線140の垂直座標(X座標)とタッチオン座標のX座標との距離がターゲットボール122の半径未満であるかどうかを判断するのである。ステップS331で“YES”であれば、つまりスタンス値が一定値未満であれば、ステップS333で、スクェアスタンスに設定して、ステップS341に進む。たとえば、図示しないスクェアスタンスについてのフラグをオンする。このとき、オープンスタンスについてのフラグ(図示せず)およびクローズドスタンスについてのフラグ(図示せず)の両方をオフする。
しかし、ステップS331で“NO”であれば、つまりスタンス値が一定値以上であれば、ステップS335で、タッチオン座標がスタンス基準線140の右側かどうかを判断する。具体的には、スタンス値の符号がプラスであるかどうかを判断する。ステップS335で“YES”であれば、つまりタッチオン座標がスタンス基準線140の右側であれば、ステップS337で、オープンスタンスに設定して、ステップS341に進む。ここでは、たとえば、オープンスタンスのフラグをオンし、スクェアスタンスのフラグおよびクローズドスタンスのフラグをオフする。
また、ステップS335で“NO”であれば、つまりタッチオン座標がスタンス基準線140の左側であれば、クローズドスタンスに設定して、ステップS341に進む。ここでは、たとえば、クローズドスタンスのフラグをオンし、スクェアスタンスのフラグおよびオープンスタンスのフラグをオフする。そして、ステップS341では、ターゲットボール122上部に球筋すなわち指示画像130を表示して、スライド操作(1)処理をリターンする。ただし、ステップS341において表示される指示画像130の曲がり量および方向は、スタンス値に応じて変化される。つまり、ステップS341では、スタンス値データ750を参照して、適切な指示画像130を表示するのである。
図37および図38は、図31に示したステップS211のスライド操作(2)処理を示すフロー図である。このスライド操作(2)処理では、取得して、スライド操作による軌道142を描画する。図37に示すように、CPUコア42は、スライド操作(2)処理を開始すると、ステップS351で、タッチ入力を検出する。次のステップS353では、タッチオン状態かどうかを判断する。つまり、タッチオンフラグ772がオンであるかどうかを判断する。ステップS353で“NO”であれば、つまりタッチオンフラグ772がオフであれば、タッチオフ状態と判断して、ステップS371で、図39に示すスライド軌跡の延長処理を実行して、スライド操作(2)処理をリターンする。
しかし、ステップS353で“YES”であれば、つまりタッチオン状態であれば、ステップS355で、ステップS351において検出したタッチ入力(タッチ座標)を取得し、ステップS357で、タッチ座標をRAM48に記憶する。
つまり、タッチ現在位置データ744が更新される。続くステップS359では、直前のタッチ座標を取得する。つまり、タッチ直前位置データ746が示すタッチ座標を取得する。
続いて、ステップS361で、スライド操作の軌跡142を表示するための描画エリアをショットエリア(1)でトリミングし、ステップS363で、現在のタッチ位置と直前のタッチ座標とを結ぶライン(直線)でスライド操作の軌跡142を表示する。そして、ステップS365で、タッチ位置の変化があるかどうかを判断する。つまり、スライド操作(スイング操作)であるかどうかを判断する。ここでは、タッチ位置の変化を正確に判断するために、現在のタッチ位置と直前のタッチ位置とが一定距離以上離れているかどうかを判断する。これにより、単なる手振れがスライド操作として判断されるのを回避してある。
ステップS365で“YES”であれば、つまりタッチ位置の変化があれば、スライド操作であると判断して、ステップS365で、スイング停止時間基準タイマ768をリスタート(リセットおよびスタート)して、図38に示すステップS373に進む。一方、ステップS365で“NO”であれば、つまりタッチ位置の変化がなければ、スライド操作でないと判断して、ステップS369で、スイング停止時間基準タイマ768のカウントを進めて、ステップS373に進む。
図38に示すステップS373では、ターゲットボール座標を取得する。つまり、ターゲットボール位置データ738を読み出す。次のステップS375で、現在のタッチ座標とターゲットボール座標とからクラブ表示角度を算出し、ステップS377で、現在のクラブ種類、表示角度で、タッチ座標にクラブヘッドの画像128を表示する。なお、ステップS375およびS377の処理は、上述したステップS305およびS309の処理とそれぞれ同じであるため、詳細な説明は省略することにする。そして、ステップS379で、現在のタッチ座標を直前のタッチ座標として記憶し、スライド操作(2)処理をリターンする。つまり、ステップS379では、タッチ現在位置データ744をタッチ直前位置データ746にコピーするのである。
図39は、図37に示したステップS371のスライド軌跡延長処理を示すフロー図である。図39に示すように、ステップS391では、スライド軌跡の延長処理が2回目以降であるかどうかを判断する。図示は省略するが、たとえば、スライド軌跡の延長処理の回数をカウントするカウンタをRAM48のデータ記憶領域72等に設けておき、スライド軌跡の延長処理を実行する毎にカウンタをインクリメントし、打撃処理の開始時または終了時に、カウンタのカウント値をリセット(0に設定)すれば良い。
ステップS391で“YES”であれば、つまりスライド軌跡の延長処理が2回目以降であれば、そのままステップS401に進む。一方、ステップS391で“NO”であれば、つまりスライド軌跡の延長処理が初回(1回目)であれば、ステップS393で、スライド距離を算出する。具体的には、CPUコア42は、RAM48からタッチ初期位置データ742およびタッチ現在位置データ744を読み出し、現在のタッチ座標と初期位置のタッチ座標との差分(距離)を算出する。続くステップS395では、スライド操作時間基準タイマ766をタイマ値(カウント値)を参照して、スライド時間を取得する。そして、ステップS397で、スライド軌跡を延長するための初速度(スライド距離/スライド時間)を算出する。また、ステップS399で、スライド方向ベクトルを取得し、ステップS401に進む。具体的には、ステップS399では、タッチ直前位置データ746が示す直前のタッチ座標を始点とし、タッチ現在位置データ744が示す現在のタッチ座標を終点とするベクトルの方向を算出する。そして、ステップS397で算出した初速度を、算出したベクトルのスカラとして、速度ベクトルを取得するのである。
ステップS401では、移動距離を算出する。つまり、スライド速度が所定の倍率(0.94倍)になるように、大きさを変化させた速度ベクトルを求める。次のステップS403では、ステップS401で算出した移動距離で、速度ベクトルが示す方向に、スライ
ド操作の軌跡142を表示する。そして、ステップS405で、直前のタッチ座標(タッチ直前位置データ746)を更新し、ステップS407で、現在のタッチ座標(タッチ現在位置データ744)を更新して、スライド軌跡の延長処理をリターンする。つまり、ステップS405では、スライド操作の軌跡142を延長する前における現在のタッチ座標を直前のタッチ座標として記憶し、ステップS407では、スライド操作の軌跡142を延長する際に算出した速度ベクトルの終点を現在のタッチ座標として記憶する。
図40は、図31に示したステップS213のスライド操作判定処理を示すフロー図である。図40に示すように、CPUコア42は、スライド操作判定処理を開始すると、ステップS421で、RAM48を参照して、タッチ現在位置データ744が示す現在のタッチ座標を取得する。次のステップS423では、現在のタッチ位置がインパクトエリア(4)内かどうかを判断する。ここでは、現在のタッチ座標のY座標が、インパクトライン位置データ734が示すY座標よりも小さいかどうかを判断する。
ステップS423で“YES”であれば、つまり現在のタッチ座標がインパクトエリア(4)内であれば、そのままステップS429に進む。一方、ステップS423で“NO”であれば、つまり現在のタッチ座標がインパクトエリア(4)内でなければ、ステップS425で、現在のタッチ座標がターゲットボールエリア内かどうかを判断する。ここでは、現在のタッチ座標が、ターゲットボール122の表示領域に含まれる座標と一致するかどうかを判断する。ステップS425で“YES”であれば、つまり現在のタッチ座標がターゲットボールエリア内であれば、そのままステップS429に進む。一方、ステップS425で“NO”であれば、つまり現在のタッチ座標がターゲットボールエリア内でなければ、ステップS427で、スライド軌跡の延長終了かどうかを判断する。ここでは、速度ベクトルの速度(スライド速度)が一定値以下になったかどうかを判断する。ステップS427で“NO”であれば、つまりスライド速度が一定値を超えている場合には、スライド軌跡(軌跡142)の延長を続行すると判断して、図41に示したスライド操作中断判定の処理にリターン(ジャンプ)する。一方、ステップS427で“YES”であれば、つまりスライド速度が一定値以下である場合には、スライド軌跡の延長を終了すると判断して、そのままスライド操作判定処理をリターンする。
ステップS429では、スイング操作時間基準タイマ766のタイマ値(カウント値)からスライド操作の時間を取得する。次のステップS431では、スライド操作(スイング操作)の時間が一定時間以上であるかどうかを判断する。ステップS431で“NO”であれば、つまりスライド操作の時間が一定時間未満であれば、そのままステップS439に進む。しかし、ステップS431で“YES”であれば、つまりスライド操作の時間が一定時間以上であれば、ステップS433で、スライド操作の時間からスイング速度補正値を算出し、ステップS435で、スイング速度補正値に対応するスイング速度補正データ752をRAM48に記憶し、ステップS437で、スイング速度補正フラグ774をオンして、ステップS439に進む。つまり、スライド操作の速度が遅い場合には、ターゲットボール122およびその中心(中央)をスライドし易くなるため、ボール106の飛距離Fが短くなるように補正するようにしてある。
ステップS439では、スライド操作を終了すべく、スイング処理フラグ770をオフして、ステップS441で、スイング(スライド操作)に関するデータ、フラグ、タイマをすべて初期化して、スライド操作判定処理をリターンする。ただし、ステップS441では、スイング速度補正データ752およびスイング速度補正フラグ774は初期化されない。
図41は、図31に示したステップS217のスライド操作中断判定処理を示すフロー図である。図41に示すように、CPUコア42は、スライド操作中断判定処理を開始す
ると、ステップS451で、RAM48を参照して、タッチ現在位置データ744が示す現在のタッチ座標を取得する。続くステップS453で、RAM48を参照して、タッチ直前位置データ746が示す直前のタッチ座標を取得する。次のステップS455では、インパクトエリア(4)とは逆向きにスライド操作したかどうかを判断する。つまり、直前のタッチ座標を始点とし、現在のタッチ座標を終点とするベクトルの向きが下向きであるかどうかを判断する。または、直前のタッチ座標のY座標が現在のタッチ座標のY座標よりも小さいかどうかを判断する。
ステップS455で“YES”であれば、つまりインパクトエリア(4)とは逆向きにスライド操作した場合には、スイング操作の中断(やり直し)であると判定して、ステップS463に進む。一方、ステップS455で“NO”であれば、つまりインパクトエリア(4)とは逆向きにスライド操作していない場合には、ステップS457で、現在のタッチ座標がショットエリア(1)外に出たかどうかを判断する。上述のゲーム画面120では省略したが、ショットエリア(1)およびインパクトエリア(4)の左右(いずれか一方でも可。)には、各種設定のためのボタンないしアイコンを表示する領域が設けられており、ステップS457では、当該領域に現在のタッチ座標が入ったかどうかを判断しているのである。
ステップS457で“YES”であれば、つまり現在のタッチ座標がショットエリア(1)外に出た場合にも、スイング操作の中断(やり直し)であると判定して、ステップS463に進む。一方、ステップS457で“NO”であれば、つまり現在のタッチ座標がショットエリア(1)外に出ていない場合には、ステップS459で、スライド操作停止時間基準タイマ768のタイマ値(カウント値)を参照して、スライド操作停止の時間を取得する。そして、ステップS461で、一定時間以上、スライド操作を停止したかどうかを判断する。ステップS461で“NO”であれば、つまり一定時間以上、スライド操作を停止していなければ、スライド操作の恵贈中であると判定して、そのままスライド操作中断判定処理をリターンする。一方、ステップS461で“YES”であれば、つまり一定時間以上、スライド操作を停止していれば、スライド操作の中断(やり直し)であると判定して、ステップS463に進む。
ステップS463では、スライド操作を中断すべく、スイング処理フラグ770をオフし、ステップS465で、スイング(スライド操作)に関するデータ、フラグ、タイマをすべて初期化して、スライド操作中断判定処理をリターンする。なお、スライド操作を中断する場合には、図31に示したように、最初から打撃処理を実行するため、上述したスライド操作判定処理とは異なり、ステップS465では、スイング速度補正データ752やスイング速度補正フラグ774も初期化される。
図42および図43は、図31に示したステップS221のインパクト判定処理を示すフロー図である。なお、このインパクト判定処理では、簡単のため、右打ちのプレイヤキャラクタ102の場合について説明が、左打ちのプレイヤキャラクタ102では、プッシュショットエリアとプルショットエリアとが逆になるだけである(図14参照)。図42に示すように、CPUコア42は、インパクト判定処理を開始すると、ステップS481で、スライド操作の軌跡142とターゲットボール122の接触を確認する。次のステップS483では、軌跡142がターゲットボール122に接触したかどうかを判断する。ステップS483で“NO”であれば、つまり軌跡142がターゲットボール122に接触していなければ、ステップS485で、インパクト結果として「空振り」を記憶する。つまり、「空振り」を示すインパクト結果データ754を記憶する。以下、インパクト結果を記憶する場合について同様である。
しかし、ステップS483で“YES”であれば、つまり軌跡142がターゲットボー
ル122に接触すれば、ステップS487で、スイング基準線q1を確定する。続くステップS489では、インパクト点を確定し、ステップS491で、インパクト点の座標すなわちインパクト点データ756をRAM48に記憶する。
続くステップS493では、インパクト点がグッドエリア(I)内であるかどうかを判
断する。ステップS493で“YES”であれば、つまりインパクト点がグッドショットエリア(I)内であれば、ステップS495で、「グッド」を示すインパクト結果データ
754をRAM48に記憶して、図43に示すように、インパクト判定処理をリターンする。一方、ステップS493で“NO”であれば、つまりインパクト点がグッドショットエリア(I)内でなければ、ステップS497で、インパクト点がプッシュショットエリ
ア(II)内であるかどうかを判断する。ステップS497で“YES”であれば、つまりインパクト点がプッシュショットエリア(II)内であれば、ステップS499で、「プッシュ」を示すインパクト結果データ754をRAM48に記憶して、インパクト判定処理をリターンする。
しかし、ステップS497で“NO”であれば、つまりインパクト点がプッシュショットエリア(II)内でなければ、図43に示すステップS501で、インパクト点がプルショットエリア(III)内であるかどうかを判断する。ステップS501で“YES”であ
れば、つまりインパクト点がプルショットエリア(III)内であれば、ステップS503
で、「プル」を示すインパクト結果データ754をRAM48に記憶して、インパクト判定処理をリターンする。一方、ステップS501で“NO”であれば、つまりインパクト点がミスショットエリア(IV)内であれば、ステップS505で、「ミス」を示すインパクト結果データ754をRAM48に記憶して、インパクト判定処理をリターンする。
図44〜図47は、図31に示したステップS223のショット前処理を示すフロー図である。なお、このショット前処理も、上述のインパクト判定処理と同様に、右打ちのプレイヤキャラクタ102について説明することにする。図44を参照して、CPUコア42は、ショット前処理を開始すると、ステップS521で、RAM48を参照して、インパクト結果データ754が示すインパクト結果を取得する。次のステップS523では、インパクト結果が「空振り」を示すかどうかを判断する。
ステップS523で“YES”であれば、つまりインパクト結果が「空振り」を示す場合には、図46に示すように、そのままショット前処理をリターンする。一方、ステップS523で“NO”であれば、つまりインパクト結果が「空振り」を示していない場合には、ステップS525で、インパクト結果が「プッシュ」を示すかどうかを判断する。ステップS525で“YES”であれば、つまりインパクト結果が「プッシュ」を示す場合には、ステップS527で、RAM48を参照して、インパクト点データ756が示すインパクト点の座標を取得する。続くステップS529では、インパクト点の座標から打ち出し方向補正値(たとえば、0〜30度)を算出する。ここでは、インパクトの判定領域1220の中心からのインパクト点のずれ量(距離)を検出し、その距離に応じて、打ち出し方向補正値が算出される。たとえば、距離が長くなるにつれて、打ち出し方向補正値が線形的(段階的)に変化される。ただし、逆に、距離が短くなるにつれて、打ち出し方向補正値が線形的(段階的)に変化させるようにしても良い。そして、ステップS531で、算出した打ち出し方向補正値に対応する打ち出し方向補正データ758をRAM48に記憶して、ショット前処理をリターンする。
しかし、ステップS525で“NO”であれば、つまりインパクト結果が「プッシュ」を示していない場合には、図45に示すステップS533で、インパクト結果が「プル」を示すかどうかを判断する。ステップS533で“YES”であれば、つまりインパクト結果が「プル」を示している場合には、ステップS535で、RAM48を参照して、イ
ンパクト点データ756が示すインパクト点の座標を取得する。続くステップS537では、インパクト点の座標から打ち出し方向補正値(たとえば、0〜−30度)を算出する。ここでは、インパクト結果が「プッシュ」の場合と同様に、インパクトの判定領域1220の中心からのインパクト点のずれ量(距離)を検出し、その距離に応じて、打ち出し方向補正値が算出される。たとえば、距離が長くなるにつれて、打ち出し方向補正値がマイナス方向に線形的(段階的)に変化される。または、距離が短くなるにつれて、打ち出し方向補正値がマイナス方向に線形的(段階的)に変化される。そして、ステップS539で、算出した打ち出し方向補正値に対応する打ち出し方向補正データ758をRAM48に記憶して、ショット前処理をリターンする。
しかし、ステップS533で“NO”であれば、つまりインパクト結果が「プル」を示していない場合には、ステップS541で、インパクト結果が「グッド」を示しているかどうかを判断する。ステップS541で“NO”であれば、つまりインパクト結果が「グッド」を示していなければ、インパクト結果が「ミス」を示していると判断して、図46に示すステップS549に進む。一方、ステップS541で“YES”であれば、つまりインパクト結果が「グッド」を示す場合には、ステップS543で、ショットパワー値とスイング速度補正値とを取得する。つまり、CPUコア42は、RAM48を参照して、ショットパワー値データ748が示すショットパワー値およびスイング速度補正値データ752が示すスイング速度補正値を取得する。
そして、ステップS545で、ショットパワー値が100%であり、かつ、スイング速度補正値が0%であるかどうかを判断する。ただし、スイング速度補正値が0%であるかどうかの判断に変えて、スイング速度補正フラグ774がオフであるかどうかを判断するようにしても良い。ステップS545で“NO”であれば、つまりショットパワー値が100%未満であったり、または、スイング速度補正値が1パーセント以上であったり、或いは、それら両方であったりする場合には、そのままショット前処理をリターンする。一方、ステップS545で“YES”であれば、つまりショットパワー値が100%であり、かつ、スイング速度補正値が0%である場合には、「ナイスショット」であると判断して、ステップS547で、ナイスショットフラグ776をオンして、ショット前処理をリターンする。
上述したように、インパクト結果が「ミス」を示す場合には、図46に示すステップS549で、RAM48を参照して、ショットパワー値データ748が示すショットパワー値が100%であるかどうかを判断する。ステップS549で“NO”であれば、つまりショットパワー値が100%でなければ、そのままステップS559に進む。しかし、ステップS549で“YES”であれば、つまりショットパワー値が100%であれば、ステップS551で、RAM48を参照して、ライ状態データ740が示すライ状態が「ティアップ」であるかどうかを判断する。つまり、ティショットであるかどうかを判断するのである。
ステップS551で“NO”であれば、つまりライ状態が「ティアップ」でなければ、ティショットでないと判断して、ステップ559に進む。一方、ステップS551で“YES”であれば、つまりライ状態が「ティアップ」であれば、ティショットであると判断して、ミスショットのタイプを「テンプラ」に決定する。具体的には、ステップS553で、打ち出し角度補正値を30度〜60度でランダムに(乱数で)決定して、対応する打ち出し角度補正データ762をRAM48に記憶する。また、ステップS555では、パワーロス補正値を20%〜50%でランダムに(乱数で)決定して、対応するパワーロス補正データ762をRAM48に記憶する。そして、ステップS557で、スピン(バックスピン)補正値を0%〜−30%でランダムに(乱数で)決定して、対応するスピン補正データ764をRAM48に記憶して、ショット前処理をリターンする。
また、ステップS559では、RAM48を参照して、選択クラブデータ724が示すクラブ104がアイアン(ここでは、ウェッジも含む。)であるかどうかを判断する。ステップS559で“NO”であれば、つまり選択中のクラブ104がアイアンでなけば、図47に示すステップS567に進む。一方、ステップS559で“YES”であれば、つまり選択中のクラブ104がアイアンであれば、ステップ561で、右側のミスショットエリア(IV)をインパクトしたかどうかを判断する。ステップS561で“NO”であれば、つまり右側のミスショットエリア(IV)をインパクトしていない場合には、ステップS567に進む。一方、ステップS561で“YES”であれば、つまり右側のミスショットエリア(IV)をインパクトした場合には、ミスショットのタイプを「シャンク」に決定する。具体的には、ステップS563で、打ち出し方向補正値を60度〜90度でランダムに(乱数で)決定し、対応する打ち出し方向補正データ758をRAM48に記憶する。そして、ステップS565で、パワーロス補正値を30〜80%でランダムに(乱数で)決定し、対応するパワーロス補正データ762をRAM48に記憶して、ショット前処理をリターンする。
なお、このショット前処理では、プレイヤキャラクタ102が右打ちの場合について説明してあるが、左打ちの場合には、ステップS561で、左側のミスショットエリア(IV)をインパクトしたかどうかが判断される。
図47に示すように、ステップS567では、スピン設定がバックスピンであるかどうかを判断する。ここでは、CPUコア42は、RAM48を参照して、スピン補正データ764が示すスピン補正値の符号がマイナスであるかどうかを判断する。ステップS567で“YES”であれば、つまりスピン設定がバックスピンであれば、ミスショットのタイプを「ダフ」に決定する。具体的には、ステップS569で、打ち出し角度補正値を10度〜40度でランダムに(乱数で)決定し、対応する打ち出し角度補正データ760をRAM48に記憶する。また、ステップS571で、打ち出し方向補正値を−45度〜45度でランダムに(乱数で)決定し、対応する打ち出し方向補正データ758をRAM48に記憶する。さらに、ステップS573で、パワーロス補正値を40%〜90%でランダムに(乱数で)決定し、対応するパワーロス補正データ762をRAM48に記憶する。そして、ステップS575で、スピン(バックスピン)補正値を0〜−10%でランダムに(乱数で)決定し、対応するスピン補正データ764をRAM48に記憶(更新)して、図46に示したように、ショット前処理をリターンする。
しかし、ステップS567で“NO”であれば、つまりスピン設定がバックスピンでなければ、ミスショットのタイプを「トップ」に決定する。具体的には、ステップS577で、打ち出し角度補正値を10度〜40度でランダムに(乱数で)決定し、対応する打ち出し角度補正データ760をRAM48に記憶する。また、ステップS579で、打ち出し方向補正値を−10度〜10度でランダムに(乱数で)決定し、対応する打ち出し方向補正データ758をRAM48に記憶する。さらに、ステップ581で、パワーロス補正値を50%〜70%でランダムに(乱数で)決定し、対応するパワーロス補正データ762をRAM48に記憶する。そして、ステップS583で、スピン(トップスピン)補正値を30%〜50%でランダムに(乱数で)決定し、対応するスピン補正データ764をRAM48に記憶(更新)して、ショット前処理をリターンする。
このように、ショット前処理では、インパクトの判定結果に基づいて、ボール106の移動に関するパラメータ(の補正値)が決定されるのである。
なお、この第2実施例では、ミスショットのタイプに従って、打ち出し角度補正値、打ち出し方向補正値、パワーロス補正値、スピン補正値をランダムに(乱数で)決定するよ
うにしてあるが、上述した「プッシュ」または「プル」の場合と同様に、インパクト点に応じて線形的(段階的)に決定するようにしても良い。
また、上述したショット前処理では、ミスショットのタイプを「テンプラ」、「シャンク」、「ダフ」または「トップ」のいずれかに決定するようにしてあるが、選択中のクラブ104がPTである場合にはいずれのタイプにも決定されない。
図48は、図31に示したステップS225のショット演出処理を示すフロー図である。図48に示すように、CPUコア42は、ショット演出処理を開始すると、ステップS601で、ショットモーション表示する。つまり、LCD12に表示されるゲーム画面100において、プレイヤキャラクタ102がクラブ104をスイングする動作(または、ボール106を打つ動作)のモーション(アニメーション)を表示する。続くステップS603では、RAM48を参照して、スイング速度補正フラグ774がオンであるかどうかを判断する。ステップS603で“YES”であれば、つまりスイング速度補正フラグ774がオンであれば、そのままステップS609に進む。一方、ステップS603で“NO”であれば、つまりスイング速度補正フラグ774がオフであれば、ステップS605で、ナイスショットフラグ776がオンであるかどうかを判断する。
ステップS605で“NO”であれば、つまりナイスショットフラグ776がオフであれば、そんままステップS609に進む。一方、ステップS605で“YES”であれば、つまりナイスショットフラグ776がオンであれば、ステップS607で、ナイスショット演出を実行して、ステップS609に進む。詳細な説明は省略するが、ナイスショット演出は、第1実施例のステップS93で説明した内容と同様である。
ステップS609では、弾道計算(飛距離Fと打球方向Dの計算)と画面表示を行う。ここで、飛距離Fおよび打球方向Dは、第1実施例に示した数1および数2に従ってそれぞれ算出される。また、画面表示の処理では、計算された弾道に従って仮想空間内をボール106が移動(飛んだり、転がったり)する様子がゲーム画面100として表示される。そして、ステップS611で、ショット結果を表示して、ショット演出処理をリターンする。たとえば、ショット結果としては、飛距離が数値で表示されたり、ピンまでの残りの距離が数値表示されたり、ボール106の現在位置についてのライの状態が表示されたりする。
第2実施例においても、第1実施例と同様に、簡単で直感的な操作が可能である。また、リアリティのあるゲームを楽しむことができる。