
AIと作る「ブロックダンジョン」 モンスター編
AIと作るブロックダンジョン。
前回は、ぶっ飛ばして敵を巻き込んで攻撃できる「スライムボール」を作った。
今回は、敵のバリエーションを作る。
アドバイザーのAIはCopilotさん
ローグライクなブロックダンジョン

「ダンジョン」×「ブロック崩しアクション」
ゲーム概要
◎ローグライクな毎回変わるブロックダンジョン!
✅タメ撃ちでボールを発射し敵やブロックを破壊! ⇐ 前々回
✅ザコをぶっ飛ばしてボールに!? ⇐ 前回
▢ 敵の発射する弾も打ち返せる!? ⇐ 今回
◎トルネコみたいに強い武器やアイテムを取って帰る
③「特殊なモンスター」を作る
2種類のモンスター
突進:重くて固いブロックモンスター。壁を破壊しながら突進してくる。
ボス:ボールを発射。打ち返して倒せる。
驚異のハイプレス「ブロックマン」

突進キャラは、プレイヤーを見つけると短時間スピードアップするだけだが、イイ感じにプレスをかけてくる。
通常攻撃ではヒットバックしないので近寄られるとダメージ確定。
突進中に壁にぶつかると破壊するようにした。

口から火の玉を発射するボス 「ジョーズ」

鮫?のモンスター。口から火の玉を発射し全てを破壊する。
昔、作ったブロック崩しのボスとボールを流用して、打ち返して敵にダメージを与えられるようにした。

敵の玉は、昔作ったイカ崩しからの流用。
攻撃やチャージショットのボールでも打ち返せる。
足は遅いが索敵範囲は広いので動く砲台として大活躍。

体力が少なくなると怒って巨大化し凶悪になるようにした。

プレイヤーのダメージ処理
プレイヤーのダメージ処理は、敵のダメージ処理と同じように行った。
敵の時は、敵がダメージ中は他の行動をしないように処理したが、プレイヤーもダメージ中はキー入力を受け付けないように条件を追加した。
ただ、ダメージ受けても反応しない時があったので、デバッグ用の表示を出したが、常に表示を見てられないので、状態によってアニメーションを変えようと思った。
AIに相談:待機、移動、ダメージでスプライトを変えたい
それぞれの状態(idle、moving、damaged)のスプライトを用意し、状態に応じてスプライトを切り替えるロジックを実装します。
スプライトの設定
まず、GameMaker Studioに必要なスプライトをインポートまたは作成します。以下の例では、次の3つのスプライトを使用します:
s_idle: アイドル状態のスプライト
s_moving: 移動中のスプライト
s_damaged: ダメージを受けた状態のスプライト
アニメーションの切り替え
各状態の中で、sprite_indexでアニメーションを指定します。

状態変化のチェック用に待機、移動、ダメージでアニメーションを変えた。
お絵描きは楽しいが、絵が下手過ぎるわ。
円と線ツールで分かればいいやで描いてます。。。
チェック用に他の敵にもダメージアニメーションを作った。
ついでに、プレイヤーの体力も表示するようにした。
ガイドと重なった時対策で、すこし右寄せ+ガイドの色を水色に変更。


スライムをぶっ飛ばすとクリティカルで倍ダメージが入る。
分かりにくいので、専用ヒットマークと表示を作るか。

敵の玉を反射させてぶつけたり、スライムをぶっ飛ばして敵に当たてたりするとクリティカルになるようにした。
ブロックダンジョンへの道
今回は敵のバリエーションを作ったので、次はテストステージを作って遊んでみる。
タスクリスト
①プレイヤーを作る
✅ 移動とガイドと通常攻撃
✅ タメ撃ちでボールを発射
✅ ボールを打ち返す
②ボールザコを作る
✅ 移動と索敵
✅ ザコをぶっ飛ばしてボールとして利用
③敵を作る
✅ 突進敵
✅ ボール発射敵
✅ プレイヤーのダメージ処理
④テストステージでテスト
▢ 仮ブロックを配置してテスト
⑤ダンジョンの自動生成
▢ 自動生成のルールを作る
▢ ダンジョンの大きさなどを設定
⑥アイテムの自動生成
▢ アイテムの発見とパワーアップ
▢ 持ち帰って装備して再チャレンジ
⑦ボス戦
▢ 突進敵やシューティング敵、ザコ呼びなど