Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

格ゲーとプログラミングとスキルの習熟について

概要

格ゲーとプログラミングとスキルの習熟について

詳細

自分がプログラミングの勉強を毎日のようにし始めたのは3年ほど前。
それまではシステム開発の激務にうんざりして別の業種でのんびり仕事をしつつ、
趣味の格ゲーにどっぷり浸かっていました。
ゲーム名は・・・秘密です。

そこで趣味が格ゲーからプログラムになった時に格ゲーを上達するために
やって来たことや考え方がプログラムの勉強にも役立つなと思ったりしてます。
何かを真剣にやって上達するということは、対象を越えたメタな部分があるのだと思います。

格ゲー全盛期の自分の能力 >>>>> 現状の自分のプログラミング能力
だと思うので自分の今後のプログラミング能力向上の課題をまとめる意味もあって整理してみます。

基本的には格ゲーベースでまとめているので、プログラミングにあてはめるとこういうことだよなぁ、
と想像しながら読むと良いかも。自分もそれで発想を広げてます。

基礎

まずは任意の技や連携を出したい時に出せないことには始まりません。
最初は簡単な敵=CPUや初心者同士などで、技の精度を磨きます。
この際に、最初は主力技を幾つか絞ります。
プログラムなら基本的なプログラムに欠かせない構文、ライブラリ、基本的なイディオムを最初に覚えるような感じ。

また、この段階で結構大事なのがモチベーション。
強い人に追い回されてるだけじゃつまらないし、仲間が全然居なくてもつまらない。
・近いレベルの対戦相手と白熱した勝負をする
・魅了的な上級者に挑んで稽古をつけてもらう
・上級者をみて研究する
・ネットで新たな情報収集する
などでモチベーションを保ちます。

知識

対戦で勝つためには知識が書かせません。
この技の発生がXフレーム(1/60単位)で、ヒット後の有利がYフレーム、ガードされるとZフレームで
確定反撃を食らうかどうか・・・など。
(時々、数値としての知識を全く知らなくても画面の見た目と経験値から正しい知識に近いものを
体で覚えている天才肌なプレイヤーが居たりしますが。)

知識は、書籍・ネット・人から得る。

知識を体に染み込ませる

ひたすら練習と対戦を繰り返すことで、いちいち頭で考えなくても手が動くようになります。
この技をガードしたら、この攻撃で最大ダメージの確定反撃、など。

命名の重要さ

あるテクニックを発見した場合に、そのテクニックに名前が付いているとコミュニケーションが
円滑になるし、それにより情報が広まればさらなるテクニックを生みやすい。

例えばスト2にあるような、「めくり」が「めくり」という名前で統一されてなかったら色々と面倒。
あの背中側に攻撃すると反対にガードしなきゃいけないやつ、とか毎回言うのは億劫。
デザインパターンのパターン名がついたことによる効果と同じような感じ。

パターン

連携、戦略などには様々な有効パターンがある。

相手がこの状態の時にXXの効果のある技を出すとガード不能になる
とか
XXステージのこの位置の時はこの角度で技を当てるとガード不能時間がYYフレーム伸びる
とか。

これは、
・人やネットから情報収集
・知識の組み合わせにより新たな組み合わせを見つける
などにより得ることができる。

情報公開と進化

別け隔てなく情報を公開する人と、大会などで勝つために情報を表に出さない人がいる。
どちらが悪いというわけでもないが、公開された情報は応用されてさらに進化したりします。

キャラAの知識がキャラBに役立つこともあるので、関数型言語の特性が他の言語にも役立った!
みたいなのに似ているなと。

PDCA

対戦で強くなるためには、計画・実行・評価・改善が重要。

対戦のPDCA
計画=>次の対戦で新しいコンボ、連携を試そう。
実行=>実行
評価=>あのコンボは有効だったけど、あの連携はいまいちだった
改善=>いまいちだった連携だけど、少し連携の組み立てを変えるか裏の選択肢を用意すれば使えそう

シナリオテスト・単体テスト

