マガジン

相手が切断した終わり方:オンライン対局の中断の扱い

遊びを見つける

執筆にClaudeを使用しています。

池と花、木々が静かに配置された、ゆとりある小さな庭。
記事のテーマをもとに制作したAI生成イラスト。

オンライン対局の途中で、相手の石が置かれなくなった場面を考えてみます。画面には自分の手番を終えた盤面が残っていて、相手が考えているのか、通信が切れたのか、見分けがつきません。しばらく待つべきか、閉じてよいのか、どこにも書かれていなければ、遊ぶ側は判断の材料を持てません。 この記事の問いは「相手が切断したとき、対局はどう終わるのか」です。ただし答えを先に述べることはしません。確認すべきは二つです。一つは再接続を待つ画面が、何を見せて何を待っているかです。もう一つは、その対局が終わったかどうかを誰が、どの時点で決めるかです。この二つは別の仕組みで、画面が待っていても判定は終わっていないことがあり、画面が閉じても判定は残ることがあります。 ここでは、アソバースのオンライン対戦で、読者が自分で切断を起こして記録し、集計する手順を示します。結果の数値は書きません。手元で記録を取れば、答えが出る形にします。

この記事の目次
  1. 「切断」の終わり方を先に分けておく
  2. 準備するもの
  3. 切断を4種類つくって記録する
  4. 結果の読み方:待つ画面と終了判定を分けて見る
  5. 集計の単位
  6. 起こりやすい誤り
  7. 作る人が持ち帰る観点
  8. 次の行動

「切断」の終わり方を先に分けておく

アソバースのオンライン対戦は「潮目のオセロ」と「灯りのチェス」の2作品だけです。確認済みアカウントで部屋を作り、リンクで友達を1人招待します。手番・合法手・勝敗はサーバーで確認されます。再接続、投了、対戦履歴があり、部屋は24時間、部屋と対戦履歴は作成から7日後に削除対象になります。潮目のオセロでは、再読み込みで同じ部屋へ復帰できます。

ここから、中断の終わり方を次の4つに分けて考えられます。

  1. 復帰して続く:再接続や再読み込みで同じ対局に戻る。
  2. 投了で終わる:切断した側、または残った側が自分から終わらせる。
  3. 期限で消える:部屋が24時間で、履歴が7日で削除対象になる。
  4. それ以外:相手が戻らないまま放置された場合の扱い。

1〜3は、上の確認済みの機能から読み取れます。4は、切断から何秒・何分で何が起こるのか、切断した側の負けとして記録されるのか、といった細部が確認済み事項にありません。そのためこの記事では推測で埋めず、「作品を開いて、現在の案内で確かめる」項目として扱います。以降の手順は、この4を実際に観察して埋めるためのものです。

準備するもの

必要なものは次のとおりです。

  • 確認済みアカウントを持つ2人分の環境(友達に頼むのが確実です)。1人で2つのアカウントを使う場合は、利用案内で扱いを確認してください。
  • 別々の端末か、別々のブラウザ。同じブラウザの2つのタブでは、片方の切断の影響が混ざりやすくなります。
  • ストップウォッチ(スマートフォンので十分です)。
  • 記録用の表(次の節)。紙でも表計算でも構いません。
  • 対象は「潮目のオセロ」と「灯りのチェス」の両方。2作品で同じ形になるかも比較項目です。

ヒントと一手戻すは、潮目のオセロではひとり対局のみの機能です。オンライン対局では使えないため、盤面をやり直して試験を整える手は使えません。1回の切断試験には1局が必要だと考えておきます。

切断を4種類つくって記録する

切断のやり方を揃えないと、結果を比べられません。次の4種類を、作品ごとに各3回ずつ行うと、集計に足る量になります。1回は「1局の中で1回切断を起こしてから、結末まで観察すること」を指します。

  • A 再読み込み:切断する側がページを再読み込みし、すぐ同じ部屋に戻る。
  • B タブを閉じる:切断する側がタブを閉じ、一定時間を置いてから、招待リンクまたは履歴から戻る。待つ時間は「30秒」「3分」のように、自分で決めて固定します。
  • C 通信を切る:切断する側が機内モードなどで通信を切り、一定時間後に戻す。
  • D 投了:どちらかが投了する。切断ではありませんが、「終わり」の基準点として比べます。

切断を起こすタイミングも固定します。自分の手番の直前、相手の手番の最中、局の序盤・終盤の4通りに散らすと、「手番の位置で扱いが変わるか」も見えますが、まずは「相手の手番の最中」だけに絞り、変数を増やさないほうが読みやすくなります。

1回の切断ごとに記録すること

1回の切断を1行として、次の項目を書き留めます。

  • 作品、記録の仕方:オセロ/チェス
  • 切断の種類、記録の仕方:A/B/C/D
  • 切断した側の手番、記録の仕方:黒(先手)/白、チェスなら側
  • 切断から復帰までの秒数、記録の仕方:ストップウォッチ。復帰しない場合は観察を打ち切った時点
  • 残った側の画面、記録の仕方:表示された文言を、そのまま書き写す
  • 切断した側の復帰後の画面、記録の仕方:同上
  • 盤面の一致、記録の仕方:両者の盤面が同じか。オセロは石の数と最後に置かれた位置、チェスは棋譜
  • 手番の一致、記録の仕方:次に打つ側が両画面で同じか
  • 結末、記録の仕方:続行/終了(勝敗あり)/終了(勝敗なし)/不明
  • 履歴、記録の仕方:対戦履歴にその局が残っているか、どう表示されるか

