見出し画像

【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(ペンゴ系)

前方の壁を押せます。壁が敵に当たると撃破。
連続した壁を押した場合は、手前の壁が壊れる仕組み。
これで「詰み」状態を免れます。

DIGGERで作った穴に敵が落ちるとカウントダウン




ST06から急に難しくなる鬼仕様

せっかく4種類も武器があるので、各武器の特性を活かすためにステージをある程度作り込んでみました。

  • ST01:同じ個所を行ったり来たりする敵を10匹倒してください

  • ST02:常に前進する敵を10匹倒してください

  • ST03:ランダムに弾を打ってくる敵を10匹倒してください

  • ST04:ランダムに弾を打ってくる固い敵を10匹倒してください

  • ST05:動かずに弾を打ちまくってくる敵を10匹倒してください

  • ST06:爆弾を置きまくる敵を10匹倒してください

  • ST07:壁を押しまくる敵を10匹倒してください

  • ST08:爆弾を置きまくりながら、壁を押しまくる敵を10匹倒してください

どのステージでは、どの武器が有効か探してみてください。




シェアURL

お試しください。

アーケードメイズバトル

壁型/ブロック型比較アプリ(おまけ)

ブロック型で壁を薄くする表示も選べます





まとめ:最初は武器1つの予定だったのに…

当初は、プレイヤーに持たせる武器を1種類に絞るつもりでした。

ところがAIに相談してみると、

全部できますよ

と言われてしまい、すべて実装することに。しかし、今度は 武器同士の兼ね合い問題 が発生。たとえば、こんな感じです。

  • 穴を掘ってから武器を変えたら、穴はどう扱えばいいか?

  • 敵に爆弾を使わせたら、爆風で敵が勝手に死んでしまう!

思わぬカオス状態を乗り越えて、なんとかまとめたという感じです。万一、プレイ中に微妙な不具合があれば……サーセン!!

以上!

いいなと思ったら応援しよう!

ROROSUKE LABO 記事なり、プログラムなりが役に立ったと思った方は、 チップの応援よろしくお願いいたします。 次の開発もがんばろうかな、という気になりますのだ (笑)