Questo gioco king-of-the-hill è un gioco di strategia in cui devi lanciare un pallone d'acqua ed evitare di essere schizzato dall'acqua. L'obiettivo è ottenere il maggior numero di punti. Ti verrà data una mappa del campo e la posizione del pallone d'acqua. Puoi restituire che vuoi colpire il pallone d'acqua (se sei abbastanza vicino) in una certa direzione o che vuoi muoverti in una determinata direzione.
In particolare: il pallone ad acqua inizierà a (0, 0)
30 unità di altezza e scenderà. Se la mongolfiera colpisce il terreno, un giocatore verrà scelto casualmente per perdere 4 punti, con più peso dato a coloro che sono più vicini alla mongolfiera. Inoltre, il giocatore che ha colpito per ultimo il pallone guadagna 3 punti. Pertanto, se colpisci il palloncino verso il basso, molto probabilmente perderai 1 punto.
Scriverai una classe che si estende Player
. È necessario implementare il costruttore. Il costruttore sarà simile a:
public Player1() {
super(/* Some numbers */ 3, 3, 4)
}
Questi numeri sono double
s. Il primo numero rappresenta la velocità del giocatore, il secondo rappresenta la forza e il terzo rappresenta la fortuna. I numeri devono aggiungere fino a 10 o meno e nessun numero può essere inferiore o uguale a zero.
In secondo luogo, è necessario implementare il move
metodo. Questo è un move
metodo di esempio :
@Override
protected Action move(Map<Player, Point2D> map, Balloon b) {
// Get my own location
Point2D myself = map.get(this);
// If I'm close enough to the balloon
// then hit the balloon
if (myself.distanceSq(b.getLocation()) <= 16) {
double d = (r.nextDouble() - 0.5) * 3;
// Random y direction, z direction is what's left
return new Hit(0, d, Math.sqrt(9 - d*d));
} else {
double diffX = b.getLocation().getX() - myself.getX(),
diffY = b.getLocation().getY() - myself.getY();
// Move towards the balloon
return new Movement(Math.signum(diffX)*3/Math.sqrt(2), Math.signum(diffY)*3/Math.sqrt(2));
}
}
Ci sono un certo numero di cose importanti qui. Innanzitutto, nota che il campo è passato come a Map<Player, Point2D>
. Il campo è infinito - non c'è limite a quanto lontano puoi andare. Non è un array bidimensionale o qualcosa del genere. Inoltre, questo significa che avrai coordinate non intere come posizione. Questo va perfettamente bene.
Un'altra conseguenza è che i giocatori e il pallone possono sovrapporsi. In effetti, due giocatori possono trovarsi esattamente nella stessa posizione!
Il palloncino ha una certa velocità e direzione. In generale, cadrà ad una velocità di 3 unità / passo. Si muove anche in una x
direzione e y
direzione. Quando ritorni a Hit
, passi le direzioni x, ye z che stai spingendo il palloncino. Non si può colpire un palloncino cui altezza è maggiore di 10 o la cui distanza da voi (solo su due dimensioni) è maggiore di 4. Inoltre, se è vero che x^2 + y^2 + z^2 > s^2
dove s
è la vostra forza, e x
, y
e z
sono le direzioni che ti ha colpito , la tua azione viene scartata. La forza del tuo colpo è amplificata da un numero casuale compreso tra 0
e luck
(il che significa che potrebbe diminuire se la fortuna è bassa).
Allo stesso modo, puoi restituire a Movement
con le coordinate x
e y
che stai spostando (nota che non puoi saltare in aria). Se x^2 + y^2 > s^2
dov'è la s
tua velocità, la tua azione viene scartata.
Se la mongolfiera colpisce il terreno, viene scelto un giocatore a caso, con più peso dato a quelli più vicini, ma meno peso a quelli che hanno più fortuna. Il giocatore scelto perde 4 punti.
Controller: https://github.com/prakol16/water-balloon-wars/tree/master
Il gioco dura 1000 passi. Alla fine, ci sarà un file chiamato log.out
. Copia e incolla i dati in questo violino per visualizzare il gioco: https://jsfiddle.net/prankol57/s2x776dt/embedded/result/
O ancora meglio, visualizzalo in 3D: http://www.brianmacintosh.com/waterballoonwars (grazie a BMac)
Vince il giocatore con il maggior numero di punteggi dopo 100 (può essere maggiore, ma non inferiore).
Se si desidera inviare una soluzione, è possibile leggere i dettagli specifici su https://github.com/prakol16/water-balloon-wars/tree/master .
Modifica 3/8 :
Questi sono i punteggi finali per ora (1000 iterazioni, senza includere i giocatori 1 e 2). Se modifichi il tuo post, puoi commentare e rifarò i punteggi:
{
class players.BackAndForth=-75.343,
class players.Hydrophobe=-0.800,
class players.KeepAway=-53.064,
class players.Weakling=39.432,
class players.Repeller=21.238,
class players.LuckyLoser=-30.055,
class players.AngryPenguin=-49.310
}
Il vincitore è stato Weakling
con una media di 39 punti. Il 2 ° posto è stato Repeller
con 21 punti.
speed
e strength
nel costruttore Player.
dirX
, dirY
e dirZ
(amplificati dalla tua fortuna) vengono semplicemente aggiunti alle velocità del pallone. Se più persone lo colpiscono (un po 'improbabile), il giocatore che potrebbe ottenere tre punti viene deciso per fortuna (vedi dettagli specifici)