Amateur Evolution Soccer

L’objectiu d’aquest projecte és fer un joc de futbol que sempre ha estat una de les meves dèries durant anys. El meu objectiu és que sigui tant jugable com sigui possible, i que s’eviti el que passava en els jocs clàssics que podíem fer gols fent servir la mateixa estratègia una vegada i una altra. Per tant intentaré fer servir les tècniques de IA que pugui per aconseguir aquest objectiu i, perquè no dir-ho, perquè m’agrada provar coses noves per veure com funcionen.

L’estic fent en C++, i distribuiré projectes de Visual Studio 2003, http://www.microsoft.com/spanish/msdn/vstudio/express/VC/default.mspx perquè es pugui compilar en Windows i Kdevelop http://www.kdevelop.org/ per compilar-lo en Linux (això implica que he de fer que el codi es pugui compilar amb GNU C++ i amb VC++). Les llibreries gràfiques que faig servir són les SDL http://www.libsdl.org/ (amb SDL_Image http://www.libsdl.org/projects/SDL_image/ i SDL_gfx http://www.ferzkopp.net/Software/SDL_gfx-2.0/ ) i també faré servir per la configuració LUA http://www.lua.org/ que serà amb el que generaré els arxius de configuració i que permetran personalitzar el joc de forma senzilla.

La versió actual ja funciona en Windowseswin.jpg i Linux eslinux.jpg però també hauria de funcionar en qualsevol sistema que tingui implementació de SDL però no tinc el maquinari per provar-ho ...

Estarà en llicència GPL, però abans he de netejar el codi perquè em fa vergonya que es vegi alguna cosa força mal programada :-) (a vegades se me’n va la olla)

La base inicial de la intel·ligència artificial està basada en el gran llibre de Matt Buckland “Programming Game AI by Example” que és un dels millors que he llegit mai per entendre com funcionen aquestes coses.

Descarrega

La versió actual és funcional, els equips juguen però no hi ha cap jugador controlat per l’usuari. Això vol dir que podem veure com juguen els dos equips i prou. El control d’usuari està en desenvolupament i serà afegit segurament en la versió 0.2.

             Ubuntu: sudo apt-get install libsdl1.2 libsdl-gfx1.2 libsdl-image1.2
             Mandriva: urpmi libSDL libSDL-gfx libSDL_image 

Changelog

* Versió 0.2

  • Inicio la codificació per fer possibles les estirades dels porters
  • (25-4-2007) BUG: Descobert que la pilota no torna mai al centre del camp després de fer un gol en resolucions baixes com 320×200
  • BUG: La força sembla que no s’escala bé en resolucions baixes, i això fa que els jugadors xutin molt més fort i de més lluny que en les resolucions normals
  • Modificades les posicions dels jugadors perquè siguin independents del costat en el qual juguen. Això ja ho hauria d’haver fet d’entrada...

* Versió 0.1 (18-04-2007)

  • Començo a afegir l’estat de control de l’usuari
  • Canvis en la representació per fer que desaparegui el ‘pampallugueix’ dels jugadors. M’he limitat a guardar el canvi durant l’espera per canviar el moviment de les cames.
  • Intent de fer que siguin més agressius, he fet que provin la passada al davant per intentar fer més gols
  • S’acaben de posar els diferents paràmetres en els fitxers o es carreguen automàticament de mica en mica
  • (16-1-07) S’inicia la preparació de les estirades del porter, ja tinc les imatges i les classes, ara em falta com faig que volin per l’aire. (potser hauria de ser prou genèric com per permetre als jugadors saltar per rematar de cap)
  • Començo a afegir opcions perquè el porter es pugui estirar (dos estats ESTIRAR i CAURE) i també s’afegeix una opció el el fitxer LUA pels porters per deixar el porter a terra després d’estirar-se
  • Multiplicats els comentaris en el codi font de la porteria perquè al final no entenia res. I hi he fet alguns canvis perquè vagi millor (o això espero)
  • Inici de les proves per fer que els jugadors xutin alt (senzill, però només hi ha problemes quan es fan xuts a porta a màxima velocitat)
  • (17-3-07) Està una mica aturat el desenvolupament perquè vaig massa atrafegat, però quan tingui uns dies de festa m’hi torno a posar.
  • (12-4-07) Reescriptura total del subsistema gràfic perquè teníem problemes amb l’escalat de les imatges. L’escalat no funcionava bé perquè la imatge al ser escalada no permetia extreure amb precisió les imatges individuals. Això m’ha obligat a fer classes per gestionar les animacions, cosa que permetrà que es simplifiqui el codi i em permetrà canviar les imatges en funció de l’animació que vulguem i que el sistema gràfic estigui separat de la resta (cosa que és totalment recomanable).
  • Alguns dels problemes que s’havien arreglat, ara han tornat a aparèixer amb el nou subsistema gràfic: cal arreglar tot el que és de color blanc perquè SDL se’l menja, el temps entre imatges, i sembla que no retallo correctament.
  • Solucionats els problemes del color, de retall. Es reescriu el codi d’avançar animacions perquè a vegades semblava que s’arrosseguessin.
  • S’ha afegit en el fitxer de configuració quantes animacions té cada jugador (falta posar-hi els punts de cada animació).
  • (18-4-07) El sistema gràfic està gairebé acabat, he hagut de fer canvis en els fitxers LUA de configuració per no emplenar de massa dades els jugadors. Només em falta comprovar que funciona correctament en Windows i ja tindré la versió 0.1
  • BUG: Un problema feia que el camp i les porteries no s’escalessin bé en algunes resolucions. Al arreglar-ho he vist que el dibuix del camp té les àrees molt petitones. He hagut de reescriure part de la classe que fa servir per controlar el camp.
  • BUG: Els porters encara no estaven fent servir la classe d’animació i per tant al escalar massa encara quedaven partits.

* Versió 0.05 (06-09-2006)

  • BUG: S’hauria d’haver solucionat el problema de que algun jugador xuti la pilota quan s’ha de fer sacada de porta. Simplement he posat que la pilota està a les mans del porter. (encara ho he detectat, però rarament passa)
  • BUG: Faltava solucionar el problema de que el porter es posi a perseguir la pilota d’esquenes (en l’altra versió ho vaig fer només pels jugadors).
  • BUG: El porter a vegades es tornava boig i ignorava la pilota i se’n anava cap a mig camp. He trobat algun cas, velocitat pilota quasi 0, funció mal implementada ...
  • Afegida la possibilitat de jugar a pantalla sencera (sembla que tenim una lleugera millora en els FPS)
  • Afegida la opció de mostrar els FPS que està aconseguint el joc. (els envia a l’arxiu stdout.txt)
  • En la meva màquina:
    • En Windows vaig al voltant de 49-51 (en Release) i 43-45 (en Debug)
    • En Linux estic en 36 (no l’he provat a Pantalla sencera) o sigui que estic a prop del límit actual de 40, en Windows, i l’he superat en Linux.
  • Implementació del comportament ‘avoid_obstacles’ per intentar millorar la persecució de la pilota quan hi ha algú al mig. En aquest moment el perseguidor ja no s’enganxa a l’atacant i és més difícil fer gols...
  • Canviat el #define de la gravetat per una constant.
  • Modificacions generalitzades en el programa per poder canviar la resolució (hi ha un petit problema amb les línies vermelles quan passem a una resolució més petita, però si s’eliminen... arreglat!)
  • Quan un jugador espera la passada, si s’atura la pilota, la va a buscar.
  • Ara en debug surt un quadrat taronja per indicar que té la possessió el porter
  • Afegides més línies del funcionament del joc als logs
  • Ara es carreguen les dades dels porters en l’script LUA. El porter ara es la taula “Porter” i els jugadors són “JugadorX” on X és el número de jugador. (s’ha incrementat la distancia mínima de passada perquè perdien moltes pilotes per passades curtes)
  • Afegida estratègia de joc per intentar fer els davanters més agressius. Si no estan marcats i són a prop de la porteria contraria intentaran girar amb la pilota (He vist aconseguir algun gol gràcies a això, però encara retrassen la pilota tenint la porteria a l’abast).

