diff --git a/mapa.json b/mapa.json index 47ad9eb..49f72d5 100644 --- a/mapa.json +++ b/mapa.json @@ -1,8 +1,9 @@ [ - {"x": 0, "y": 0, "esCamino": true, "ordenRecorrido": 1, "efecto": "Comida"}, - {"x": 1, "y": 0, "esCamino": true, "ordenRecorrido": 2, "efecto": null}, + {"numeroCasilla": 0, "efecto": "Comida"}, + {"x": 0, "y": 0, "ordenRecorrido": 1, "efecto": "Comida"}, + {"x": 1, "y": 0, "esCamino": true, "ordenRecorrido": 3, "efecto": null}, {"x": 2, "y": 0, "esCamino": false, "ordenRecorrido": null, "efecto": null}, - {"x": 3, "y": 0, "esCamino": true, "ordenRecorrido": 3, "efecto": "Comida"}, + {"x": 3, "y": 0, "esCamino": true, "ordenRecorrido": 2, "efecto": "Comida"}, {"x": 4, "y": 0, "esCamino": true, "ordenRecorrido": 4, "efecto": null}, {"x": 0, "y": 1, "esCamino": true, "ordenRecorrido": 5, "efecto": "Bacanal"}, diff --git a/src/main/java/edu/fiuba/algo3/modelo/Casilla.java b/src/main/java/edu/fiuba/algo3/modelo/Casilla.java index 27b6e71..8392065 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/Casilla.java +++ b/src/main/java/edu/fiuba/algo3/modelo/Casilla.java @@ -1,5 +1,6 @@ package edu.fiuba.algo3.modelo; +import edu.fiuba.algo3.modelo.estados.Estado; import edu.fiuba.algo3.modelo.interactuables.InteractuableCasilla; import java.util.Objects; @@ -32,8 +33,8 @@ public Casilla obtenerAnterior(){ return this.anterior; } - public void interactuar(Gladiador gladiador) { - this.interactuable.interactuar(gladiador); + public Estado interactuar(Gladiador gladiador) { + return this.interactuable.interactuar(gladiador); } public void setAnterior(Casilla anterior) { diff --git a/src/main/java/edu/fiuba/algo3/modelo/Energia.java b/src/main/java/edu/fiuba/algo3/modelo/Energia.java index cb62928..94a575d 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/Energia.java +++ b/src/main/java/edu/fiuba/algo3/modelo/Energia.java @@ -17,4 +17,7 @@ public void restarPuntos(int cantidad) { public boolean tenes(int puntos) { return this.puntos == puntos; } + public boolean tenesMasDe(int puntos) { + return this.puntos > puntos; + } } diff --git a/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java b/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java index b253d2f..3c07803 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java +++ b/src/main/java/edu/fiuba/algo3/modelo/Gladiador.java @@ -2,6 +2,10 @@ import edu.fiuba.algo3.modelo.equipamiento.Equipo; import edu.fiuba.algo3.modelo.equipamiento.SinEquipo; +import edu.fiuba.algo3.modelo.estados.Estado; +import edu.fiuba.algo3.modelo.estados.EstadoLesionado; +import edu.fiuba.algo3.modelo.estados.EstadoSano; +import edu.fiuba.algo3.modelo.estados.EstadoSinEnergia; import edu.fiuba.algo3.modelo.nivel.Nivel; import edu.fiuba.algo3.modelo.nivel.Novato; @@ -10,6 +14,7 @@ public class Gladiador { private Energia energia; private Nivel nivel; private Casilla casilla; + private Estado estado; //como no tiene efecto el historial de obtenciones de equipo por parte del jugador, simplemente tiene el ultimo equipo obtenido private Equipo equipo; @@ -28,25 +33,26 @@ public void setNivel(Nivel n) { this.nivel.setGladiador(this); } - public void jugar() { - this.turnosJugados += 1; - this.nivel.actualizarPuntos(this.energia, this.turnosJugados); + public void bonoSinEnergia() { + energia.sumarPuntos(5); } public void actualizarEquipo() { this.equipo = this.equipo.actualizar(); } - public void beber(int puntosPerdidos) { + public Estado beber(int puntosPerdidos) { this.energia.restarPuntos(puntosPerdidos); + return this.energia.tenesMasDe(0) ? new EstadoSano() : new EstadoSinEnergia(); } - public void esAtacado() { + public Estado esAtacado() { this.equipo.resistirAtaque(this.energia); + return this.energia.tenesMasDe(0) ? new EstadoSano() : new EstadoSinEnergia(); } public void comer() { - this.energia.sumarPuntos(10); + this.energia.sumarPuntos(10); // Va 15 } public boolean tenesEsteEquipo(Equipo e) { @@ -70,12 +76,17 @@ public String obtenerNombre() { return "nombre"; } - public void mover(int cantidad) { - if (cantidad == 0) return; - + public Estado avanzarCasilla(){ this.casilla = this.casilla.obtenerSiguiente(); - this.casilla.interactuar(this); - this.mover(cantidad - 1); + return this.casilla.interactuar(this); + } + + public void jugar() { + this.estado = this.estado.jugar(this); + } + + public void retroceder(){ + } 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 540dac8..d8ec80c 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/Tablero.java +++ b/src/main/java/edu/fiuba/algo3/modelo/Tablero.java @@ -1,5 +1,23 @@ package edu.fiuba.algo3.modelo; +import edu.fiuba.algo3.modelo.interactuables.InteractuableCasilla; + +import java.util.ArrayList; + public class Tablero { + private ArrayList gladiadores; + private Casilla mitadDeMapa; + + /*public Tablero(JSON json){ + // Arma la casilla con el json + Casilla ultima = new Casilla(new Meta()); + Casilla anteultima = new Casilla(ultima, JSON.anteultima); + Casilla primera = new Casilla(anteultima, JSON.primera); + + Gladiador primero = new Gladiador(primera); + }*/ + + public Tablero(){ + } } diff --git a/src/main/java/edu/fiuba/algo3/modelo/TableroB.java b/src/main/java/edu/fiuba/algo3/modelo/TableroB.java index 26dc8f2..8d7485a 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; // [F,N,G,N,F] 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/equipamiento/Equipo.java b/src/main/java/edu/fiuba/algo3/modelo/equipamiento/Equipo.java index 53a1180..01000ad 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/equipamiento/Equipo.java +++ b/src/main/java/edu/fiuba/algo3/modelo/equipamiento/Equipo.java @@ -8,7 +8,6 @@ public abstract class Equipo { public abstract Equipo actualizar(); - public boolean equals(Equipo e) { return this.getClass() == e.getClass(); } diff --git a/src/main/java/edu/fiuba/algo3/modelo/estados/Estado.java b/src/main/java/edu/fiuba/algo3/modelo/estados/Estado.java new file mode 100644 index 0000000..555e79a --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/estados/Estado.java @@ -0,0 +1,7 @@ +package edu.fiuba.algo3.modelo.estados; + +import edu.fiuba.algo3.modelo.Gladiador; + +public interface Estado { + Estado jugar(Gladiador gladiador); +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoLesionado.java b/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoLesionado.java new file mode 100644 index 0000000..6c7d987 --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoLesionado.java @@ -0,0 +1,9 @@ +package edu.fiuba.algo3.modelo.estados; + +import edu.fiuba.algo3.modelo.Gladiador; + +public class EstadoLesionado implements Estado { + public Estado jugar(Gladiador gladiador){ + return new EstadoSano(); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoSano.java b/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoSano.java new file mode 100644 index 0000000..2115f81 --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoSano.java @@ -0,0 +1,10 @@ +package edu.fiuba.algo3.modelo.estados; + +import edu.fiuba.algo3.modelo.Gladiador; + +public class EstadoSano implements Estado{ + + public Estado jugar(Gladiador gladiador){ + return gladiador.avanzarCasilla(); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoSinEnergia.java b/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoSinEnergia.java new file mode 100644 index 0000000..137ed34 --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/estados/EstadoSinEnergia.java @@ -0,0 +1,11 @@ +package edu.fiuba.algo3.modelo.estados; + +import edu.fiuba.algo3.modelo.Gladiador; + +public class EstadoSinEnergia implements Estado { + @Override + public Estado jugar(Gladiador gladiador) { + gladiador.bonoSinEnergia(); + return new EstadoSano(); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/BacanalInteractuable.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/BacanalInteractuable.java new file mode 100644 index 0000000..4d91a4a --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/BacanalInteractuable.java @@ -0,0 +1,13 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Dado; +import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; + +public class BacanalInteractuable implements InteractuableCasilla{ + @Override + public Estado interactuar(Gladiador gladiador) { + Dado dado = new Dado(); + return gladiador.beber(dado.tirar()); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/ComidaInteractuable.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/ComidaInteractuable.java new file mode 100644 index 0000000..0ad6485 --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/ComidaInteractuable.java @@ -0,0 +1,13 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; +import edu.fiuba.algo3.modelo.estados.EstadoSano; + +public class ComidaInteractuable implements InteractuableCasilla { + @Override + public Estado interactuar(Gladiador gladiador) { + gladiador.comer(); + return new EstadoSano(); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/EquipamientoInteractuable.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/EquipamientoInteractuable.java new file mode 100644 index 0000000..9654a01 --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/EquipamientoInteractuable.java @@ -0,0 +1,13 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; +import edu.fiuba.algo3.modelo.estados.EstadoSano; + +public class EquipamientoInteractuable implements InteractuableCasilla{ + @Override + public Estado interactuar(Gladiador gladiador) { + gladiador.actualizarEquipo(); + return new EstadoSano(); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/FieraInteractuable.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/FieraInteractuable.java index eb6d3ab..07db070 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/interactuables/FieraInteractuable.java +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/FieraInteractuable.java @@ -1,10 +1,11 @@ package edu.fiuba.algo3.modelo.interactuables; import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; public class FieraInteractuable implements InteractuableCasilla{ @Override - public void interactuar(Gladiador gladiador) { - gladiador.esAtacado(); + public Estado interactuar(Gladiador gladiador) { + return 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 index 5aa4859..024d258 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/interactuables/InteractuableCasilla.java +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/InteractuableCasilla.java @@ -1,7 +1,8 @@ package edu.fiuba.algo3.modelo.interactuables; import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; public interface InteractuableCasilla { - void interactuar (Gladiador gladiador); + Estado interactuar (Gladiador gladiador); } diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/LesionInteractuable.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/LesionInteractuable.java new file mode 100644 index 0000000..25f1bdc --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/LesionInteractuable.java @@ -0,0 +1,12 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; +import edu.fiuba.algo3.modelo.estados.EstadoLesionado; + +public class LesionInteractuable implements InteractuableCasilla{ + @Override + public Estado interactuar(Gladiador gladiador) { + return new EstadoLesionado(); + } +} diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/Meta.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/Meta.java new file mode 100644 index 0000000..239150b --- /dev/null +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/Meta.java @@ -0,0 +1,15 @@ +package edu.fiuba.algo3.modelo.interactuables; + +import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; +import edu.fiuba.algo3.modelo.estados.EstadoSano; + +public class Meta implements InteractuableCasilla{ + @Override + public Estado interactuar(Gladiador gladiador) { + // Chequea si el gladiador tiene llave + // Sino lo tiene que hacer retroceder la mitad de las casillas + return new EstadoSano(); + } +} + diff --git a/src/main/java/edu/fiuba/algo3/modelo/interactuables/SinInteraccion.java b/src/main/java/edu/fiuba/algo3/modelo/interactuables/SinInteraccion.java index 6f7aeb1..e844805 100644 --- a/src/main/java/edu/fiuba/algo3/modelo/interactuables/SinInteraccion.java +++ b/src/main/java/edu/fiuba/algo3/modelo/interactuables/SinInteraccion.java @@ -1,10 +1,12 @@ package edu.fiuba.algo3.modelo.interactuables; import edu.fiuba.algo3.modelo.Gladiador; +import edu.fiuba.algo3.modelo.estados.Estado; +import edu.fiuba.algo3.modelo.estados.EstadoSano; public class SinInteraccion implements InteractuableCasilla{ @Override - public void interactuar(Gladiador gladiador) { - + public Estado interactuar(Gladiador gladiador) { + return new EstadoSano(); } } diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 2d356f6..6025a2d 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -4,4 +4,5 @@ exports edu.fiuba.algo3; exports edu.fiuba.algo3.modelo; exports edu.fiuba.algo3.modelo.interactuables; + exports edu.fiuba.algo3.modelo.estados; } \ 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 1d07250..b527e21 100644 --- a/src/main/test/edu/fiuba/algo3/entrega_1/PrimerEntregaTest.java +++ b/src/main/test/edu/fiuba/algo3/entrega_1/PrimerEntregaTest.java @@ -24,8 +24,13 @@ public void test02JugadorSaleDeLaCasillaInicial(){ } @Test - public void test10LlegaAMetaSinLlave(){ - // Necesito implementar como retroceder a la mitad de las casillas + public void test09LlegaAMetaSinLlave(){ + Casilla ultima = new Casilla( new SinInteraccion()); + Casilla anteultima = new Casilla(ultima, new SinInteraccion()); + ultima.setAnterior(anteultima); + Casilla segunda = new Casilla(anteultima, new SinInteraccion()); + segunda.setAnterior(anteultima); + Casilla primera = new Casilla(segunda, new SinInteraccion()); } @Test