ひびろぐ ver.2

Google検索したときの見た目を考慮してブログ名を変更してみた。馬鹿かと阿呆かと。

Archive for 6月 24th, 2007


ImpressかPowerPointをハックさせろ

ネタプログラムがしたいのに、資料がナサスギて何もできねえ。


くそったれーーーーーーーー!

関数型・手続き型

Functioal Programming IAT

あなたの関数型指数は -0.260845691175105 です。正が関数型、負が手続き型です。


最後に「関数型と手続き型どっちが好きか」っていう質問が出るんだけど、アレでどんだけ持っていかれるんだろうね。

あと、最初ルールを勘違いしてミスしまくった。わかりにくい。

オートマトンと格闘ゲームのコマンド入力

元ネタ?はところてんの日記

昔格闘ゲームもどきを作っていたときにEBA先輩に教えてもらった話なんだけど、(非決定性有限)オートマトンが格闘ゲームのコマンド認識に使えるというお話です。


とりあえず、オートマトンについてはWikipediaでググレ。要するに、「現在の状態」を持っていて、「外から入力を受ける」ことができて、「状態と入力によって新しい状態への遷移や出力を行う」、って感じかな。

有名な「波動拳コマンド」(下・斜め前下・前。右を向いているならば下・右下・右。236。)のオートマトン(の状態遷移図)はこんな感じ↓

オートマトンと格闘ゲームのコマンド入力:波動拳簡易バージョンこんな。


ただし、これはもっとも単純化した例です。もしこれを1フレームごとに処理したとすれば、誰も波動拳を撃つことはできないでしょう。

何故ならば、「下と右が同時に押されている」状態から「右とパンチが押されている状態」へ1フレームで遷移しなくてはならないわけですが、60FPSのゲームであればそれを0.16秒できっちりやらなくてはならないわけです。おそらくほとんどの場合に状態Bから開始へ戻ってしまうことになるでしょう。

というわけで、実際にはもっと細かく制御する必要があります。例えばこんな感じに↓

オートマトンと格闘ゲームのコマンド入力:波動拳詳細バージョン詳細。

適当に書いたのでこれでも穴がありそうだけど、かなりマシになりました。

何気に状態が1つ増えていて、最後の右とパンチが同時じゃなくてもOKになりました。サムスピだかKOFだかなんだか忘れたけど、「少し歩いてからボタンを押しても技が出る」なんてシステムがありましたが、これで再現できますね。1秒は長いかも知れんけど。

さて、実際の格ゲーでは更に複雑化します。スト2じゃなくて竜虎の拳だったら気力ゲージがないと技が撃てないーーいや、威力が下がるだけだっけ?ーーし、キャラが空中にいるかどうかで技が変わるかもしれませんし、実は同じ十字キー入力をもう一回繰り返すと超必殺技かもしれません。

モノによっては受理の後に判定を入れることで変化を与えられますが、オートマトンそのものの数を増やして優先順位をつけるのが妥当な対策でしょうか。私は「真空波動拳の判定は波動拳の先にやっておき、発動したら波動拳のオートマトンは初期化する」みたいなことをやった記憶があります。


ついでに言ってしまうと、格ゲーであればコマンド入力だけではなくてキャラクターの状態遷移にも応用できます。っていうか、思いっきり状態遷移と言ってるわけで、状態遷移図を書けば幸せになれるよ!

オートマトンと格闘ゲームのコマンド入力:キャラクター全体全体。

ジャンプとか入れてないのにこの汚さというのはちょっとよろしくないけど、まあこんなもんです。



非決定性の意味がない件。

実際には決定性有限オートマトンがたくさんあって、イベントに反応して遷移開始しているわけです。んで並列に処理しまくった上で、あるタイミングで他のオートマトンを一斉に初期化するとかいうある意味キモイ?イベントが起きるわけだ。例えば波動拳が受理されたら真空波動拳が破棄されたみたいな。協調処理とするオートマトンみたいな?なんか微妙にエージェントっぽいな。

実験機が退院した

先日入院したM/Bが退院しました。

っつーか木曜の夜に帰宅したら不在表があったので土曜の午前中に指定。


無事直ったようです。普通に起動できます。なんと素晴らしい。

勢い余ってFedora7をぶち込んだけど、まったく持って使い道がない。


さて、この実験機どうしようかなあ。