プログラミングパズルゲームをリリースしました

こんにちは、亀山です。合同会社コベリンでは、新しいプロダクトの可能性を測るために、各々のアイディアでユーザーが触れられるものを作る取り組みをしています。今までリリースされたプロダクトは「covelline Lab」のページから見ることができます。今回は私が作ったゲームについて紹介します。

Brush-Up Breakthrough

unityroom.com

Brush-Up Breakthrough は、家庭でおなじみのお掃除ロボットを、「直進」や「旋回」といった簡単な命令を組み合わせてプログラミングし、各ステージのゴミをお掃除するシンプルなパズルゲームです。ブラウザ上で全部無料で遊べるのでぜひお試しください。

プログラミング

プログラミングというと難しそうな印象もありますが、このゲームはプログラミング経験がまったくない人や子どもでも遊べるようになっています。

このゲームには5つの命令ブロックがあります。これらを並べるだけでプログラムができます。

例えばこのステージは、「直進」1つでクリアできます。

このステージはどうでしょうか。「直進」「旋回」「直進」でクリアできます。

例えばジグザグに動くプログラムは旋回と直進を組み合わせて作ることができます。

ブレイクスルー

ここまではとても簡単でした。このゲームはこのやり方ですべてのステージをクリアすることができます。 しかし、「ジャンプ命令」が加わることで考え方が一変します。

プログラミングに理解のある方は気づくかと思いますが、BASIC の GOTO やアセンブリ言語の jmp に相当する命令です。

この命令は指定した場所にプログラム位置を移動することができます。例えば先程のジグザグに動くプログラムは「ジャンプ命令」を使うことで非常に少ない命令の数で作ることができます。

そこでプレイヤーは、いかに少ない命令でステージをクリアするかというチャレンジに挑戦することになります。

そう、このゲームはパズルゲームを通していつの間にかプログラミングの考え方を身につけてしまう仕組みになっています。組み合わせることで、できることの世界が急に広がるこの体験こそが、プログラミングの面白いところであり、このゲームで表現したかったことです。

開発の経緯

合同会社コベリンの新規プロダクトの取り組みとして、各々のアイディアでプロダクトを作る試みをしています。そこで私は、誰でも遊べる、裾野が広いジャンルとしてゲームを選びました。

最初は Bristlebot を題材としたゲームを作ろうとしました。

Bristlebot

Bristlebot というのは、歯ブラシの毛がついている部分に振動モーターを載せたものです。工作教室などで作る簡単なおもちゃです。ブラシで動く機構は工学部にはおなじみなのではないでしょうか。

youtu.be

この Bristlebot をゲーム内で作り、障害物を踏破したら面白いのではないかというアイディアです。

ゲーム作りの難しさ

いわゆるバカゲーのようなテイストを目指していたので、物理演算を使って動く Bristlebot を作りました。Unity でジョイントなどを組み合わせて振動ブラシを作って、ゆっくり進むことができました。しかし、この題材は非常に難しかったのです。

遅い、非力で坂が登れない、曲がれないのです。障害物を踏破するというコンセプトがそもそも実現できませんでした。物理演算で動くため挙動をコントロールしづらく、これらの課題は最後まで解決できませんでした。

そこでいっそ歯ブラシをやめてタイヤにしようといった試行錯誤をしましたが、歯ブラシの不規則な動きがなくなって面白みに欠けるものとなりました。

モーターの回転数やバッテリー残量といった要素を追加してどうにか面白くならないか試していた様子

プログラミングゲームへの変更

このゲームで目指していた高いレベルのコンセプトは、「機体をカスタマイズ → ステージを走らせる → 機体をカスタマイズ → ...」という試行錯誤のループにより、ものづくりの面白さをゲームで体験することでした。

そして別のアイディアとして、「お掃除ロボットのプログラムを自分で書く」というものがありました。この試行錯誤のループというコンセプトがそのまま活かせると思いました。

お掃除ロボットのプログラミングと題材が決まってから、開発はスピーディでした。ここでは開発中のスクリーンショットをいくつかお見せ致します。

開発初期の画面

ステージ選択画面のプロトタイプ

お掃除ロボットは円柱では向きが分かりづらいのと、味気なさ過ぎるため、よく SNS で見られる「ルンバに乗った猫」のようなものにすることにしました。ChatGPT の DALL-E に描かせたコンセプトアートを元に、Blender を使ってモデリングしました。

慣れない Blender での猫の耳のモデリング

テクスチャペイントで当たりを付けるマジメだが怖い作業

慣れてる Figma でテクスチャを描いてペタリ

モデルや UI などもなるべくきれいに修正

ゲーム開発はそこまで得意ではありませんが、UI デザインは比較的得意なので、なるべくキレイで使いやすい UI を作るという部分を頑張りました。得意で戦うと作業も早くて良かったです。

実装

シンプルなパズルゲームなのであまり難しいことはありませんが、色々な工夫がありました。ゲーム画面上は3次元表示ですがロジックの実装においてはロボットの位置を Vector2Int で表すことで、シンプルにしつつバグを減らせるようにしています。実際に開発中に Vector3 で位置を管理していたために浮動小数点のズレで当たり判定のミスを起こしたりしました。

また、昔パズルゲームを作った経験から、ステージを作成するツールを別に用意しておくとよいというのが分かっていたので、ステージを作成するツールを JavaScript で実装しました。

自作タイルエディタ

このツールは自分だけでなく、社内の他のメンバーにもステージ作成を協力してもらうときにも活用されました。開発版のゲームではタイルエディタから JSON をコピペすることですぐにステージを試すことができます。

公開

お掃除ロボットにコンセプトを変更してから2ヶ月ほど、フルタイムでは無いので週1日くらいの開発時間を使い、ようやく公開できるクオリティになりました。 公開前日に駆け込みでローカライズ対応を行い、海外向けとして itch.io に、日本向けとして unityroom での公開を行いました!

新規プロダクトとしてゲームを作ったらどうだろうという出発点で始まったこのプロジェクトですが、ひとまずみんなが遊べるものができて良かったです。一旦開発は完了となりますが、まだまだ作りたいステージのギミックがたくさんあります。反響がよかったらまた続けたいので、ぜひ感想や SNS でのシェアをお願いします!