Skip to content

springOK-github/swiss-draw

Repository files navigation

スイス方式トーナメント マッチングシステム

スイス方式トーナメントを管理するためのシステムです。主にポケモンカードバトル大会を対象としています。Google Apps Script (GAS) とスプレッドシートで動作します。

スイス方式とは

スイス方式は、トーナメント形式の一種で、以下の特徴があります:

  • ラウンド制: 全プレイヤーが同時に対戦を開始・終了
  • 同勝点マッチング: 同じ勝点のプレイヤー同士がマッチング
  • 再戦回避: 過去に対戦した相手とは原則として再戦しない
  • 脱落なし: 敗北してもトーナメントから脱落せず、全ラウンドに参加可能
  • 公平性: 全員がほぼ同じ試合数を消化し、実力が近い相手と対戦

機能一覧

  • プレイヤー管理

    • プレイヤー登録処理
    • プレイヤードロップアウト処理
  • ラウンド管理

    • 新ラウンドの自動開始
    • ラウンド進行状況の確認
  • スイス方式マッチング(再戦回避機能付き)

    • 同勝点プレイヤー同士の自動マッチング
    • 過去対戦相手の自動記録と再戦回避
    • 奇数人数時の自動バイ(不戦勝)処理
    • 卓番号の自動管理
  • 対戦結果記録

    • 勝敗・引き分けの記録
    • 勝点の自動計算(勝利3点、引分0点(両者敗北扱い)、敗北0点、バイ3点)
    • 統計の自動更新(勝点・勝数・敗数・試合数)
    • 対戦履歴の完全な記録
  • 順位表示

    • 勝点順の順位表を表示
    • タイブレーク(勝率、自己勝率、試合数)による順位付け
    • 勝率(対戦相手の平均勝率)を自動計算

プレイヤーの状態

  1. 参加中: トーナメントに参加中
  2. 終了: ドロップアウト済み(以降のラウンドに参加しない)

主な特徴

スイス方式マッチング

  • 勝点が同じプレイヤー同士を優先的にマッチング
  • 勝点内での順位: 勝率 → 自己勝率 → 試合数(少ない方が優先)
  • 過去に対戦した相手との再戦を自動回避

勝率(Opponent Match Win Percentage)

  • 対戦相手の平均勝率を計算してタイブレークに使用
  • MTGルールに準拠し、最低勝率は33.3%として計算
  • 同じ勝点のプレイヤー間で、より強い相手と戦ったプレイヤーが上位

バイ(不戦勝)システム

  • 奇数人数の場合、勝点が最も低いプレイヤーに自動的にバイを付与
  • バイを受けたプレイヤーは勝利扱いで3勝点を獲得

ラウンド管理

  • 全プレイヤーが同時に対戦を開始
  • すべての対戦結果が記録されるまで次のラウンドは開始できない
  • 現在のラウンド状況をリアルタイムで確認可能

卓番号管理

  • 各ラウンドで卓番号を自動割り当て
  • 最大卓数は1~200の範囲で動的に設定可能(デフォルト: 50卓)
  • 物理的な卓配置と連動した運用が可能

自動統計管理

  • 勝点・勝数・敗数・試合数を自動集計
  • 引き分けは両者敗北扱い(0勝点)
  • 対戦履歴の完全な記録(ラウンド番号付き)
  • 最終対戦日時の自動更新

セットアップ方法

1. スプレッドシートの準備

  1. Google スプレッドシートを新規作成
  2. 「拡張機能」→「Apps Script」を開く
  3. 本リポジトリの各 .js ファイルをスクリプトエディタにコピー
    • constants.js
    • shared.js
    • app.js
    • player-domain.js
    • match-domain.js
    • round-manager.js
    • test-utils.js(テスト用)
  4. スクリプトを保存してスプレッドシートに戻る
  5. ページを更新すると「� スイス方式トーナメント」メニューが表示される

2. 初期設定

  1. カスタムメニューから「⚙️ シートの初期設定」を実行
  2. 3つのシート(プレイヤー、対戦履歴、現在のラウンド)が自動作成される

3. トーナメント運用の流れ

準備フェーズ

  1. カスタムメニューから「➕ プレイヤーを追加する」でプレイヤーを登録
  2. すべてのプレイヤーの登録が完了するまで繰り返す

各ラウンドの流れ

  1. ラウンド開始: 「🎯 新ラウンド開始」を実行
    • 同勝点のプレイヤー同士が自動的にマッチング
    • 奇数人数の場合、1名にバイが付与される
  2. 対戦実施: プレイヤーが対戦を行う
  3. 結果記録: 「✅ 対戦結果の記録」で各対戦の結果を記録
    • 勝敗または引き分けを選択
    • プレイヤーIDを入力
  4. 次ラウンド: すべての対戦結果が記録されたら、次のラウンドを開始

トーナメント終了

  1. 「🏅 順位表示」で最終順位を確認

使用方法

カスタムメニュー操作

トーナメント管理

  • 🎯 新ラウンド開始: 新しいラウンドを開始してマッチングを実行
  • 🏅 順位表示: 現在の勝点順の順位表を表示(上位20名)

プレイヤー管理

  • ➕ プレイヤーを追加する: 新しいプレイヤーを追加(自動ID採番)
  • ❌ プレイヤーをドロップアウトさせる: 大会から退出(以降のラウンドに参加しない)

対戦結果

  • ✅ 対戦結果の記録: 対戦結果を記録(勝敗または引き分け)
  • 🔧 対戦結果の修正: 誤って記録した対戦結果を修正

システム設定

  • ⚙️ 最大卓数の設定: 使用する卓の最大数を設定(1~200、デフォルト: 50)

データシート構成

システムは以下の3つのシートを使用します:

  1. プレイヤーシート: プレイヤーマスタ

    • プレイヤーID、名前、勝点、勝数、敗数、試合数、勝率、参加状況、最終対戦日時
  2. 対戦履歴シート: 完了した対戦の記録

    • 対戦ID、ラウンド、日時、卓番号、両プレイヤーID・名前、勝者名、結果
  3. 現在のラウンドシート: 現在進行中のラウンドの対戦

    • ラウンド、卓番号、両プレイヤーID・名前、結果

よくある質問

Q. 最大何人まで管理できますか?

A. プレイヤー数に制限はありませんが、50人以上での運用を想定した最適化を行っています。

Q. 何ラウンド実施すればよいですか?

A. 一般的にスイス方式では、参加人数に応じて以下のラウンド数が推奨されます:

  • 8人以下: 3~4ラウンド
  • 9~16人: 4~5ラウンド
  • 17~32人: 5~6ラウンド
  • 33~64人: 6~7ラウンド

Q. 奇数人数の場合はどうなりますか?

A. 自動的に勝点が最も低いプレイヤーに「バイ(不戦勝)」が付与され、3勝点を獲得します。

Q. 勝率とは何ですか?

A. 対戦相手の平均勝率です。同じ勝点の場合、より強い相手と戦ったプレイヤーが上位になります。MTGのルールに準拠し、最低勝率は33.3%として計算されます。

Q. 引き分けの扱いは?

A. 引き分けは両者敗北と同じ扱いで、両プレイヤーとも0勝点となります。敗数にカウントされます。

Q. 卓数の上限は変更できますか?

A. カスタムメニューの「⚙️ 最大卓数の設定」から1~200の範囲で設定可能です(デフォルト: 50卓)。

Q. 対戦結果を間違えて記録してしまいました

A. カスタムメニューの「🔧 対戦結果の修正」から修正できます。対戦IDを指定して新しい勝者を入力してください。

Q. トーナメントの途中でプレイヤーが増えた場合は?

A. 次のラウンド開始前であれば「➕ プレイヤーを追加する」で追加できます。追加プレイヤーは次のラウンドから参加します。

Q. 開発に参加したいのですが

A. .github/copilot-instructions.md に開発者向けの詳細情報があります。Pull Requestも歓迎します!

作者

springOK

ライセンス

MIT License

Copyright (c) 2025 springOK

このソフトウェアはMITライセンスの下で公開されています。 詳細は LICENSE ファイルを参照してください。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •