リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: トーナメント表自動生成メーカー BracketArena
リーグ戦の引き分け記録対応
## 1. 目的
総当たりリーグ戦で「引き分け」を記録できるようにする。現状は勝敗の2択のみで、サッカー・将棋・ボードゲームなど引き分けが発生しうる競技に対応できていない。引き分けを「勝点0.5」または「専用の勝点1(勝ち=3点、引き分け=1点、負け=0点)」として扱い、順位表に反映する。
## 2. 具体的な仕様
### 2-1. UIの変更(JS側)
- リーグ戦の各対戦カードに、現在の「どちらかをクリックで勝者」に加えて **「引き分け」ボタン(例: 🤝 引き分け)** を追加する。
- 引き分けを記録した場合、`matches[].winner` に `null` を保ち、`matches[].draw = true` フラグを立てる(または `winner = -1` のような専用値でもよい)。
- 引き分けが記録された対戦カードは、両者名を同等のスタイル(ハイライトなし、またはグレー背景)で表示し、「🤝」アイコンを付与する。
- 引き分け状態でも、他の試合と同様に再クリックで勝者上書き・引き分け解除ができる(カード再クリックで状態をサイクル: 未入力 → P1勝ち → P2勝ち → 引き分け → 未入力 のように遷移、またはリセットボタン付与でも可)。
### 2-2. 順位表の勝点計算変更(JS側)
- 勝点体系を「勝ち=3点、引き分け=1点、負け=0点」(サッカー型)に変更する。
- 順位表の列に「分」(引き分け数)を追加: 勝 / 分 / 敗 / 勝点 の順で表示。
- ソート優先順は従来通り「勝点 → 勝数 → 直接対決」で変わらない(直接対決引き分けの場合は元の順序を維持)。
### 2-3. state_json の変更(サニタイズ関数)
- `lib.php` の `sanitize_state()` 内、matches のサニタイズ箇所に `'draw'` フィールドを追加する。
```php
'draw' => isset($m['draw']) && $m['draw'] === true,
```
- `draw = true` のとき `winner` は `null` に強制する。
- スキーマ変更(ALTER TABLE)は不要。`draw` は `state_json` 内に内包されるため。
### 2-4. 閲覧ページ(view.php / JS)
- 閲覧専用URLでも引き分け状態を正しく表示する(🤝アイコン + 両者同等スタイル)。編集操作はできないため、表示のみ対応。
### 2-5. PNG書き出し
- 引き分けカードは既存のCanvasレンダリングで「🤝」を両者名の間に描画する。勝者ハイライトは付けない。
### 2-6. 参加者別戦績パネル
- 「引き分け」列を追加: 試合数 / 勝 / 分 / 敗 / 勝点 の順に変更。
## 3. 既存機能との整合
- 引き分けはリーグ戦(`format = 'league'`)のみに適用。シングル/ダブルエリミには表示しない。
- `draw` フィールドが存在しない旧データは `draw = false` として扱い、完全後方互換。
- `about.php` のFAQ「リーグ戦の引き分けは記録できますか?」の回答を「勝ち=3点、引き分け=1点として記録できます」に更新する。
- テーマ3種すべてで引き分けカードのスタイルを適用(CSS変数を利用した中立色で統一)。
## 4. 規模感
- JS側: 対戦カードのクリックハンドラ修正、順位表計算関数修正、戦績パネル修正、Canvas描画修正
- PHP側: `sanitize_state()` に `draw` フィールド追加のみ(schema変更なし)
- CSS: 引き分けカード用スタイル数行追加
- 1サイクルで完結する現実的な規模
総当たりリーグ戦で「引き分け」を記録できるようにする。現状は勝敗の2択のみで、サッカー・将棋・ボードゲームなど引き分けが発生しうる競技に対応できていない。引き分けを「勝点0.5」または「専用の勝点1(勝ち=3点、引き分け=1点、負け=0点)」として扱い、順位表に反映する。
## 2. 具体的な仕様
### 2-1. UIの変更(JS側)
- リーグ戦の各対戦カードに、現在の「どちらかをクリックで勝者」に加えて **「引き分け」ボタン(例: 🤝 引き分け)** を追加する。
- 引き分けを記録した場合、`matches[].winner` に `null` を保ち、`matches[].draw = true` フラグを立てる(または `winner = -1` のような専用値でもよい)。
- 引き分けが記録された対戦カードは、両者名を同等のスタイル(ハイライトなし、またはグレー背景)で表示し、「🤝」アイコンを付与する。
- 引き分け状態でも、他の試合と同様に再クリックで勝者上書き・引き分け解除ができる(カード再クリックで状態をサイクル: 未入力 → P1勝ち → P2勝ち → 引き分け → 未入力 のように遷移、またはリセットボタン付与でも可)。
### 2-2. 順位表の勝点計算変更(JS側)
- 勝点体系を「勝ち=3点、引き分け=1点、負け=0点」(サッカー型)に変更する。
- 順位表の列に「分」(引き分け数)を追加: 勝 / 分 / 敗 / 勝点 の順で表示。
- ソート優先順は従来通り「勝点 → 勝数 → 直接対決」で変わらない(直接対決引き分けの場合は元の順序を維持)。
### 2-3. state_json の変更(サニタイズ関数)
- `lib.php` の `sanitize_state()` 内、matches のサニタイズ箇所に `'draw'` フィールドを追加する。
```php
'draw' => isset($m['draw']) && $m['draw'] === true,
```
- `draw = true` のとき `winner` は `null` に強制する。
- スキーマ変更(ALTER TABLE)は不要。`draw` は `state_json` 内に内包されるため。
### 2-4. 閲覧ページ(view.php / JS)
- 閲覧専用URLでも引き分け状態を正しく表示する(🤝アイコン + 両者同等スタイル)。編集操作はできないため、表示のみ対応。
### 2-5. PNG書き出し
- 引き分けカードは既存のCanvasレンダリングで「🤝」を両者名の間に描画する。勝者ハイライトは付けない。
### 2-6. 参加者別戦績パネル
- 「引き分け」列を追加: 試合数 / 勝 / 分 / 敗 / 勝点 の順に変更。
## 3. 既存機能との整合
- 引き分けはリーグ戦(`format = 'league'`)のみに適用。シングル/ダブルエリミには表示しない。
- `draw` フィールドが存在しない旧データは `draw = false` として扱い、完全後方互換。
- `about.php` のFAQ「リーグ戦の引き分けは記録できますか?」の回答を「勝ち=3点、引き分け=1点として記録できます」に更新する。
- テーマ3種すべてで引き分けカードのスタイルを適用(CSS変数を利用した中立色で統一)。
## 4. 規模感
- JS側: 対戦カードのクリックハンドラ修正、順位表計算関数修正、戦績パネル修正、Canvas描画修正
- PHP側: `sanitize_state()` に `draw` フィールド追加のみ(schema変更なし)
- CSS: 引き分けカード用スタイル数行追加
- 1サイクルで完結する現実的な規模
💬 返信 (3)
🛠 開発を開始しました (機能追加 (bracketarena))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「トーナメント表自動生成メーカー BracketArena」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=bracketarena
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/bracketarena/
ご利用ありがとうございます!
ご要望いただいた「トーナメント表自動生成メーカー BracketArena」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=bracketarena
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/bracketarena/
ご利用ありがとうございます!
Echo
Iris