実例で学ぶゲームAIプログラミング

[cover photo]
TOPICS
Programming , Game
発行年月日
PRINT LENGTH
536
ISBN
978-4-87311-339-5
原書
Programming Game AI by Example
FORMAT
Print
Print
4,180円

ゲームAIプログラミングの名著“Programming Game AI by Example”の邦訳。プレイヤーのスキルが向上し、より面白くてワクワクするようなゲームが好まれるという市場の変化に伴い、ゲームの開発現場ではAI(人工知能)技術を使ったインテリジェントエージェントやボットの開発が注目されるようになりました。本書では、AI技術を使ったインテリジェントエージェントの構築を、実例(動くサンプル)を多用しながらステップバイステップで丁寧かつ分かりやすく解説します。

原書(英語版)のWebページ
原書:Programming Game AI by Example
バグフィックス
正誤表

関連ファイル

目次

訳者まえがき
推薦の言葉
本書に寄せて
まえがき

1章 数学と物理入門
	1.1 数 学
		1.1.1 直交座標
		1.1.2 関数と方程式
		1.1.3 三角法
		1.1.4 ベクトル
		1.1.5 ローカル空間とワールド空間
	1.2 物理学
		1.2.1 時間
		1.2.2 距離
		1.2.3 質量
		1.2.4 位置
		1.2.5 速度
		1.2.6 加速度
		1.2.7 力
	1.3 まとめ
		式(1-90)の簡単化

2章 ステート駆動エージェントの設計
	2.1 有限ステートマシンとは一体何か?
	2.2 有限ステートマシンを実装する
		2.2.1 状態遷移表
		2.2.2 組み込み型のルール
	2.3 ウエストワールドプロジェクト
		2.3.1 BaseGameEntityクラス
		2.3.2 Minerクラス
		2.3.3 鉱夫のステート
		2.3.4 ステートデザインパターン再び
	2.4 State基底クラスを再利用可能に作る
	2.5 グローバルステートとステートブリップ
	2.6 StateMachineクラスを作る
	2.7 エルザの紹介
	2.8 FSMにメッセージング機能を追加する
		2.8.1 Telegram構造体
		2.8.2 鉱夫ボブとエルザの会話
		2.8.3 メッセージの送信と管理
		2.8.4 メッセージ処理
		2.8.5 エルザが夕食を作る
	2.9 まとめ
		練習問題


3章 自律的に動くゲームエージェントの作成方法
	3.1 自律エージェントとは何か?
	3.2 ビークルモデル
		3.2.1 ビークルの物理特性を更新する
	3.3 操舵行動
		3.3.1 探索行動(Seek)
		3.3.2 逃走行動(Flee)
		3.3.3 到着行動(Arrive)
		3.3.4 追跡行動(Pursuit)
		3.3.5 逃避行動(Evade)
		3.3.6 徘徊行動(Wander)
		3.3.7 障害物回避行動(ObstacleAvoidance)
		3.3.8 壁回避行動(WallAvoidance)
		3.3.9 介入行動(Interpose)
		3.3.10 隠身行動(Hide)
		3.3.11 経路追従行動(FollowPath)
		3.3.12 オフセット追跡行動(OffsetPursuit)
	3.4 グループ行動
		3.4.1 分離行動(Separation)
		3.4.2 整列行動(Alignment)
		3.4.3 結合行動(Cohesion)
		3.4.4 フロッキング
	3.5 操舵行動を組み合わせる
		3.5.1 加重和を切り捨てる
		3.5.2 プライオリティを用いた加重和を実行時に計算し、切り捨てる
		3.5.3 プライオリティ付きディザ処理
	3.6 重なりをなくす
	3.7 たくさんのビークルに対処する:空間分割
	3.8 スムージング
		練習問題

4章 スポーツシミュレーション――シンプルサッカー
	4.1 シンプルサッカーの環境とルール
		4.1.1 サッカーピッチ
		4.1.2 ゴール
		4.1.3 サッカーボール
	4.2 AIを設計する
		4.2.1 SoccerTeamクラス
		4.2.2 フィールドプレイヤー
		4.2.3 ゴールキーパー
		4.2.4 AIが使用するキーとなるメソッド
	4.3 推定や仮定の勧め
	4.4 まとめ
		練習問題

5章 グラフの不思議な世界
	5.1 グラフ
		5.1.1 よりきちんとした説明
		5.1.2 ツリー
		5.1.3 グラフの密度
		5.1.4 有向グラフ
		5.1.5 ゲームAIでのグラフ
	5.2 Graphクラスを実装する
		5.2.1 GraphNodeクラス
		5.2.2 GraphEdgeクラス
		5.2.3 SparseGraphクラス
	5.3 グラフ探索アルゴリズム
		5.3.1 情報のないグラフ探索
		5.3.2 コストに基づくグラフ探索
	5.4 まとめ
		練習問題

