なぜブラウザゲームを作るのか
SANO GAMESの原点は「友達と集まった時に、すぐ遊べるゲームが欲しい」というシンプルな動機でした。スマホアプリだとインストールに時間がかかる。全員が同じアプリを持っているとは限らない。でもブラウザなら、URLを送るだけで誰でもすぐに参加できます。
この「URLひとつで遊べる手軽さ」を実現するために、外部依存ゼロの単一HTMLファイル設計にこだわっています。React、Vue、Unityといったフレームワークやエンジンを使えば開発は楽になりますが、それらを使うとファイルサイズが膨らみ、読み込み時間が増え、環境依存の問題も起きやすくなります。Vanilla JavaScript だけで書くことで、どんなデバイスでも瞬時に起動するゲームを実現しました。
リーチ麻雀の開発で最も難しかったこと
役判定のアルゴリズム設計
麻雀の役判定は、プログラミングの観点では非常に挑戦的な問題です。14枚の手牌を「4つの面子 + 1つの雀頭」に分解するパターンは膨大で、さらにそこから40種類以上の役を正確に検出しなければなりません。
最初の実装では、すべてのパターンを総当たりで探索していたため処理が遅く、スマートフォンでは数秒かかることもありました。最終的には、牌の種類ごとにグループ化して探索空間を削減するアルゴリズムに改良し、どのデバイスでも瞬時に判定できるようになりました。
CPU AIの試行錯誤
CPUの打牌ロジックは、開発中に最も多くの時間をかけた部分です。最初のバージョンでは「不要牌を切る」だけのシンプルなロジックでしたが、これだと人間のプレイヤーにとって張り合いがありませんでした。
「強い」CPUでは、受け入れ枚数(テンパイまでに何枚の有効牌があるか)を計算して最も効率の良い打牌を選択します。さらに、他家がリーチした場合はベタオリ(守備的打牌)に切り替えるロジックを実装しました。現物 → 筋 → 壁の順に安全牌を選択する仕組みで、人間のプレイヤーが意識する「押し引き」をCPUでも再現しています。
一方で「弱い」CPUはあえてランダム性を高くしています。初心者がCPUに勝てないとゲームを楽しめないため、「ちょうど良い難易度」のバランス調整にも気を配りました。
ネット対戦の実装
ネット対戦機能は、もっとも技術的にチャレンジングな部分でした。麻雀はターンベースのゲームですが、ポンやチーなどの「鳴き」は他家の打牌に対してリアルタイムに反応する必要があります。
当初はWebSocketの採用を検討しましたが、レンタルサーバー環境での対応状況を考慮し、Perl CGI/FastCGIによるHTTPポーリング方式を選択しました。サーバーサイドでは、各ルームのゲーム状態をSQLiteデータベースで管理し、クライアントが定期的にポーリングすることでリアルタイム同期を実現しています。
特に苦労したのは、「全員のアクションが揃ったタイミングで局を進める」同期処理です。ネットワーク遅延やブラウザの一時停止(スマホのスリープなど)に対応するため、タイムアウト処理やリコネクト機能も実装しました。
パスオブラビリンスのダンジョン自動生成
パスオブラビリンスのダンジョンは、毎回プレイするたびに異なるマップが自動生成されます。これは「再プレイ性」を高めるための設計で、同じダンジョンを二度とプレイできないことで、毎回新鮮な体験を提供しています。
ダンジョン生成アルゴリズムには「再帰的分割法」をベースにした手法を採用しています。まず大きな空間を壁で分割し、壁に通路を開けることで迷路を構成します。この手法のメリットは、必ず解が存在する(入口から出口まで到達可能な)迷路が生成されることです。
さらに、アイテムの配置にも工夫を加えています。メインルートから外れた行き止まりに高ポイントアイテムを配置することで、「最短クリア」と「全探索」のどちらを選ぶかというジレンマを生み出しています。
パフォーマンスへのこだわり
ブラウザゲームの最大の弱点は、ネイティブアプリと比較したパフォーマンスの差です。特にスマートフォンでは、JavaScriptの実行速度やメモリの制約が大きく影響します。
SANO GAMESのすべてのゲームでは、以下のパフォーマンス最適化を施しています。
- DOM操作の最小化: ゲーム中のDOM変更を必要最低限に抑え、描画の負荷を軽減
- イベント委譲: 個々の要素にイベントリスナーを付けるのではなく、親要素で一括管理
- 遅延読み込み: 音声ファイルなどは初回利用時に読み込み、初期ロードを高速化
- CSS アニメーション優先: JavaScript でのアニメーションを避け、GPU 加速が効く CSS を活用
これらの工夫により、5年以上前のスマートフォンでも60fpsに近いスムーズな動作を実現しています。
今後の展望
SANO GAMESでは、今後もブラウザだけで遊べるゲームを開発していきます。「友達との時間をもっと楽しく、もっと有意義に」というビジョンのもと、みんなで集まった時に自然と盛り上がるようなゲーム体験を提供し続けたいと考えています。
技術面では、WebRTCを活用したP2P通信による低遅延対戦や、Web Audio APIを使ったよりリッチなサウンド演出、PWA対応によるオフライン完全動作なども検討中です。
ご意見やご要望はお問い合わせフォームからお寄せください。皆さまからのフィードバックが、次のゲーム開発のヒントになっています。