忍者ブログ
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール
HN:
[-_-;] (みかん)
性別:
男性
趣味:
プログラミング、XOPS
自己紹介:
中部地方在住です。
最新コメント
[11/30 NONAME]
[11/22 NONAME]
[09/24 NONAME]
[06/10 NONAME]
[01/29 NONAME]
XOPS関連サイト「みかん箱」の運営や、OpenXOPSの開発などを行う[-_-;](みかん)のブログ。近状報告や独り言などを書きます。
Prev Month123456789101112131415161718192021222324252627282930Next Month
C言語で3Dを勉強 -15

▲ あちらが撃ってきたんだ。俺は悪くない (意味不明

だいぶ出来が良くなってきました。
本当は既にアルファ版(試作品の試作品)として公開しても、それはそれで面白いのですが
やはり初お披露目にしてはちょっと恥ずかしいので、もう少し作り込みます。

2D描画を頑張ってみました。
実は右下の装備武器がグルグル回る処理、DirectX的には意外と難しいです。
地味に難航してます。
まぁこんな表示は(武器名さえ出れば)なくても開発には影響ないので、後回しです。

当たり判定はしばらく置いといて、今度は2番目の山場「AI制御」を作り込みます。
既にちょっと作ってみたのですが、やはりその場で書ける物ではありませんでした。
感度が悪いし、見つかると瞬殺されるし、ソースがスパゲティ状態です。
よって中途半端なAI処理は全て捨てて、最初から計画を練って作り直します。

XOPSのAIは一般的な3DゲームのAIとしては単純に見えますが、実は裏ではかなり
複雑です。
各処理を言葉に良い表すと簡単ですが、計算量は意外と多いんです。

〜また長文です。宜しくお願いします。
AI制御には「モード分け」の概念を取り入れます。このモードはプレイヤー以外の
各人に割り当てます。
・・分かり易く言うと、歩き移動モード、攻撃モード、って事です。

ざっと考えて以下のように割り振ります。
 AI_DEAD
   死亡している人
   原則として、描画以外は計算に関与しない。
 AI_ACTION
   戦闘中の人
 AI_CAUTION
   警戒中の人
   (周囲を激しく見回している)
 AI_WALK
   移動パスによって歩いている人
 AI_RUN
   移動パスによって走っている人
 AI_NORMAL
   パスによって待機している人
   (周囲をほどほどに見回している)
 AI_WAIT
   パスによって動かない人
   (一定方向を向き続ける)
    ・時間待ち
    ・パスが無い
 AI_TRACKING
   特定の人を追尾する

分類分けすると、各モードは以下のように分けられます。
ただし、AI_DEAD(死亡)は特殊状態なので省きます。
 ■通常状態
  ・AI_WALK    (歩き)
  ・AI_RUN     (走り)
  ・AI_NORMAL  (待機)
  ・AI_WAIT    (停止)
  ・AI_TRACKING (追尾)
 ■興奮状態 (笑
  ・AI_ACTION   (戦闘)
  ・AI_CAUTION  (警戒)
「通常状態」は特定の時間もしくは場所で必ず行います。
一方「興奮状態」はいつでも臨機応変に処理する必要があります。

各モードへの移動推移として・・
  AI_ACTION(戦闘)  ⇒ AI_DEAD(死亡)
   ↑ ↓
  AI_CAUTION(警戒) ⇒ AI_DEAD(死亡)
   ↑ ↓
   通常状態       ⇒ AI_DEAD(死亡)

注意しなければならない点があります。
 ・モードに関係なく、常にAI_DEADになる場合がある。
  (いつ死亡してもおかしくないという当たり前のこと)
 ・突然、通常状態からAI_ACTIONになる事は無く、
  必ず一度はAI_CAUTIONになる。
前者についてはそのままの()内の意味です。考えなくても分かります。
後者は、なぜ一度AI_ACTION(警戒)に入れる必要があるのでしょうか。
答えは単純です。
いきなりAI_ACTION(戦闘)に入ると、視界に入った瞬間に瞬殺されます。
瞬殺するAIもそれはそれで面白いですが、場合によってはゲームにならないので、
一度AI_ACTION(警戒)に入り様子をうかがう動作を入れます。
「うかがう」といっても0.2〜0.5秒ですが、それでも結構差が出ます。

通常状態中には必然的にAI_ACTION(警戒)への割り込み処理に近い処理が必要になります。
 ・近くに弾が着弾した(敵の弾・味方の弾 区別せず)
 ・敵が近くで走っている
 ・敵の姿が見えた
 ・味方の死体を見つけた(時々)
通常状態中に上記の非常事態を検出したら、即座にAI_ACTION(警戒)になります。


自分の考えたAI動作は以上です。
こればっかりはXOPSの処理の中身は読めません。外から自分で予想するしかないのです。
逆を言えば、上記の処理はすべて独自設計です。

今回も、誰の得にならない、完全に自己満足の記事になりました。
なぜ、毎回こんな気持ち悪いことを書くのか?
それは「何か 無駄に頑張ってるなぁ〜」っと見てもらうためです(笑
それで良いのです・・。
category : ソフト・ツール開発 comment [0] trackback []
PR
COMMENTS
【本文以外は任意項目です】
SUBJECT(タイトル)
NAME(お名前)
MAIL(メールアドレス)
HOME(サイトURL)
COMMENT(本文)
PASS(削除パスワード)
Secret?(管理者へのみ表示)

※スパム防止のため「Hello!」「website」「ブランド」「みかんの戦闘ブログ」
「http」などの一部キーワードを禁止しています。ご了承ください。

TRACKBACKS
URL:

※過去のブログ記事は 原則として編集・修正していません。
 各記事の内容は投稿時のものであり、現在では異なる場合があります。
 最新の情報は、関係する内容について書かれた 最新の記事をご覧ください。

TOP