【Google AI Studio】時短クッキング No.14:ループ型迷路で作る「平安京エイリアン/ボンバーマン/ペンゴ」的ゲーム3本盛り!
時間をかけずにアプリ開発に挑戦する「時短クッキング」シリーズ。2D迷路 → 3D迷路ときて、今回のテーマは ゲームで必須の「ループ型迷路」 です。
ループ型迷路とは?
一言でいえば、
行き止まり(突き当たり)が一切ない迷路
のことです。
何を想定しているかというと、レトロゲームで言うなら……
平安京エイリアン(落とし穴で敵を倒す)
ボンバーマン(爆弾で敵を倒す)
ペンゴ(ブロックを押して敵をつぶす)
といった 迷路+アクション型ゲーム です。
これらはどれもループ構造の迷路がベースになっており、行き止まりが無いことで、敵も自キャラも常に動き回ることができます。
今回は、この3つの要素を まとめて1本に詰め込む という、よくばり企画になってしまいました。
ループ迷路を作るためのプロンプト
通常の迷路生成アルゴリズム(穴掘り法、プリム法など)は、必ず行き止まりができる 木構造(ツリー) になります。
しかし今回欲しいのは ループを含む迷路。
プロンプトはシンプルに次の通り。
ループ型の迷路を生成するアプリを作ってください。
行き止まりはありません。
縦横サイズを指定して再生成できるようにしてください。
すると出来上がったのがこちら。

たしかに行き止まりがなく、どの通路もどこかにつながっています。
右上に大きな部屋がありますが、内部でループしているため問題なし。
ループ迷路生成アルゴリズムの仕組み
AIが生成したアルゴリズムの要点を整理すると、次の流れで作っています。
1)完全迷路を作る(穴掘り法)
まずは普通の迷路を作る
この時点では行き止まり(デッドエンド)がたくさん存在
2)行き止まりをすべて検知する
壁が3方向ふさがっているセル=行き止まり
3)行き止まりを「無理やり」別の通路につなげる
閉じている3方向の壁から1つ選び
隣接する通路へ壁を破壊して接続
4)すべての行き止まりが消えるまで繰り返す
こうして、どのセルも最低2方向以上に抜け道がある「ループ迷路」になります。
ゲームに使うなら「壁型」よりも「ブロック型」
迷路を扱う場合、最初に決めておく要素があります。迷路には、主に2つの表現方法があるので、これを選択しておかないとけません。
① 壁型迷路(セル方式)
迷路の“部屋”を基準に構成する方式。壁が線で表現されます。
壁の有無で構造を管理
メモリ効率が良く、論理的で扱いやすい
ただし壁抜けなどの処理が若干難しい
壁が薄いのでキャラが大きくできる

② ブロック型迷路(壁=1マス扱い)
ゲームで一般的に使われる方式。壁がブロックで表現されます。
各マスが「壁」か「道」かの2値で表現
0なら通れる、1なら通れないというシンプルな判定
ゲーム実装が圧倒的に楽
キャラが小さくなりがちだが、壁を薄くすることで調整可能

今回はゲーム向きのブロック型迷路を採用します。しかし、最初にできたのが壁型。データ構造が異なるので、ブロック型に直さないといけません。そのためのプロンプトがこちら。
現在の迷路の描画と当たり判定を、壁自体を1マスとして扱う『ブロック型』に変更してください。
するとこのようなブロック型迷路が完成しました。

平安京エイリアン+ボンバーマン+ペンゴ=「アーケードメイズバトル」
ベースができたので、そこから試作を重ねて完成したゲームがこちら。

1つのゲームの中で、
平安京エイリアンの「穴掘り」
ボンバーマンの「爆弾」
ペンゴの「壁押し」
そして通常の「弾シューティング」
ふうの武器が選択できるという、ごった煮迷路ゲームになっています。
操作方法
▼ 移動
カーソルキー
▼ 武器使用
スペースキー
▼ 武器切り替え
Ctrl+カーソルキー(またはマウス選択)★重要
■ ステージ構成
全8ステージ(ST01〜ST08)
起動時はST01から開始
クリアすると次のステージへ進む
負けると同じステージを再挑戦
左メニューから好きなステージを選んで開始も可能
■ ルール
画面内の敵をすべて倒せば勝利
敵や敵の攻撃に触れると残機が減る
残機ゼロでゲームオーバー
武器はいつでも切り替え可能(敵の種類に応じて使い分け)
ゲーム開始時は無敵モードになっていて、動くと無敵モードから解除される★重要
武器4種の説明(レジェンドゲーム由来)
武器はCtrl+カーソルキー(またはマウス選択)で選択します。
【1】SHOOTER(通常弾)
前方に弾を発射。最大3発同時に撃てます。
固い敵は、複数回当てないと倒せません。
【2】BOMBER(ボンバーマン系)
その場に爆弾を設置。数秒後に爆発。
誘爆あり、敵を複数撃破するとボーナス。
爆発範囲は一定です。
【3】DIGGER(平安京エイリアン系)
前方に穴を掘り、もう一度スペースキーで埋められます。
本家とは違い1回で穴掘り、穴埋めができます。
敵が穴に落ちると5秒間のカウントダウンがあり、その間に塞ぐと倒せます。
【4】PUSHER(ペンゴ系)
前方の壁を押せます。壁が敵に当たると撃破。
連続した壁を押した場合は、手前の壁が壊れる仕組み。
これで「詰み」状態を免れます。

ST06から急に難しくなる鬼仕様
せっかく4種類も武器があるので、各武器の特性を活かすためにステージをある程度作り込んでみました。
ST01:同じ個所を行ったり来たりする敵を10匹倒してください
ST02:常に前進する敵を10匹倒してください
ST03:ランダムに弾を打ってくる敵を10匹倒してください
ST04:ランダムに弾を打ってくる固い敵を10匹倒してください
ST05:動かずに弾を打ちまくってくる敵を10匹倒してください
ST06:爆弾を置きまくる敵を10匹倒してください
ST07:壁を押しまくる敵を10匹倒してください
ST08:爆弾を置きまくりながら、壁を押しまくる敵を10匹倒してください
どのステージでは、どの武器が有効か探してみてください。
シェアURL
お試しください。
アーケードメイズバトル
壁型/ブロック型比較アプリ(おまけ)

まとめ:最初は武器1つの予定だったのに…
当初は、プレイヤーに持たせる武器を1種類に絞るつもりでした。
ところがAIに相談してみると、
全部できますよ
と言われてしまい、すべて実装することに。しかし、今度は 武器同士の兼ね合い問題 が発生。たとえば、こんな感じです。
穴を掘ってから武器を変えたら、穴はどう扱えばいいか?
敵に爆弾を使わせたら、爆風で敵が勝手に死んでしまう!
思わぬカオス状態を乗り越えて、なんとかまとめたという感じです。万一、プレイ中に微妙な不具合があれば……サーセン!!
以上!
いいなと思ったら応援しよう!
記事なり、プログラムなりが役に立ったと思った方は、
チップの応援よろしくお願いいたします。
次の開発もがんばろうかな、という気になりますのだ (笑)