テトリスの練習用ゲームを作った話
私は昨年から「テトリス」にハマっています。
落ち物パズルゲームの大定番である「テトリス」は、1984年にソ連の科学者によって教育用ソフトとして開発されたのがはじまりだと言われています。ルールは、上から落ちてくる7種類のブロック(ミノ)を横一列に並べてラインを消していくというシンプルなものですが、最近では対戦形式のものが発表され、ただラインを消していくだけではなくやりごたえのあるゲームとなっています。
ラインを消していく技の一つに4列RENというものがあります。
4列RENは、連続でラインを消していくことで雪だるま式に攻撃力が上がっていくRENという技の中で最も強いものなのですが、その分難易度も高いです。
そのため、4列RENを練習したいと思ったものの、会社にゲーム機を持っていくのは憚られます。スマホで練習できるようなアプリやウェブサイトがないか探したのですが、求めていたようなものは見つかりませんでした。
ということで、「無限4列RENゲーム」を作ってみました!
https://shiwehi.com/tetris/game/i4lr.php

アプリでもN3tworkが開発したモバイル版テトリス 「Tetris」 は提供されているのですが、普段ゲーム機でテトリスを行っている自分からすると、操作が異なったり、そもそもRENを繋ぐ練習をしたいのに、そのために積み上げる必要がある(しかもミスしてはいけない)のは非常に面倒だと感じたため、4列RENの練習に特化したものを作成しました。
「無限4列RENゲーム」の仕組み
ミノが積み上がっている状態からゲームを始めることができ、スマホでも操作しやすいようにボタンですべてのパターン(選択肢)を表示して、プレイヤーはどのように繋ぐのかを選ぶだけで良いようにしました。

プログラムとしてはボタンとしてあり得るパターン数が全部で120程度しかなかったため、すべての地形とミノの置き方を「[落ちてくるミノ種],[現在の状況],[ミノを置いた後の状況]」の配列でオンメモリで保存するすることにしました。
WEBサービスでは、ユーザの操作後にはサーバーにアクセスするのですが、配列でJavaScript内に入れてしまうことでレスポンスタイムを速くできるというメリットも一応あります。
プログラムの要となっている、選択肢を探して表示する部分です。
データベースから[落ちてくるミノ種]と[現在の状況]が一致しているデータを探索し、[ミノを置いた後の状況]を一時的に選択肢配列に追加します。
(mino14というのは、ゲームをしている最中に降ってきたり横に表示されていたりする、今後降ってくるミノの配列です。mino14[0]:すぐ次に降ってくるミノ)
その後、現在表示されている選択肢を非表示にして、画像フォルダから「[落ちてくるミノ種]+[現在の状況]+[ミノを置いた後の状況].png」を探して表示しています。
ほかにも、ホールド(ミノを1つだけ一時保管しておくこと)している場合や、Tスピン(Tミノを回転入れしてライン消しする技)といった特殊な場合の表示など、設定をモシャモシャしていますが、基本的な構造はこれだけです。
JavaScriptを書くのよりも、画像のネーミングの方が大変だったほどです。
「無限4列RENゲーム」リリース後の反響
「無限4列RENゲーム」をリリース後、テトリス系のインフルエンサーの方に運良くこのゲームの紹介をしていただいたこともあり、2021/01現在では他の解説ページを抑え「4列REN」のGoogleのキーワード検索で2位を獲得しています。

今まで「4列REN」の解説記事や解説動画しか存在しなかったところに、ゲームという切り口でユーザーニーズに答えていることに加え、しっかりとスマホ対応を行ったことや、ゲームのプレイ結果を気軽にTwitterにつぶやける機能を実装したことも、検索の上位表示に繋がった要因かなと考えています。
また、実際に自分でこのゲームを制作している中でどのような選択肢を選べば繋がりやすいのかなどが分かるようになり、テトリスのプレイスキルの向上にもつながったのではないかと思っています。
なんと海外の方からも…
さらに海外の方から「もしよければ余りが4,5,6のときのバージョンも作ってくれないか?」というDMがきました。が、余りが6にもなると、形のパターンだけでも20倍以上になってしまうことが分かっています。
パターン数が増えて例えば「現在の状況」を表す数字が3桁になっても大きく問題が発生することはないようには書きましたが、問題は配列と画像の作成とネーミングです。
明らかに1000通りを超えることが分かっており、今回と同様の方法で行うのはあまり現実的だとは思えません。さて、どうしたものでしょうか…。

ファブリカコミュニケーションズで働いてみませんか?
あったらいいな、をカタチに。人々を幸せにする革新的なサービスを、私たちと一緒に創っていくメンバーを募集しています。
ファブリカコミュニケーションズの社員は「全員がクリエイター」。アイデアの発信に社歴や部署の垣根はありません。
“自分から発信できる人に、どんどんチャンスが与えられる“そんな環境で活躍してみませんか?ご興味のある方は、以下の採用ページをご覧ください。