例えばAさんに7割勝つ、というシナリオテストが合ったとしたら
それを
・Aさんの癖を発見して対応を決めて、的確に対応できるようにする
・Aさんの使用キャラへの対応策をまとめる
・雑誌にのっていた新たなコンボを覚えて火力アップ
という単体テストに分割して、それぞれを Red => Green => Refactorのように達成していく。
それぞれの単体テストを達成することで結果的にシナリオテストを達成する。

練習と本番

対戦が本番だとすると、練習で覚えたコンボや連携以上のことを対戦で出せることはまずない。
プログラミングの仕事を本番として、本番以外でプログラミングを練習していない人が
持っている実力以上のものを出せるわけがないということ。
学習の重要性。

気付きと知識と偶然

新たなコンボ、連携などを発見するには

・それが新たなもの、有効なものであることに気づくための基礎知識が必要
・基本的な知識をもとに、まだ試されていない組み合わせを見つけることができれば新たなものを作り出せる事が多い

例えば、「地面スレスレでXX系の技を当てると、浮き直してコンボを継続しやすくなる」等の場合。
XX系の技、地面スレスレになるコンボ、浮きな直し時に当てやすく・威力の高い技などを列挙して
その中で試していない組み合わせをひたすら検証する。
そうすることで新たなコンボを発見できる可能性があります。

また、自分・他人問わずプレイ中に初めて目にする現象が発生したとします。
基礎知識がなければその現象に気づくことすらできません。
基礎知識があれば、その現象がまだ知られていない新たな現象であることに気づきます。
気づいたら検証。
条件を整理して再現させる。
再現したら有効活用する方法がないか試す。
すると新たなコンボや連携が出来上がったりする。

偶然新たな現象を発見するためには偶然を引き起こしやすい対戦相手が必要。
いつも同じようなことしかしない人と対戦していても新たな現象は起こりにくい。
セオリーを無視して色んなことを試す対戦相手は結構貴重。

偶然を起こす素材(対戦相手)
偶然を見抜く知識
偶然を再現させる検証
現象を発展させる発想
発想を実証するための検証
実証した発想を実践で試す

があって、初めて新たに役に立つ戦略になる。

遠征

ある程度上達してくると、同等に対戦出来る相手が限られてくる。
また、運良く地元に上級者が多くてもマンネリしたりする。

コミュニティーによって独自のテクニック、情報を持っていたりするので
異なるコミュニティーと関わることで新たなものを吸収できることがあった。

師匠を持つ

自分は師匠を持たなかったのですが、やはり上達への近道か。
良い師匠+高いモチベーションを持った人は大抵強くなる。

弟子を持つ

自分は何人も弟子を持っていた。
教える側にも利益があるのはプログラミングと一緒。

持っている情報への理解が深まるし、易しく説明しようとする過程で
自分の中の情報が整理される。
結果として新たな発見につながったりする。

アウトプットする

コンボ、連携などを公開すると
・情報を整理したことによる知識の深まり
・新たな発見をする際の資料として役立つ
・参照性=>ゲーセンから携帯で情報を確認可能
・他のプレイヤーがさらに発展させて報告してくれたり
などの利点があった。

情熱

格ゲーが嫌いなのに格ゲーが上手い人って見たことがない。
格ゲーが強い人はほぼ例外なく格ゲーを楽しんでいて、そこに情熱を注いでいる。

メモ・メモ・メモ

何か新たな現象があったらメモ。
自分の知らないテクニックを使っている人がいたらメモ。
検証する内容があったらメモにまとめておく。
新たなアイデアを閃くための素材になりそうな単語やテーマを列挙したメモを用意。

メモ重要。
主に紙のメモ帳と携帯のメモアプリを利用。

コンテキスト

毎回役に立つわけではないが、相手キャラ限定・状況限定・あの対戦相手限定などで
役立つテクニックがあったりする。
コンテキストに特化したデザインパターンのような感じ。

評価と一芸

基本は勝つことが目標なので勝てる人が評価されますが、
・あまり強くないけどコンボを作るのが旨い人
・あまり強くないけど連携を見つけるのが旨い人
なども十分に業界に貢献している。
特に、他人には編み出せないコンボや連携を作るスキルは希少価値が高い。