カードゲームのデッキ用マナカーブ計算ツール
強力なカードをそろえたデッキでも、各ターンに使える資源とコストが合わなければ安定して動きません。この計算ツールは、各行の採用枚数を反映し、デッキリストをコスト 0 から 7 以上までの分布に整理します。さらに、汎用的な基準カーブと比較して大きな差を示します。特定のゲーム、フォーマット、戦略、資源システムに一つの正解を押し付けることなく、デッキ構築の状態をすばやく診断できます。
無料で実行
カードと採用枚数を入力します
異なるカードごとに 1 行を追加し、カード名、マナコスト、採用枚数を入力してください。枚数を省略した場合は 1 枚として扱いますが、完全なデッキリストを確認する際は明示すると分かりやすくなります。マナコストには 0 以上の整数を指定します。ゲームや構築方針において実質コストを使う明確な理由がない限り、印刷されているコストをお使いください。コスト 7 以上のカードは、重いカードをデッキが十分に運用できるかという共通の検討対象になるため、一つの最上位区分にまとめます。コスト 0 は独立した区分です。土地や資源カードをコスト 0 として扱うゲームでは、それらを分布に反映したい場合だけ含めてください。呪文や行動カードだけのカーブを確認したい場合は除外します。計算ではコストに採用枚数を掛けるため、4 枚採用したカードは 1 行ではなく 4 枚として数えます。空のリストでは割合や平均値の有効な分母が得られないため、エラーになります。カード名は行の識別に使いますが計算には影響しません。同じ名前が複数行にあっても、自動的に統合または削除せず、送信された各行を個別に数えます。
分布と比較結果を読み取ります
結果には、総カード枚数、採用枚数で重み付けした平均マナコスト、そして 0、1、2、3、4、5、6、7 以上という 8 区分が表示されます。各区分にはカード枚数と、送信したデッキ全体に占める割合があります。また、汎用的な基準割合と、そこからの差を符号付きのパーセントポイントで示します。正の差はそのコストのカードが基準より多いことを、負の差は少ないことを表します。差の絶対値が 10 パーセントポイントに達すると、その区分を大きなずれとして判定します。一つでもしきい値に達すれば全体の警告が有効になり、flagged_costs で対象のコストを正確に確認できます。比較方法は意図的に明確です。基準の合計は 100 パーセントで、コスト 2 と 3 に向けて増え、その後は高コストに向けて減ります。ただし、これは診断用の目安であり、規則ではありません。低コストの攻撃型、資源加速を備えた制御型、独自の資源ルールを持つゲームでは、戦略上の妥当な理由で外れることがあります。警告はプレイ可能性を検討するきっかけとして使い、実戦テストやフォーマット知識の代わりにはしないでください。
警告を有効な調整につなげます
まず、警告された中で最も低いコスト区分から確認してください。序盤のターンに動けるかどうかが、手札の残りを使えるかどうかに影響するためです。コスト 1 と 2 の割合が基準を大きく下回る場合は、初期手札を試し、序盤に合法的な行動を取れる頻度を数えます。7 以上が多い場合は、それらに代替コスト、資源加速、または複数枚を同時に引く危険に見合う決定力があるか確認してください。過剰な区分のカードを機械的にすべて抜く必要はありません。各カードの役割を先に特定し、不可欠な役割を残しながら、代替できる効果をより適切なコストへ移します。同様に、ゲームのルールやデッキの計画が意図的に特定ターンを飛ばすなら、空の区分が欠点とは限りません。変更するたびに同じリストで再計算し、試し引きと実際の対戦で新しいカーブを検証してください。平均コストは便利な要約ですが、同じ平均でも分布が大きく異なる場合があります。そのため、各区分を主要な根拠としてご覧ください。この方法は決定的であり、同一のリストからは常に同一の結果が得られます。デッキレビュー、自動チェック、変更前後の記録にも利用できます。
活用例
初期案を確認する
詳細なテストに時間をかける前に、初期デッキに低コストの行動が十分あるか確認できます。
デッキの改訂を比較する
カード交換の前後でカーブを記録し、狙ったコスト帯が実際に変化したか確かめられます。
取り込んだリストを検査する
カード行と枚数を、デッキ構築や大会の処理で使える一貫した概要に変換できます。
よくある質問
API 呼び出しの料金はいくらですか?
API リクエスト 1 回につき $0.002 です。ブラウザー内の計算ツールは無料でご利用いただけます。
どのようなカーブが推奨されますか?
コスト 0 から 7 以上までの基準割合は、順に 3、12、20、24、18、11、7、5 パーセントです。特定ゲームの規則ではなく、汎用的な目安です。
どの時点で区分に警告が付きますか?
割合が基準から上下いずれかに 10 パーセントポイント以上離れると、その区分に警告が付きます。
コストが 7 を超えるカードはどう扱いますか?
コスト 7 以上のカードはすべて 7+ にまとめますが、正確なコストは平均値の計算に引き続き使います。
土地や資源カードを含める必要がありますか?
分布に表示したい場合だけコスト 0 として含めてください。呪文や行動だけのカーブを調べる場合は除外します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/game/card-game-deck-build-ratio \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"decklist":[{"name":"Quick Scout","mana_cost":1,"count":4},{"name":"River Adept","mana_cost":2,"count":8},{"name":"Tower Guardian","mana_cost":3,"count":10},{"name":"Sky Captain","mana_cost":4,"count":7},{"name":"Ancient Dragon","mana_cost":6,"count":2}]}'const res = await fetch("https://api.kit.forhosting.com/game/card-game-deck-build-ratio", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"decklist": [
{
"name": "Quick Scout",
"mana_cost": 1,
"count": 4
},
{
"name": "River Adept",
"mana_cost": 2,
"count": 8
},
{
"name": "Tower Guardian",
"mana_cost": 3,
"count": 10
},
{
"name": "Sky Captain",
"mana_cost": 4,
"count": 7
},
{
"name": "Ancient Dragon",
"mana_cost": 6,
"count": 2
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/card-game-deck-build-ratio",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"decklist": [
{
"name": "Quick Scout",
"mana_cost": 1,
"count": 4
},
{
"name": "River Adept",
"mana_cost": 2,
"count": 8
},
{
"name": "Tower Guardian",
"mana_cost": 3,
"count": 10
},
{
"name": "Sky Captain",
"mana_cost": 4,
"count": 7
},
{
"name": "Ancient Dragon",
"mana_cost": 6,
"count": 2
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/card-game-deck-build-ratio", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"decklist":[{"name":"Quick Scout","mana_cost":1,"count":4},{"name":"River Adept","mana_cost":2,"count":8},{"name":"Tower Guardian","mana_cost":3,"count":10},{"name":"Sky Captain","mana_cost":4,"count":7},{"name":"Ancient Dragon","mana_cost":6,"count":2}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"decklist":[{"name":"Quick Scout","mana_cost":1,"count":4},{"name":"River Adept","mana_cost":2,"count":8},{"name":"Tower Guardian","mana_cost":3,"count":10},{"name":"Sky Captain","mana_cost":4,"count":7},{"name":"Ancient Dragon","mana_cost":6,"count":2}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/card-game-deck-build-ratio", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"decklist": [
{
"name": "Quick Scout",
"mana_cost": 1,
"count": 4
},
{
"name": "River Adept",
"mana_cost": 2,
"count": 8
},
{
"name": "Tower Guardian",
"mana_cost": 3,
"count": 10
},
{
"name": "Sky Captain",
"mana_cost": 4,
"count": 7
},
{
"name": "Ancient Dragon",
"mana_cost": 6,
"count": 2
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.card_game_deck_build_ratio",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |