本文へスキップ
NextCode.ltd
開発事例

ボタンを2つに分けて、1つに戻した ― 8ビットパズル「バベルのとう」

ボタンを2つに分けて、1つに戻した ― 8ビットパズル「バベルのとう」

ボタンを2つに分けて、約11時間後に1つに戻しました。操作と動きは原作に合わせる、と決めたからです。

ジャンプができない主人公が、石を1個ずつ運んで階段を組み、とびらを目指す。バベルのとうは、そういう8ビットのパズルです。ブラウザで開けば、そのまま遊べます。

バベルのとう(8ビットパズル)の画面

元にしたのは、1986年にファミコンで出たナムコの『バベルの塔』。ルールだけを借りたオマージュで、絵と音は自前です。画像ファイルも音声ファイルも1つも持っていなくて、16px四方のドット絵はCanvasにその場で描き、効果音とBGMはWeb Audioで合成しています。

コミットを並べると、最初の版から今の形まで約21時間でした。そのあいだに石の扱いを変え、ボタンを2つに増やし、また1つに戻している。今日はその話です。

1最初は「押す」ブロックだった

始まりは同じ6月1日の朝です。子ども向けのゲームメーカー「ドット工房 つくってジャンプ」に、7時18分のコミットで「タワーモード」を足しました。ジャンプを切って、段差は自動でよじ登る。ブロックは横から押して動かす。サンプルの面は1つだけでした。

その日の19時44分、これを独立したゲームとして作り直しています。いちばん大きく変えたのが石の扱いで、READMEには「押してずらすのではなく『運ぶ』」と書きました。

ルールはこうです。石の前でⒶを押すと持ち上がり、もう一度押すと目の前に置く。持てるのは1個だけ。持ち上げるたびに「ちから」が1つ減って、0のまま持ち上げようとするとミスになります。

置いた石は重力で落ちる。ただし、真下か斜め下のどこかに足場があれば止まります。この「斜めで止まる」がゲームの肝で、石を1マスずらして重ねると階段になるんですよね。主人公がよじ登れるのは石の段差だけ。壁は1段でも登れません。

運べるようにしたことで、石を抱えたまま段差を登って、上の段に積み足せるようになりました。押すだけのブロックには、これができない。

212分後に「もどす」を足した

最初の版から12分後、19時56分のコミットで「もどす」を足しています。

コミットの説明は、詰まったときの逃げ道が無い、という指摘への対応でした。ちからには限りがあるので、石の置き場所を間違えると、持ち直すぶんが足りなくなる。そのたびに最初からでは、パズルとして不親切です。

もどすは1手ずつ。ミスになった手も含めて戻せるので、ミスの画面にも「1てもどす」のボタンを出しました。履歴は今のコードで400手ぶん。PCならBackspaceかUキーでも戻せます。

3石には「向き」があった

同じ夜の21時56分、説明書と通しプレイの動画を見直して、見た目を描き直しました。持ち上げるのはオレンジ色のL字の石で、頭の上に抱える。白い壺は、ちからを回復するアイテムです。

見直して気づいたのが、壺の扱いでした。回復の処理はエンジンに最初からあったのに、どの面にも置いていなかった。このとき3面と6面に足しています。

翌6月2日の5時38分には、エンジンを作り直しました。L字の石は、足が出ている側からしか登れない。反対側から見れば、ただの壁です。

石の向きは、持ち上げたときに自分がどちらを向いていたかで決まります。逆側から持ち直せば、向きが反転する。同じ向きの石を並べて初めて階段になるので、「どこから持つか」まで考えることになりました。この仕組みだけを試す面として「4 むき」を足し、ステージは6面から7面へ。石を抱えたままでは、とびらに入れないようにもしています。

4ボタンを2つに分けて、1つに戻した

同じ5時38分の版で、操作も変えていました。Ⓐボタンを「もつ」と「おく」の2つに分け、石を持っている間は、逆向きの方向キーを押すとその場で向きだけが変わるようにした。壁際で、置きたい方向に向けずに動けなくなるのを避けるためです。

約11時間後、16時25分のコミットで、これを全部戻しました。

操作と動きは原作に合わせる、と決めたからです。ボタンはⒶ1つに戻して、押すたびに「もつ」と「おく」が切り替わる。ボタンの文字も、石を持っているかどうかで変わります。向きは歩いて変える。進めない方向でも押せば向きだけは変わるので、壁際で置く向きを合わせることはできる。

同じコミットで、歩き方もなめらかにしました。それまでは1マスずつ瞬間移動していたのを、表示だけ次のマスへ少しずつ寄せる形に。押しっぱなしで歩くときの間隔も、最初の待ちを280ミリ秒から190ミリ秒へ、そのあとの連続を200ミリ秒から120ミリ秒へ詰めています。

バベルのとう、3つの版の違い(コミットとコードから)

項目6/1 19:44の版6/2 5:38の版6/2 16:25の版(今)
石の段差左右どちらからでも登れる足が出ている側からだけ◎足が出ている側からだけ
持つ・置くⒶ1つで切り替え「もつ」「おく」の2ボタン◎Ⓐ1つで切り替え
石を持って逆向きを押すその方向へ歩くその場で向きだけ変わるその方向へ歩く(進めなければ向きだけ変わる)
歩き方1マスずつ瞬間移動1マスずつ瞬間移動◎次のマスへなめらかに寄せる
壺を置いた面0面(同じ夜に2面へ)2面2面
ステージ6面7面7面

5正直に言うと、まだ分からないこと

コミットには毎回、全ステージをBFSで解けると確かめた、と書いてあります。BFSは、ありうる手を全部しらみつぶしに試して、最短の解き方を探す方法のこと。ところが、そのソルバー本体はリポジトリに入っていません。確かめた記録はあるのに、確かめる道具が残っていない。

なので、この記事を書く前に同じことをやり直しました。今のコードに対して解かせると、7面とも解けて、最短手数は1面から順に6、11、20、9、10、11、26手。いちばん長い7面は、ちから2つで始まります。その最短手順をそのまま本番のページで入力して、7面ともクリア画面が出ることも見ました。

敵は、動かす処理までエンジンに書いてあるのに、7面のどこにも出てきません。石も、見た目はL字でも、中身は1マスの四角のまま。縦に2マスあるL字の石としての動きは、コミットでも「次の段階」とされたままです。

もう1つ分からないのが、1ボタンと2ボタンのどちらが分かりやすいか。原作どおりにするなら1つです。ただ、原作を知らない人にとって、押すたびに意味が変わるボタンが迷いにならないかどうか。確かめた記録は、まだありません。

敵と、2マスのL字の石。次に手を入れるならこの2つで、進んだらまた書きます。

遊び方と作品の概要はバベルのとうの作品ページに、同じ日に作ったゲームメーカーの話はこちらの記事に、ほかの開発記録はブログ一覧に並べています。ブラウザで動く小さなゲームの相談は、こちらからどうぞ。

この記事を書いた人

NextCode(沖縄県宜野湾市)は、iOSアプリ・ホームページ/LP・NFCデジタル名刺・AI業務自動化を作っている開発スタジオです。ここで書いているのは、実際に作って公開したものと、その過程で詰まったことだけです。

お問い合わせフォームは24時間受け付けています。

この記事が役に立ったらシェアしてください