2007年01月27日

ライブラリ設計に対する雑感。

AIライブラリを設計する時、色々なAIを見て参考にしたりしているのですが
こういうプログラムはあまり参考にならないです。
なぜなら、そのまま持ってきても意図したとおりに動かないからです。

関数内からグローバル変数を参照(変わらない定数はOK)

一番参考になるのは、友瀬さんのGlenelgで再利用しやすい関数がいっぱいあります。
最もひどい例は標準AIです。
状態遷移をグローバル変数で管理するために、再利用が出来ない関数が多数。

それと、今回のレーサーAIみたいな使用用途が激しく限定されるようなもの以外は
結局他のAIで十分と思うことが多く、独自AIを作るだけの価値はあまり感じていません。
ですが、独自にこれはほしいと思える機能などは色々ありそれを
使えるように既存のAIを改造したりしています。
しかし…改造しても既存AIがバージョンアップしたりして変わると、それを
追いかけていくのも大変です。
それで、改造した部分のみお手軽に持っていけるようにすることを考えると
結局独自ライブラリを作り、決まった関数を数行呼び出すだけで
出来るようにした方が楽になるでしょう。
各AIに依存する部分を極力減らせば、どのAIにも使えるように出来るという
利点もあります。

そのためには、冒頭にも書いたとおり以下の方向で考えていくと使いまわしやすく
感じます。

・関数内にグローバル変数を使わない
・関数の出入力を明確にする
・大抵のAIが持っている機能があればそれを利用するように設計

ホム命令ライブラリの場合で考えると:
・特定の会話があれば、特定の状態を実行させる通知を発行
具体的例)
画面内の検索(プレイヤー・オブジェクトなど)をチャットで入力。
→候補に当てはまるものがあれば、そこの周りまで移動しくるくる回る

「くるくる回る。」というのは既にあるAIに実装しようとした場合
既存の機能と相互干渉して上手く行かなくなります。

そのための対策として、機能をさらに細かく分けて以下のようにすると
元となるAI自体の改造労力を減らせると思います。

それぞれの条件に合ったら改造元のAIに通知を送る

改造元のAIは、その通知に合わせた状態遷移に移行するように数行変更


posted by silica at 19:26| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。