概要
言わずとしれたパズルゲーム、テトリスを自前で実装した。
特徴・こだわりポイント
ゲームエンジン不使用
UnityやUnreal Engineを使って作ることもできたが、2DのゲームならDxLibが楽かなと思い、ゲームエンジンを使わないことにした。 あと、ゲームエンジンに頼らないゲーム制作をしてみたかった。
テトリスのガイドラインに準拠
テトリスにはガイドラインが制定されており、いろいろと細かい仕様がある。 以下に、実装した仕様を列挙する。
スーパーローテーション
金星の大気1ではない。 普通の回転では入らなそうなところに対して、ミノの平行移動によって無理やりねじ込むような操作を施す。 わかりやすい解説は、このページを参照。
T-Spin
スーパーローテーションに関連した仕様。Tミノを使ったスーパーローテーションに限ってこう呼ばれる。 T-Spinしてラインを消すと、ボーナスポイントがもらえる。つまり、T-Spinの判定が必要になる。 判定の実装にはこのページを参考にした。
バッグシステム
巷には数多くのテトリスの実装があるが、よくテトリスのミノの落ちる順番を単純なランダムにしているものがある。 この実装は、作るのは非常に簡単であるが、ミノの出現順が偏ってしまい、同じミノが何回も連続してしまうという問題がある。 こうした問題を解決し、規則性とランダム性を両立させたのがバッグシステムである。
バッグシステムは、7つのミノを1つのセットとして、そのセット内でミノをシャッフルするという仕様である。 つまり、ホールドと組み合わせても、最大3回しか連続しない2。 また、テンプレと呼ばれる火力が強い形を作るにも必須の仕様である。
ロックダウン
ミノをソフトドロップで設置するとき、一番下につく直前に移動・回転の操作ができるよう、0.5秒の遊びを設ける仕様である。 これによって、T-Spinがしやすくなるといったメリットがある。 一方、ずっと移動や回転ができてしまうので、15回移動や回転をすると強制的に設置されるようにしている。
オートリピート
ミノを横移動やソフトドロップするとき、ボタンをずっと押しているときだけ移動が早くなるという仕様である。 素早くミノを置くためには必須の仕様。
制作
テトリスをベースにした新しいパズルゲームを作りたく、とりあえず大本のテトリスを作ってみた。 制作当時、テトリスを作って一旦満足したのと、プロコン関連でやることが重なったため、制作を一時中断したまま、4年ほど経過してしまった。
動画のゲームタイトルにある「2π」は、新しいパズルゲームを作ろうとした名残である。 2026年1月現在は、2π要素の実装はできていないが、大学院の卒業までに頑張るつもりである。
2021年当時はVisual Studioを使って開発していたが、2025年ごろに開発環境の統一を目的に、Visual Studio Codeに移行した。 デバッグは一応できるが、Watchやブレークポイントに慣れないため、Visual Studioに戻すか検討中。
2025年に入ってようやく腰を上げて開発を再開した。 「自分の書いたコードでも1年経てば他人のコード」とはよく言ったもので、例のごとく処理が全然わからなくなっていた。 2025年は、コード理解も兼ねてリファクタリングを少しずつ進めていた感じである。 2026年年明けにリファクタリングが完了し、いい感じのクラス構造になった気がする。 これから2π要素を作り込んで、2026年前半には完成させる予定。
出展歴
2021年7月に一旦完成したあと、松江高専の高専祭で出展することになった。 そこで、操作がしやすくなるよう、ゲームパッド対応を行った。 当時は動作優先でエイヤっとやってしまったため、いずれちゃんとキーコンフィグやゲームパッド・キーボードの両対応をやりたい。
脚注
-
セットの一番最後と次のセットの一番最初、そしてホールドがすべて同じミノの場合 ↩