MINE DUEL — ゲームシステム仕様書(公開Web v0.3.1)
00. 文書情報
| 項目 | 内容 |
|---|---|
| 文書種別 | 公開Web版の実装を分析し再構成したゲームシステム仕様書 |
| ゲームバージョン | v0.3.1-web |
| 文書改訂 / 作成日 | 0.4 / 2026-10-21 |
| プラットフォーム / モード | モバイル・PC Web / CPU対戦・オンライン1対1 |
本書は公開Web版の実装を基に、ポートフォリオ掲載用として再構成した仕様書です。開発前の原案ではありません。CPU対戦とオンライン専用ルールを区別して説明します。
01. ゲーム概要および企画意図
| 項目 | 仕様 |
|---|---|
| コンセプト | 「ルールは軽く、プレイは深く」 — 隠された相手の地雷を推理しつつ自らも地雷を仕掛け、安全地帯を狭めていくターン制心理対戦 |
| ジャンル | ターン制マインスイーパー / 情報推理・盤面制御対戦 |
| プレイ方式 | CPU対戦:人間先手 / オンライン:人間2人、初戦先手抽選 |
| 勝利目標 | 相手が自分の地雷を探索して敗北するまで生存。CPU膠着は引き分け、オンライン続行不能はマーカー得点比較 |
| 通常のマインスイーパーとの差別化 | ① 毎ターン地雷が追加され、公開済みの安全地帯の数字もリアルタイムに変化する。 ② マーカー(旗)はそのマスの探索と新規地雷設置を同時に封鎖する。 |
| 公開版の範囲 | CPU対戦・オンライン1対1、CPU難易度3段階、4言語対応 |
企画背景とコアの面白さ
- 企画背景: チェスや将棋のように、双方が完全に同じ条件で競い合うシンプルな対戦ゲームを構想する中で、すでに基本ルールが広く浸透している「マインスイーパー」に着目した。チェスや将棋よりも参入障壁が低く直感的に理解できる一方で、2人対戦形式に落とし込めば「安全圏が徐々に狭まっていくプレッシャー」と「読み合い」を演出できると考え、「ルールは軽く、プレイは深く」を目標に企画した。
- コアの面白さ(非公開情報と公開情報による心理戦): 本作の核心的な面白さは、「仕掛けられた地雷(非公開情報)」と「安全地帯に生じる数字の変化(公開情報)」を突き合わせて読む心理戦にある。カードゲームにおける「相手の行動を予測する面白さ」に近いが、複雑なルールやテキストの暗記を要求せず、双方が取れる行動が完全に同じ条件だからこそ際立つ「相手と自分の戦略的な選択の差を読み切る面白さ」に焦点を当てている。
- 慎重なプレイを生む2つの仕掛け:
- 地雷追加による数字の変化: 固定された地雷を特定し、終盤になるほど安心感が増していく原作のマインスイーパーとは異なり、プレイヤー自身が盤面を作っていくことで、終盤に向かうほど安全地帯が狭まり緊張感が高まる逆方向の展開を生み出す。
- マーカー(旗)による安全地帯の区別とリスク: マーカーは安全地帯を整理する手段であると同時に、そのマスの探索・設置を封じる役割を持つ。もし判断を誤って安全なマスにマーカーを置いた場合、自ら自分の安全地帯を狭め、相手に大きなメリットを与えるペナルティとなるため、自然と一手ごとの慎重さを引き出す装置として機能する。
- シングル(CPU)モードの位置づけと今後の展望: 他の対戦ゲームにおけるシングルモードと同様、本作のCPUモードはルールや読み合いに慣れるための練習用・ソロモードとして用意している。一人でパズルを解く遊び方も維持し、現在のv0.3.1ではCPUと別のオンラインPvPを両方提供している。
モード別の適用範囲
| 区分 | CPU対戦 | オンライン1対1対戦 |
|---|---|---|
| 相手 / 先手 | CPU / 人間が先手 | 人間 / 初戦はサーバー抽選、再戦は交代 |
| 制限時間 | なし。メニュー中はCPU停止 | 通常ターン全体20秒、初期行動ごとに20秒。モーダル・切断中も進行 |
| 膠着時の終了 | 従来の共通行動不能は引き分け | 実際の安全な探索マスが0になった時、マーカー得点で勝敗 |
| 実行 / 復帰 | ブラウザー内実行、再読込で新規ゲーム | サーバー状態保持、同じ端末・ブラウザの保存トークンで復帰 |
本書ではCPU対戦とオンライン専用を区別する。8×8盤面・数字計算・設置/探索のマス条件は共通であり、CPUの引き分け・難易度・一時停止をオンラインへ適用しない。
02. ゲームフロー
CPU対戦 — オンライン専用ルールとは区別して扱う。
進行ステップ
- セッション初期化: ページ読込時に新しい対戦セッションを初期化する(中断時の盤面状態は引き継がない)。
- 言語選択(初回アクセス時): 保存済みの言語設定がない場合は、言語選択モーダル(
Select Language)を先に表示する。選択が完了するまで盤面への入力はロックされる。 - ルール説明・難易度選択: 保存言語がある場合は言語選択を省略し、その言語でルール説明および難易度選択ポップアップを表示する。難易度の初期値は「ふつう」であり、「ゲーム開始」を押すとポップアップが閉じて対戦が始まる。
- オープニングフェーズ(初期探索および初期地雷設置):
プレイヤーが安全なマスを1つ探索 → CPUが別のマスを1つ探索 → プレイヤーが初期地雷を1つ設置 → CPUが初期地雷を1つ設置の順で進行する。- オープニングフェーズではターン終了ボタンを使わずに自動で次の手順へ移行し、ターン数も加算されない。
- 通常ターンループ(
探索 → 地雷設置 → マーカー操作 → ターン終了):- プレイヤーの通常ターンから、毎手番
1マス探索 → 地雷1つ設置 →(任意の)マーカー操作 → ターン終了のサイクルを繰り返す。 - マーカー(旗)の設置・解除は、通常ターン中の探索前・地雷設置中・ターン終了前のどのタイミングでも行える。
- プレイヤーの通常ターンから、毎手番
- 結果確定: 地雷への接触や膠着(引き分け)などの終了条件が成立した時点で勝敗を確定し、結果ポップアップを表示する。
- 再スタート: 再スタート確認を確定すると、現在の言語設定を保持したまま盤面と難易度を初期化し、ステップ3(ルール説明・難易度選択)から再開する。
フェーズおよび行動順序の設計意図
- オープニングフェーズを「安全探索 → 初期地雷設置」の順にした理由: 原作のマインスイーパーのように、最初の一手を踏んだ瞬間に運悪く即死してしまう理不尽な体験を防ぐことが最大の理由である。さらに、双方がまず安全なマスを開けて基準点を作ってから初期地雷を仕掛ける構造にすることで、序盤から「どこに仕掛け、どこを開くか」という心理戦の選択肢を広げている。
- 通常ターンの行動順序を固定し、マーカー操作のみ自由にした理由: ルールをシンプルに保つため、オープニングフェーズの行動順序(
探索 → 地雷設置)をそのまま通常ターンでも繰り返す構造とし、ルールの一貫性を高めた。行動順序の自由度を上げると選択肢は広がる反面、プレイヤーが複雑に感じてしまう懸念があったため、必須行動の順序は固定している。一方、マーカー(旗)は行わなくてもよい任意行動であり、「ここに地雷がある」という確信や直感が生まれた瞬間にすぐ動ける方がプレイヤーにとって快適であるため、通常ターン中はいつでも操作できるように設計した。
図を拡大、またはスクロールして確認できます。
オンライン専用:入室から再戦まで
- CPU画面のメニュー → オンライン対戦、またはオンライン画面へ直接アクセスする。別ページであり、自動表示の開始ルール説明・難易度選択はない。
- 作成者がルームを作り、コードまたは招待URLを共有する。相手はコード入力、または招待URLから参加ボタンを押す。URLを開くだけでは着席しない。
- 2人が接続し、それぞれReady(準備)を押すと開始する。作成者が必ず先手になるわけではなく、初戦の先手はサーバーが抽選する。
- 先手の安全探索 → 後手の別マス安全探索 → 先手の初期地雷 → 後手の初期地雷。各行動20秒で、期限切れ時は有効なマスをサーバーが自動処理する。初期重複も許可する。
- 先手から通常ターンを繰り返す。探索・設置・マーカー操作・ターン終了で合計20秒を共有する。完了済み行動を残し、期限切れ時は未完了の必須行動を省略する。
- KOまたはオンライン終了条件が成立すると結果を固定し、全地雷・マーカー判定を公開する。投了・切断敗北・無効も区別する。
- 双方が再戦に同意し、両者が接続していれば先後手を交代し新しい盤面で始める。相手の同意なしに再戦しない。
次図はオンラインの概念図。初期自動行動後は残る次の初期行動へ進み、切断ルールは初期段階にも適用する。CPUの保存・引き分け・再開始とは区別する。
図を拡大、またはスクロールして確認できます。
03. ゲーム状態定義
CPU対戦 — オンライン専用ルールとは区別して扱う。
| 状態項目 | 初期値および構成 | 更新条件 |
|---|---|---|
| 現在の手番 | プレイヤー(先手) | オープニング手順の各行動完了時、または通常ターン終了時に相手の手番へ移行 |
| 進行フェーズ | 初期安全探索 | 初期安全探索 → 初期地雷設置 → 通常探索 → 地雷設置 → ターン終了待機 → 対戦終了 |
| ターン数 | 1 | 通常ターン終了ごとに +1(オープニング手順では加算されない) |
| 地雷設置数 | 双方の累計 0 / 初期 0 / 現手番 0 | 初期地雷・累計地雷・現在手番内の地雷設置時にそれぞれ更新 |
| 手番内のマーカー設置回数 | 0(1ターン最大1回) | 新規マーカー設置時に +1、ターン終了時に 0 へリセット(マーカーを解除してもそのターンの設置回数は返却されない) |
| 直近の探索位置 / 爆発位置 | なし | プレイヤーの直前の安全探索マスおよび地雷爆発が発生したマスを記録 |
| 対戦結果 / 終了理由 | 未確定 | 勝利・敗北・引き分け確定時に結果および終了理由を記録 |
| ボード | 8×8(全64マス) | 04章のセル仕様を参照 |
探索可能マスの判定は固定の保存状態を持たず、判定時点の盤面から「直ちに探索可能な候補マス」(未公開+マーカーなし+自分の地雷なし)と、「自分のマーカーを解除すれば確保できる候補マス」(未公開+自分のマーカーあり+自分の地雷なし)をリアルタイムに算出する。この際、相手の地雷の有無は非公開情報であるため判定条件には含めない。
終了理由は、全マス旗封鎖、共通探索候補の枯渇、必須地雷設置不能の3つの引き分け条件と、プレイヤー/CPUの地雷接触による勝敗条件に分類される。
UI状態としては、現在の操作モード(探索/地雷設置/マーカー設置/マーカー解除)、選択難易度(初期値 ふつう)、対戦開始前フラグ、ポップアップ種別、表示言語、上部ステータスメッセージ、CPU行動タイマーを管理する。再スタート時は言語設定のみを保持し、盤面・操作モード・難易度をすべて初期状態へ戻す。
オンライン専用:サーバー状態
| 状態 | 初期値 / 値 | 更新条件 |
|---|---|---|
| ルーム状態 | 待機 → 進行 → 終了 / 失効 | 双方準備、勝敗、保持期限 |
| 座席と準備 | 0・1の最大2席、準備・再戦同意false | 参加・Ready・再戦同意。新対戦で同意を初期化 |
| 先手・現在手番 | 初戦抽選 / 再戦交代 | 初期行動ごと、または通常ターン交代 |
| フェーズ・ターン数 | 初期安全探索、ターン1 | 初期中はターン数維持。通常の交代で+1 |
| サーバー締切 | 開始時のサーバー時刻+20秒 | 初期の次行動 / 通常ターン交代時のみ再設定 |
| ターン内マーカー回数 | 0、最大1 | 設置で+1。解除で返却せず、手番交代で0 |
| 接続・復帰期限 | 座席ごとの接続状態 / 切断検出+2分 | 接続・切断・生存確認。復帰してもターン締切は延長しない |
| 対戦結果 | なし → KO / 続行不能 / 投了 / 切断敗北 / 双方切断無効 | 確定後は再判定しない。得点は続行不能の結果にのみ含む |
| 公開同期状態 | 対戦・ターン識別子と改訂番号 | サーバーの受理状態へ更新。旧対戦・旧ターンの要求は新対戦を変更不可 |
CPUの直前探索位置・難易度・行動予約はオンライン状態に使用しない。盤面原本はサーバーが保持し、クライアントは自分用の視界のみ受け取る。
結果記録の状態
対戦開始時刻と、終了時に確定した通常ターン数・経過時間を管理する。結果記録は終了時に一度だけ確定し、盤面閲覧の有無はUI状態として扱う。盤面表示・結果表示・言語変更で記録は変化しない。CPUの再スタートとオンラインの新規対戦では、新しい記録を生成する。
04. ボード・セル仕様
共通の基本仕様 — CPU基準の従来表・説明を維持。オンラインの差は本章末尾の専用節に従う。
04.1 盤面規格およびセル内部状態
盤面は横8列×縦8行(全64マス)で構成される。左上を座標 (0, 0) として右・下方向へ増加し、画面表示やアクセシビリティ読み上げでは 1〜8行・1〜8列 として扱う。隣接範囲は上下左右および斜めを含む最大8マス(角は3マス、辺は5マス、中央は8マス)である。
| セル属性 | 初期値および状態区分 | 仕様説明 |
|---|---|---|
| 公開状態 | 未公開 | 安全探索の成功時に公開状態へ移行。数字が 0 であっても周囲のマスが自動的に連鎖公開されることはない |
| 探索主体 | なし(プレイヤー / CPU) |
その安全マスを開いた主体を記録(背景色の区別および公開済みマスの再探索禁止に使用) |
| 地雷所有状態 | 地雷なし(なし / プレイヤー / CPU / 双方重複) |
そのマスに誰の地雷が設置されているかを記録。マーカーの有無とは独立して保持される |
| マーカー(旗)状態 | なし(プレイヤー / CPU) |
1マスにつき最大1つのマーカーを表示可能。実際の地雷の有無にかかわらず設置できる |
| 隣接地雷マス数 | 0〜8(初期値 0) |
周囲最大8マスのうち、地雷が1つ以上存在するマスの数 |
盤面およびセル規則の設計意図
- 盤面サイズを
8×8(64マス)に設定した理由: 1試合あたりのプレイ時間を間延びさせず、中盤以降に安全地帯が狭まっていく密度感を高めるため、ある程度コンパクトな盤面サイズを採用した。また、クラシックなマインスイーパーの初級サイズ(8×8)として多くのプレイヤーに馴染みがある点も考慮している。(将来的に少し広い盤面をオプションとして検討する余地はあるが、広すぎる盤面はゲームを冗長で退屈にする恐れがあるため追加しない方針である。) - 数字
0による周囲の自動連鎖公開を排した理由: 毎ターン地雷を1つずつ追加しながら盤面を作っていく対戦仕様上、序盤に連鎖公開で一度に多くのマスが開いてしまうと、地雷を仕掛ける非公開領域と読み合いの緊張感が急激に損なわれるため、常に選択した1マスのみが開く仕様とした。 - 双方の地雷が重なったマスも隣接数を
1として数える理由: 地雷が設置されるたびに全マスの隣接数を再計算し、画面には公開済みマスの数字のみを表示する。もし同一マスにプレイヤーとCPUの地雷が重なった(重複した)際に数字が二重に加算されると、相手がどこに地雷を置いたかを逆算しやすくなりすぎて心理戦が単純化してしまう。そのため、原作のマインスイーパーの直感的な表示ルールを維持し、「周囲8マスのうち地雷が存在するマスの数」として1とカウントする仕様に統一した。
04.2 視界(観測情報)の分離および画面表示仕様
| 情報項目 | ゲームルール内部 | プレイヤー画面およびCPUの観測視界 |
|---|---|---|
| 地雷の設置情報 | 双方の全地雷位置を保持 | 自分が設置した地雷位置のみ確認可能(相手の地雷位置は非公開) |
| 隣接地雷マス数 | 未公開マスを含む全マスで保持 | 公開済みマスの数字のみ確認可能(未公開マスの数字は非公開) |
| 公開状態および探索主体 | 保持 | 双方に共有 |
| マーカー位置および所有者 | 保持 | 双方に共有 |
| 対戦結果・爆発位置・累計設置数 | 保持 | 双方に共有 |
公平な推理対戦のための視界分離: CPUの思考ロジックに対しても全地雷の位置が入った内部盤面データは渡さず、人間プレイヤーが画面上で確認できる情報と全く同じ「観測視界データ(公開マスの数字、マーカー状態、自分が設置した地雷位置)」のみを渡すことで、チートのない公平な推理対戦が成り立つよう設計している。
| 表示対象 | 画面表示仕様 |
|---|---|
| プレイヤー安全探索マス | 青系の背景(#BBD7FF)、数字(#18263C) |
| CPU安全探索マス | ピンク系の背景(#FFBDBD)、数字(#18263C) |
| 未公開マス | 暗いグレー系の背景(#1B293C) |
| 自分の設置地雷 | 地雷アイコンを表示(相手の地雷と重複している場合も同じアイコンで表示) |
| マーカー(旗) | プレイヤーは青い旗、CPUはオレンジの旗を表示(自分の地雷アイコンと同時表示可) |
| 爆発位置 | 赤背景(#B43041)と ! を表示(通常の数字・地雷・旗より優先表示) |
後から隣接地雷が追加されて公開済みマスの数字が変化しても、そのマスを最初に開いた探索主体の背景色(青/ピンク)はそのまま維持される。
図を拡大、またはスクロールして確認できます。
上図は画面表示上のセル状態遷移を表す。マーカーが置かれているマスは、解除されるまで直接探索や新規地雷設置を行うことはできない。
オンライン専用:観測情報と終了後表示
| 項目 | 進行中 | 終了後 |
|---|---|---|
| 地雷 | 自分の地雷のみ表示。重複の直接通知なし | 双方の所有権と重複公開:自分 ✹ / 相手 ◇ / 重複 ◆ |
| 数字 | 公開マスのみ0〜8。未公開数字は送信しない | 公開済み数字を維持。未公開マスの全数字を公開する機能ではない |
| マーカー | 位置・設置者を共有。自分は青系、相手は赤系 | 各マーカーに正解 ✓ / 不正解 × を追加 |
| 公開マス色 | 閲覧者基準で自分の探索 #BBD7FF / 相手 #FFBDBD | 探索者色を維持、接触位置は赤背景 |
| 得点 | 相手地雷の正解判定・得点は非公開 | 続行不能の時のみ双方の得点と正解・不正解数を表示 |
オンラインの「自分/相手」は固定の先手・後手ではなく閲覧者基準。サーバーは全地雷を保持するが、終了前に相手の所有ビットや設置座標を応答へ含めない。画面上だけで隠す方式ではない。
05. ターン進行仕様
CPU対戦 — オンライン専用ルールとは区別して扱う。
| 行動区分 | 実行可能条件 | 処理結果(成功 / 拒否) |
|---|---|---|
| 共通入力検証 | 自分の手番、対戦進行中、盤面内の有効なマス(64マス内) | 条件を満たさない入力は拒否し、盤面状態および使用回数を維持 |
| 探索 | 初期または通常探索フェーズ、未公開+マーカーなし+自分の地雷なし |
相手の地雷がなければその1マスを公開し地雷設置フェーズへ移行。相手の地雷があれば即座に爆発・敗北 |
| 地雷設置 | 初期または通常地雷設置フェーズ、06章の条件を充足 | 当該マスに自分の地雷を追加し隣接数字を更新。通常ターンでは1個設置後に ターン終了待機 フェーズへ移行 |
| マーカー(旗)設置/解除 | 通常ターンの全フェーズ(探索前 / 地雷設置中 / ターン終了前) |
1ターンにつき新規設置は最大1回。解除は自分のマーカーのみ可能で、解除してもそのターンの設置回数は返却されない。自分の地雷の上にも設置可能 |
| ターン終了 | 必須行動(探索・地雷設置)完了後の ターン終了待機 フェーズ |
相手手番の通常探索フェーズへ移行、手番内の使用回数をリセット、ターン数を +1 し直ちに進行可否を判定 |
ターン進行およびマーカー運用の設計意図
- 通常探索進入時の進行可否判定: 通常探索フェーズに入った時点、および探索前にマーカーを操作した直後に、「直ちに探索可能な候補マス」と「自分のマーカーを解除すれば確保できる候補マス」を判定する。両方が
0マスであれば即座に引き分け終了となる。もし自分のマーカーを解除して探索できるマスが残っている場合は、手番とフェーズを維持し、マーカー解除後に探索を続けられるようにする(ただし、未公開マスすべてがマーカーで埋まる「全マス旗封鎖」は即引き分けが優先される)。 - マーカー(旗)を1ターン1個に制限した理由: マーカーは危険領域を整理するメモであると同時に、相手の探索や地雷設置を封じる強力な盤面制御手段でもある。1ターンに何個もマーカーを乱立できてしまうと、相手の行動を過度に封鎖してゲームバランスが崩れるため、慎重な使用を促す目的で1ターンにつき新規設置を1個に制限し、解除しても回数が戻らない仕様とした(ターンを跨いでも設置済みマーカーは維持され、盤面全体の保有上限は設けていない)。
- 自分の地雷の上にもマーカー設置を許可した理由: 自分の地雷の上にマーカーを置いて相手を揺さぶるブラフ(心理戦)として使えるようにするほか、もし「自分の地雷の上にはマーカーが置けない」という制限を設けると、それ自体がプレイ上の不自然な制約になってしまうため許可している。
- UI操作およびCPU行動間隔(
650ms): 盤面入力はプレイヤーの手番かつポップアップが閉じている時のみ有効となる。探索・地雷設置フェーズに入ると下部の操作モードが自動的に切り替わり、モード切り替え自体は行動回数を消費しない。CPUの手番では、探索・地雷設置・マーカー操作・ターン終了の各ステップを650ms間隔で実行する。これはCPUがすべての行動を一瞬(0秒)で終えてしまうとプレイヤーが盤面の変化を把握しづらいため、CPUの行動順序と数字の変化を目で追えるように配慮したUX演出である(ポップアップ表示中やブラウザのタブ非表示時は残り時間を保持して一時停止する)。
図を拡大、またはスクロールして確認できます。
上図は通常ターンのフェーズ遷移を表す。自分のマーカーを解除して探索候補を確保できる場合は探索フェーズを維持する。
オンライン専用:20秒ターンと期限処理
| 状況 | サーバー処理 |
|---|---|
| 初期安全探索 | 行動ごと20秒。期限切れ時は公開済み・地雷・マーカーを除く有効安全マスを1つ抽選し公開 |
| 初期地雷設置 | 行動ごと20秒。期限切れ時は未公開・マーカーなし・自分の地雷なしのマスへ1個抽選設置。相手と重複可 |
| 通常ターン開始 | 探索開始時に20秒の締切を設定。探索・設置・マーカーでも同じ締切 |
| 探索前の時間切れ | 探索と設置を省略して相手ターンへ |
| 探索のみ完了後の時間切れ | 公開マスを保持し、設置を省略して交代 |
| 探索・設置完了後の時間切れ | 地雷・数字・マーカーを保持して交代 |
| ターン終了ボタン | 探索・設置の完了フェーズのみ有効。早期終了後、相手に新たな20秒 |
| モーダル・言語切替・背景化・切断 | サーバー期限は進行。復帰時に最新フェーズと残り時間を同期 |
| 締切以降に届く行動 | 先に時間切れを処理し、旧ターン行動は拒否。再送も重複適用しない |
時間切れによるHP減少・減点はない。最後の安全マスをマーカーで塞ぐ場合などはターン終了を待たず08章のオンライン終了判定を適用する。通信・アラーム遅延で表示更新が遅れる場合も、有効性の基準はサーバー締切である。
06. 地雷設置仕様
共通の基本仕様 — CPU基準の従来表・説明を維持。オンラインの差は本章末尾の専用節に従う。
| 設置条件 | 初期地雷設置(オープニング) | 通常ターン地雷設置 |
|---|---|---|
| 現在の手番および地雷設置フェーズ | 必須 | 必須 |
| 未公開マス | 必須 | 必須 |
| マーカー(旗)なし | 必須 | 必須 |
| 自分の地雷なし | 必須 | 必須 |
| 相手の地雷なし | 不要(重複設置可) | 不要(重複設置可) |
| 設置数量 | 各側1個 | 1ターンにつき1個 |
地雷の重複許可および心理戦の設計意図
- 相手の地雷があるマスへの重複設置を許可した理由: 地雷を仕掛ける際、もし相手の地雷が既にあるマスへの設置が拒否(設置不可)されてしまうと、試しに設置操作を行うだけで「設置できない=そこに相手の地雷がある」と無料で看破できてしまう抜け穴が生じる。これを防ぐため、相手の地雷の有無にかかわらず
未公開+マーカーなし+自分の地雷なしの条件さえ満たせば、同じマスに双方の地雷が重なって(重複して)設置できる仕様とした(一度設置した地雷を取り除く操作はない)。 - 数字の変化による重複の間接推理: 相手の地雷が既にあるマスに自分の地雷を重ねて設置しても、システム上の完了メッセージは通常設置と同じであり、重複したことを直接通知することはない。ただし、04章のルールに従い「隣接する公開済みマスの数字が増えない現象」はそのまま盤面に反映されるため、プレイヤーは数字の変化を観察することで「今自分が地雷を置いたマスには、すでに相手の地雷が仕掛けられていた」と逆算・推理することができる。
- フェーズ移行ルール: オープニングの初期地雷設置では、プレイヤーの設置完了後にすぐCPUへ手番が移り、CPUの初期地雷設置が完了するとプレイヤーの1ターン目(通常探索)へ進む。通常ターンの地雷設置後は同じ手番の
ターン終了待機フェーズへ進み、プレイヤーがターン終了ボタンを押すまで手番は移動しない(重複したマスも双方の累計地雷設置数にそれぞれ加算される)。
オンライン専用の補足
設置マス条件と重複時の数字計算は上表と同じ。初期の自動設置にも同じ条件を使う。通常ターンでは自動設置せず、未完了で時間切れになればその行動を省略する。有効設置後も通常ターンの残り時間を再設定しない。サーバーは重複や相手の設置座標を別通知しない。
07. 探索・情報公開仕様
共通の基本仕様 — CPU基準の従来表・説明を維持。オンラインの差は本章末尾の専用節に従う。
| 選択マスの条件 | 判定および処理結果 |
|---|---|
| 自分の手番ではない / 探索フェーズではない / 公開済み / マーカーあり / 自分の地雷あり | 入力拒否(盤面状態および使用回数を維持) |
未公開+マーカーなし+自分の地雷なし+相手の地雷なし |
当該1マスを安全公開し、探索主体を記録(数字が 0 でも周囲の自動連鎖公開はなし) |
未公開+マーカーなし+自分の地雷なし+相手の地雷あり |
探索した側が地雷を踏み、即座に敗北(対戦終了) |
- 自分の地雷マスの選択防止: 画面上には自分が設置した地雷の位置が常時表示されているため、プレイヤーやCPUが自分の地雷があるマスを探索することは許可せず(選択拒否)、進行可能候補の算出条件と実際の探索許可条件を一致させている。
- CPUの探索候補分類: CPUも相手の地雷の実際の位置を裏で参照することはなく、観測可能な数字ヒントをもとに探索可能候補を「安全確定」・「不確実」・「地雷確定」の3つに分類して推理を行う(これ以上マーカーを置けない状態で地雷確定候補しか残っていない場合は、人間と同様にそのマスを探索して敗北する)。
図を拡大、またはスクロールして確認できます。
上図は探索入力時の判定フローを表す。通常探索フェーズへの進入時点で既に共通探索候補が枯渇している場合は、入力を受け付ける前に引き分け終了となる。
オンライン専用の補足
上記のマス探索許可・拒否条件はオンラインにも適用する。自分の地雷と重複マスは探索拒否、相手単独地雷への接触のみKO。サーバーが手番・段階・締切・マス状態を検証し、安全公開後も実際の安全な探索マスを即時検査する。CPUの「候補枯渇時の自己マーカー解除機会」に代わり、オンラインは実安全マス0で即時得点終了する。終了後の全地雷・マーカー公開は04章、優先順位は08章を参照。
08. 勝敗および終了判定仕様
CPU対戦 — オンライン専用ルールとは区別して扱う。
| 判定優先順 / 条件 | 結果 | 判定タイミングおよび詳細基準 |
|---|---|---|
| 地雷接触(勝敗確定) | 相手の地雷に接触した探索側の敗北(プレイヤー接触→敗北 / CPU接触→勝利) | 探索実行時に即時判定 |
| 全マス旗封鎖 | 引き分け | 盤面の全未公開マスにマーカー(旗)が置かれた瞬間、自分のマーカー解除可否にかかわらず即座に引き分け |
| 共通探索候補の枯渇 | 引き分け | 通常探索フェーズで直ちに探索可能な候補マスが 0 個であり、かつ自分のマーカーを解除して確保できる候補マスも 0 個の場合 |
| 必須地雷設置不能 | 引き分け | 地雷設置フェーズで設置可能な候補マス、および自分のマーカーを解除して確保できる候補マスがともに 0 個の場合 |
終了判定の順序および設計意図
- 引き分け(膠着解消)ルールの設計意図: 双方が最後まで地雷を踏まずに盤面を限界まで埋め切ったということは、両者ともに優れたプレイをしたことを意味する。この状況で無理に勝敗を決めるための追加ルール(例:マーカーで実際の地雷を当てた数の比較、探索で開いたマスの数字合計の比較など)を導入すると、「ルールは軽く、プレイは深く」という本来の狙いを損ない、ルールが煩雑になってしまう。そのため、盤面が完全に膠着した場合は引き分けとし、「次の試合でこそ決着をつけよう」という気持ちで自然な再プレイ(リマッチ)を促す設計とした。
- 「全マス旗封鎖」時にマーカー解除を強制せず即引き分けとする理由: すべての未公開マスがマーカーで埋まった状態で自分のマーカーを消させたとしても、その直後に行える必須行動は「探索」しかないため、結局地雷を踏んで自滅するだけの結果になってしまう点が第一の理由である。さらに、マーカーの解除と再設置が繰り返されて試合が永遠に終わらなくなる無限ループ(遅延)の可能性を断つため、全未公開マスにマーカーが置かれた時点で即座に引き分けが成立する仕様としている。
- 通常探索候補枯渇の詳細判定フロー:
- 全未公開マスにマーカーが置かれていれば、即座に全マス旗封鎖による引き分けで終了する。
- マーカーのない探索候補マス(
未公開+マーカーなし+自分の地雷なし)が1マス以上残っていれば、通常通り探索を進行する。 - 直ちに探索できる候補マスが
0個であっても、自分のマーカーが置かれた未公開マス(自分の地雷がないマス)が残っていれば、自分のマーカーを解除して探索を続けられるよう現在の手番とフェーズを維持する(相手のマーカーは解除できず、自分の地雷の上にあるマーカーも解除して探索することはできないため回復候補から除外する)。 - 直ちに探索できる候補とマーカー解除による回復候補がともに
0個であれば、共通探索候補枯渇による引き分けで終了する。
- 詰め(地雷確定マスしか残っていない状況)における勝敗帰結: 現在の手番側がこれ以上マーカーを置けない状態(すでにそのターンのマーカーを使い切っている等)で、マーカーのない探索候補マスが残っており、かつそれらがすべて相手の地雷である場合は、人間プレイヤー・CPUともに例外なく必ず「探索」を行って地雷を踏み敗北する。すなわち、相手がマーカーで逃げられない状況を作り、残りの探索候補を自分の地雷で埋めて踏ませる展開は正当な勝ち筋(詰め)として機能する。
- 結果確定と再スタート:終了時に結果と記録を固定し、CPU行動タイマーを解除する。結果ポップアップは背景・Escapeでは閉じないが、盤面表示へ切り替えられる。再スタート確定時は言語だけを維持し、新しい盤面・ターン・難易度・記録を準備する。
オンライン専用:終了優先順位とマーカー得点
サーバーは有効性検証 → 行動適用 → 相手単独地雷への接触KO → 続行不能 → 得点比較 → 結果通知の順で処理する。時間切れ・切断期限は行動適用前にサーバー時刻で精算する。確定済みのKO・得点結果を後発の切断で変更しない。
続行不能:U = 未公開 AND マーカーなし、S = Uのうち実際に地雷がないマス。Sが0なら即終了。U自体が0の場合も含み、論理的に推理できるかは考慮しない。誤ったマーカーが最後の安全マスを塞いでも終了し、解除機会を先に与えない。CPUの膠着引き分け・詰めルールとは異なる。
| 終了理由 | 結果 / 得点適用 |
|---|---|
| 相手単独地雷への接触(KO) | 探索者敗北。マーカー得点は不適用 |
| 安全な探索マス枯渇 | 下記の得点比較、高得点側勝利 / 同点は引き分け |
| 退出確認後の投了 | 投了者敗北。得点は不適用 |
| 切断後に片方が未復帰 | 2分猶予が切れた側の敗北。得点は不適用 |
| 双方未復帰 | 両者の猶予終了後に対戦無効。引き分けと区別、得点は不適用 |
得点 = 終了時に残る自分のマーカーの正解数 − 不正解数。解除済みは数えず、負の得点も許可する。
| 自分のマーカーのマス | 正解 / 不正解 | 得点 |
|---|---|---|
| 相手単独地雷 | 正解 | +1 |
| 双方の重複地雷 | 正解 | +1 |
| 自分単独地雷 | 不正解 | -1 |
| 地雷なし | 不正解 | -1 |
例:-1と-2なら-1側が勝ち、-1と-1は引き分け。得点は通常KO・投了・切断の結果を逆転しない。
オンライン専用:再接続・再戦・保持
- サーバーが切断を検出した時点から2分以内、同じ端末・ブラウザの保存セッショントークンで復帰する。ブラウザを完全終了してもトークンが残れば復帰可能。切断中も20秒ターンは進行する。
- 正常なソケット終了は直ちに検出。無通知切断は生存確認で遅れる場合があり、実際の端末切断時刻との一致は保証しない。双方不在は両猶予が終わって初めて無効。一方が期限切れでも他方が自分の猶予内に戻れば、先に期限切れした側が敗北する。
- 先にKO・続行不能が確定すれば、その結果を維持する。終了後の復帰は結果参照であり、勝敗を復元・変更しない。
- 再戦には双方の同意・接続が必要。先後手を交代し、マス・地雷・マーカー・回数・ターン・フェーズ・結果・期限を初期化。ルームと座席認証は維持する。オンラインにHP状態はない。
- 待機ルームは作成から24時間で失効、終了結果は各終了から24時間保持。進行中のルームを作成24時間で削除しない。過去結果のサーバー保持はあるが、履歴一覧を選ぶUIはない。
終了盤面の再閲覧と記録
勝利・敗北・引き分けの結果から、盤面を見る → 結果を見るを回数制限なく繰り返せる。新しい対戦を始めるまで同じ最終盤面を保持し、閲覧中は探索・設置・マーカー・ターン終了の入力を無効にする。終了済みのタイマーは再開しない。CPU対戦では従来の自分の視界を維持し、オンラインでは終了後に公開される全地雷・重複・マーカー正誤をそのまま表示する。最終盤面の確認であり、行動順を再生するリプレイではない。
| 記録項目 | 基準 |
|---|---|
| 総ターン数 | 双方に与えられた通常ターンの機会を合算。結果が確定した進行中のターンも含む |
| ターンの例 | 先手の初回 → 後手の初回 → 先手の2回目で終了した場合、合計3ターン |
| オープニング | 安全公開・初期地雷設置は通常ターンに含めない。オープニング中の終了は0ターン |
| 時間切れ | オンライン通常ターンの時間切れも含む。未実行行動を省略する従来ルールを維持 |
| CPUの経過時間 | ゲーム開始ボタンからゲームロジックの終了判定までの実経過時間。メニュー・バックグラウンド滞在も含む |
| オンラインの経過時間 | 双方Readyまたは再戦同意による実際のサーバー開始時刻から終了判定時刻まで。切断・再接続中も含む |
| 表示 | 勝利:勝利ターン数 / 勝利までの時間。敗北:敗北ターン数 / 対戦時間。引き分け・無効:総ターン数 / 対戦時間 |
| 時間表記 | 秒未満を切り捨て、言語別の単位で表示。例:2分34秒 / 1時間2分15秒 |
| 記録固定 | 結果画面・盤面閲覧の時間は加算しない。オンライン再接続時も同じサーバー記録を復元 |
| 旧版・未開始 | 過去の開始時刻が不明なら時間記録なしと案内。開始前の待機ルームには結果記録を作らない |
CPUの行動待機はメニュー中に停止するが、対戦時間は実際に経過した時間である。オンライン記録はクライアントの現在時刻や画面更新回数で計算しない。投了・切断負け・双方切断による無効の理由と得点適用条件は維持する。
09. CPU行動仕様
CPU対戦 — オンライン専用ルールとは区別して扱う。
09.1 人間らしい推理水準を模した推論ルール
- 公平な視界に基づく消去法推論: CPUはプレイヤーの地雷位置を裏で参照することはなく、現在の盤面に表示されている公開数字・自分が設置した地雷位置・公開状態・マーカー(旗)状態のみを用いて推理を行う。
- まず自分が設置した地雷マスを「地雷確定」に分類する。
- 各公開数字マスについて、隣接する未公開マスのうち既に地雷と確定したマス数を引いた「残り地雷数」と、まだ判別がつかない「未確定マス数」を比較する。
- 残り地雷数が
0であれば隣接する未確定マスをすべて「安全確定」に分類し、残り地雷数が未確定マス数と等しければ隣接する未確定マスをすべて「地雷確定」に分類する。 - 新たに分類されるマスがなくなるまで走査を繰り返し、最後までどちらにも確定しなかったマスを「不確実」として残す。
- 過去の数字変化履歴を記憶させない設計意図: CPUが過去のターンでどのマスの数字がいつ変化したかまで完璧に記憶・逆算する「完璧な計算機」のように振る舞うと、人間プレイヤーが勝つことが極端に難しくなる。そのため、現在の盤面から読み取れる情報のみで消去法を行う設計とし、人間プレイヤーの自然な推理レベルを模倣している。
09.2 探索候補の選択および難易度別の誤判断率
CPUは直ちに探索可能な候補マス(未公開+マーカーなし+自分の地雷なし)を、推論結果に基づいて安全確定 / 不確実 / 地雷確定の3グループに分類して行動を決定する。
| 候補の構成状況 | CPUの探索選択ルール |
|---|---|
| 安全確定と不確実の両方がある | 通常判断時は安全確定からランダム選択、誤判断分岐時は不確実からランダム選択 |
| 安全確定のみある | 誤判断分岐が発生しても安全確定からランダム選択 |
| 不確実のみある | 不確実からランダム選択 |
| 地雷確定のみある(安全・不確実なし) | マーカー使用枠があれば地雷確定マスにマーカーを設置し、これ以上マーカーを置けない状態であれば地雷確定候補から1マスを探索して敗北(詰め) |
直ちに探索可能な候補が 0 個 |
自分のマーカー解除で確保できる候補があれば解除し、なければ共通探索候補枯渇による引き分け |
| 難易度 | 通常探索時の誤判断率(安全確定の代わりに不確実を選ぶ確率) |
|---|---|
| かんたん | 40% |
| ふつう | 20% |
| むずかしい | 5% |
- 難易度を「判断ミス(誤判断)の確率」で設計した意図: ソロモードをできる限り対人戦(人間との対戦)に近い感覚でプレイできるように設計した。本作における敗着はすべて「判断ミス」から生じる。また、「最高難易度をクリアできなければ対人戦でも人に勝てない」と感じるプレイヤー心理にも配慮している。実際にはどれほど上手い人間であってもごく低い確率で判断ミスを犯す可能性があるため、ソロモードにおける成功体験(クリアの達成感)とマルチ(対人)モードに近い環境構築の両立を目指し、最高難易度(
むずかしい)でも0%ではなく5%の誤判断率を残している。(※表の確率は安全確定の代わりに不確実を選ぶ分岐率であり、勝率ではない。オープニングの初期安全探索には誤判断分岐を適用しない。)
図を拡大、またはスクロールして確認できます。
上図はCPUの探索フェーズにおける意思決定フローを表す。全マス旗封鎖の判定は共通進行判定で先行して行われる。
09.3 地雷設置の重み付けおよびマーカー運用
- 地雷設置位置の重み付け(
60% / 25% / 15%):- CPUは地雷設置可能な候補マス(
未公開+マーカーなし+自分の地雷なし)の中から、① 全候補からランダム(60%)、② プレイヤーが直前に安全探索したマスの周囲(25%)、③ すでに開いている公開マスの周囲(15%)の比率で対象エリアを選択する(局所エリアに候補がない場合は全候補へ戻り、初期地雷・通常地雷ともに相手の地雷との重複設置が可能)。 - 設計意図: 100%完全ランダムに地雷をばら撒くのは合理的なプレイヤーの行動パターンとは言えず、またプレイヤーが直前に開いたマスや公開数字の周囲に地雷を仕掛けることで、数字の変化による心理戦とプレッシャーを体感させる狙いがある。
- CPUは地雷設置可能な候補マス(
- マーカー(旗)設置確率(
70%)と人間の「見落とし」の再現:- ターン終了前(
ターン終了待機フェーズ)にそのターンの新規マーカー設置枠が残っている場合、CPUは70%の確率で推論上「相手の地雷確定」と判定したマス(未公開+マーカーなし+自分の地雷なし)から1つを選んでマーカーを設置し、ターンを終了する(該当候補がない場合は省略してターンを終了する)。 - 設計意図: 地雷確定マスを見つけた際に100%必ずマーカーを置くのではなく
70%の確率としたのは、人間プレイヤーが「うっかりマーカーを置き忘れる・見落とす」自然な挙動を再現するためである。
- ターン終了前(
オンラインの適用範囲:本章のAI・難易度・60/25/15設置配分・70%マーカー確率はCPU専用。オンラインは2人が直接操作し、サーバーは合法性・時間・勝敗を判定する。初期時間切れのランダム自動行動はCPU推理AIや代替プレイヤーボットではない。
10. UI・操作仕様
CPU対戦 — オンライン専用ルールとは区別して扱う。
単一画面およびモバイル基準のUI設計意図
可能な限り軽快に動作する環境と直感的な操作を目指し、独立したタイトル画面へ画面遷移せず、単一のゲーム画面上にポップアップ(モーダル)を重ねる構造を採用した。Web・モバイルのどこからでもアクセス直後に片手で素早く1試合を楽しめるよう、モバイルの縦画面を基準にレイアウトを設計しており、PC(デスクトップ)でプレイする際も視線移動やマウス動線が短く快適に遊べるため、同じモバイルWeb型のUI規格を共通利用している。
| 画面・領域 | 構成要素および入力 | 動作および反応仕様 |
|---|---|---|
| 初回言語選択ポップアップ | Select Language および4言語の選択ボタン |
選択と同時に言語設定を保存し、開始ルールポップアップへ移行(背景タップ・Escape での閉じる操作は不可) |
| 開始ルール・難易度ポップアップ | ルール説明本文、3段階の難易度、ゲーム開始ボタン |
選択した難易度を適用して対戦を開始(背景タップ・Escape での閉じる操作は不可) |
| 上部情報領域(HUD) | タイトル、メニュー(☰)ボタン、現在のターン・フェーズ・難易度・双方の累計地雷数・マーカー残数 |
メニューボタン以外は現在の対戦ステータスをリアルタイム表示 |
| メインボード領域 | 8×8(64マス) のグリッド、数字、自分の地雷アイコン、双方のマーカー(旗) |
下部で選択中の操作モードをクリック/タップしたマスに対して実行 |
| 凡例・ステータス案内 | 双方の探索色・マーカー色の凡例、現在のフェーズおよび操作結果メッセージ | 現在の手番・フェーズおよび直前の操作結果をテキストでフィードバック |
| 下部操作ボタンバー | 探索 / 地雷設置 / 旗設置 / 旗解除 / ターン終了 |
現在のフェーズと残り回数に応じて有効化状態を更新。モード選択後に盤面マスを押して実行 |
メニューポップアップ(☰) |
ルール確認 / 再スタート / 言語変更 / 閉じる |
選択した各ポップアップ1つへ切り替え。背景タップまたは Escape で対戦画面へ復帰可能 |
| 進行中のルール確認 | 開始時と同じルール説明本文および 閉じる ボタン |
対戦進行中のため難易度選択欄は非表示。背景タップ・Escape でも復帰可能 |
| 再スタート確認ポップアップ | 進行状況リセットの注意文、キャンセル / 再スタート ボタン |
キャンセル・背景タップ・Escape は対戦維持、確定時は初期化して開始ルールポップアップへ移動 |
| 進行中の言語変更 | 4言語の選択ボタン(現在の選択を表示)および 閉じる ボタン |
進行中の盤面・ターン・難易度を維持したまま、画面全体の表示言語を即座に切り替え |
| 結果ポップアップ | 勝敗・理由・総ターン数・対戦時間、盤面を見る / 再スタート / メニュー | 盤面表示へ切替、盤面直下の結果を見るで復帰。再スタートは確認画面を経由 |
| 更新通知ポップアップ | 新バージョンの検出通知、あとで / 更新 ボタン |
実行版より新しい版のみ通知。あとで 選択時は現在のプレイを継続し、同一セッションでは該当版の再通知を省略。更新 選択時は ?v=新版 URLへ移動し、再読込後の対戦は新しいゲームとして開始 |
ポップアップ内部の本文スクロールやドラッグ中に指やカーソルが枠外へ出た場合に誤って閉じないよう、押下開始と離した位置の両方がカード外にある時のみ「背景タップで閉じる」と判定する。また、画面上に表示されるポップアップは常に最大1つに制限する。
画面構成イメージ
| 番号 | 画面区分 | 主な確認要素 |
|---|---|---|
| ① | 開始ルール・難易度選択 | 日本語のルール説明、3段階の難易度選択、ゲーム開始ボタン |
| ② | 対戦進行ボード | 上部ステータス表示、双方の探索色の区別、自分の地雷アイコンおよび下部操作バー |
| ③ | インゲームメニュー | ルール確認、再スタート、言語変更メニュー |
| ④ | 敗北結果画面 | 地雷爆発位置(!)の表示、結果ポップアップおよび盤面への追加入力ロック |
| ⑤ | 引き分け結果画面 | 引き分け終了理由の案内および再スタート/メニュー動線 |
既存キャプチャはv0.2.1-webのUI配置資料であり、新規ルール・結果の検証資料ではありません。

390×844 のモバイル縦画面サイズを基準にしたレイアウト例である。
オンライン専用画面と操作
| 画面 / 要素 | 入力 | 表示・応答 |
|---|---|---|
| CPUの☰メニュー | オンライン対戦 | 別のonline.htmlへ移動。CPUの盤面をオンライン状態へ移植しない |
| オンライン待機室 | 作成 / コード入力・参加 | 最大2席、相手の接続とReady。満室は参加拒否 |
| 招待URL | 招待リンクコピー | 同じonline.html?room=コード。トークンなし。コピー失敗時も画面でURLを確認可 |
| 準備 | 各自Ready | 片方だけなら待機。双方準備・接続で開始 |
| オンラインHUD | 状態参照 | 自分/相手の番、フェーズ、地雷数、マーカー残数、サーバー基準の残秒、接続・準備・再戦状態 |
| 盤面と操作ボタン | 探索 / 設置 / マーカー / 解除 / ターン終了 | 手番・合法段階・接続・応答待ち・モーダル・期限に応じ有効化 |
| ルール / 言語select | 説明開閉 / 言語切替 | 盤面入力のみ遮断。説明中もサーバーの時間・相手行動は進む |
| 切断 / 再接続 | 自動再試行 / 再接続ボタン | 最新の視界と残り時間を復元。期限・座席置換のエラー表示 |
| 退出 / CPU対戦へ | 確認して退出 | 対戦中は投了確定後に移動。オフラインでは投了送信不可 |
| 結果領域 | 結果参照 / 再戦同意 | 全地雷・重複・マーカー正誤、理由、勝敗/無効。続行不能のみ得点・正解・不正解数 |
オンラインはCPUの結果モーダルとは異なり、画面内の結果領域と上部結果表示を使う。ターン制限は残秒、終了記録は分・秒で表示する。待機・進行画面はv0.3.0の配置例、下記の新しい結果画面はv0.3.1を基準とする。
| 画面 | 日本語資料 | 確認要素 |
|---|---|---|
| 待機室 | ルーム・招待・Ready | コード、招待リンク、接続・準備 |
| 対戦 | 20秒ターンと盤面 | 手番、期限、自分の地雷、探索色 |
| 結果 | KO結果と全地雷 | 理由、自分/相手の地雷、再戦 |

最終盤面と結果画面の移動
- CPU:結果ポップアップに盤面を見る・再スタート・メニューを設置。盤面を見るで閉じ、盤面直下の結果を見るで同じポップアップを開く。再スタートは従来の確認画面を経由する。
- オンライン:画面内の結果欄を折り畳み、盤面直下の結果を見るで復元する。閲覧中は再戦同意を隠し、結果へ戻ると再表示する。
- 終了理由と記録を保持する。新しい対戦の開始時に前の閲覧状態を初期化する。




上記4画面は公開v0.3.1-webの実際のUIである。終了情報の公開範囲は04章、記録の集計基準は08章に従う。
11. 多言語・レスポンシブ仕様
CPU対戦 — オンライン専用ルールとは区別して扱う。
| 項目 | 仕様内容 |
|---|---|
| 対応言語(4言語) | 日本語(ja)、韓国語(ko)、英語(en)、簡体中国語(zh-CN) |
| 言語設定の保持 | 選択した言語はブラウザに保存され、再アクセス時も維持される(対戦の進行状況や難易度はセッションごとに初期化) |
| リアルタイム言語切替 | 対戦途中に言語を変更しても盤面・手番・難易度・数字はそのまま維持され、すべてのUIテキストと案内文のみが即座に切り替わる |
| モバイル縦画面基準のレイアウト | 最大幅 480px 基準の縦型シングルカラム構成とし、モバイルでの片手操作とPCブラウザでの快適なプレイを両立 |
| 盤面サイズの自動調整 | 画面幅および上下UIを除いた残り高さに合わせ、8×8 ボードの一辺を 224px〜452px の範囲で自動調整 |
| 画面高さ別のコンパクト対応 | 縦が低い画面(660px 以下)では余白と操作ボタン高さを縮小(最小 36px)して1画面に収め、余裕のある画面(780px 以上)ではボタン高さ(48px)と余白を広げてタップしやすさを確保 |
| フォント構成 | 重い外部Webフォントのダウンロードを行わず、各OS標準のCJKシステムフォントを使用することで初期ロードを軽量化 |
| 新バージョン更新案内 | アクセス時、画面表示中の60秒間隔、タブ復帰時に version.json を cache: 'no-store' で確認。数字.数字.数字-web 形式の安全な整数3つを先頭から比較し、実行版より新しい場合のみ通知。同一版・旧版・不正値は通知しない。他のポップアップ表示中は閉じた後に更新案内を表示し、強制移動は行わない |
| 更新後のHTMLキャッシュ安定化 | 実行版と v クエリが一致するプロジェクト基本URLまたは index.html にアクセスした場合のみ、クエリ・ハッシュを除いた同一オリジンのプロジェクト基本URLへ cache: 'reload' で1回リクエスト。成功したHTML応答の本文受信完了まで待ち、基本URL再訪時に旧版HTMLが再利用される可能性を低減。通常の基本URLアクセスでは追加の更新リクエストを行わず、Service Workerは使用しない |
オンライン専用:言語・レスポンシブ・保存
オンラインもko / ja / en / zh-CNと同じ言語保存値を使用する。直接アクセスで保存言語がなければ韓国語を表示し、上部selectで変更する。CPUの初回言語モーダルをオンラインにも自動表示するわけではない。切替後も盤面・手番・締切・結果・再戦同意を維持する。
オンライン盤面は画面幅に合わせ最大390px、操作ボタンは最小44px。小さな縦画面ではスクロールを許可する。Safe Area・CJKシステムフォントを使用し、CPUの1画面に高さを合わせる規格とは区別する。
セッショントークンは同じブラウザの保存領域に保持し招待URLには入れない。保存を禁止された場合はオンライン参加・復帰不可を案内しCPUへの移動を提供する。24時間のサーバー保持は永続セーブ・別端末ログインではない。
両エントリーのCSS/ES Module依存先にコンテンツハッシュを付け、旧ハッシュ資産も保持する。ただし60秒ごとの新バージョン検出・更新案内・HTMLキャッシュ補正はCPUページにのみ接続されている。オンラインにも同じ更新ポップアップが実装されているとは扱わない。Service Workerはない。
盤面を見る・結果を見る・ターン数・所要時間も4言語で表示する。同じ154秒を、韓国語 2분 34초、日本語 2分34秒、英語 2m 34s、簡体字中国語 2分34秒と表記する。言語変更でも記録の元データは維持する。
12. 例外処理仕様
CPU対戦 — オンライン専用ルールとは区別して扱う。
| 例外状況 | システムおよびUIの処理ルール |
|---|---|
| 無効なマスの選択(公開済みマス・マーカー付きマス・自分の地雷マスの探索、相手マーカーの解除、フェーズ外の操作など) | 入力を拒否して盤面状態と残り行動回数を維持し、上部ステータス欄に不可理由を表示 |
通常探索フェーズで直ちに探索可能な候補が 0 個だが、自分のマーカーを解除すれば探索できるマスがある場合 |
即座に終了せず現在の手番・フェーズ・使用回数を維持し、自分のマーカーを解除して探索を続けられる機会を提供(ただし全未公開マスがマーカーで埋まる「全マス旗封鎖」は即引き分けが優先) |
通常探索または地雷設置フェーズで、候補マスと自分のマーカー解除による回復候補がともに 0 個の場合 |
これ以上有効な行動を行えないため、即座に引き分けとして対戦を終了 |
| CPUの手番中・ポップアップ表示中・対戦終了後のプレイヤー盤面入力 | 盤面入力を無効化し、すべてのクリック/タップ要求を遮断して誤操作を防止 |
| CPUの行動途中にメニューを開いた場合、または再スタートを実行した場合 | メニュー表示中はCPUの行動タイマーを一時停止し、再スタート確定時は進行中だった旧CPUタイマーを完全に破棄して新規セッションを開始 |
| 高速な連続タップ(連打)入力 | 入力ごとに変化後の現在フェーズを基準として毎回検証を行い、連打によって次フェーズの操作まで意図せず実行されてしまう現象を防止 |
| ブラウザ保存領域の制限、またはバージョン確認通信の失敗 | プライベートブラウズ等で保存領域が使えない環境や一時的な通信エラー発生時にも、ゲームを中断させず現在のセッション内でそのままプレイを継続 |
| オフラインおよび更新確認の失敗 | navigator.onLine === false の場合は版確認・HTML更新リクエストを省略。版確認は重複実行を防ぎ、通信失敗・5秒のタイムアウト・不正な版データが発生しても読込済みのゲームを維持。HTML更新はリクエスト開始後、成否にかかわらず同一ページでは再試行せず、オフラインで省略した場合は最初の online イベントで再試行。オフラインでの新規アクセスを保証する機能ではない |
| キャッシュ更新の適用範囲 | 新コードの実行が前提であり、既存の旧版タブ・訪問履歴・BFCacheを遡及的に削除しない。オフライン・タイムアウト・更新完了前の移動・CDNの旧版応答・ブラウザのキャッシュ非保存方針・別の index.html キャッシュキー等では最新HTMLの再利用を保証しない |
オンライン専用:例外処理
| 状況 | 処理 |
|---|---|
| 不正手番・フェーズ・座標・自己地雷・マーカー | 拒否し盤面・行動回数維持。サーバー期限は進む |
| 応答待ちの連打 | クライアントは追加命令を止め、サーバーはID/順序を検証。同じ再送も二重適用しない |
| 旧対戦・旧ターン・古い状態の要求 | 拒否し最新snapshotへ同期。旧要求を再戦盤面へ適用しない |
| 締切と探索要求の競合 | 経過した締切を先に精算。締切前に成功処理した行動は保持 |
| 背景化 / モーダル | 一時停止しない。復帰時にサーバー時刻・最新状態を再同期 |
| 同一座席へ別タブ接続 | 最後の認証接続が操作権を持つ。旧接続は置換を案内して停止 |
| 保存禁止 / トークン消失 | 復帰は保証不可。コードでトークンを再発行・認証迂回しない |
| 通信障害 / 無料サーバー上限 | 接続エラー・再試行を表示。有料へ自動移行しない。進行中の切断ルールは適用継続 |
| 待機室・結果の保持期限 | ルーム/結果参照終了。新ルームが必要 |
| 偽造・未認証・異常メッセージ | 視界送信前に認証し、拒否・切断。他人の地雷/座席は取得不可 |
オンラインのルールモーダルは入力のみを遮断し、CPUの「ポップアップ中停止」と区別する。実際の通信切断とサーバー検出時刻には差が生じ得る。
結果閲覧と記録の境界処理
- 盤面と結果の切替は新しい行動として扱わず、記録・マーカー回数を変更しない。
- 終了盤面は入力を拒否し、CPUの予約行動とオンラインの終了済み期限を再有効化しない。
- 再接続は同じサーバー結果を復元する。新しい対戦IDを受信したら前の閲覧状態を初期化し、結果の混同を防ぐ。
- CPU再スタートは言語のみ維持し、新しい盤面・難易度・記録で開始する。未開始の待機ルームに任意の記録を付与しない。
13. バランス設計と検証基準
難易度と情報の公平性
難易度は、安全確定候補の代わりに不確実候補を選ぶ確率で区別する。実戦の勝率ではない。CPUの判断情報は公開数字・自分の地雷・公開マス・マーカーに限定し、オンラインではサーバーがプレイヤーごとの視界を分離する。
| 設計要素 | 基準 | 意図と確認観点 |
|---|---|---|
| CPU難易度 | かんたん40% / ふつう20% / むずかしい5% | 判断の不確実性を調整。確定地雷しかない場合の共通ルールと区別 |
| 地雷設置 | 全体ランダム60% / 直近探索の周囲25% / 公開マス周囲15% | 配置の多様性。戦略候補がなければ全体候補へ代替 |
| CPUマーカー | ターン終了時に危険候補へ70%の確率 | 任意の防御。全候補が確定地雷なら可能なマーカー設置を優先する別ルールを適用 |
| 情報の公平性 | 隠れた相手地雷をCPU判断に渡さない | 非公開情報へのアクセス量を難易度差にしない |
| 膠着処理 | CPUは共通進行不能で引き分け / オンラインは実際の安全マス枯渇で得点 | 各モードの終了基準を一貫して適用 |
| 結果の体験 | 最終盤面の反復閲覧と固定記録 | 自分の選択と成果を確認する時間を提供。実測効果とは断定しない |
主な境界状況と期待挙動
| 状況 | 期待挙動 |
|---|---|
| 地雷重複と数字変化 | 相手地雷と重複しても周囲数は占有マスあたり1。探索色を維持 |
| マーカー解除と候補枯渇 | 回数は戻らない。CPUの回復機会とオンラインの即時得点終了を区別 |
| CPUに確定地雷のみ残る | 可能なマーカー設置を優先。設置不可なら実際に探索 |
| オンライン時間切れ | 完了行動を維持し、未完了を省略して交代。オープニングは有効行動を自動実行 |
| KO・得点・切断終了の競合 | 先に確定した結果を維持。得点は続行不能にのみ適用 |
| 結果と盤面の反復切替 | 入力無効と同じ記録を維持。新しい対戦でのみ初期化 |
| 接続回復と再戦 | サーバー記録を復元し、新規対戦と過去結果を分離 |
| 言語と画面サイズの変化 | ルール・記録値を維持し、翻訳・ボタン・図のアクセシビリティを確保 |
自動対戦シミュレーションはルールの終了性と推論の一貫性を確認する補助手段であり、人間のプレイテストや実際の勝率の根拠として扱わない。設計上の境界条件と、ユーザー体験の効果検証を区別する。
14. 実装範囲と技術構成
| 区分 | 公開ゲームv0.3.1-webの実装範囲 |
|---|---|
| CPU対戦 | 8×8・初期/通常重複・数字更新・マーカー・共通引き分け・3難易度・4言語を維持 |
| オンライン1対1 | コード・招待・Ready・初戦抽選・20秒・初期自動行動・続行不能時のマーカー得点 |
| 接続・結果 | 2分復帰・投了・切断敗北/双方無効・再戦先後手交代・24時間保持・終了時全公開 |
| UI | 別オンラインページ・タイマー・接続・再戦・4言語。CPUメニューの従来機能維持 |
| 対象外 | 会員アカウント・ランキング・永続戦績・行動再生型リプレイ |
現在の対戦の最終盤面とターン数・所要時間を提供する。永続戦績や行動再生機能とは区別する。
技術付録:判定責任と状態同期
オンラインはサーバー権威型で判定する。ブラウザの表示や要求だけで実地雷・手番・勝敗を確定しない。
| 層 | 役割 / 公開範囲 |
|---|---|
| GitHub Pages | HTML/CSS/ES Modules配布、入力・残秒・自分の視界を表示。実地雷判定の権限なし |
| Cloudflare Worker | リクエスト入口・許可Origin・ルーム接続・基本的な異常要求防御 |
| Durable Objects(SQLite) | ルーム別の実盤面・手番・締切・結果・座席・要求履歴を直列処理・保存。別オブジェクトで入口頻度制限 |
| WebSocket | 認証後に個別snapshot。重複・旧要求を防ぎ、再接続で最新状態を復元 |
図を拡大、またはスクロールして確認できます。
サーバーが実地雷を保持し、クライアントごとに公開情報を分離する。トークン原文ではなくハッシュを保存する。招待はルーム識別子であり認証手段ではない。保存・復元構造はプラットフォーム障害や無制限同時接続を保証するものではない。