Acadèmia PyLeague

Aprèn a
programar
un equip que guanya.

Aquí no es tracta de saber-te tot el motor de memòria. Es tracta d'entendre les tres decisions que pren el teu equip i afinar-les fins que guanyin partits. Et portem de la plantilla que ja juga a la teva primera victòria contra un rival de veritat.

Per on començar

La teva ruta, de zero a competir

No cal escriure un equip des de zero. El camí curt és aquest: parteixes d'una cosa que ja funciona i la vas millorant amb mètode, mesurant cada canvi.

01

Copia la plantilla

Ja juga de manera competitiva: passa, dispara a les cantonades i pressiona pilotes soltes. És el teu punt de partida, no un full en blanc.

$ cp -r equipos/plantilla equipos/miequipo
02

Canvia una cosa

Toca només la tàctica, o només el jugador. Un únic canvi cada vegada és l'única manera de saber què millora i què empitjora.

03

Mesura amb sparring

Enfronta'l a diversos rivals en moltes llavors i mira el win-rate i les estadístiques. Així no t'enganya un partit amb sort.

$ python sparring.py --team equipos/miequipo
04

Competeix

Puja el teu equip a la plataforma i mesura't en lligues amb rànquing ELO, o munta la teva. El codi parla.

$ python league.py
El que programes

Tres capes, del lent al ràpid

El teu equip decideix en tres nivells. La idea clau: la IA (si la fas servir) fixa el pla a ritme lent, i una capa determinista i ràpida l'executa cada instant. Així un model mai no ha de decidir 20 vegades per segon. Personalitza només la capa que t'interessi; la resta la reutilitzes.

10

Entrenador

Llegeix el marcador i el rellotge i fixa la mentalitat: atacar, equilibri o defensar. Decideix poques vegades, però marca el to. CoachBrain.decide(ctx)

ritmelent
6

Tàctica

Col·loca l'equip al camp amb quatre comandaments: alçada de línia, amplada, pressió i banda. Gairebé sempre és aquí on es guanya o es perd. TeamStrategy.plan(ctx)

ritmemitjà
9

Jugador

Decideix cada instant: moure's, passar, xutar, esprintar. Ràpid i reactiu, un per jugador. PlayerBrain.decide(view)

cadatick

Vols el detall de què rep i què retorna cada capa? És a la Guia del participant.

La tàctica, sense matemàtiques

El teu equip, en quatre comandaments

No calcules posicions a mà. Tries quatre valors i el motor els tradueix a on es col·loca cada jugador. Els pots fixar o fer que canviïn segons el partit (una tàctica reactiva).

line_height · 0.0 → 1.0

Alçada de línia

Com d'avançat juga el teu equip. Baixa = bloc replegat i segur; alta = pressiones a dalt però deixes espai a l'esquena.

width · 0.0 → 1.0

Amplada

Com d'obert està l'equip. Compacte tapa el centre; obert busca les bandes i estira el rival.

pressing · 0.0 → 1.0

Pressió

Amb quina intensitat vas a per la pilota. Compte: avui pressionar molt cansa i no sempre roba (llegeix el «meta» més avall).

focus · left / center / right

Banda d'atac

Per on carregues el joc. Centre per defecte; carrega'l a una banda per atacar per allà o per buscar el desmarcatge del teu davanter.

Codi de veritat

La teva primera tàctica, en sis línies

Una tàctica fixa és un diccionari de comandaments. Una de reactiva és una funció que els recalcula mirant el partit. Totes dues, curtes.

mi_tactica.py
# 1) Tàctica FIXA: un estil constant
from aicup import TacticalStrategy

mi_estilo = TacticalStrategy("Mi estilo", {
    "line_height": 0.35,   # replegat, segur
    "width":       0.45,   # compacte pel centre
    "pressing":    0.30,   # espero, no em llanço
})

# 2) Tàctica REACTIVA: canvia segons el partit
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}   # em replego
    return {"line_height": 0.74, "pressing": 0.50}       # en robar, em llanço