チェスは取った駒と全棋譜の表示があるので、棋譜の比較が使えます。ただしオンライン対局で同じ表示が出るかは、作品を開いて確かめる部分です。表示がなければ、駒の配置を言葉で書き留めておき、復帰後と比べます。

画面の文言は要約せず、そのまま写してください。「待機中」と「相手が切断しました」では、見せている情報がまったく違うからです。

結果の読み方:待つ画面と終了判定を分けて見る

記録が集まったら、行ごとに2つの問いを立てます。

問い1:待つ画面は、何を見せていたか。残った側の画面について、次の3点があるかを見ます。

  • 相手が切断している(または応答がない)ことが分かるか。
  • 待つ状態にあることが分かるか。単に画面が止まっているだけではないか。
  • 待つのをやめて自分で終わらせる手段(投了など)が、その画面から届く位置にあるか。

3点とも満たす画面なら、遊ぶ側は「待つ」「終わらせる」を自分で選べます。1点目がなければ、通信不良と相手の長考が区別できません。3点目がなければ、待ち続けるしかなくなります。

問い2:終了を決めたのは誰か。手番・合法手・勝敗はサーバーで確認される、というのが確認済みの範囲です。つまり、切断した側の端末が閉じても、対局の状態はサーバー側に残るはずです。この点は盤面の一致で確かめられます。復帰後の盤面と手番が、残った側と一致していれば、状態は端末ではなくサーバーが持っていたと読めます。一致しない行があれば、そこが調べる価値のある場所です。

2つの問いの組み合わせで、行を分類できます。

  • 切断が分かる、結末:復帰して続行、読み方:想定どおりの復帰。盤面の一致を確認する
  • 切断が分かる、結末:投了で終了、読み方:待つ側が終わらせられる設計。終了の理由の表示を確かめる
  • 分からない、結末:復帰して続行、読み方:復帰はできるが、待つ側は状況を知らなかった
  • 分からない、結末:不明のまま、読み方:最も確認が必要。時間を延ばして観察を続ける

「結末」が「終了(勝敗なし)」の行があれば、履歴にどう残るかを見ます。勝敗のない終わり方は、集計や振り返りの面では扱いにくくなるためです。

集計の単位

集計の単位は「1回の切断」です。1局に複数回切断した場合は、その回数分の行になります。作品×切断の種類で並べ、各セルに「続行」「終了」「不明」の件数を数えます。各セルは3件程度なので、割合ではなく件数で読みます。

記録が表計算に入っているなら、次のような小さなスクリプトで集計できます。ブラウザの開発者コンソールに貼り付けて動かせる最小構成です。

js
// rows: 1回の切断=1行。自分の記録に置き換えてください。
const rows = [
  { game: "othello", type: "A", result: "続行" },
  { game: "othello", type: "B", result: "不明" },
  { game: "chess",   type: "A", result: "続行" },
  // ...記録した分だけ追加
];

const tally = {};
for (const r of rows) {
  const key = `${r.game}/${r.type}`;
  tally[key] ??= {};
  tally[key][r.result] = (tally[key][r.result] ?? 0) + 1;
}
console.table(tally);

出力された表で、同じ種類の切断なのに作品間で結末が違うセルがあれば、2作品の扱いの違いを調べる手がかりになります。件数が少ないので、断定せず「この条件ではこう見えた」という程度にとどめます。

起こりやすい誤り

片方の画面しか見ない。 切断した側だけを見ていると、残った側が何を見せられていたかが分かりません。必ず2人で、両方の画面を同時に書き留めます。

意図しない切断が混ざる。 スマートフォンの画面ロック、ブラウザの省電力、使っていないタブの自動停止などで、通信が静かに途切れることがあります。試験中は画面を点けたままにし、記録に「意図した切断」と「意図しない切断」を分けて書いておきます。

待ち時間を決めずに観察する。 「しばらく」では比べられません。30秒、3分など、あらかじめ決めた時間で復帰させます。長く放置する観察は別枠の1回として扱います。

部屋の期限を見落とす。 部屋は24時間、部屋と対戦履歴は作成から7日後に削除対象です。日をまたぐ観察をすると、切断の扱いではなく期限による消滅を見ていることになります。長時間の観察は、この期限と切り分けて記録してください。

ログイン状態の違い。 復帰の際にログインが切れていると、中断の扱いではなく認証の問題に見えます。復帰前に、どのアカウントで入っているかを確認しておきます。

勝敗の有無を推測で書く。 画面に勝敗が出なかったのに、「切断した側の負け」と書き込むのは誤りです。画面と履歴に出ていた文言だけを根拠にします。

作る人が持ち帰る観点

アソバースでは、投稿作品向けの共通対戦APIは未提供です。投稿作品の「遊び方・最大参加人数」は任意の作者申告で、共通対戦を有効にするものではありません。そのため、自作で対戦風の遊びを作る場合は、この記事の記録表を「自作の中断の設計チェック」として読み替えるのが現実的です。

見るのは同じ2点です。待つ画面は、中断を伝えているか。終わりは、誰がどの条件で決めるのか。たとえば同じ画面で交代して遊ぶ形式なら、「相手が離席した」状態に対して、一時停止や途中終了の手段を用意しておくかどうかが、同じ問いになります。

次の行動

友達と2人で、潮目のオセロから始めます。「相手の手番の最中に、再読み込みで切断する」を3回行い、残った側の画面の文言と、復帰後の盤面の一致を記録してください。そのあと同じ手順を灯りのチェスで行い、2作品の行を並べて比べます。切断後の待ち時間や勝敗の扱いなど、記録から読み取れない点は、現在の案内で確認します。