6章 スクリプトにするべきかやめるべきか、それが問題だ
	6.1 スクリプト言語とは何か?
	6.2 スクリプト言語は何ができるのか?
		6.2.1 対話の流れ
		6.2.2 演出
		6.2.3 AIロジック
	6.3 Luaによるスクリプト処理
		6.3.1 使用しているコンパイラを設定しLuaが使えるようにする
		6.3.2 始める
		6.3.3 Luaで書かれたじゃんけん
		6.3.4 C/C++とインタフェースする
		6.3.5 助け船! Luabind
	6.4 スクリプト化された有限ステートマシンの作成
		6.4.1 どのように機能するか?
		6.4.2 ステート
	6.5 役に立つURL
	6.6 人生はバラの香りほど甘くない
	6.7 まとめ

7章 Raven:概要
	7.1 ゲーム
	7.2 ゲームアーキテクチャの概要
		7.2.1 Raven_Gameクラス
		7.2.2 Ravenのマップ
		7.2.3 Ravenの武器
		7.2.4 発射物
		7.2.5 トリガー
	7.3 AI設計で考慮すべき点
	7.4 AIの実装
		7.4.1 意志決定
		7.4.2 移動
		7.4.3 経路プランニング
		7.4.4 知覚
		7.4.5 ターゲットの選択
		7.4.6 武器の扱い
		7.4.7 すべてを組み合わせる
		7.4.8 AIコンポーネントを更新する
	7.5 まとめ
		練習問題

8章 実践的な経路プランニング
	8.1 ナビゲーショングラフの構築
		8.1.1 タイルベース
		8.1.2 POV
		8.1.3 幾何形状の拡大
		8.1.4 ナビメッシュ
	8.2 Ravenのナビゲーショングラフ
		8.2.1 粒度の粗いグラフ
		8.2.2 粒度の細かいグラフ
		8.2.3 Ravenのナビゲーショングラフにアイテムを追加する
		8.2.4 空間分割を用いて近接問い合わせを高速化する
	8.3 経路プランナークラスを作成する
		8.3.1 ある場所への経路をプランニングする
		8.3.2 アイテムへの経路をプランニングする
	8.4 ノードとしての経路かエッジとしての経路か?
		8.4.1 注釈付きエッジクラスの例
		8.4.2 経路プランナークラスを修正し、注釈付きエッジに対応させる
		8.4.3 経路の平滑化
		8.4.4 CPUのオーバーヘッドを減らす方法
	8.5 立ち往生しないようにする
	8.6 まとめ
		練習問題

9章 ゴール駆動型エージェントの行動
	9.1 Eric the Braveの復活
	9.2 実 装
		9.2.1 Goal_Composite::ProcessSubgoals
		9.2.2 Goal_Composite::RemoveAllSubgoals
	9.3 Ravenのボットが用いるゴールの例
		9.3.1 Goal_Wander(徘徊する)
		9.3.2 Goal_TraverseEdge(エッジを移動する)
		9.3.3 Goal_FollowPath(経路をたどる)
		9.3.4 Goal_MoveToPosition(移動する)
		9.3.5 Goal_AttackTarget(ターゲットを攻撃する)
	9.4 ゴールの調停
		9.4.1 ヘルスアイテムの発見欲求を計算する
		9.4.2 特定の武器の発見欲求を計算する
		9.4.3 ターゲットへの攻撃欲求を計算する
		9.4.4 マップの探索欲求を計算する
		9.4.5 すべてを組み合わせる
	9.5 副産物
		9.5.1 性格
		9.5.2 ステートメモリ
		9.5.3 コマンドのキューイング
		9.5.4 キューを用いて行動をスクリプト化する
	9.6 まとめ
		練習問題

10章 ファジー論理
	10.1 クリスプ集合
		10.1.1 集合演算子
	10.2 ファジー集合
		10.2.1 メンバーシップ関数でファジー境界を定義する
		10.2.2 ファジー集合演算子
		10.2.3 ヘッジ
	10.3 ファジー言語変数
	10.4 ファジールール
		10.4.1 武器選択用のFLVを設計する
		10.4.2 武器選択用のルールセットを設計する
		10.4.3 ファジー推論
	10.5 理論から応用へ:ファジー論理モジュールをコーディングする
		10.5.1 FuzzyModuleクラス
		10.5.2 FuzzySet基底クラス
		10.5.3 三角形型ファジー集合のクラス
		10.5.4 右肩型ファジー集合のクラス
		10.5.5 ファジー言語変数クラスを作成する
		10.5.6 ファジールールを構築するクラスを設計する
	10.6 Ravenでのファジー論理クラスの利用
	10.7 Combs方式
		10.7.1 ファジー推論とCombs方式
		10.7.2 実装
	10.8 まとめ
		練習問題

付録A C++テンプレート
	A.1 関数テンプレート
		A.1.1 さらに型を追加する
	A.2 クラステンプレート
	A.3 リンカの混乱

付録B UMLクラス図
	B.1 クラス名、属性、操作
	B.2 属性と操作のアクセスレベル
	B.3 関 係
		B.3.1 関連
		B.3.2 汎化
		B.3.3 依存関係
	B.4 ノート
	B.5 まとめ

付録C 開発環境を設定する
	C.1 実行形式のデモのダウンロード
	C.2 ソースコードのダウンロードとインストール

付録D 自然言語による対話処理
	D.1 ELIZA
	D.2 形態素解析
	D.3 SHRDLU
	D.4 構文解析、意味解析、文脈・談話解析
	D.5 まとめ

参考文献
あとがき
索 引