Aiの難しさ的な話

Ai初めてまともにやったけど、マジで難しかった。
普通のプログラムの世界と、Aiプログラミングの世界ってのは結構違うもんだね。


とても公開出来るレベルではなく我ながらちょっと恥ずかしいんだけど、とりあえず最低限動いたプロトタイプが出来たので晒すだけ晒す。
http://jgame-js.sourceforge.jp/examples/ai.html

デモについて

このデモは、まあとてもデモと呼べる出来の代物ではないんだけど、一応キャラクターにHTMLベースで命令セットを与えて、その命令ベースで各キャラクター達が動いていく。


デフォルトで設定されているのは、味方側が一直線に敵に向かって殴るAIで、敵側は相手が前方にいる時は移動量が大きい以外味方側AIと同じ、前方にいない場合はランダムに怪しい動きをする。
ちなみに敵味方ともに思考スピードと移動スピードに乱数が入る。


デモと呼べる代物でない理由は思考時間に比べて攻撃時間が短すぎる点が一番大きくて、基本的に敵方向に回転して攻撃連発してるAIが最強。回転と攻撃は移動と違って実行に要する時間が0だからね。
余計な思考しない固定砲台最強。


まあゲームにするんじゃなくてAIのテスト目的だったので、別にいいんだけど、もうちょっといじればちゃんとしたAIバトルのデモになってもっとよかったので、まあすいませんって感じで。

コンピュータの思考内容を知る事の重要性的な話

普通のプログラム作業って、当然自分で考えて自分で組んでいくので、プログラムがどんな状態でどういう流れで行われていくのかってのは、基本的に全部自分の頭の中と一致してんだよね。


これに対して、AIはコンピュータが考えてコンピュータが決めてるので、突拍子も無い行動をした時になぜそういう事をしちゃうのか想像がつかずに苦労した。
最終的にしょぼいデモまでなんとか出来たのは、デモ右下にあるレーダーとAIが行動をした内容を表示するデバッグウィンドウを作ったから。これ作る直前はちょいギブアップ気味だった。


AIの扱う情報ってステップ実行して追いきれるものではないので、今AIはなにをして、なぜAIがそう考えるに至ったのかをシンプルにプレビュー出来ないととても開発出来ない。
まあ経験なんてなくてもちょっと考えればわかるだろって感じだけど、俺は考え不足でその想像がついてなくてデバッグウィンドウ無しで一行ずつ追うとかばかなことしてて、すげー苦労した。


皆さん、AI作る場合、最初にデバッグ情報の表示方法考える事を、実体験を元にお薦めするっす。

今後

とりあえずこのAI部分は、ある程度まとまったらjgame.jsのモジュール行きにする。
まとめる過程で不思議のすごろくの戦闘シーンデモを作る。


戦闘シーンと今回のデモの違いは、攻撃モーション(エフェクト)が入り、実際に体力が減って死ぬというところかな。
魔法は不思議のすごろく本体でもいれるかどうかを決めてないので、戦闘シーンのテストではやらない。


不思議のすごろく本体では確実に特技とユーザ介入方法として「アイテム」を入れるので、そこまでやりたいけど、時間かかるのでそこまで仕上げるべきかは検討中。


いやー、しかし大変だった。
AIは久々に、別にそんな難しくねーのになんで出来ねーのおまえばかなの死ぬの、と、自分のレベルの低さに絶望してちょっと鬱入るレベルだった。


なんとか克服した。これでまた一歩進める。