Home

日記
テニスシミュレーションゲームを考える その1Edit

テニスの数値育成シミュレーションゲームってないのかな?

ググってみる限りは、変なチーム戦の携帯ゲーっぽいものは見つけたけど、リアル志向の数値育成シミュレーションゲームは見かけていない。

バーチャテニス(パワースマッシュ)のツアーモードからアクションゲーム要素をなくして、もっとリアルな感じにするイメージ。

面白そうなのに。というか、あったら俺がやりたいのに。

ということで、自分で作ってみる前提でいろいろ考えてみる。

内容としては、自分の分身となるプレイヤーを作成し、その初期パラメータを調整し、トレーニング内容と参加大会によってパラメータを調整しつつ、試合結果によってランキングポイントをため、上位大会に出られる権利を得て、さらに上位ランキングを狙う。

カード集めゲーム的なものは嫌いなので、カードを集めて能力を向上させる的なものは基本なしの方向で。ただ、成長過程で取得できるバッジ(特殊能力付与)的なものはあってもいいかもしれない。

お金的なものは、あるべきかどうか悩みどころ。あるとしたら、収入は賞金とスポンサーからの資金。支出はツアーを回るための経費や、トレーニングメニューの向上など。

ラケットやシューズなどについては、あまり細かく扱う気はない。ただ、プレイスタイルごとに合わせた数種類のタイプくらいはあってもいいかもしれないか。この辺もスポンサーとかがあるなら、それとの絡みが出てくるな。

怪我という要素は、実際のツアーではかなり大きな要素なので入れておきたい。が、実際に長期離脱とかやっちゃうと面白くないだろうなー。長期離脱の代わりに、パラメータの大幅ダウンとかで表現するならありか? それを食らうとかなりのショックだろうけど。

加齢という概念も入れておきたい。時間軸をどういうペースで扱うか、参加プレイヤーをすべて同一時間軸上に存在させるのか、とか根本的な問題があるけれども、それはひとまず置いておいて、加齢によるプレイヤーのパラメータ変動と、その結果としての引退による入れ替わりはあった方が面白い気がする。

野球シミュレーションならば、打率や打点、ホームラン数などの細かい数値情報が一通り見れないとつまらないのと同様に、テニスシミュレーションならば各試合ごとのStatistics(それもWinner/Unforced Error/Net Point Wonまで含めた)とかも見れないと面白くない。オールタイムのサーフェイスごとの勝率とかも見たいよな。

というか、ATPのサイトで確認できるようなデータが一通り見れるようになるのが理想。そこまで行ったらすごいだろうな。

となると、少なくともデータ上は細かいStatisticsが見れる程度の粒度のデータとしてシミュレーションを行う必要がある。さすがにHawkEyeのリプレイ(TennisTVで見られるような)並の細かいデータはいらないだろう。

というわけで、実際にテニスの試合をどういうデータを持たせて、どういうシミュレーションをするとそれっぽい結果データが出てくるのか、いろいろ考えてみているんだけど、なかなか設計が難しい。ほどほどのシンプルさで、それなりの表現力とリアリティがある感じに落とし込めるといいんだけど。

Published At2012-03-07 20:03Updated At2012-03-07 20:03

日記
テニスシミュレーションゲームを考える その2Edit

どういう内容のシミュレーションを行うかを考えるにあたって、まずは実際のテニスのプレイ中に取る行動や考える内容について、できるだけ細かく分解して考えてみる。

まずはサーバーがサーブを打つ前の段階。

  • センターもしくはワイドぎりぎりに、エースを狙って打つ(入れば優位を取れる)
  • 相手の読みを外すコース(センター、ワイド、ボディ)・球種(速さ、スピン量の調整)で打つ(威力ではなくプレースメントで優位を取ろうとする)
  • 相手の苦手なサイドや球種で入れにいく(ある程度読まれていても不利な展開になりにくい)
あたりが普通の選択肢か。

一方レシーバーサイドがサーブを待っている状態で。

  • エース級のサーブを警戒し、予測と賭けで何とかレシーブしようとする
  • 手の届く範囲の球を、安定して深くに返そうとする
  • 手の届く範囲の球は、強引に叩いていこうとする
  • ポジションを上げて、相手のサーブを早いタイミングで叩いていこうとする
  • コースを読んで(回り込みなども行い)、読みが当たった場合はレシーブを叩いていこうとする
とかかなー。

これはまだボールが動く前の段階での、プレイヤーの頭の中での選択肢。

続いて、実際にサーバーがサーブを打つ。

  • 狙った球種とコースで、サーバーの能力のn%の速度や回転を持つサーブが入る
  • 狙った球種だがコースがずれ、 サーバーの能力のn%の速度や回転を持つサーブが入る
  • フォルトになる
サーブの結果としてはこんな感じかな。ポイントとしては、
  • 球種はサーバーが決め、それはその時点で確定する。
  • コースは、狙い自体はサーバーが決めるが、ある程度のぶれは出てくる。また、厳しいコースを狙った場合は、ブレ=フォルトになる可能性が高い。
  • 速度や回転(切れ)は元々のサーバーの能力以上の結果はあり得ず、どのくらいベストに近い球を打てるか、という問題になる。
  • 当たり損ね、フォルトの種類(ネット、アウト)、レットによる打ち直しなんかは省略。
なんて感じ。

そのサーブに対するレシーバー。

  • 読み or 反応 or フットワークが悪くて触れない(サービスエース)
  • ぎりぎり追いついたがきちんとラケット面に当てられずにリターンが返らない
  • ぎりぎり追いついたがスライス面で返すだけ
  • 追いついたが苦しい体勢でリターン
  • 追いついてフォアハンド or バックハンドで深くにリターン
  • 追いついてフォアハンド or バックハンドで(ネットダッシュしてきた相手の)足下にリターン
  • 追いついてフォアハンド or バックハンドで(ネットダッシュしてきた相手の)パッシングを狙う
  • 予測が当たって攻撃的にリターン
このくらいのバリエーションでいいかなー。ポイントとしては、
  • 読み+反応+フットワークでレシーブポジションに入れるかどうかが決まる。
  • レシーブポジションへの入り方によって、レシーブの打ち方に制限が出る。
  • ブロックリターン能力が高い場合は、ぎりぎり届いた場合もリターンを深くに押し戻すことができる。ブロックリターン能力が低いとリターンミスもしくは相手のチャンスボールになる。
  • レシーブポジションへの入り方に余裕があるほど、レシーバーは攻撃的なリターンを選択することが可能になる
  • 相手がベースラインにいる場合と、ネットダッシュしている場合とでは、レシーバーの行動選択肢が変わる。
  • 事前の戦術選択肢+実際にボールを打つ瞬間の状況によって、実際にボールを打つ瞬間の選択肢が決まってくる
  • リターンも通常のストロークとショットバリエーションは基本的に変わらないが、ストロークとは別系統の、読み+反応能力が必要。
  • サーブは、通常のストロークよりも強力なショットになりがちなので、レシーブは通常のストロークよりも、ポジションに入ることが難しいことが多い。
なんて感じか。

サーブとレシーブを考えるだけでも、だいぶややこしくなってきたなー。

ストローク戦の方がもっとバリエーションが多いだろうから、ひとまずこのサーブとレシーブの考え方を下敷きに、ストローク戦に対するアプローチも考えていこう。

現状でサーブとレシーブに関して必要そうなパラメータを考えてみる。まずはサーブ。

  • サーブの読みにくさ
  • サーブの威力(主にフラットサーブのスピード)
  • エース狙いのサーブのコースの厳しさ
  • エース狙いのサーブの確率
  • 入れにいくサーブの威力(セカンドにしては強いサーブが打てるか)
  • 入れにいくサーブの打ちにくさ(読まれても叩きにくいサーブが打てるか)
  • 入れにいくサーブの確率(これはいらないかなー。入れにいくサーブが入らないレベルまで考える必要はないだろう)
  • 状況(重要なポイントなど)におけるメンタルへの影響
続いてレシーブ。
  • サーブに対する読みの良さ
  • レシーブ時の反応の良さ
  • ブロックリターン能力(苦しい状態)
  • 基本的なリターン能力(通常)
  • 攻撃的なリターン能力(叩きにいったとき)
  • 相手のネットダッシュに対する反応
  • フォアハンドリターン能力
  • バックハンドリターン能力
  • 状況(重要なポイントなど)におけるメンタルへの影響
とひとまず考えてみたけれども、通常のストロークをどう扱うかを考えてからじゃないと、レシーブの扱い方は決めようがないな。レシーブはストロークの延長だからなー。

あと、今考えているのは絶対的な能力の高低を数値で表すイメージなんだけど、実際のテニスでは相手との相対評価の方が大きい場合もある。いわゆる相性の悪い相手の問題。

こういうのは、単なる数値の大小だけでなく、特定の能力を持つ相手に対する強さ・弱さを表現する仕組みを用意しないと、表現しきれないだろうか。工夫すれば、数値の大小だけで表現しきれるか?

Published At2012-03-09 17:53Updated At2012-03-09 17:53

日記
テニスシミュレーションゲームを考える その3Edit

その後、いろいろ複雑なことを考えて、テストコードを書いてみたりしたんだけど、なんかうまく収束する方向に持っていけない。

基本的なアプローチとして、実際に自分がテニスをやるときに考えていることや、行動していることをパラメータに置き換えながら何とかしようとした場合、あまりにもパラメータとシチュエーションが多くなりすぎて、どうしても発散してしまうようだ。

そこで、そういう実際にプレイ中のその場その場で出てくる要素をパラメータ化するアプローチはあきらめ、実際のプロテニスプレイヤーをどの程度パラメタライズしたら、そのキャラクターというものが十分に表現できるのか、というアプローチで考え直してみた。

今のところ考えているのは、次のようなパラメータ。

  • サーブ(Serve)
  • レシーブ(Recieve)
  • フットワーク(Quickness)
  • フォアハンドストローク(Forehand)
  • バックハンドストローク(Backhand)
  • ネットプレイ(Net)
  • ショットセレクション(Tactics)
  • フィジカルタフネス(Physical)
  • メンタルタフネス(Mental)
  • 安定感(Consistency)
  • ハードコート適性(Hard)
  • クレイコート適性(Cray)
  • グラスコート適性(Grass)
このパラメータで試しに主だったプレイヤーをSABCDEFでランク付けしてみると、
名前 S R Q F B N T P M C H C G
ふぇで S B A S B B S A S S S A S
なだ B B S S A C C S S S A S S
じょこ A A A A A C A B A A S A A
まれ A A S B A B A A B B S B A
ふぇれ B A A B B C C S A A A A B
ろで S C C A C B C B B C A C A
つぉん A B B A C A B B B B A C A
こり C B A A A D A C B C A B B
でんこ B B B B B D B B B C A A D
でるぽ A B B A A C C B A C A A B
そえだ B C C C C C C C C C C D C
かるろ S C C C C A A C B B A D S
なんて感じ。異論は認める。というか、やっているうちにだるくなってきて後半だいぶ適当になっちゃったな。

でも、このくらいあればだいぶ選手の個性を表現できているように思える。あとはこのパラメータを使って、スタティスティクスが出せる程度のシミュレーションができるかどうかだ。

ちなみに俺が出したいスタッツは、ツアーレベルのやつじゃなくて、GSレベルのやつ。具体的には、

  • ファーストサービス確率
  • ファーストサーブポイント獲得率
  • セカンドサーブポイント獲得率
  • サービスエース数
  • ダブルフォルト数
  • ネットプレイ成功率
  • ウィナー数
  • アンフォーストエラー数
  • ブレイク数/ブレイクポイント数
あたり。あと、
  • プレイヤーごとの対戦成績
  • コートサーフェイスごとの成績
なんてあたりも生涯成績として表示できるようにしたい。というか、基本は数値シミュレーションなんで、その程度の細かい情報が出てこないと面白くない。

なんか話が逸れつつあるけど、ひとまずこんな感じのパラメータ表現で、どうやって細かいスタッツが出せる程度のシミュレーションを行うか。そのシミュレーション結果がリアルなスタッツと同じ感じになるように調整できるか。ってあたりをサンプルコードを書きながら調整していきたい。

まずは数値計算上試合が成立するところまでサンプルを作ってみよう。

Published At2012-03-28 19:37Updated At2012-03-28 19:37