Bola de Drac 2015

Jordi Petit Enric Rodríguez Salvador Roura

Regles del joc

Aquest joc s’inspira en la mítica sèrie de dibuixos animats Bola de Drac (vegeu per exemple http://ca.wikipedia.org/wiki/Bola_de_Drac).

Cada jugador controla un personatge anomenat goku, el protagonista de la sèrie. Els gokus es mouen en un tauler rectangular que conté un laberint. L’objectiu d’un goku és agafar boles de drac i seguidament dipositar-les en alguna de les càpsules Hoi Poi que hi ha repartides per tauler. Cada goku només pot dur a sobre una bola de drac com a molt en cada moment. El nombre de boles de drac que hi ha al tauler és sempre el mateix, comptant tant les que duu algun goku com les que encara estan lliures. Quan una bola de drac és dipositada en alguna càpsula Hoi Poi, immediatament n’apareix una altra en una casella aleatòria del tauler.

Els gokus poden combatre entre ells, i d’aquesta manera prendre la bola de drac que duu un altre. Els combats tenen lloc quan dos gokus coincideixen en una casella, i el seu resultat depèn de la força de cadascun dels combatents. Una altra manera d’impedir que un altre goku dipositi la bola de drac que duu és llançant un raig Kame Hame que l’elimini.

A part de boles de drac i càpsules Hoi Poi, a les caselles del tauler poden haver-hi també mongetes màgiques, que permeten recuperar la força perduda, i núvols Kínton, sobre els quals els gokus es mouen el doble de ràpid i sense cansar-se.

Quan el joc acaba, és a dir, s’han realitzat totes les rondes, el jugador que ha dipositat més boles de drac guanya la partida. En cas d’empat, guanya aquell que conservi més força.

A continuació es donen les regles del joc amb més detall:

El Visor

A continuació es mostra una captura de pantalla del visor on apareixen pràcticament tots els elements del joc:

image

Programació

Al problema de Bola de Drac 2015 del Jutge, juntament a aquest enunciat, hi trobareu el material necessari per programar el joc en C++. En concret, hi teniu tots els fitxers de suport, exemples de jugadors, i un visor de partides amb els quals podreu desenvolupar i provar els vostres jugadors.

Necessitareu g++, make i un navegador recent (Firefox, Chrome, Chromium, preferiblement un d’aquests dos últims). El codi del joc és portable a qualsevol sistema Linux, Mac o Windows, suposant que hi instal·leu les eines adequades. Els ordinadors de les aules de laboratori ja tenen aquest software instal·lat. Si voleu treballar amb altres màquines:

Com fer un jugador

Per fer un jugador, copieu primer el fitxer AINull.cc a un fitxer AIXXX.cc, on XXX és un identificador de la vostra elecció. Trieu un identificador no ofensiu, que no hagi estat triat ja per un altre estudiant, i compost per, com a molt, 12 lletres, dígits i caràcters de subratllat; per exemple, SonGoku.

A continuació, al fitxer AISonGoku.cc (o com l’hagueu anomenat) que acabeu de crear, heu de canviar la línia 11 per posar-hi el nom del vostre jugador (a l’exemple, @#define PLAYER_NAME SonGoku@).

Finalment, heu d’implementar el vostre jugador tot completant la classe PLAYER_NAME que hereta les operacions de consulta del tauler (classe @Board@) i de creació d’accions (classe @Action@) a través de la classe base @Player@. El mètode @play()@ es crida a cada ronda per transmetre-us l’estat actual del tauler i recollir les accions del vostre jugador. A la vostra classe hi podeu afegir camps (variables) per recordar l’estat d’una ronda a l’altra, mètodes (funcions) per descompondre el vostre programa, etc.

Fixeu-vos que la vostra classe ha de contenir una funció anomenada @factory()@ que no heu de modificar, i que després de la classe també hi ha una crida per registrar el vostre jugador que tampoc heu de modificar.

Podeu prendre com a referència el jugador AIDemo.cc que s’adjunta amb el material de la pràctica.

Com executar i veure partides localment

  1. Editant el Makefile tal com allà s’indica, podeu incorporar el fitxer AIDummy.o a la compilació per a poder usar el jugador Dummy a les vostres partides. Podeu fer el mateix amb els fitxers .o d’altres jugadors.

  2. Executeu make per compilar tots els fitxers que calguin i crear l’executable Game.

  3. Per disputar una partida amb els paràmetres de joc default.cnf, executeu una comanda com ara

    ./Game Null SonGoku Demo Demo < default.cnf > default.res

    Aquí, el primer jugador serà Null, el segon SonGoku, i els altres dos Demo. El resultat de la partida quedarà a default.res.

  4. Visualitzeu la partida obrint el visor (viewer.html) amb el vostre navegador i carregueu el fitxer default.res.

Podeu obtenir la llista completa de paràmetres del programa Game fent ./Game --help. En particular, ./Game --list us llistarà els noms dels jugadors inclosos.

Si us cal, podeu netejar el vostre directori de fitxers executables i fitxers objectes amb la comanda make clean.

Restriccions

Els codis dels vostres jugadors han de complir certes condicions:

Estructures de dades

Per saber com consultar el tauler, feu un cop d’ull al fitxer @Board.hh@ (en particular, pareu atenció a les operacions públiques de la classe @Board@). Per saber com sol·licitar les accions, mireu el fitxer @Action.hh@ (en particular, fixeu-vos en les operacions públiques de la classe @Action@). Tingueu en compte que només podeu utilitzar les operacions públiques d’aquestes classes. També us pot resultar útil mirar-vos els fitxers @Player.hh@, @PosDir.hh@ i @AIDemo.cc@.

Consells

Us recomanem seguir els següents consells: