私の完璧なテトリス
これは何か
テトリス は伝説的なゲームで、私がとても楽しんでいるゲームです。私はこのゲームが大好きで、遊ぶのを楽しんでいます。大きなストレス解消になります。週末の遊びのプロジェクトとして、デスクトップとモバイルの両方向けにブラウザゲーム/アプリとしてゲームを作ることにしました。これは vibeコーディング の原則を用いて設計しました。このバージョンのモバイル側は、スワイプベースの操作が非常に優れている プレイ・テトリス に触発されました。私の実装したテトリスはここで遊べます: こちら。私が思うところの最も「完璧な」テトリスです。
コードを超えて
私はポートフォリオ用のクローンを作るためや何か新しいことを学ぶためにテトリスを作ったわけではありません。本当にそれが必要だったから作りました。仕事でつらい週だったり、単純に生活が積み重なってストレスがたまったとき、テトリスは私がリセットするのに本当に役立つ数少ない健全な手段の一つです。ストレスがたまると私は食べ過ぎてしまう傾向があり、時間と共に体重が増えるので、副作用なく機能する何かを持つことは私にとって大きな意味があります。ブロックを落とすだけで10〜30分間集中すると、頭の中が少しクリアになったように感じます。単なる気楽なリラックスではなく、ストレスを注ぎ込めるシンプルで集中できるものを持つ方法なのです。テトリスが侵入的な記憶やストレスの処理に影響を与える可能性があることを示す興味深い研究もあります。例えば、トラウマ映画の実験での例や、実際の事故後に治療を受けた人々での例、治療の補助として脳の変化が測定されたものがあります。私はこのゲームを医療行為にしようとしているわけではありませんが、テトリスが人々のストレス対処に本当に役立つという私の感覚を裏付ける科学的根拠があるのは興味深いです。
そこで良いテトリス版を探したのですが、自分が望むようにプレイできるものがほとんど見つかりませんでした。iOS App Store のモバイルアプリは広告やマイクロトランザクションで溢れています。ウェブ版はラグがあったり、電話では操作感が悪かったりしました。クラシックな NES 版は素晴らしいですが、エミュレータと追加のハードウェアが必要です。問題を解決すると思って Miyoo Mini を買ってみたこともありましたが、結局テトリスを遊ぶためだけにもう一台持ち歩くだけになってしまいました。ある時点で、適切なバージョンを探すのにかけている時間の方が、自分で作るのにかかる時間より長いことに気づきました。
現代のブラウザ、Claude Code のようなLLMツール、そして vibeコーディングのようなワークフローがあれば、自分が欲しいテトリスを作るのに今がちょうど良いタイミングだと感じました。速く、最小限で、広告なし、アカウント不要、アプリストア不要。自分のスマホとノートパソコンで動作し、完全に自分でコントロールできるブラウザゲーム。約1日で動作するバージョンができ、デスクトップとモバイルの両方で感触を整え堅牢にするために断続的に1週間ほど手を入れて満足いくものになりました。
もしこれが他の誰か一人でも私と同じようにストレス軽減に役立つなら、それだけでとても嬉しいです。小さなものですが、時に小さなものこそがまさに必要なものであったりします。
機能
- クラシックな10x20のテトリスボード
- デスクトップではフルキーボード操作、モバイルではタッチジェスチャー操作
- 標準的な7バッグのピースランダマイザー
- ホールドピースと次のピースのプレビュー
- ピースが着地する位置を示すゴーストピース投影
- レベルに基づく速度カーブと動的なロック遅延
- スコア、ライン数、レベル、高得点をローカルストレージに永続化
- ソフトドロップとハードドロップのスコアリング
- ゲーム内メニュー(再開、再スタート、終了、音楽/SFX ミュート、ソースコードリンク)
- ラインクリア時のフラッシュアニメーションと効果音
- iOS セーフエリア対応(ダイナミックアイランド、ノッチ、ホームインジケータ)
- サービスワーカー経由のオフラインサポート(初回訪問後はインターネットなしで動作)
- PWA としてインストール可能(iOS/Android のホーム画面に追加してアプリのように使用可能)
操作
デスクトップ(キーボード)
| 操作 | キー |
|---|---|
| 移動 | ← → or A D |
| ソフトドロップ | ↓ or S |
| ハードドロップ | Space |
| 時計回り回転 | ↑ W X |
| 反時計回り回転 | Z |
| ホールド | C or LShift |
| メニュー | Esc or M |
| ソースコード | G (タイトル画面) |
モバイル(タッチ)
| 操作 | ジェスチャー |
|---|---|
| 移動 | 左へ / 右へスワイプ |
| ソフトドロップ | 押し続けて下にドラッグ |
| ハードドロップ | 下へ素早くフリック |
| 時計回り回転 | タップ |
| ホールド | 上へ素早くフリック |
難易度曲線
このバージョンの速度カーブとロック遅延は、クラシックおよび現代のテトリスが難易度の進行をどのように扱っているかに関する研究を用いて調整しました。オリジナルのNES版テトリスでは、レベル29で重力がフレームあたり1行に達し、これが多くの人にとって事実上プレイ不能になる有名な「キルスクリーン」になりました(https://tetris.wiki/Tetris_%28NES%29)。これは意図された終わり方というよりも、ハードウェアの副作用と DAS(Delayed Auto Shift)が落下速度に追いつけなかったために起きたものです。Willis Gibson はこれを2024年に証明し、レベル157を超えてクラッシュした ことで示しました。
TGM(Tetris: The Grand Master) のような現代のゲームはこれを別の方法で解決しました。単に落下を速くしてゲームを壊すのではなく、TGM は重力を20G(瞬間落下)で上限に設定し、その後ロック遅延や DAS のような他のタイミングウィンドウを締めて難易度を上げます。Tetris ガイドライン 標準は最大15回の移動リセットと共に500msのロック遅延を使用しており、このバージョンもそれに従っています。TGM2 デスモード や TGM3 Shirase に関する研究は、競技プレイの実用的な下限が約250ms のロック遅延と高速 DAS であることを示しており、133ms 以下は専門家向けであると示しています。
これらすべてに基づき、このバージョンの速度カーブは重力を1行あたり33ms(NES のレベル19〜28 に類似)で上限を設け、瞬間落下に達する代わりに DAS を高レベルで170ms から100ms にスケールさせ、ロック遅延の間にボードを移動できるようにしています。目標は、非常に速く感じる高レベルでも公正さを保つことで、単に入力速度が追いつかなくなるオリジナルの NES のアプローチよりも、Tetris 99 や TGM がエンドゲームの難易度を扱う方法に近づけることでした。
裏側
- デスクトップとモバイル(縦向き)両方に最適化されたレスポンシブデザイン
- パフォーマンスのために事前レンダリングされたブロックスプライトとグリッド背景
- ピース回転には Super Rotation System (SRS) スタイルのウォールキックを使用
- フリックとドラッグを確実に区別する速度ベースのタッチジェスチャ検出
- 重力速度とロック遅延のためのレベルベースのタイミングシステム
- 高得点とオーディオ設定は
localStorageに永続化 - BGM ソース NmCCQxVBfyM
- ラインクリア効果音ソース UMViM2tHrOk
- このプロジェクトは完全にオープンソースで MITライセンス の下にあります
- 以下の AI ツールで構築されました:
- Claude Code CLI - コーディング/開発
- Gemini CLI - コーディング/開発
- Cha CLI - コーディングと文書作成
- xAI Grok - ロゴとアイコン作成
- Perplexity - バグ調査
- Google 検索 - SVG やその他アセットの検索
- YouTube + yt-dlp - オーディオクリップの調達
- FFmpeg - オーディオファイルの編集
最後に
これは、動機が技術的なものではなく個人的なものだったプロジェクトの一つだった。私はただ、自分が望むように動作するテトリスのバージョンが欲しかっただけで、広告なし、追加ハードウェアなし、そしていつでも消えたり変わったりする可能性のある他人のアプリに依存しないものが欲しかった。最新のAIツールとvibeコーディングを使って、断続的に約1週間でアイデアから完成したゲームにまで到達できたという事実は、ソフトウェア開発が今どこにあるかをよく示している。
これを作って以来、ほぼ毎日このバージョンを使っているが、それは今でも私が必要とすることを正確に行ってくれる。ストレスの原因から一歩離れ、数分間何か単純なことに集中し、よりすっきりした頭で戻ってくるのに役立つ。もし試してみて同じ効果が得られるなら、それが私にとって望める最高の結果だ。そして、フォークして速度曲線を調整したり、操作を変更したり、これを基に拡張したくなったら、どうぞ自由にやってください。バグを見つけたり提案があれば、遠慮なくGitHubリポジトリで課題を投稿してください。それがオープンソースにする目的そのものだ。