* Versió 0.04 (27-08-2006)

  • S’afegeix el z-order, es fan servir les coordenades dels peus, menys de la porteria per si fan gol. He fet servir una classe Singleton amb un stl::vector per pintar només els que es veuen i dynamic_cast<> per forçar cada objecte al seu tipus. He hagut de modificar la classe base Entitat perquè em donés informació de quina classe derivada era però ha estat fàcil.
  • Intent de solventar el “flick” en posicions molt properes al límit d’angles però no ha funcionat
  • BUG: Solucionat el problema de que a vegades el jugador es posava a córrer d’esquenes, era degut a que l’angle que es passava a la funció acos() era més petit que -1 ( -1.00000000095!! )i donava error i per tant es veia la primera imatge.

* Versió 0.03 (26-08-2006)

  • Acabo d’afegir les característiques dels jugadors des de LUA. Tarda més en carregar-ho tot, però sembla que funciona bé.
  • El rendiment en Windows es força més bo.
  • Es comencen a provar formes de fer el Z-Order gràfic
  • BUG: Solucionat el problema del porter que sacava les fores des de fora del camp
  • BUG: Solucionat el problema de que els jugadors no aixecaven la mà en Linux (Gnu C++), es fa amb el __cxa_demangle (info RTTI). Sembla que és perquè la sortida de typeid(*punter).name() no està normalitzada

* Versió 0.02 (23-08-2006)

  • Comencem a definir constants des de scripts en LUA. El camp ja es carrega totalment des de l’script
  • Es soluciona el problema del porter. Quan no sabia a qui passar es quedava aturat amb la pilota a les mans
  • BUG: Es soluciona parcialment el problema amb les sacades de banda. Ara si la pilota torna a entrar al camp, també es pita la falta.
  • BUG: Es descobreix un error en la estratègia defensiva agressiva i s’arregla.

* Versió 0.01 (19-08-2006)

  • La primera versió que fa alguna cosa. Encara té molts problemes, però funciona i fa veure que juga

TO DO

La llista de coses que falten per fer és una mica llarga:

Abans de la versió 0.5

  • Estirades dels porters i salts : (0.2) Està preparat perquè l’animació funcioni sense problemes, però encara no tinc clar com fer el sistema de salt per l’aire i la presa de decisions (com decideixo quan s’ha de saltar?, integrar el salt en els Behaviors?, ...)
  • Rematades de cap (0.2) : Crec que s’ha d’aplicar la mateixa solució que amb el porter, però el sistema de decisió ha de dir quan ha de saltar el jugador i quan no
  • Jugador controlat per l’humà (0.3): Està tot preparat per tenir-lo, però encara no està activat perquè em falta alguna cosa
  • Sistema de passades per l’aire (0.4) : El sistema de decisions ha de contemplar com decideix un jugador fer un xut ras o bé un xut elevat. En aquest moment només passen rasa. Però el codi està fet perquè puguin passar enlaire, només falta saber quan ho han de fer...
  • Incrementar les estratègies d’equip (0.5): Hem de poder definir més estratègies d’equips: contraatac, ultradefensa, migcampisme, .... Millorar les actuals amb un ‘Influence mapping’ per millorar atac/defensa (”influence mapping” code) sembla que seria l’ideal
  • Millorar el jugador que dóna suport (0.5): Ara mateix no sembla que els jugadors de suport rebin mai les passades, s’hauria de canviar perquè realment això serveixi per alguna cosa. Afegir un sistema de Blackboard per millorar el suport a l’atacant (blackboard arquitecture arquitectures)
  • Fer els gràfics de llançament de fores, xuts i caigudes (...) : Això requerirà paciència, qualsevol dia m’hi haig de posar ... Perquè el codi ja està preparat perquè les animacions s’integrin fàcilment.

Abans de la versió 1.0

  • Control del temps : Això és senzill, només hem de controlar el temps de partit
  • Fer gràfics nous per no haver de fer servir els del joc : Ara els gràfics són del ‘Kick and Run’
  • Falta un editor per posicionar els jugadors abans del partit : Per ara està tot preparat perquè les posicions s’estan carregant des d’un fitxer en LUA, o sigui que l’editor només ha de generar l’script i prou. Senzill però laboriós
  • Subsistema de faltes : Cal que els jugadors puguin decidir quan és el moment de fer falta
  • Passar gràfics a OpenGL per aconseguir fer servir les característiques de les targetes gràfiques
 
start.txt · Darrera modificació: 2007/05/08 03:25 per xavier
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki