さて、技術解説シリーズの第10回となる今回は、『2048×3D』のコアエンジンを開発する過程で生まれた2つのR&D(研究開発)プロジェクトについてお話しします。1つ目は3×3×3の立体スライドパズルをそのままターン制バトルのエンジンに組み込んだ3Dパズル×デッキ構築ローグライトRPG『Aethel-Net(エーテル・ネット)』のプロトタイプ設計、もう1つはブラウザだけで安全にデータを扱うためのクライアントサイド暗号化(Web Crypto API)と状態永続化のアーキテクチャです。

一見するとパズルゲームとRPG、そしてセキュリティ技術は別ジャンルに見えるかもしれませんが、根底にある設計思想はすべて共通しています。すなわち「外部ライブラリや重厚なバックエンドサーバーに依存せず、ブラウザ標準API(WebGL / Web Audio / Web Crypto / LocalStorage)のポテンシャルだけでどこまで高度な体験を作れるか」という挑戦なわけです。

01. スコア稼ぎから「攻撃・防御・回復変換」へ:3×3×3パズルをRPG戦闘エンジンにする発想

『2048×3D』のHARDモード(GLITCHブロックとMulti-UNDO)をテストプレイしていたとき、「この『邪魔なブロックを隣接マージのショックウェーブで破壊する』というメカニクスは、そのまま敵キャラクターとのターン制バトルになるのではないか?」と思いついたのがローグライト派生プロトタイプ『Aethel-Net』の出発点でした。

通常の2048では「合体した数値=そのままスコア加算」ですが、ローグライト版では3×3×3キューブ内で発生したマージ結果がリアルタイムに戦闘リソースへ変換されます。

  • 通常マージによるダメージ出力とコンボ倍率:1ターン内の合体数値合計に対して連続マージボーナスが掛かり、敵ノード(Firewall SentinelやNull Pointer Daemonなど)のシールドおよびHPを削ります。
  • 敵の妨害行動(状態異常タイル注入):敵は数ターンごとに「ロックタイル(移動不能)」「ウイルス(毎ターンダメージ)」「ブラインド(数値秘匿)」を3×3×3盤面へ直接撃ち込んできます。プレイヤーはパズルの6方向スライドを駆使して、敵の妨害タイルを隣接マージで浄化しながら戦うわけです。
  • プラグイン(レリック)による物理法則の書き換え:例えば「Z軸(奥・手前)方向にスライドしてマージしたときだけダメージ1.5倍」「盤面中央(1,1,1)に存在するタイルの数値を毎ターン2倍にする」「特定数値(64以上)を作るとシールドを貼る」といったプラグインを最大5枠までビルド構築できます。

02. 画面分割レイアウトと「3層Zスライステーブル(Z=0 / Z=1 / Z=2)」による死角ゼロ化

このローグライトプロトタイプを試作する際、UI設計で最も重視したのが「戦闘状況(上部)と3Dパズル操作(下部)の視線移動を最小化し、かつ3×3×3の内部死角を完全にゼロにすること」でした。

『2048×3D』本編ではX-RayモードとLayer Slicerで死角を解消しましたが、1手のミスでHPが尽きるローグライトRPGでは、ボタンを押して切り替える手間すら惜しい場面があります。そこで『Aethel-Net』では、下部左側の3D WebGLキューブのすぐ右隣に、手前層(Z = 0)・中間層(Z = 1)・奥層(Z = 2)の3枚の3×3断面図を常時並べてリアルタイム同期表示する「3層Zスライス・インスペクタ」を配置しました。

これにより、左側の3Dキューブで立体的なスライド方向とアニメーションを直感的に掴みつつ、右側に目をやるだけで27マスすべての数値と状態異常を1ミリ秒の死角もなく把握できるようになったわけです。この「3Dビューと2D断面インスペクタのハイブリッド表示」で得られた知見は、『2048×3D』本編のインタラクティブ練習場(/practice)における6方向比較インスペクタUIにもそのままフィードバックされています。

03. 7層DAGルート分岐・MEM経済と「38,064通りのプラグイン×6方向網羅テスト」

