2018 ソフトウェア設計及び演習用の班Wiki

18::gr12::千葉大輔

進捗状況(敵AIモジュールプロトタイピング)

Monsterクラスの一部作成(仮)

<クラス・メソッドの作成>
 敵AIモジュールの中心となるMonsterクラスを作成
 Monsterクラスはenchant.jsのSpriteクラスを継承し、以下のメソッドを追加(一部未作成)
・setStatus("名前",敵ID,x座標,y座標)
Monsterクラスのオブジェクト作成後、敵識別用IDとマップ上の座標値を設定するメソッド
・moveNormal()
主人公未発見状態時の自由移動。100ミリ秒毎にそれぞれの敵に異なる乱数(0~70)を与え、 その乱数に応じて上下左右に移動またはその場にとどまらせる。(↓イメージ)
1.jpg
・prevTest()
オブジェクトのステータス(プロパティ)を一覧表示(デバック用)

急接近AI(仮)の作成 + 調整

<メソッドの作成>
 自由移動状態の敵が追跡範囲内に入った瞬間に主人公に急接近するAIを作成。
 これは前回までに作ったMonsterクラスのメソッドのひとつ。
・moveToPlayer("主人公となるオブジェクト")
当たり判定作成のために主人公を引数として渡しているが要検討中。
追跡範囲内の主人公をその敵の素早さに応じて 最短距離で追跡する(現段階では斜め移動も含む)ためのメソッド。
この状態で距離が離れる(追跡範囲外)になると再び自由移動状態に戻る。
また、この状態で距離が攻撃射程範囲(未決定)に入ると攻撃AIに移る。

<プログラムの調整>
・前回まではそれぞれの行動を1000ミリ秒置きに実行していたが、それぞれの敵がよりバラバラなタイミングで動いている(自然な動き)ように見せるために100ミリ秒置きに直し、それに伴い乱数の上限個数を7から70に変更した。

・その他、滑らかな動きになるよう所々プログラムを修正したが、今後負荷のことも考えてより効率的なものにしていきたい。(処理の問題なのかmoveToPlayerを使用すると敵の画像の画質が落ちてしまうのでその原因と修正方法も模索中)

接近攻撃のAI作成 + 遠距離攻撃タイプの逃避行動

<メソッドの作成>
・attackToPlayer("主人公オブジェクト",マップ上での敵の番号)
近接攻撃タイプで急接近状態の敵が攻撃範囲に入った場合に向いている前方方向にエフェクトを表示する。この追加に際して前回までに作成したプログラムを変更し、作成された敵のオブジェクト毎に攻撃エフェクトを設定して個別にそれぞれのタイミングで発生させられるように変更。
・escapeFromPlayer("主人公となるオブジェクト")
遠距離攻撃タイプの敵が主人公が追跡範囲内に入ったときにそれぞれの速度に応じて逃げるようにするメソッド。

被ダメージの処理

<メソッドの作成>
・decreaseHP("主人公オブジェクト",マップ上での敵の番号)
敵が主人公に攻撃された際に主人公の武器の攻撃力に応じてHPを減少させる。それに加えて被弾時のノックバックや一定の無敵時間を与える。なお、無敵時間の間は敵は点滅して無敵時間であることがわかりやすくした。
<今後の課題>
①遠距離攻撃タイプの敵の攻撃時の処理(attackToPlayerメソッドへの書き足し)と余裕があれば敵の種類に応じたスキル発動
②統合に向けた中心となるクラスの書き方の大幅な修正

進捗状況(敵AIモジュール 中間発表後)

プログラム全体の修正

<Monsterクラスの内容変更>

メソッドの追加①

・displayDamage(マップ上ID,ダメージ値,属性)
主人公からの攻撃を受けた際に受けたダメージ値を可視表示する。また、属性相性によって数字の色を赤・青・黒にする。

メソッドの追加②

・shootAttack(マップ上ID,プレイヤーオブジェクト)
遠距離攻撃タイプの敵が主人公に向かってエフェクトを放って攻撃を行う。
・useSkill(スキルの番号)
データとして準備しておいたそれぞれのスキル(現在では周囲に敵を発生させるものや周囲の敵を回復させるスキルを用意)の具体的な動作を記述。
・moveWithPlayer(主人公が動く向き(数値))
主人公を常に画面中央に置くために主人公が動く(入力)に応じてその方向と逆の方向に動かすためのメソッド。

変更点

・setStatus内イベントリスナの登録
・敵が画面外に出た場合に処理を軽くするために行動不能状態と無敵状態に設定する。
・敵のHPが0以下になったときに、敵がだんだん薄くなり最終的にアイテムのアイコンに変わるまでの処理。
全体的な部分
・一定時間毎(1000ミリ秒)にスキル発動させる

スキル追加

ボス(がんちゃん)の行動内容
・具体的には数種類の石像を一定時間おきに召喚する
・現在はガーゴイル像(固定砲台),主人公が攻撃をすると天罰を下すお地蔵さんを作成

壁の当たり判定を作成

・実現方法
移動方向に壁があった場合に移動分だけ反対方向に移動させることで動かさないようにしている。
・遠距離攻撃
遠距離攻撃タイプの敵のエフェクトを壁にぶつかった際に消す処理を行う。その際に敵が壁の間際にいるとエフェクトが出された瞬間に消えてしまうため発射直後は消えないように設定。

最終的なボスのAI作成

・HPに応じた行動
ボスのHPが200〜350のときはガーゴイル像を10秒ごとに召喚(上限10体)。ガーゴイル像は動かずに遠距離攻撃を行う。

ボスのHPが101〜199のときは女神像を10秒ごとに召喚(上限10体)。女神像は動かずに遠距離攻撃を行い、また一定確率で周囲の敵を回復させる。

ボスのHPが0〜100のときはお地蔵さんを10秒ごとに召喚(上限10体)。お地蔵さんは動かずに遠距離攻撃を行い、HPが少なくなると周囲の主人公にダメージを与える。

開発に関する感想

 最初の段階でイメージしていた敵の動きをある程度実装することは出来たものの、統合段階で意図していなかった動きをしたり、特に壁の当たり判定の作成にあたっては妥協せざるを得ない点が多々あったことがとても残念だった。
 最終敵な作品においても当初予定していたシステムすべてを実装することが出来ず、さらに致命的なバグも残ってしまったことが悔やまれてならないが、目標地点を最後まで下げないようにして開発を続けて来れたことは良かったと思う。
 グループ開発では、プログラムの競合など個人開発では起こらないようなたくさんの問題を経験することができ、それらが今後に大いに活かせるようなものばかりであったことが個人的にはこの講義を通して得られた最大の成果だと思う。


最終更新日:2018/08/03 10:09:20