DESCRIPCIÓ DEL JOC


* Hi ha nb_players() jugadors

* Cada jugador controla un goku.

* L'objectiu d'un goku és capturar les boles de drac que es troben repartides per tauler i seguidament ficar-les en alguna de les nb_bags() bosses que hi ha.

* Cada goku només pot tenir capturada com a molt una bola de drac en cada moment.

* En tot moment de la partida hi ha nb_balls() boles de drac al tauler (comptant tant les capturades per algun goku com les que no). Quan una bola de drac és ficada en alguna bossa, immediatament n'apareix una altra.

* Els gokus poden combatre entre ells, i d'aquesta manera prendre la bola de drac capturada per 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 de poder prendre la bola de drac capturada per un altre goku és llançant un raig kame-hame.

* A cada ronda un goku pot:

  1) moure's cap a una direcció
  2) llançar un raig kame-hame cap a una direcció

  Els gokus només es poden moure en les rondes senars (les rondes estan indexades de 1 a nb_rounds()).


* Les direccions possibles són cap amunt, cap avall, cap a la dreta o cap a l'esquerra. Hi ha un tipus de casella, les roques, a on els gokus no es poden moure.

* Un raig kame-hame elimina tot goku que hi hagi en línia recta des de la posició on hi ha el goku llançador fins a la propera casella de roca, en la direcció indicada. Les boles de drac dels gokus eliminats desapareixen i tornen a aparèixer en una altra casella del tauler. Els núvols kinton dels gokus eliminats desapareixen.

* Inicialment tots els gokus es troben a nivell de força max_strength(), el màxim possible.

* Repartides pel tauler hi ha nb_beans() mongetes màgiques. Quan un goku passa per una casella que conté una mongeta màgica, la consumeix i així restitueix la seva força al valor màxim inicial max_strength(). Una vegada consumida, la mongeta màgica pot tornar a aparèixer a la mateixa casella a partir de bean_regen_time() rondes, quan no hi ha cap goku a la casella.

* Repartits pel tauler hi ha nb_kintons() núvols kinton. Quan un goku passa per una casella que conté un núvol kinton aleshores s'hi puja per poder-se moure a cada ronda, en lloc de cada dos. Passades kinton_life_time() rondes, el núvol kinton desapareix i el goku torna al seu tipus normal. 

Si en el moment de passar per la casella amb un kinton el goku ja estava enfilat en un núvol kinton, aleshores la vida del núvol (= nombre de rondes abans no desaparegui) torna al seu valor inicial kinton_life_time(). Una vegada consumit, el núvol kinton torna a aparèixer a la mateixa casella a partir de kinton_regen_time() rondes, quan no hi ha cap goku a la casella.

* Tipus de caselles:

  o ROCK    (roca):           no hi pot haver ningú.
  o EMPTY   (buida):          no conté res.
  o BAG     (bossa):          conté una bossa.
  o BALL    (bola de drac):   conté una bola de drac.
  o KINTON  (núvol kinton):   conté un núvol kinton.
  o BEAN    (mongeta màgica): conté una mongeta màgica.

* El tauler està tot rodejat de roca.
 
* Tipus de goku:

  o NORMAL:              sense bola de drac i sense kinton
  o ON_KINTON:           sobre un núvol kinton, però sense bola de drac.
  o WITH_BALL:           amb bola de drac, però sense kinton.
  o ON_KINTON_WITH_BALL: amb bola de drac i amb kinton.

* Els gokus amb status NORMAL o WITH_BALL només es poden moure en els torns senars. Els gokus amb status ON_KINTON o ON_KINTON_WITH_BALL es poden moure en tots els torns.

* Cap goku es pot moure a una casella ROCK.

* Si un goku es mou a una casella on hi ha un altre goku, aleshores té lloc un combat. Si l'altre goku encara no s'havia mogut, les seves accions són ignorades. Si en una casella ja hi té lloc un combat, cap altre goku hi pot anar, ignorant-se l'ordre de moviment si cal.

* Les accions demanades pels jugadors a cada ronda s'executen de la forma següent. En primer lloc, es determina un ordre dels jugadors aleatòriament. Després s'executen rajos kame-hame, moviments i combats, en aquest ordre. A cada ronda només es pot llançar un kame-hame, el primer en l'ordre dels jugadors. Per a la resta de jugadors l'ordre de fer un kame-hame s'ignora.

En cas que el moviment es faci a una casella on no hi ha cap altre goku:

* * => EMPTY: res

* WITH_BALL                      => BAG: ++ball_counter,  tipus = NORMAL
* ON_KINTON_WITH_BALL            => BAG: ++ball_counter,  tipus = ON_KINTON
* NORMAL,    ON_KINTON           => BAG: res

* NORMAL                         => BALL: tipus = WITH_BALL
* ON_KINTON                      => BALL: tipus = ON_KINTON_WITH_BALL
* WITH_BALL, ON_KINTON_WITH_BALL => BALL: res

* NORMAL                         => KINTON: puja al núvol kinton, la vida del núvol = kinton_life_time(), tipus = ON_KINTON
* WITH_BALL                      => KINTON: puja al núvol kinton, la vida del núvol = kinton_life_time(), tipus = ON_KINTON_WITH_BALL
* ON_KINTON, ON_KINTON_WITH_BALL => KINTON:                       la vida del núvol = kinton_life_time()

* * => BEAN: força = max_strength().

* Quan un goku es mou a una casella on ja hi ha un altre goku, ja sigui perquè aquest segon encara no s'ha mogut o bé perquè s'hi acaba de moure, té lloc un combat. En un combat entre els gokus A i B, la probabilitat que A en sigui el vencedor és (1 + strenght(A)) / (2 + strength(A) + strength(B)). El vencedor del combat es queda a la casella.  El perdedor queda eliminat. Després de goku_regen_time() rondes, el goku eliminat torna a aparèixer a la seva casella original amb el nivell res_strength() de força. La força del vencedor després del combat és max(0, strength - #STRENGTH_PENALTY_FOR_COMBAT) (o min(max_strength(), strength + #STRENGTH_BONUS_FOR_COMBAT)?).

Per provocar un combat almenys cal tenir la força combat_penalty necessària.

En cas que un dels dos tingués una bola de drac, la bola de drac se la queda el vencedor. Si tots dos tenien boles de drac, aleshores la bola de drac restant apareix en una posició (aleatòria?) del tauler.

Després d'un combat, els núvols kinton dels combatents desapareixen.

Mentre un goku està eliminat, la seva força és 0.

Per moure's a una casella on hi ha un altre goku, cal força almenys moving_penalty_() + combat_penalty()

* Les accions que realitzen els gokus poden consumir força. Aquest desgast depèn del tipus del goku i de l'acció:

  * Si no es mou o es mou en un núvol kinton: no perd força
  * Si es mou sense núvol kinton: perd #STRENGTH_PENALTY_FOR_MOVING_WITHOUT_KINTON unitats de força
  * Si es llença un kame-hame:    perd #STRENGTH_PENALTY_FOR_KAME_HAME             unitats de força
  
  El desgast és independent de si porta bola de drac o no.
  Un goku només pot realitzar una acció si té prou força. Això vol dir que quan un goku ha esgotat tota la seva força, aleshores no es pot moure!

* En acabar els #N_ROUNDS rondes de la partida, el rànking dels jugadors es calcula segons el nombre de boles de drac embossades. En cas d'empat de boles, guanya el que tingui més força.

puntuació = n_bosses_embossades * (max_strength()+1) + força

IMPLEMENTACIÓ

* Cada goku ve determinat per:
  o el seu equip (que actua com identificador);
  o la seva posició;
  o el seu tipus;
  o el nombre de boles de drac que ha embossat;
  o la seva força,
  o si el seu tipus és kinton, el nombre de rondes que queden abans que desaparegui el kinton i torni al seu tipus normal;
  o un flag booleà que indica si està viu o no;
  o si no està viu, un natural que indica el nombre de rondes que falten perquè torni a viure.

* funció put_new_dragon_ball per posar al tauler una nova bola de drac, de manera aleatòria o com convingui.

* En cas d'ordenar diverses accions a un jugador, es realitzarà la primera.

* Un goku sense prou força per moure's pot fer-ho en 1 de cada 4 rondes.
Un goku sense prou forces no pot llençar un kamehame. A cada ronda que sigui múltiple de 4 + 1, no hi ha penalització per moviment, de forma que un goku sense forces es pot moure.

Després dels combats es pren max(0, strength - penalització)


Els gokus només es regeneren al final dels torns parells.