mi_contra = TacticalStrategy("Mi contraataque", mandos)

El comandament que no posis fa servir el seu valor per defecte. La galeria completa (tiki-taka, catenaccio, gegenpressing…) i com escriure el jugador i l'entrenador són a les docs de tàctiques.

Receptes per guanyar

El que de veritat marca la diferència

Consells que surten de jugar centenars de partits. No són màgia: són hàbits que separen un equip que competeix d'un que fa bulto.

Mesura, no endevinis

Un partit menteix: la sort pesa. Fes servir el sparring amb moltes llavors i decideix pel win-rate, no per sensacions.

Explota el meta

Avui un bloc compacte i replegat rendeix més que la pressió alta. Comença sòlid al darrere i creix des d'aquí.

Gestiona l'estamina

Esprintar i xutar fort cansa. Guarda sprints per al tram final i pressiona el rival que ja està fos.

Fes servir el pla de l'equip

Al teu jugador, llegeix view.plan: et diu on col·locar-te i a qui li toca anar a la pilota. No improvisis tot sol.

Dispara a les cantonades

Xutar al centre és regalar la pilota al porter. Apunta als pals i ajusta la potència: no tot és màxima força.

Puja de capa amb ordre

Primer la tàctica (comandaments), després el jugador (passades, xuts, marcatges) i per últim l'entrenador (quan arriscar).

Errors típics

I com evitar-los

Gairebé tothom ensopega aquí al començar. Veure'ls venir t'estalvia mitja dotzena de derrotes ximples.

Pressió a tope sempre

Esperes robar i només aconsegueixes cansar-te. Solució: baixa el pressing i pressiona per moments, no tota l'estona.

Porter passejant

Un GK lluny de la seva porteria són gols regalats. Solució: que no s'allunyi; mira com el tracta el jugador d'exemple.

Línia massa alta sense cobertura

Puges tothom i et cacen a l'esquena. Solució: puja migcampistes i davanters més que la defensa, o baixa la línia.

Sobreajustar a un rival

Guanyes a un i perds amb tots. Solució: mesura contra diversos rivals i diverses llavors abans de donar res per bo.

Xutar a màxima potència

Força sempre = et quedes sense estamina i dispares pitjor al final. Solució: dosifica el kick_power.

Codi que peta

El motor et protegeix, però un jugador que falla es queda quiet i perds ticks. Solució: prova en local i revisa el visor.

El «meta» del motor

Descobrir què guanya és part del joc

Un detall honest del motor d'avui: les tàctiques compactes i defensives rendeixen millor que la pressió alta. El motiu és que, ara com ara, pressionar no «roba» la pilota de manera efectiva —la possessió és enganxosa i treure-la exigeix acostar-se amb molt marge—. Per això estils tipus catenaccio solen anar molt bé i el gegenpressing pateix.

Les tàctiques d'exemple són punts de partida, no solucions òptimes. El motor evolucionarà (el roadmap contempla que la pressió arribi a robar pilota), així que el meta també canviarà. Trobar la combinació que guanya ara és el teu avantatge competitiu.

Abans de competir

El teu equip està a punt?

Repassa aquesta llista ràpida. Si ho marques tot, ja el pots pujar i mesurar-te amb la resta.

  • Juga sense fallar: aguanta un partit sencer sense excepcions ni jugadors parats.
  • Guanya a la plantilla: li treu partits al rival de referència en diverses llavors.
  • Té una idea clara: saps per què es col·loca com es col·loca.
  • Aprofita l'estamina: no arriba fos al final ni malgasta sprints.
  • Dispara amb criteri: apunta a les cantonades i dosifica la potència.
  • Mesurat amb dades: l'has passat pel sparring, no només per un partit.
Ara et toca a tu

Ja saps com.
Que decideixi el codi.

Crea el teu compte i competeix en línia en minuts, o clona'l i treballa en local. En mode bàsic funciona sense API ni configuració.