Swiss Draw Manager
子ども大会用スイスドロー方式組み合わせ自動生成システム
概要
このアプリケーションは、子ども大会をスイスドロー方式で運営するためのツールです。
Windows デスクトップアプリケーションとして動作し、組み合わせ生成から結果管理まで一貫してサポートします。
ダウンロード
Microsoft Store からダウンロードできます: https://apps.microsoft.com/detail/9PPHQSM98RZ8
システム要件: Windows 10/11、.NET 8.0 Runtime(アプリのインストール時に自動的にインストールされます)
主な機能
1. 参加者管理
- 参加者の追加・削除
- 名前、学校、学年の管理
- 「次回戦不参加」チェックボックスで一時離脱管理
- 番号は自動採番(1から連番)
2. 対戦組み合わせ生成
- 同点グループ化マッチング(v1.3.0.0~)
- 優先順位: 同点グループ内で学年近い相手を優先、点差最小の相手を選択
- BYE選出: 経験者優先 > BYE回数少 > ポイント低 > 学年低 > ランダム
- 前回戦未入力時の警告(続行可能)
3. ポイントシステム
- 回戦別ポイント(回戦数に応じて自動調整):
- 1回戦: 1点
- 2回戦: 2, 1点
- 3回戦: 3, 4, 2点
- 4回戦: 6, 7, 5, 3点
- 5回戦: 11, 12, 13, 9, 6点
- 6回戦: 20, 22, 25, 19, 18, 11点
- 7回戦: 39, 40, 42, 45, 38, 31, 20点
- 8回戦: 78, 79, 81, 84, 77, 70, 59, 39点
- 同じ勝数でも獲得回戦によって異なるポイントになる設計(順位決定の公平性向上)
4. データ永続化
- 結果入力時に自動保存(
%USERPROFILE%\Documents\SwissDrawManager\autosave.json)
- 起動時に前回のデータを自動読込
- 手動保存/名前を付けて保存
- JSON形式(テキストエディタで手動編集可能)
5. 順位表エクスポート
- TSV形式で全対戦結果を出力
- Excelで開ける形式
制限事項
対応範囲: 1〜8回戦の大会
- 新規大会作成時に回戦数を設定可能
- 各回戦のポイント配分は回戦数に応じて自動調整
- 9回戦以上の大会には対応していません
使い方
大会開始前
- 参加者を追加
- 「参加者追加」ボタンをクリック
- 名前、学校、学年を入力
- 番号は自動的に割り振られる
- データ保存(オプション)
- 「名前を付けて保存」でバックアップ可能
- 自動保存されるので通常は不要
大会中
- 回戦生成
- 「次回戦生成」ボタンをクリック
- 対戦表が自動的に表示される
- 結果入力
- 各対戦の「勝ち」ボタンをクリック
- BYEは自動的に勝ち扱い
- 入力後、即座にポイント計算・順位更新
- 途中入退場
- 一時離脱: 「次回戦不参加」チェックボックスをオンにする → 次回戦のマッチング対象外(不戦敗として記録)
- 復帰: チェックボックスをオフにする → 次回戦から復帰
- 途中入場: 「参加者追加」で新規追加(過去の回戦は不戦敗として記録、0ポイントからスタート)
大会終了後
- 順位表エクスポート
- 「順位表TSVエクスポート」ボタンをクリック
- Excelで開いて印刷・配布
マッチングアルゴリズム
設計思想: シンプルな単一指標マッチング
本アプリの最大の特徴は、マッチングに「得点(ポイント)」という単一の指標のみを使用することです。
従来のスイスドローシステムでよく使われる複雑な指標:
- Opponent Match Win Percentage(対戦相手の勝率)
- Game Win Percentage(ゲーム勝率)
- Opponent Game Win Percentage(対戦相手のゲーム勝率)
これらをあえて導入せず、得点のみでマッチングを決定します。
メリット
- マッチングロジックが透明で、参加者(特に子ども)にも理解しやすい
- 運営者が説明しやすく、保護者からの質問にも明確に答えられる
- 計算がシンプルで、手動検証も可能
デメリット
- 対戦相手の強さを反映した精密な順位付けができない
- 同点の場合のタイブレーカーが単純(勝数→番号順)
- 国際的な大会で使われる高度なスイスドローシステムとは異なる
子ども将棋大会では「わかりやすさ」と「透明性」を優先し、複雑な指標よりもシンプルな運営を重視しています。
同点グループ化マッチング(v1.3.0.0~)
v1.3.0.0から、同点グループ化マッチングを採用しています。
- 同点グループ化: 同じ得点のプレイヤーをグループ化
- 学年降順ソート: グループ内を学年降順で並べ、隣接ペアを優先マッチング
- overflow処理: 奇数グループから最低学年を次の奇数グループへ移動
- バックトラッキング: 制約を満たす完全マッチングを保証
基本方針
- 過去未対戦: 過去に対戦したことがない相手のみを選択
- 同点グループ内: 同じ得点のプレイヤー同士を優先マッチング
- 学年が近い: グループ内で学年が近い相手を優先
効果
- 同点プレイヤー同士が優先的にマッチング
- 学年が近い相手との対戦が増える
BYE選出
奇数人数の場合、以下の優先順位でBYEを決定:
- 経験者(過去に1試合以上対戦済み)を優先
- BYE回数が少ない
- 累計ポイントが低い
- 学年が低い
- ランダム
データ構造
対戦履歴
HashSet<int> で管理(人数制限なし)
- 過去対戦済みの相手番号を記録
- O(1) で対戦履歴を検索可能
保存形式
- JSON形式(UTF-8)
- 手動編集可能(緊急時の修正に対応)
トラブルシューティング
アプリが起動しない
- .NET 8.0 Runtime がインストールされているか確認
%USERPROFILE%\Documents\SwissDrawManager\autosave.json が破損している場合は削除
データが消えた
%USERPROFILE%\Documents\SwissDrawManager\ に自動保存ファイルがある
- 「開く」でバックアップファイルを読み込み
マッチングがおかしい
- JSON ファイルをテキストエディタで開いて確認
- 対戦履歴 (
OpponentHistory) を手動で修正可能
システム要件
- OS: Windows 10 バージョン 1809 以降、または Windows 11
- 必要なソフトウェア: .NET 8.0 Runtime(アプリのインストール時に自動的にインストールされます)
- 対応アーキテクチャ: x64, x86
- ディスク容量: 約50MB
今後の予定
配点のカスタマイズ
今後のバージョンでは、各回戦のポイント配分をユーザーが設定できるようにする計画があります。
- 大会の特性に応じてポイント配分をカスタマイズ可能
- より多様な大会運営スタイルに対応
変更履歴
2025-11-23 - v1.3.0.0 マッチングアルゴリズム改善
- 同点グループ化マッチングの導入
- 同じ得点のプレイヤーをグループ化し、グループ内で学年が近い相手を優先マッチング
- 奇数グループからは最低学年を次の奇数グループへ移動(overflow処理)
- より公平なマッチングを実現(同点・同学年の相手と対戦しやすい)
- データ読み込みの修正
- 大会データ読み込み時にMaxRoundsとTournamentNameが正しく復元されるよう修正
2025-11-20 - v1.2.0.0 可変回戦数・大会名入力・対局未設定チェック
- 可変回戦数対応(新機能)
- 1〜8回戦まで選択可能に(従来は5回戦固定)
- 新規大会作成時に回戦数を設定
- 各回戦のポイント配分も自動調整
- 大会名入力機能(新機能)
- メイン画面で大会名を常時編集可能
- 保存ファイル名に大会名を反映
- 空欄時はプレースホルダー「(クリックして編集)」を表示
- ツールチップで長い大会名を確認可能
- 対局未設定プレイヤーチェック(新機能)
- 次回戦生成時に対局が割り当てられていないプレイヤーを検出
- 警告メッセージで該当プレイヤーを一覧表示
- 未入力結果と未設定プレイヤーの両方をチェック
2025-11-18 - v1.1.0.0 手動対局編集機能追加とUI/UX大幅改善
- 手動対局編集機能の追加(新機能)
- EditPairingDialog(対局編集ダイアログ)を新規実装
- 対局管理画面に編集・削除・リセットボタンを追加
- 「対局を手動追加」ボタンを追加
- 通常対局・不戦勝・不戦敗の3種類に対応
- 過去の対戦履歴を自動フィルタリング(重複対戦防止)
- 自動生成された組み合わせを手動で修正可能に
- 手動対局編集ダイアログの機能強化
- 参加者2セレクターの初期表示対応
- 不戦勝・不戦敗時の表示改善(「不戦勝」「不戦敗」と表示)
- 組み合わせ不可時のエラーメッセージ表示
- 視認性の大幅向上
- 行選択時の背景色を濃く変更(より見やすく)
- すべての表で選択行がヘッダー無し部分まで着色
- 対局管理表の改善
- テキスト列の垂直中央揃えを修正
- 編集/削除/リセットボタン列を均等配分し、文字の潰れを解消
- 不戦勝・不戦敗時のリセットボタンを非表示化(不要な操作を防止)
- 用語の統一: すべての表のヘッダーを「名前」→「参加者名」に統一
- レイアウトの最適化
- 対局生成UIを1段レイアウトに変更(よりコンパクトに)
- 参加者管理の削除ボタンを右端に配置
- 「この回戦以降のすべての対局を削除」にラベル変更(より明確に)
2025-11-11 - v1.0.2.0 パフォーマンス最適化・アルゴリズム改善
- 重み付き貪欲法によるマッチング: ペナルティとリトライ機構で重複対戦を回避
- 重複対戦の回避: 過去対戦相手にペナルティを設定し、リトライで回避を試行
- パフォーマンス向上: ボタン応答時間を150-500ms → 60-120msに短縮(約73%高速化)
- 非同期自動保存: UIスレッドをブロックせず、スムーズな操作を実現
2025-11-08 - v1.0.1.0 UI改善アップデート
- 左揃え改善: 参加者名・対戦相手名を左揃えに変更(読みやすさ向上)
- スクロール速度修正: DataGridのマウスホイールスクロールを5行/ホイールに統一
- 5回戦制限: 最大5回戦までに制限(誤操作防止)
- テストデータ: 64人・128人オプションを削除(8人・16人・32人のみ)
ライセンス
このソフトウェアは無料で利用できます。子ども将棋大会の運営を支援するために開発されました。
最終更新日: 2025-11-23
ページトップへ戻る