ローグライトとしてのリプレイ性を支えるため、ステージ進行には7階層・15ノードからなる有向非巡回グラフ(DAG:Directed Acyclic Graph)マップ生成アルゴリズムを実装しました。プレイヤーはCOMBAT(通常戦)・ELITE(強敵+高レア報酬)・EVENT(ランダムイベント)・SHOP(MEM通貨によるプラグイン購入・削除・HP回復)・REST(修復またはプラグイン強化)・BOSS(階層ボス)のルートを選択しながら最深部を目指します。

ここで開発者として徹底したのが、「プラグインの組み合わせによってパズルがフリーズしたり、NaNダメージが出たりしないか」の自動検証です。ローグライトは多様なシナジーが魅力ですが、掛け算や配列操作の順序が少し狂うだけで簡単にバグります。そこでNode.jsの自動検証スイート(全68テストケース)を構築し、全プラグイン・全敵タイプ・ランダム盤面状態に対して6方向すべての移動を網羅実行する計38,064通りのファジング検証(エラー0件・勝率バランス計測)をパスさせています。

04. ブラウザ完結型セキュリティの研究:Web Crypto API(ECDH P-256 + AES-256-GCM)とURLフラグメント隔離

そしてもうひとつ、当ラボで並行して研究開発を進めているのが、サーバーに平文データを一切預けないクライアント完結型暗号化アプリケーション『SecureNote(Spy Note Prototype)』のセキュリティ設計です。

Webアプリで機密メモやゲームのセーブデータを共有・保存するとき、サーバー側のデータベースにそのまま保存してしまうと、万が一サーバーが侵害された際に情報漏洩リスクが生じます。そこでブラウザネイティブのWeb Crypto API(window.crypto.subtle)だけを使い、以下のゼロ知識(Zero-Knowledge)暗号化パイプラインを設計しました。

Web Crypto APIを用いたクライアント完結型データ保護の構成要素
暗号プリミティブ・機構 採用アルゴリズム・仕様 セキュリティ上の役割
鍵合意(Key Agreement) ECDH(楕円曲線ディフィー・ヘルマン / P-256) 送信者と受信者の公開鍵・秘密鍵ペアから、通信経路上に鍵を流すことなく共通の共有シークレットを導出する。
鍵導出(Key Derivation) HKDF-SHA256 / PBKDF2(600,000回反復) 共有シークレットやパスフレーズにランダムソルトを掛け合わせ、256ビットの強力な共通鍵を生成する。
認証付き暗号(AEAD) AES-256-GCM(96-bit ランダムIV + 128-bit 認証タグ) 本文を暗号化するとともに、1ビットでも改ざんされた場合は復号時に即座に検知して拒否する。
鍵配送の隔離 URL # フラグメント(Hash Fragment) RFC 3986仕様により、URLの#以降はHTTPリクエストとしてサーバーへ絶対に送信されない性質を利用し、復号鍵をブラウザ内だけに封じ込める。

この「ブラウザが標準で備えているAPIを正しく組み合わせれば、外部ライブラリ0個でも堅牢で高速なアプリケーションが作れる」というエンジニアリング哲学こそが、『2048×3D』のCanvas2Dテクスチャ生成、Web Audioシンセサイザー、そしてローカルストレージのフォールバック設計すべてに通底している背骨なわけです。

さて、全10回にわたってお届けしてきた『2048×3D』技術&攻略ディープダイブ連載、ここまでお付き合いいただき本当にありがとうございました!コードの隅々まで意図を込めて作ったゲームですので、この記事で解説した仕様やテクニックを武器に、3×3×3の8192達成やランキング上位へ挑戦してもらえたら嬉しいわけです。それでは、リーダーボードの上位で対戦お願いします!

Complete 10-Part Deep Dive

2048×3D の全モード・練習場で立体パズルを極める

CLASSIC・SPEEDRUN・HARD・PARTYの4モードと局面練習ツールで、3次元空間の思考力を鍛えよう。

🎮 2048×3D をプレイする ➔ 📐 局面練習ツールを開く