AIの課題(5月12日)
見張りモンスターAIを設計せよ
ねらい
敵は何を見ているのか?
↓
それをどんなフラグにするのか?
↓
フラグによってどの行動を選ぶのか?
↓
それをif文にするとどうなるのか?課題タイトル
「お宝を守るモンスターを設計しよう」
シチュエーション
あなたはダンジョンゲームの敵AIを作ることになった。
モンスターは部屋の中にある宝箱を守っている。
プレイヤーは部屋に侵入して、宝箱を開けようとする。
モンスターは状況に応じて行動を変える。
モンスターの基本行動
使ってよい行動は以下。
Idle その場で待つ
Patrol 決められた範囲を歩く
Chase プレイヤーを追いかける
Attack プレイヤーを攻撃する
Return 持ち場に戻る
Guard 宝箱の前に立つ
Search プレイヤーを探す使ってよいフラグ
最初はこれだけ与えるとよいです。
bool isFindPlayer; // プレイヤーを見つけた
bool isNearPlayer; // プレイヤーが近い
bool isAttackRange; // 攻撃範囲にいる
bool isPlayerNearTreasure; // プレイヤーが宝箱に近い
bool isFarFromHome; // 持ち場から離れすぎた
bool isLostPlayer; // プレイヤーを見失った考えること!
1. どの行動を優先するか
例えば、
攻撃できるなら攻撃
宝箱に近づいたら追い払う
見つけたら追跡
見失ったら探す
遠くまで行きすぎたら戻る
普段は巡回この優先順位を考える。
2. if文に直す
最終的にこういう形にする。
if (isAttackRange)
{
Attack();
}
else if (isPlayerNearTreasure)
{
Chase();
}
else if (isFindPlayer)
{
Chase();
}
else if (isLostPlayer)
{
Search();
}
else if (isFarFromHome)
{
Return();
}
else
{
Patrol();
}自習の進め方
0〜10分
課題説明を読む
配布資料に以下を載せる。
あなたはゲームAI担当です。
宝箱を守るモンスターの行動ルールを設計してください。考えるゴールは、
フラグ
↓
条件分岐
↓
行動です。
10〜25分
ゲーム内状況を洗い出す
問い
モンスターが判断に使いそうな情報は何か?例:
プレイヤーとの距離
プレイヤーの方向
宝箱との距離
自分の持ち場からの距離
HP
プレイヤーを見失った時間25〜40分
フラグを作る
洗い出した情報を bool に変換する。
例:
プレイヤーとの距離が近い
↓
isNearPlayer
攻撃できる距離にいる
↓
isAttackRange
宝箱に近づいている
↓
isPlayerNearTreasure40〜55分
行動の優先順位を決める
ここが面白いところです。
行動パターンでモンスター(AI)の性格が変わる。
例1:短気なモンスター
攻撃
追跡
探索
巡回例2:宝箱優先モンスター
宝箱防衛
攻撃
追跡
持ち場に戻る
巡回例3:臆病なモンスター
宝箱防衛
攻撃
追跡
持ち場に戻る
巡回55〜70分
if文にする
疑似コードで書いてみる
if (__________)
{
__________();
}
else if (__________)
{
__________();
}
else
{
__________();
}
No Comments