チームをゼロから書く必要はありません。近道はこうです:すでに動くものから始め、変更ごとに計測しながら、方法論をもって改良していきます。
すでに競争力のあるプレーをします:パスを出し、隅を狙ってシュートし、こぼれ球にプレスをかけます。白紙ではなく、あなたの出発点です。
戦術だけ、または選手だけをいじります。一度に一つだけ変えることが、何が良くなり何が悪くなるかを知る唯一の方法です。
多くのシードで複数の相手と対戦させ、勝率と統計を見ます。そうすれば運のいい 1 試合にだまされません。
チームをプラットフォームにアップして ELO ランキングのあるリーグで腕を競うか、自分でリーグを開こう。コードが語ります。
チームは 3 つのレベルで判断します。要点はこうです:AI(使う場合)はゆっくりとしたペースでプランを決め、速く決定論的な層がそれを毎瞬実行します。こうすればモデルが毎秒 20 回も判断する必要はありません。興味のある層だけをカスタマイズし、残りは再利用しましょう。
スコアと時計を読み、方針を決めます:攻撃・均衡・守備。判断の回数は少ないですが、基調を決めます。CoachBrain.decide(ctx)
4 つのつまみでチームをピッチに配置します:ライン高、幅、プレス、サイド。勝敗はたいていここで決まります。TeamStrategy.plan(ctx)
毎瞬判断します:移動、パス、シュート、スプリント。速く反応的で、選手 1 人につき 1 つ。PlayerBrain.decide(view)
各層が何を受け取り何を返すかの詳細が知りたいですか?参加者ガイドにあります。
位置を手で計算することはありません。4 つの値を選ぶと、エンジンがそれを各選手の配置に変換します。値は固定することも、試合に応じて変化させること(リアクティブな戦術)もできます。
チームがどれだけ前でプレーするか。低い=引いて守る安全なブロック、高い=前からプレスをかけるが背後にスペースを残す。
チームがどれだけ広がるか。コンパクトは中央を締め、ワイドはサイドを使って相手を引き伸ばす。
どれだけの強度でボールを奪いに行くか。注意:今のところ強いプレスは消耗するうえ、必ずしも奪えません(下の「メタ」を読んでください)。
どこに攻撃の重心を置くか。デフォルトは中央。片方のサイドに寄せれば、そこから攻めたりフォワードの飛び出しを狙えます。
固定戦術はつまみの辞書です。リアクティブ戦術は試合を見ながらそれを再計算する関数です。どちらも短くて済みます。
# 1) 固定戦術:一貫したスタイル
from aicup import TacticalStrategy
mi_estilo = TacticalStrategy("Mi estilo", {
"line_height": 0.35, # 引いて守る、安全に
"width": 0.45, # 中央でコンパクトに
"pressing": 0.30, # 待つ、飛び込まない
})
# 2) リアクティブ戦術:試合に応じて変わる
from aicup.tactics import progress, possession
def mandos(ctx):
defendiendo = possession(ctx) == "theirs" or progress(ctx) < 0.45
if defendiendo:
return {"line_height": 0.30, "pressing": 0.35} # 引いて守る
return {"line_height": 0.74, "pressing": 0.50} # 奪ったら前へ出る
mi_contra = TacticalStrategy("Mi contraataque", mandos)
設定しなかったつまみはデフォルト値を使います。完全なギャラリー(tiki-taka、catenaccio、gegenpressing…)と、選手や監督の書き方は戦術ドキュメントにあります。
何百試合もプレーして得たコツです。魔法ではありません。競争するチームと、ただ数合わせのチームを分ける習慣です。
1 試合は嘘をつきます:運が大きく効きます。多くのシードでスパーリングを使い、感覚ではなく勝率で判断しましょう。
今のところコンパクトで引いたブロックのほうが、高い位置のプレスより効果的です。後ろを堅くしてから、そこから伸ばしましょう。
スプリントや強いシュートは消耗します。スプリントは終盤に取っておき、すでに疲れ切った相手にプレスをかけましょう。
選手のコードで view.plan を読みましょう:どこに位置取り、誰がボールに行くべきかを教えてくれます。一人だけで場当たり的に動かないこと。
中央に打つのはボールをキーパーに献上するようなもの。ポストを狙い、力を加減しましょう:常に全力とは限りません。
まず戦術(つまみ)、次に選手(パス・シュート・マーク)、最後に監督(いつ勝負に出るか)。
始めたてのころ、ほぼ誰もがここでつまずきます。先回りして見抜けば、つまらない敗戦を半ダースは減らせます。
奪えると思っても、結局疲れるだけです。対処: pressing を下げ、ずっとではなく場面を選んでプレスしましょう。
ゴールから離れた GK は失点の献上です。対処: 離れさせないこと。サンプルの選手がどう扱っているか見ましょう。
全員を上げると背後を突かれます。対処: ディフェンスより中盤とフォワードを上げるか、ラインを下げましょう。
一人には勝てても、全員には負けます。対処: 何かを良しとする前に、複数の相手と複数のシードで計測しましょう。
常に全力=スタミナが尽き、終盤のシュートが悪くなります。対処: kick_power を加減しましょう。
エンジンは守ってくれますが、エラーを起こした選手は動かなくなり、ティックを失います。対処: ローカルでテストし、ビューアで確認しましょう。
今のエンジンについての正直な事実:コンパクトで守備的な戦術のほうが、高い位置のプレスより効果的です。理由は、今のところプレスがボールを効果的に「奪えない」からです——ボールの保持は粘着的で、奪うにはかなりの余裕をもって近づく必要があります。そのため catenaccio のようなスタイルはたいていうまくいき、gegenpressing は苦戦します。
サンプルの戦術は出発点であり、最適解ではありません。エンジンは進化します(ロードマップにはプレスがボールを奪えるようになることが含まれています)から、メタも変わります。今勝てる組み合わせを見つけることが、あなたの競争上の強みです。
このクイックリストを確認しましょう。すべてにチェックが付けば、アップして他の人と腕を競えます。
アカウントを作れば数分でオンライン参戦、あるいはクローンしてローカルで開発。基本モードなら API も設定も不要で動きます。