共同開発
【RM】パズルゲーム「MONTED」
公開日:
2020/06/12
【RM】パズルゲーム「MONTED」

はじめに

「Random Marathon」にてパズルゲーム「MONTED」を作成しました。

落ちてくる数字/演算子ブロックを動かして積み上げていき条件を満たすような数字を作ってスコアを稼ぐ四則演算を用いた落ち物系パズルゲームです。 1人でひたすらスコアを稼ぐモード、2人プレイ、CPUとゲームオーバーにならないように対戦する3つのモードがあります。 1人プレイには難易度が3種類あり、それぞれのスコアランキングも存在します。対CPUには難易度が4種類あり、最高難易度のexpert 相手に勝つのは至難の業です!

「MONTED」というタイトルは造語です。一応、ある意味が込められているのですがしょうもないのでここでは説明しないでおきます…。

メンバーはotawasrniykoの2人で制作しました。

otawa

今回の作品では、主にコーディングを担当しました。

久しくunityに触れてなかったせいで基本的な機能でさえ忘れているようなところもあり、それらを思い出しながらの制作となりました。

まず、基本的なゲームシステムの実装について述べておきます。2次元のフィールドのマス目にブロックが配置されていき、四則演算が行われるというゲームなので、フィールドの管理は2次元配列で行いました。オブジェクトの接触判定等を用いての実装もできなくはなさそうでしたが、配列で管理をした方がいろいろな処理がやりやすいです。競プロのおかげで多次元配列の扱いはある程度慣れていたので、実装自体は特に苦も無くできました。競プロってすごいですね。みなさんもやりましょう。処理自体は苦労なく実装できたのですが、書いたコードをオブジェクトなどとリンクさせることに時間がかかりました。これは上にも書いた通り、私のunityの勉強不足が原因です…。一通り実装してから動かしてみると思わぬところで細かいバグがたくさんあって、それらの修正にもかなり時間がかかりました。ゲーム制作って大変だなぁと実感。当初は1Pエンドレスモードのみの予定だったのですが、途中から2PやCPUとの対戦もやってみたいなぁと思って実装しました。制限時間内に得たスコアで競うというような形式でも良かったのですが、某パズルゲームのようにスコアに応じたおじゃまブロックが降ってくるようにした方が対戦しているという感じが強くなって楽しい気がしたので、公開しているようなおじゃまブロックが降ってくる形式になりました。

そして、CPUの実装についてですが、締め切りギリギリの2時間くらいで書き上げたので正直なところまだまだ改善点が残っているなぁという感じです。難易度easyはランダムに配置し、normal以上では専用のプログラムで動かしています。基本的にはブロックを置くことのできる場所を全探索して最適な場所に置く、という風にしています。最適な場所の決め方ですが、それぞれの場所に置いたときに、様々な要素を考慮してコストを付加していき、最もコストが高い場所が最適なところ、という感じです。例えば、演算によりお題の条件を満たすブロックが発生すると+1000、条件は満たさないが演算が発生すると+100、記号が互いに隣接してしまうと演算をすることが難しくなるので-300、おじゃまブロックも巻き込んで消すと1個につき+100、フィールドの中央が高くなると一段につき-20、…などです。それぞれの場所でこれらのコストの合計値を求め、最大となる場所が最適なところというわけですね。この方法のメリットは、各コストの数値を変更するだけでもCPUの挙動がかなり変わってくるので微調整が容易であることです。コード自体をいじらなくてもCPUの調整ができるので、コードを担当している人以外でもやりやすいですね。制作時間がギリギリだったので今回の制作ではこのメリットはほとんど生かされませんでしたが…。あと、本当はNEXTブロックも考慮した探索を実装したかったのですが時間が足らずできませんでした。CPUは現ブロックしか見えていないので、本当に最適な場所に置いているとは言えないです。しかし、ランダムに置くのではなく、そこそこの強さのCPUはできたのでその点には満足しています。自分の書いたコード通りにCPUが動いてくれると感動します。

RMを通して、予定通りの進捗を生むことがめちゃくちゃ難しいなって感じました。基本となるシステムの実装にかなり時間がかかってしまったせいで締め切りまでの時間がぎりぎりとなり、srniyko氏に負担がかかってしまい申し訳なく思っています。また今度、共同制作に携わるようなことがあれば、しっかりと計画を立てて着実に進捗を生んでいきたいです。

最後に、「MONTED」をプレイしてくれた方、本当にありがとうございました。改善の余地はまだまだありますが、とりあえずゲームとして形にはできたのではないかと思います。今回のRMで自分のコーディングのスキルは確実に上達したと感じています。今後、何か制作するときに生かしていきたいですね。個人的な話になりますが、CPUを実装しているときはめちゃくちゃ楽しかったので、この勢いで某パズルゲームのAIも制作できたらいいなぁと思っています。

srniyko

自分はシステム以外の担当でした。具体的に言えばアセットとかレイアウトとかですね。作業自体は難しくなかったので特に言うことはないです。こだわったポイントを強いてあげるとすれば、1人、2人、対CPU戦の各モード、また各難易度においてBGMや背景などを難易度に応じて変えたことくらいですかね。BGMや効果音は割とすんなり見つけることができましたが、背景や壁の素材を見つけるのに苦労した覚えがあります。というのも、ゲーム制作初期はゲームにクレジットをつけるのめんどくさいなと感じていたことから、クレジット表記をしなくてよい素材を探していたせいなんですけどね。ゲーム制作後半も結局バタバタしたので素材を差し替える余裕がなくて結果的には良かったのかもしれませんが。欲を言えば対CPUでも難易度別に壁の素材を変えたかったですね。

また、操作やルールなどを説明するスライド集もこだわりましたね。計算例を小さいながらも実際のプレイ画面を切り取って作ったり、各モードにおいて内容を微調整したりと自分がやった作業の中ではかなりめんどくさかったです。実装も結構ゴリ押しな感じでしたので、もっとスマートにコードをかけるようになりたいですね。今後の大きな課題です。

最後に、このゲームを遊んでくださった皆さん、難しいシステムの構築を丸投げしたけどきっちり実装してくれて、しかも当初の予定になかった2人プレイや対CPUも実装してくれたotawaさんにこの場を借りて深く感謝を申し上げます。ありがとうございました!

まとめ

このゲームを制作した2人ともがゲーム制作にはまだまだ慣れているとは言えませんでしたが、詰まったところをお互いに助け合いながら何とか作り終えることができました。今回のRMで共同制作の醍醐味を味わうことができ、今後の制作でもこの経験が必ず生きてくると思います。

そして「MONTED」を遊んでいただいた方、本当にありがとうございました!少しでも面白いと感じていただけたならば泣いて喜びます。
余談になりますが、実は制作班はこのゲームの攻略法(効率の良い積み方)があまりよく分かっていません。こういう風にすれば強い!っていうのがあれば教えてもらえると嬉しいです。

RVWは6月いっぱいまで公開されているので、ぜひ覗いてみてください!
https://virtual.ch-random.net/

この記事を読んでいただき、ありがとうございました!

この記事を書いた人
srniykoのプロフィール画像
srniyko
(2019年入学)
loading...