格ゲーの実装(コマンド入力とか)

それはそれとして。格ゲー好きとしては、自分で格ゲーを作ると云うのはやってみたいと思っている。が、グラフィックパターン描くのに死ねるのは揺ぎ無いので二の足を踏んでいるまま10年くらい経った。が、システムだけでも先に考えておくのは楽しいかと。

格ゲーのシステムについては、どこだかかなり纏まった資料があったが、実装についてはあんまり触れられていない気がしたので、適当に考えてみようと思う。

つうことで、格ゲーの華、コマンド入力について。コマンド入力つうのは、レバーを下、右下、右と入れてパンチボタンを押すと「波動拳」つう特別な技が出るアレのことです。ネットなんかではレバーをテンキーに見立てて、下→「2」、右下→「3」、右→「6」と表記するのがよくやられていて、「波動拳」は「236P」と書いたりしますので、今後はこれで。


コマンドの検知については、レバー下且つその後右下且つその後右…とか条件分岐を書いてもいいのですが、ウザいので、「236P」つう文字列を読み込ませてそこから入力からのコマンド取得をやるような感じにしましょう。レバーの入力をバッファに貯めておいてそこから「236P」を検索するようなやり方がよくやられるのでしょう、多分。で、それは後方から調べた方がよさそうです。たとえば、

236P
623P
41236P
236K

つう4つのコマンド技を持つキャラがいたとして、「512326P」という入力があったとします(5はレバーニュートラルで、「N」と記載されることもしばしば)。大抵はコマンド中にコマンドに含まれない入力があった場合もOKとするため、「(51)23(2)6P」括弧を省くと「236P」を検知すればよいことになります。

この場合、後ろからみていくと、先ずPがあるので、キックを用いる「236K」は除外(枝刈り)されます。

入力:
P623215
^
P632
P326
P63214
K632←NG
^

次は「6」です。「3」である2つめの技も刈ります。

P623215
 ^

P632
P326←NG
 ^
P63214
K***

その後、(2)「3」「2」と続くと、「236P」はOKであることが判ります。が、「412356P」も刈られていないのでチェックを続けます

P623215
     ^
P632←OK
P3**
P623214
K***

次に、「5」をチェックすると、入力が終端に達したので、チェックを終了します。このとき、「412356P」は条件を満たしていないので、不適当であることが判明します。

P623215
       ^
P632←OK
P3**
P62321(4)←「4」が無いのでNG
K***

つうことで、唯一OKが出た「236P」が検出される、つうあんばいです。