ITエンジニアのための勉強会・イベントレポート情報メディア

Unityで作ろう!ゲームアルゴリズム(8)ボンバーマン的なアルゴリズムを作ってみる その1
skill

Unityで作ろう!ゲームアルゴリズム(8)
ボンバーマン的なアルゴリズムを作ってみる その1

2017.05.18

 
  • このエントリーをはてなブックマークに追加

最近はSwitchのゼルダばっかりやっています。

任天堂が4年の歳月を費やして開発された広大な世界。その作り込み具合は凄まじく、世界のどこに行ってもモンスター・建造物・動物・植物など、新しい発見があります。そして、風景の美しさにしばしば見とれてしまいます。

そして、「ゲーム内のオブジェクト同士が相互に影響を及ぼす」というのが開発コンセプトのひとつだったそうで、それによってゲームの自由度&リアリティがものすごいことになっています。

詳細に書くと終わらないのでこのへんにしておきますが、とにかく面白いのでまだプレイされていない方がいらっしゃればぜひお試しを!

・・・と宣伝のような前置きで始まりましたが、筆者は回し者ではなくただのファンです(笑)。
今回は、かの有名な対戦アクションゲームであるボンバーマン的なアルゴリズムを作ってみます。そういえば、ボンバーマンもSwitchで最新作が発売されましたのでこちらも要チェックですね。

賀好 昭仁

ボンバーマンの歴史

ボンバーマンの歴史を調べてみましたところ、これがなかなか面白かったのでご紹介させていただきます。

筆者は、ボンバーマンの歴史はファミコンの見下ろし型視点の対戦ゲームから始まったという認識でした。
読者のみなさまもきっとこの認識の方が多いのではないでしょうか。
しかし、実はシリーズの歴史はそれ以前から始まっていたようです。

ボンバーマンシリーズの始まりは、1983年にX1というパソコン用に開発されたゲームでした。
その作品の名は「爆弾男」!

パッケージに記載された爆弾男は現在のようにかわいい2頭身キャラではなく、リアルな劇画風。
なかなかの濃さですので、気になる方は検索してみてください。
基本的なゲームシステムは現在のものとそれほど変わりなかったようです。

その後、X1とMSX向けに続編が発売されました。
続編は路線変更でなぜか3D迷路を進んでいくゲームに。
その名も「三次元ボンバーマン」!
発売日は1984年ということで、時代を先取りしている感がありますね〜。

ただ、あまり人気は出なかったようで・・・。

その後1985年にファミコンでボンバーマンが発売され、現在まで続く人気シリーズとなっています。

ちなみに、ファミコン版ではボンバーマンは元々悪の手先のロボットという設定だったそうで、ボンバーマンが人間になろうとして地上を目指し、元々の仲間(=悪のロボット)を爆破しまくって進んでいく、という衝撃的なストーリーだったようです。

ゲームの基本的な要素を考える

さて、歴史をざっくりと振り返った所で、ゲームのアルゴリズムを作るにあたって必要となる要素を考えてみましょう。

ゲームの基礎部分を作るにあたって、最低限必要なものは

  • ・プレイヤーキャラ
  • ・爆弾
  • ・壊せる壁
  • ・壊せない壁
  • ・マップのジェネレータ

といったところでしょうか。
アイテムや敵キャラはひとまず後回しです。

プレイヤーキャラ

プレイヤーキャラはキー操作で上下左右に移動し、アクションボタンで爆弾を設置します。爆風に当たったらゲームオーバー。

プレイヤーキャラの移動は、キーを押している最中は一定速度で移動する、といった実装がしっくりきそうです。
壁との衝突制御はColliderをアタッチしておくだけでOKでしょう。

注意しておきたい点として、曲がり角などでキャラが突っかかるとゲームの楽しさを阻害してしまいます。
Box Collider 2Dだとしばしば突っかかりますので、Circle Collider 2Dを使うとスムーズな移動が可能になります。

爆弾

爆弾は設置後3秒で爆発させます。タイマー処理はCoroutineを使えばカンタンに実装できそうですね。

爆発の際に爆弾自体は消滅し、爆風が4方に広がります。
広がった爆風は壁に当たるとストップします。
(壊せない壁はその手前で爆風を止め、壊せる壁は1つだけ壁を壊したところで止めます)

また、爆風が別の爆弾に当たると誘爆させる処理も必要です。
爆発処理をタイマーと切り離して単体で呼べるようにしておけばスムーズに実装できそうです。

あと、爆弾から爆風を4方に広げるため、プレイヤーキャラとは違って各マスの中央に配置されるべきです。
アクションボタンを押した際、プレイヤーキャラに一番近いマスの座標を取得、そこに爆弾を配置できるとGoodでしょう。

壊せる壁

爆風が当たると壊れる壁も必要です。基本的には爆風が当たったときに壊れる処理を準備するだけでOKですが、いずれは壊れた時にアイテムを出現させるなどの処理も入れたいところです。

壊せない壁

壊せない壁はColliderを付けるだけで完成です。全く動かないオブジェクトですので、スクリプトも不要でしょう。

マップジェネレータ

マップ情報を生成する流れを考えてみましょう。

まずは壊せない壁を配置するロジックを組みます。マップの周囲と、マップ内の奇数座標のマス(原点を0,0とした場合)に配置するように組みましょう。

壊せない壁が配置し終わったら、次は壊せる壁を配置します。空いているマスに一定の確率で壊せる壁を配置していけばそれっぽくなりそうです。

ただし、プレイヤーキャラのスタート地点周りにブロックが配置されてしまうとマズいので、スタート地点&周り1マスには壊せる壁が配置されないよう制御しておく必要があります。

さて、これだけあればゲームの基礎部分は作ることができそうです。さっそくスクリプトを組み立ててみましょう。実装のイメージが湧いた方はぜひ手を動かしてみてくださいね!

実際に動かしてみる

今回も実際に動かせるテストプロジェクトを用意しました。開発に要した時間は6時間くらい。
https://github.com/akako/gamealgorithm-bomb-action/releases/tag/for_algorithm8

そして、動かしてみた様子はこちら。W/A/S/Dキーで移動、クリックで爆弾を配置します。
https://www.youtube.com/watch?v=KbKDOcauuwo

見た目はともかく、結構それっぽく動いていますよね!全体的にロジックはシンプルで、爆風がどこまで伸びるかの計算が少しややこしいくらいです。

まとめ

基本的なアルゴリズムは単純明快で、かなり作りやすいものでした。ここに対戦やアイテムなどの様々な味付けをしていくことで、とても面白いゲームに仕上がるわけです。

また、人気のシリーズであっても全てが最初から大成功を納めているわけではなく、人気を獲得するまでに紆余曲折を経ていることもわかりました。
仮に頑張って作ったゲームの盛り上がりがイマイチでも、ブラッシュアップと試行錯誤を重ねていくことで素晴らしいゲームにしていきましょう!

次回予告

いい感じにゲームの基礎部分ができましたので、次回はこれに味付けをしてみましょう。

オリジナルをそのまま真似するのも芸が無い(というかパクリになってしまいます)ので、独自の要素を入れるべく想像を膨らませてみます。

どのような味付けにするかは、次回のお楽しみということで!

原稿: 賀好 昭仁
qnoteスマホアプリ開発チーム技術主任。PHP・Android・iOS・Unityなど複数のプラットフォームでの開発を行う。
しばしば7匹の先輩猫社員たちにイスを占領される。

Unityで作ろう!ゲームアルゴリズム(8)ボンバーマン的なアルゴリズムを作ってみる その1

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW