Skip to content

Commit 1c79cee

Browse files
committed
#16: Se establece interacción con sistema de puntaje dentro de Juego.
1 parent 0ed4aca commit 1c79cee

6 files changed

Lines changed: 75 additions & 15 deletions

File tree

src/main/java/jwarrior/juego/Juego.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,35 @@
33
import java.util.LinkedList;
44
import java.util.List;
55

6+
import jwarrior.comandos.Comando;
67
import jwarrior.juego.niveles.Nivel;
8+
import jwarrior.juego.puntuacion.Puntaje;
79
import jwarrior.piezas.unidades.Unidad;
810
import jwarrior.ui.InterfazDeUsuario;
9-
import jwarrior.comandos.Comando;
1011

1112
public class Juego {
1213

1314
private static final int CANTIDAD_MAXIMA_TURNOS = 100;
1415
private final Mapa mapa;
1516
private final Nivel nivel;
17+
private Puntaje puntaje = new Puntaje();
18+
19+
private static Juego instancia;
1620

1721
public Juego(final Nivel nivel) {
1822
this.nivel = nivel;
1923
this.mapa = new Mapa(nivel.obtenerPosiciones());
24+
instancia = this;
25+
}
26+
27+
public static Juego obtenerInstancia() {
28+
return instancia;
29+
}
30+
31+
public void notificarMuerte(final Unidad unidad) {
32+
if (unidad != this.mapa.obtenerGuerrero()) {
33+
this.puntaje.notificarMuerteEnemigo(unidad);
34+
}
2035
}
2136

2237
private void mensaje(final String mensaje) {
@@ -43,10 +58,13 @@ public void jugar() {
4358
turno++;
4459
if (turno > CANTIDAD_MAXIMA_TURNOS || this.mapa.estaTerminado()) {
4560
juegoTerminado = true;
61+
this.puntaje.notificarFinalizacionPartida(this.mapa.obtenerGuerrero());
4662
mensaje("juego terminado");
47-
// mensaje(nivel.obtenerPuntaje());
63+
mensaje("Se ha obtenido un puntaje de " + this.puntaje.obtenerPuntaje());
64+
} else {
65+
this.puntaje.notificarTurno();
66+
mensaje("");
4867
}
49-
mensaje("");
5068
}
5169
}
5270
}

src/main/java/jwarrior/juego/Mapa.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,8 @@ public String toString() {
6767
resultado += new String(new char[posiciones.size()]).replace("\0", "-");
6868
return resultado;
6969
}
70+
71+
public Unidad obtenerGuerrero() {
72+
return this.guerrero;
73+
}
7074
}
Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,40 @@
11
package jwarrior.juego.puntuacion;
22

33
import jwarrior.piezas.unidades.Unidad;
4+
import jwarrior.ui.InterfazDeUsuario;
45

56
public class Puntaje {
67

7-
private Integer puntos = 10;
8+
private static final int PUNTAJE_INICIAL = 10;
9+
10+
private Integer puntos = PUNTAJE_INICIAL;
811

912
public Integer obtenerPuntaje() {
1013
return this.puntos;
1114
}
1215

1316
// TODO: implementar una CalculadoraDePuntaje
1417
public void notificarTurno() {
15-
this.puntos -= 1;
18+
Integer puntos = 1;
19+
mensaje("-" + puntos);
20+
this.puntos -= puntos;
1621
}
1722

1823
// TODO: implementar una CalculadoraDePuntaje
19-
public void notificarMuerteEnemigo(Unidad unidad) {
20-
this.puntos += unidad.obtenerSaludMaxima();
24+
public void notificarMuerteEnemigo(final Unidad unidad) {
25+
Integer puntos = unidad.obtenerSaludMaxima();
26+
mensaje("+" + puntos);
27+
this.puntos += puntos;
2128
}
2229

2330
// TODO: implementar una CalculadoraDePuntaje
24-
public void notificarFinalizacionPartida(Unidad guerrero) {
25-
this.puntos += guerrero.obtenerSaludActual() / 2;
31+
public void notificarFinalizacionPartida(final Unidad guerrero) {
32+
Integer puntos = guerrero.obtenerSaludActual() / 2;
33+
mensaje("+" + puntos);
34+
this.puntos += puntos;
35+
}
36+
37+
protected void mensaje(final String mensaje) {
38+
InterfazDeUsuario.obtenerInstancia().mensaje(mensaje);
2639
}
2740
}

src/main/java/jwarrior/piezas/unidades/Orco.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,4 @@ public Comando proximoComando() {
3232
public String toCharacter() {
3333
return "o";
3434
}
35-
3635
}

src/main/java/jwarrior/piezas/unidades/Unidad.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import jwarrior.comandos.Comando;
44
import jwarrior.fabricas.LocalizadorDeFabricas;
5+
import jwarrior.juego.Juego;
56
import jwarrior.piezas.Pieza;
67
import jwarrior.referencias.Direccion;
78
import jwarrior.referencias.Espacio;
@@ -83,6 +84,11 @@ public final void curar(final Integer cantidadARestaurar) {
8384
protected void morir() {
8485
this.decir("muere");
8586
this.obtenerPosicion().liberar();
87+
// FIXME: Deberia haber algo como una CentralDeNotificaciones, para
88+
// evitar que se acople la unidad al juego.
89+
if (Juego.obtenerInstancia() != null) { // FIXME: hack para testear.
90+
Juego.obtenerInstancia().notificarMuerte(this);
91+
}
8692
}
8793

8894
public void decir(final String frase) {

src/test/java/jwarrior/juego/puntuacion/PuntajeTests.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import jwarrior.piezas.unidades.Orco;
66
import jwarrior.piezas.unidades.Unidad;
77
import jwarrior.piezas.unidades.mocks.UnidadStubBuilder;
8+
import jwarrior.ui.InterfazDeUsuario;
9+
import jwarrior.ui.mocks.SalidaMock;
810

911
import org.junit.Test;
1012

@@ -13,41 +15,59 @@ public class PuntajeTests {
1315
@Test
1416
public void alIniciarPuntajeComienzaConValorInicial() {
1517

16-
Puntaje puntaje = new Puntaje();
18+
Puntaje puntaje = new PuntajeMudo();
1719
assertThat(puntaje.obtenerPuntaje(), is(10));
1820
}
1921

2022
@Test
2123
public void alInformarPasoDeTurnoRestaPuntaje() {
2224

23-
Puntaje puntaje = new Puntaje();
25+
Puntaje puntaje = new PuntajeMudo();
2426
puntaje.notificarTurno();
2527
assertThat(puntaje.obtenerPuntaje(), is(9));
2628
}
2729

2830
@Test
2931
public void alInformarMuerteEnemigoSumaSaludMaximaEnemigo() {
3032

31-
Puntaje puntaje = new Puntaje();
33+
Puntaje puntaje = new PuntajeMudo();
3234
puntaje.notificarMuerteEnemigo(new Orco());
3335
assertThat(puntaje.obtenerPuntaje(), is(18));
3436
}
3537

3638
@Test
3739
public void alInformarFinalizacionPartidaSumaMitadDeSalud() {
3840

39-
Puntaje puntaje = new Puntaje();
41+
Puntaje puntaje = new PuntajeMudo();
4042
puntaje.notificarFinalizacionPartida(UnidadStubBuilder.construirStubGuerrero());
4143
assertThat(puntaje.obtenerPuntaje(), is(20));
4244
}
4345

4446
@Test
4547
public void alInformarFinalizacionPartidaHeridoSumaMitadDeSalud() {
46-
Puntaje puntaje = new Puntaje();
48+
Puntaje puntaje = new PuntajeMudo();
4749
Unidad guerrero = UnidadStubBuilder.construirStubGuerrero();
4850
guerrero.recibirGolpe(4);
4951

5052
puntaje.notificarFinalizacionPartida(guerrero);
5153
assertThat(puntaje.obtenerPuntaje(), is(18));
5254
}
55+
56+
@Test
57+
public void puntajeEnviaMensaje() {
58+
59+
SalidaMock salida = new SalidaMock();
60+
InterfazDeUsuario.establecerSalida(salida);
61+
62+
Puntaje puntaje = new Puntaje();
63+
puntaje.notificarTurno();
64+
assertThat(salida.envioMensaje(), is(true));
65+
}
66+
}
67+
68+
class PuntajeMudo extends Puntaje {
69+
@Override
70+
protected void mensaje(String mensaje) {
71+
// No dice nada
72+
}
5373
}

0 commit comments

Comments
 (0)