diff --git a/src/main/java/edu/fiuba/algo3/modelo/Casilla.java b/src/main/java/edu/fiuba/algo3/modelo/Casilla.java index d98506f..27b6e71 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/Casilla.java +++ b/src/main/java/edu/fiuba/algo3/modelo/Casilla.java @@ -1,24 +1,55 @@ package edu.fiuba.algo3.modelo; -import edu.fiuba.algo3.modelo.camino.CaminoTipo; +import edu.fiuba.algo3.modelo.interactuables.InteractuableCasilla; + +import java.util.Objects; public class Casilla { + private Casilla siguiente; + private Casilla anterior; + private InteractuableCasilla interactuable; - private final Efecto efecto; - private final CaminoTipo tipo; + public Casilla(Casilla siguiente, InteractuableCasilla interactuable) { + this.siguiente = siguiente; + this.interactuable = interactuable; + this.anterior = null; + siguiente.setAnterior(this); + } + public Casilla(InteractuableCasilla interactuable) { + this.siguiente = null; + this.interactuable = interactuable; + this.anterior = null; + } + + public Casilla obtenerSiguiente() { + // Exeception si no hay siguiente + return this.siguiente; + } + + public Casilla obtenerAnterior(){ + // Exeception si no hay anterior + return this.anterior; + } + + public void interactuar(Gladiador gladiador) { + this.interactuable.interactuar(gladiador); + } - public Casilla(Efecto e, CaminoTipo t) { - this.efecto = e; - this.tipo = t; + public void setAnterior(Casilla anterior) { + this.anterior = anterior; } - public void aplicarEfecto(Gladiador g) { - this.efecto.aplicar(g); + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Casilla casilla = (Casilla) o; + return Objects.equals(siguiente, casilla.siguiente) && Objects.equals(anterior, casilla.anterior) && Objects.equals(interactuable, casilla.interactuable); } - //para la interfaz grafica - public void pintar() { - this.tipo.pintar(); + @Override + public int hashCode() { + return Objects.hash(siguiente, anterior, interactuable); } } diff --git a/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java b/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java index 196489a..b253d2f 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java +++ b/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java @@ -15,10 +15,11 @@ public class Gladiador { private Equipo equipo; private int turnosJugados = 0; - public Gladiador() { + public Gladiador(Casilla casillaInicial) { this.energia = new Energia(); this.setNivel(new Novato()); this.equipo = new SinEquipo(); + this.casilla = casillaInicial; } //esto usa el patron state, ver si se puede mejorar, sacar el SET @@ -56,6 +57,10 @@ public boolean tenesPuntosDeEnegia(int puntos) { return this.energia.tenes(puntos); } + public Casilla obtenerCasilla(){ + return this.casilla; + } + //mejorar public Nivel getNivel() { return this.nivel; @@ -65,10 +70,14 @@ public String obtenerNombre() { return "nombre"; } - public void lesion() { + public void mover(int cantidad) { + if (cantidad == 0) return; + + this.casilla = this.casilla.obtenerSiguiente(); + this.casilla.interactuar(this); + this.mover(cantidad - 1); } - public void efecto() { - this.casilla.aplicarEfecto(this); + public void lesion() { } } diff --git a/src/main/java/edu/fiuba/algo3/modelo/Tablero.java b/src/main/java/edu/fiuba/algo3/modelo/Tablero.java index d1fa916..540dac8 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/Tablero.java +++ b/src/main/java/edu/fiuba/algo3/modelo/Tablero.java @@ -1,30 +1,5 @@ package edu.fiuba.algo3.modelo; -import edu.fiuba.algo3.modelo.efectos.Fiera; - -import java.util.ArrayList; -import java.util.HashMap; - public class Tablero { - private final HashMap casillerosGladiadores; - private final HashMap casilleros; // Deberia ser un generico de Casillero. - - public Tablero(ArrayList gladiadores, ArrayList fieras){ - casillerosGladiadores = new HashMap(); - casilleros = new HashMap(); - for(Gladiador gladiador: gladiadores){ - casillerosGladiadores.put(gladiador.obtenerNombre(), new Posicion(0)); - } - } - public void avanzar(Gladiador gladiador, Dado dado){ - if(gladiador.tenesPuntosDeEnegia(0)) return; - int cantidadDeCasilleros = dado.tirar(); - Posicion posicionActual = casillerosGladiadores.get(gladiador.obtenerNombre()); - Fiera fiera = casilleros.get(posicionActual); - posicionActual.avanzar(cantidadDeCasilleros); - } - public Posicion obtenerPosicionGladiador(Gladiador gladiador){ - return casillerosGladiadores.get(gladiador.obtenerNombre()); - } } diff --git a/src/main/java/edu/fiuba/algo3/modelo/TableroB.java b/src/main/java/edu/fiuba/algo3/modelo/TableroB.java index 59d1a66..26dc8f2 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/TableroB.java +++ b/src/main/java/edu/fiuba/algo3/modelo/TableroB.java @@ -8,7 +8,7 @@ public class TableroB { - private final ArrayList> casillas; +/* private final ArrayList> casillas; private final Map camino; private final Map posicionGladiadiores; @@ -57,5 +57,5 @@ private void crearTablero(List mapa) { y = dato.get("y").getAsInt(); } } - } + }*/ } diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/FieraInteractuable.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/FieraInteractuable.java new file mode 100644 index 0000000..eb6d3ab --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/FieraInteractuable.java @@ -0,0 +1,10 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Gladiador; + +public class FieraInteractuable implements InteractuableCasilla{ + @Override + public void interactuar(Gladiador gladiador) { + gladiador.esAtacado(); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/InteractuableCasilla.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/InteractuableCasilla.java new file mode 100644 index 0000000..5aa4859 --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/InteractuableCasilla.java @@ -0,0 +1,7 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Gladiador; + +public interface InteractuableCasilla { + void interactuar (Gladiador gladiador); +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/SinInteraccion.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/SinInteraccion.java new file mode 100644 index 0000000..6f7aeb1 --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/SinInteraccion.java @@ -0,0 +1,10 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Gladiador; + +public class SinInteraccion implements InteractuableCasilla{ + @Override + public void interactuar(Gladiador gladiador) { + + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 5df87d2..2d356f6 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -2,4 +2,6 @@ requires javafx.controls; requires com.google.gson; exports edu.fiuba.algo3; + exports edu.fiuba.algo3.modelo; + exports edu.fiuba.algo3.modelo.interactuables; } \ No newline at end of file diff --git a/src/main/test/edu/fiuba/algo3/entrega_1/PrimerEntregaTest.java b/src/main/test/edu/fiuba/algo3/entrega_1/PrimerEntregaTest.java index fe16899..1d07250 100644 --- a/src/main/test/edu/fiuba/algo3/entrega_1/PrimerEntregaTest.java +++ b/src/main/test/edu/fiuba/algo3/entrega_1/PrimerEntregaTest.java @@ -1,215 +1,41 @@ package edu.fiuba.algo3.entrega_1; -import com.google.gson.JsonObject; -import edu.fiuba.algo3.modelo.*; -import edu.fiuba.algo3.modelo.camino.Camino; -import edu.fiuba.algo3.modelo.equipamiento.*; -import edu.fiuba.algo3.modelo.nivel.Novato; -import edu.fiuba.algo3.modelo.nivel.SemiSenior; -import edu.fiuba.algo3.modelo.efectos.Fiera; -import edu.fiuba.algo3.modelo.efectos.Comida; -import edu.fiuba.algo3.modelo.efectos.Equipamiento; -import edu.fiuba.algo3.modelo.Efecto; +import edu.fiuba.algo3.modelo.Casilla; +import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.interactuables.FieraInteractuable; +import edu.fiuba.algo3.modelo.interactuables.SinInteraccion; import org.junit.jupiter.api.Test; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class PrimerEntregaTest { - @Test - public void test01JugadorEmpiezaConEnergiaYEquipamientoCorrespondiente(){ - //Act - Gladiador gladiador = new Gladiador(); - Equipo sinEquipo = new SinEquipo(); - //Arrange - - //Assert - assertTrue(gladiador.tenesPuntosDeEnegia(20)); - assertTrue(gladiador.tenesEsteEquipo(sinEquipo)); - } - @Test public void test02JugadorSaleDeLaCasillaInicial(){ - Posicion posicionInicial = new Posicion(0); - Gladiador gladiador = new Gladiador(); - ArrayList gladiadores = new ArrayList(); - gladiadores.add(gladiador); - Tablero tablero = new Tablero(gladiadores, new ArrayList()); - - tablero.avanzar(gladiador, new Dado()); - - assertNotEquals(tablero.obtenerPosicionGladiador(gladiador), posicionInicial); - } - - @Test - public void test02ConTableroBJugadorSaleDeLaCasillaInicial() throws IOException { - //Act - List mapa = AlgoRoma.obtenerListaDatosDesdeJson("mapa.json"); - ArrayList gladiadores = new ArrayList<>(); - gladiadores.add(new Gladiador()); - gladiadores.add(new Gladiador()); - TableroB tablero = new TableroB(gladiadores, mapa); - - //Arrange - tablero.mover(gladiadores.get(0), 3); - - //Assert - assertTrue(tablero.estaEl(gladiadores.get(0), 3)); - } - - @Test - public void test03NoPuedeJugarUnTurnoSinEnergia(){ - Posicion posicionInicial = new Posicion(0); - Gladiador gladiador = new Gladiador(); - ArrayList gladiadores = new ArrayList(); - gladiadores.add(gladiador); - //Tablero tablero = new Tablero(gladiadores, new ArrayList(new Fiera())); - - //tablero.avanzar(gladiador, new Dado()); - - //assertNotEquals(tablero.obtenerPosicionGladiador(gladiador), posicionInicial); - } - - - @Test - public void test04RecibeComidaIncrementaEnergiaEn10() { - //Act - Gladiador gladiador = new Gladiador(); - Efecto premio = new Comida(); - - //Arrange - premio.aplicar(gladiador); - - //Assert 20 iniciales + 10 por comer - assertTrue(gladiador.tenesPuntosDeEnegia(30)); - } - - - @Test - public void test05gladiadorRecibeCasco() { - //Act - Gladiador gladiador = new Gladiador(); - Casco casco = new Casco(); - Efecto premio = new Equipamiento(); - - // Arrange - premio.aplicar(gladiador); + Casilla ultimaCasilla = new Casilla( new SinInteraccion()); + Casilla inicial = new Casilla(ultimaCasilla, new SinInteraccion()); + Gladiador gladiador = new Gladiador(inicial); - // Assert - assertTrue(gladiador.tenesEsteEquipo(casco)); - } - - @Test - public void test06gladiadorRecibeLEscudoYEspada() { - //Act - Gladiador gladiador = new Gladiador(); - Efecto premio = new Equipamiento(); - - // Arrange - premio.aplicar(gladiador); - premio.aplicar(gladiador); - premio.aplicar(gladiador); - - // Assert - assertTrue(gladiador.tenesEsteEquipo(new EscudoYEspada())); - } - - @Test - public void test07gladiadorEsAtacadoYPierde15Puntos() { - - //Act - Gladiador gladiador = new Gladiador(); - EfectoFactory fabrica = new EfectoFactory(); - Efecto efecto = fabrica.crearEfecto("Equipamiento"); - Casilla casilla = new Casilla(efecto, new Camino()); - - //Arrange - casilla.aplicarEfecto(gladiador); - gladiador.esAtacado(); - - //Assert - assertTrue(gladiador.tenesPuntosDeEnegia(5)); - } - - @Test - public void test08gladiadorSubeASemiSeniorDespuesDe8TurnosEIncrementaSuEnergia() { - // Arrange - Gladiador gladiador = new Gladiador(); - Novato novato = new Novato(); - SemiSenior semiSenior = new SemiSenior(); + assertEquals(gladiador.obtenerCasilla(), inicial); - //ver el nivel inicial - assertEquals(novato.getClass(), gladiador.getNivel().getClass()); - - // Act - for (int turno = 1; turno <= 8; turno++) { - gladiador.jugar(); - } - - // Sube a semi senior - assertEquals(semiSenior.getClass(), gladiador.getNivel().getClass()); - - gladiador.jugar(); - //sube 5 puntos de los 20 iniciales - assertTrue(gladiador.tenesPuntosDeEnegia(25)); + gladiador.mover(1); + assertEquals(gladiador.obtenerCasilla(), ultimaCasilla); } @Test - public void test10gladiadorEsAtacadoYNoReciveDanioPorPoseerTodoElEquipo() { - //Act - Gladiador gladiador = new Gladiador(); - Efecto obstaculo = new Fiera(); - - // Arrange - gladiador.actualizarEquipo(); - gladiador.actualizarEquipo(); - gladiador.actualizarEquipo(); - gladiador.actualizarEquipo(); - - obstaculo.aplicar(gladiador); - - //Assert - assertTrue(gladiador.tenesPuntosDeEnegia(20)); + public void test10LlegaAMetaSinLlave(){ + // Necesito implementar como retroceder a la mitad de las casillas } @Test - public void test11gladiadorTieneLlaveYRecibeOtroPremioNoCambiaNada() { - //Act - Gladiador gladiador = new Gladiador(); - Llave llave = new Llave(); - - // Arrange - gladiador.actualizarEquipo(); - gladiador.actualizarEquipo(); - gladiador.actualizarEquipo(); - gladiador.actualizarEquipo(); - - gladiador.actualizarEquipo(); - - //Assert - assertTrue(gladiador.tenesEsteEquipo(llave)); - } - - //@Test - public void leerArchivo() throws IOException { - List mapa = AlgoRoma.obtenerListaDatosDesdeJson("mapa.json"); - ArrayList gladiadores = new ArrayList<>(); - gladiadores.add(new Gladiador()); - gladiadores.add(new Gladiador()); - TableroB tablero = new TableroB(gladiadores, mapa); - - - tablero.mover(gladiadores.get(0), 3); - assertTrue(tablero.estaEl(gladiadores.get(0), 3)); - assertTrue(gladiadores.get(0).tenesPuntosDeEnegia(30)); - + public void test10EsAtacadoPorFiera(){ + Casilla ultimaCasilla = new Casilla( new FieraInteractuable()); + Casilla inicial = new Casilla(ultimaCasilla, new SinInteraccion()); + Gladiador gladiador = new Gladiador(inicial); - tablero.mover(gladiadores.get(0), -2); - assertTrue(tablero.estaEl(gladiadores.get(0), 1)); + gladiador.mover(1); + assertTrue(gladiador.tenesPuntosDeEnegia(0)); } }