eスポーツのダブルエリミネーション表を作成
順位順のチーム一覧から、各ラウンドを手作業で描かずに完全なダブルエリミネーション構造を作成できます。入力順をシード順位として扱い、枠数を次の2の累乗まで拡張し、必要なbyeを割り当て、勝者側と敗者側を参照で結びます。後続の各枠には、どの試合の勝者または敗者が入るかが明記されます。さらに、敗者側の代表が最初の決勝に勝った場合に必要となるリセット決勝も含まれます。結果は常に同じで、トーナメント管理、配信画面、参加登録、開催前の確認にそのままご利用いただけます。
無料で実行
シード一覧とbyeをご準備ください
チームは最上位シードから最下位シードの順に入力してください。最初の名前が第1シード、次が第2シードとなり、順位が無作為に並べ替えられることはありません。各名前には表示可能な文字が必要で、大文字と小文字を区別せず一意でなければなりません。同じ名前では後の結果を正しく識別できないためです。ダブルエリミネーションは2の累乗の枠で表すのが適切です。たとえば6チームは8枠になり、8チームなら変更されません。空き枠は架空の対戦相手ではなく、明示的なbyeオブジェクトになります。標準的な配置により上位シード同士は可能な限り後まで離れます。byeと組み合わされたチームは試合をせずに進みますが、識別子と後続参照を安定させるため初戦の枠は残ります。参加数が端数になった場合や直前の辞退にも便利です。
勝者側と敗者側の参照をご確認ください
出力ではwinners_bracketとlosers_bracketが番号付きラウンドに分かれます。初戦にはシード済みチームまたはbyeが入り、後続試合には結果依存のsourceオブジェクトが入ります。kindは勝者か敗者か、matchは参照元の試合、slotは新しい組み合わせの位置を示します。勝者側で敗れたチームは段階的に敗者側へ移動し、その合間の統合ラウンドで残存チームが絞られます。この流れにより、競技上2敗した時点で初めて敗退となります。W2M1やL3M2のような試合IDは常に同じです。システムではこのIDに結果を保存し、試合確定後に参照を解決して、一覧、通常のブラケット、配信グラフィックとして表示できます。この構造は進行経路のみを示し、勝者の予測や架空のスコア生成は行いません。
決勝を処理してシステムへ連携できます
grand_finalには最初の優勝決定戦と条件付きリセット試合があります。GF1では無敗の勝者側代表と敗者側の勝ち残りが対戦します。無敗側が勝てば、相手は通算2敗となるため終了です。敗者側代表が勝てば両者が1敗となり、GF2で公平に優勝者を決めます。この条件を明記することで、決勝を1試合だけにしてしまう実装ミスを防げます。連携時は応答全体を大会定義として保存し、各試合IDを安定したキーとして日時、サーバー、スコア、状態を追加してください。参照元の試合が確定してからsourceを解決し、byeは大会規則に従って扱います。ネットワーク通信やチーム一覧の保存は行いません。ブラウザーでは無料で、登録や運営を自動化するAPIリクエストの基本料金は$0.002です。
活用例
オンライン予選のシードを作成
最終参加数にbyeが必要な場合でも、登録順位から連結済みの各ラウンドを作成できます。
配信用ブラケットを構築
安定した試合IDと進行元を使い、各ラウンドを手で接続せず配信画面を制御できます。
大会管理ソフトを初期化
決定的な構造を保存した後、日程、スコア、マップ、試合状態を追加できます。
よくある質問
最低何チーム必要ですか?
空でない一意のチーム名が4件以上必要で、上限は64チームです。
シードはどのように決まりますか?
入力順がシード順です。最初が第1シードとなり、標準配置で上位チームを離します。
チーム数が2の累乗でない場合はどうなりますか?
次の2の累乗まで枠を増やし、未使用枠を明示的なbyeにします。
決勝のリセットは含まれますか?
はい。敗者側代表がGF1で無敗の代表を破った場合に限りGF2を行います。
日程や勝者も決めますか?
いいえ。大会構造と進行参照のみを返し、日時、スコア、結果はお客様のシステムで管理します。
APIリクエストの料金はいくらですか?
APIリクエストの基本料金は$0.002です。ブラウザーでは無料で作成できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"teams":["Aurora","Blaze","Cyclone","Dragons","Eclipse","Falcons"]}'const res = await fetch("https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"teams": [
"Aurora",
"Blaze",
"Cyclone",
"Dragons",
"Eclipse",
"Falcons"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"teams": [
"Aurora",
"Blaze",
"Cyclone",
"Dragons",
"Eclipse",
"Falcons"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"teams":["Aurora","Blaze","Cyclone","Dragons","Eclipse","Falcons"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"teams":["Aurora","Blaze","Cyclone","Dragons","Eclipse","Falcons"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/sports/esports-bracket-seed-matchups", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"teams": [
"Aurora",
"Blaze",
"Cyclone",
"Dragons",
"Eclipse",
"Falcons"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "sports.esports_bracket_seed_matchups",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |