diff --git a/.idea/misc.xml b/.idea/misc.xml index c3b5975..0548357 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,6 @@ + - + \ No newline at end of file diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Comando.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Comando.java index 235af61..456a7cc 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Comando.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Comando.java @@ -1,15 +1,18 @@ package Juego; +import Juego.Exceptions.Lectura.LeerException; +import Juego.Exceptions.Lectura.LeerIncorrectoException; + public interface Comando { void ayuda(boolean haTirado); void imprimirTablero(); void jugador(); - boolean tirarDados(boolean haTirado, String[] entradaPartida); - void comprar(String[] entradaPartida, boolean haTirado); + boolean tirarDados(boolean haTirado, String[] entradaPartida) throws LeerException; + void comprarComando(String[] entradaPartida, boolean haTirado); void edificar(String[] entradaPartida); void venderEdificio(String[] entradaPartida); - void hipotecar(String[] entradaPartida); - void deshipotecar(String[] entradaPartida); + void hipotecar(String[] entradaPartida) throws LeerIncorrectoException; + void deshipotecar(String[] entradaPartida) throws LeerIncorrectoException; void bancarrota(); void describirJugador(String[] entradaPartida); void describirCasilla(String s); @@ -19,8 +22,8 @@ public interface Comando { void listarEnVenta(); void listarEdificiosColor(String[] entradaPartida); void listarEdificios(); - void salirCarcel(); - void pagarDeuda(); + void salirCarcel() throws LeerException; + void pagarDeuda() throws LeerException; boolean acabarTurno(boolean haTirado); void cambiarMovimiento(boolean haTirado); void estadisticas(); diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Consola.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Consola.java index 083e25f..5ba67a3 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Consola.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Consola.java @@ -2,7 +2,8 @@ public interface Consola { void imprimir(String mensaje); + void imprimirError(String mensaje); String leer(String descripcion); - String[] leerFragmentado(String descripcion); + String[] leerConsolaFragmentado(String descripcion); int leerInt(String descripcion); } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/ConsolaNormal.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/ConsolaNormal.java index ee1031c..4e37c6d 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/ConsolaNormal.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/ConsolaNormal.java @@ -1,8 +1,12 @@ package Juego; + +import Juego.Exceptions.Lectura.LeerException; +import Juego.Exceptions.Lectura.LeerIntException; + import java.util.Scanner; -public class ConsolaNormal implements Consola{ +public final class ConsolaNormal implements Consola{ @Override public void imprimir(String mensaje) { @@ -15,17 +19,28 @@ public String leer(String descripcion) { Scanner entrada = new Scanner(System.in); return entrada.nextLine(); } + public void imprimirError(String mensaje) { + System.out.println(mensaje); + } @Override - public String[] leerFragmentado(String descripcion) { - System.out.println(descripcion); + public String[] leerConsolaFragmentado(String descripcion) { + System.out.print(descripcion); Scanner entrada = new Scanner(System.in); String entradaString = entrada.nextLine(); return entradaString.split(" "); } public int leerInt (String descripcion){ - System.out.println(descripcion); - Scanner entrada = new Scanner(System.in); - return entrada.nextInt(); + try { + try { + System.out.println(descripcion); + Scanner entrada = new Scanner(System.in); + return entrada.nextInt(); + } catch (Exception e) { + throw new LeerIntException(); + } + }catch(LeerException le){ + return leerInt(descripcion); + } } } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/AlquilerDineroInsufException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/AlquilerDineroInsufException.java new file mode 100644 index 0000000..5cc3931 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/AlquilerDineroInsufException.java @@ -0,0 +1,21 @@ +package Juego.Exceptions; + +import Procesos.Jugador; + +public class AlquilerDineroInsufException extends JuegoException { + private final Jugador cobrador; + private final int dineroPendiente; + public AlquilerDineroInsufException(Jugador j, int valor) { + super("DineroInsuf"); + cobrador = j; + dineroPendiente = valor; + } + + public int getDineroPendiente() { + return dineroPendiente; + } + + public Jugador getCobrador() { + return cobrador; + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/CasillaInexistenteException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/CasillaInexistenteException.java new file mode 100644 index 0000000..1bf5593 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/CasillaInexistenteException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions; + +public class CasillaInexistenteException extends JuegoException { + + public CasillaInexistenteException() { + super("Esta casilla no existe..."); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoBancarrotaException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoBancarrotaException.java new file mode 100644 index 0000000..7fd9dde --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoBancarrotaException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Comandos; + +import Juego.Exceptions.JuegoException; + +public class ComandoBancarrotaException extends ComandoException{ + public ComandoBancarrotaException() { + super("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoException.java new file mode 100644 index 0000000..5791146 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Comandos; + +import Juego.Exceptions.JuegoException; + +public class ComandoException extends JuegoException { + public ComandoException(String mensaje) { + super(mensaje); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.java new file mode 100644 index 0000000..91e1abc --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comandos; + +public class ComandoNoHaTiradoException extends ComandoException { + public ComandoNoHaTiradoException() { + super("Aun no has tirado los dados. Tiralos para poder comprar propiedades"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoNoMasComprasException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoNoMasComprasException.java new file mode 100644 index 0000000..df45da9 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comandos/ComandoNoMasComprasException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Comandos; + +public class ComandoNoMasComprasException extends ComandoException { + + public ComandoNoMasComprasException() { + super("No puedes hacer más compras en este turno..."); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarException.java new file mode 100644 index 0000000..d33856b --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarException.java @@ -0,0 +1,11 @@ +package Juego.Exceptions.Comprar; + +import Juego.Exceptions.JuegoException; +import Juego.Juego; + +public class ComprarException extends JuegoException { + public ComprarException(String mensaje) { + super(mensaje); + Juego.getConsolaNormal().imprimir("Error al comprar:"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.java new file mode 100644 index 0000000..66c8063 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comprar; + +public class ComprarExceptionCasillaConDueno extends ComprarException { + public ComprarExceptionCasillaConDueno() { + super("Esta casilla ya tiene dueño"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.java new file mode 100644 index 0000000..705ae01 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comprar; + +public class ComprarExceptionCasillaDistinta extends ComprarException { + public ComprarExceptionCasillaDistinta() { + super("No puedes comprar una casilla sobre la que no estás"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.java new file mode 100644 index 0000000..a13a195 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comprar; + +public class ComprarExceptionCasillaNoPropiedad extends ComprarException { + public ComprarExceptionCasillaNoPropiedad(){ + super("Casilla no comprable"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.java new file mode 100644 index 0000000..4eba531 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Comprar; + +import Procesos.Jugador; + +public class ComprarExceptionDineroInsuficiente extends ComprarException { + public ComprarExceptionDineroInsuficiente() { + super("Dinero insuficiente"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.java new file mode 100644 index 0000000..b144c4a --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class HipotecarCasillaInexistenteException extends HipotecarException { + + public HipotecarCasillaInexistenteException() { + super("Esta casilla no existe..."); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.java new file mode 100644 index 0000000..caa9335 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class HipotecarCasillanNoHipotecableException extends HipotecarException { + + public HipotecarCasillanNoHipotecableException() { + super("Esta casilla no es hipotecable."); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarException.java new file mode 100644 index 0000000..d77247d --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Hipotecar; + +import Juego.Exceptions.JuegoException; + +public class HipotecarException extends JuegoException { + public HipotecarException(String mensaje) { + super(mensaje); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.java new file mode 100644 index 0000000..c218b32 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class HipotecarPropiedadDeOtro extends HipotecarException { + + public HipotecarPropiedadDeOtro() { + super("No puedes hipotecar una casilla que no es tuya"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.java new file mode 100644 index 0000000..7e50b89 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class desHipotecarPropiedadDeOtro extends HipotecarException { + + public desHipotecarPropiedadDeOtro() { + super("No puedes deshipotecar una casilla que no es tuya"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/JuegoException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/JuegoException.java new file mode 100644 index 0000000..922d17b --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/JuegoException.java @@ -0,0 +1,11 @@ +package Juego.Exceptions; + +import Juego.Exceptions.Hipotecar.HipotecarException; +import Juego.Juego; + +public class JuegoException extends Exception{ + public JuegoException(String mensaje) { + super("\u001B[31m"+mensaje+"\u001B[0m"); + Juego.getConsolaNormal().imprimirError("\u001B[31m" + mensaje + "\u001B[0m"); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerException.java new file mode 100644 index 0000000..afb2284 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerException.java @@ -0,0 +1,11 @@ +package Juego.Exceptions.Lectura; + +import Juego.Exceptions.JuegoException; +import Juego.Juego; + +public class LeerException extends JuegoException { + public LeerException(String mensaje) { + super(mensaje); + } +} + diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerIncorrectoException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerIncorrectoException.java new file mode 100644 index 0000000..4f4b2de --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerIncorrectoException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Lectura; + +public class LeerIncorrectoException extends LeerException { + + public LeerIncorrectoException() { + super("No se reconoce la acción... Introduce 'ayuda' para ver tus opciones."); + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerIntException.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerIntException.java new file mode 100644 index 0000000..4d40072 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Exceptions/Lectura/LeerIntException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Lectura; + +public class LeerIntException extends LeerException { + + public LeerIntException() { + super("Debes introducir un número entero..."); + } + +} \ No newline at end of file diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Juego.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Juego.java index 7383b51..9af8ecc 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Juego.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Juego/Juego.java @@ -1,1228 +1,1613 @@ -package Juego; - -import java.util.*; - -import Procesos.*; -import Procesos.Casillas.*; -import Procesos.Avatares.*; - -public class Juego implements Comando{ - private static ConsolaNormal consolaNormal; - //ATRIBUTOS - private static Tablero tablero; - private final int dineroInicial; - private final int pSalida; //Premio salida - private int pBase; //Precio casilla primer grupo - private Jugador jugadorActual; - private final ArrayList jugadores; - // private boolean hayBug; //Encontramos un error por el cual, tras la finalización del turno de un coche con movimiento avanzado, el siguiente jugador no puede tirar. Este booleano lo detectará y nos permitirá solucionarlo en menuAccion. - - private final Jugador banca; - private final Dado dado; - private Carta carta; - private final int precioCarcel; - private static boolean pagando; //Un booleano que se activa si el usuario está en trámites de pagar una deuda (para darle opciones de vender, hipotecar, etc)... - private static int pagoPendiente; - private static Jugador cobradorPendiente; - private final StringBuilder avataresRep = new StringBuilder("!"); - - Map> contadorCasillas = new HashMap<>(); - - public static ConsolaNormal getConsolaNormal() { - return consolaNormal; - } - - private char generaCharRandom() { - Random randomC = new Random(); - return (char) (randomC.nextInt(26) + 'A'); - } - - //CONSTRUCTORES - public Juego() { - jugadores = new ArrayList<>(6); //La banca se maneja como un jugador externo (banca). - banca = new Jugador(); - pSalida = Grupo.mediaSolares(); - tablero = new Tablero(pBase, pSalida, banca); - dado = new Dado(); - dineroInicial = tablero.precioTotal() / 3; - precioCarcel = (int) (pSalida * 0.25); - pBase = 100; - pagando = false; - cobradorPendiente = banca; - pagoPendiente = 0; - consolaNormal = new ConsolaNormal(); - } - - //METODOS PUBLICOS - public void darAlta() { - String miNombre = consolaNormal.leer("Introduce tu nombre, Jugador " + (jugadores.size() + 1) + " : "); - char miAvatar = generaAvatar(); - String inputTipo; - do { - inputTipo = consolaNormal.leer("Elige tipo de ficha (coche o pelota): "); - if (inputTipo.equalsIgnoreCase("coche")) { - Coche coche = new Coche(miAvatar); - Jugador jugador = new Jugador(dineroInicial, miNombre, coche); - coche.setJugador(jugador); // Establecer la relación inversa - jugadores.add(jugador); - break; - } - else if (inputTipo.equalsIgnoreCase("pelota")) { - Pelota pelota = new Pelota(miAvatar); - Jugador jugador = new Jugador(dineroInicial, miNombre, pelota); - pelota.setJugador(jugador); // Establecer la relación inversa - jugadores.add(jugador); - break; - } - else { - consolaNormal.imprimir("Tipo no válido. Por favor, introduce coche o pelota."); - } - } while (true); - for (Jugador ite : jugadores) - ite.setFortuna(dineroInicial); - } - - private char generaAvatar() { - char miavatar; - do { - miavatar = generaCharRandom(); - } while (avataresRep.toString().contains(String.valueOf(miavatar))); - avataresRep.append(miavatar); - return miavatar; - } - - //GETTERS - - public int getPSalida(){ - return pSalida; - } - - public Tablero getTablero() { - return tablero; - } - - - //Ejecución del juego - - /** - * Este método mueve al jugador y ejecuta las funciones de la casilla de salida - * Si el movimiento activado está desactivado, no llama al siguiente turno, ni al menú, ni nada, eso va fuera - * Pero como diría J. Mota, ¿pero y si sí? Si está activado, es necesario que se ejecuten ciertas acciones dentro de la función. - * - * @param avance, movAvanzado - */ - private void avanzarCasillas(int avance, boolean movAvanzado) { - if (!movAvanzado) { - if (avance >= 0) { // Funcionamiento normal (realmente podríamos poner "if getposicion+avance >0" pero así queda más legible) - if ((jugadorActual.getAvatar().getPosicion() + avance) > 39) { - addVuelta(jugadorActual); - consolaNormal.imprimir("Pasas por la casilla de salida y cobras " + pSalida + "$"); - jugadorActual.setDinero(jugadorActual.getDinero() + pSalida); - jugadorActual.getAvatar().setPosicion((jugadorActual.getAvatar().getPosicion() + avance) - 40, tablero.getCasillas()); - } else { - jugadorActual.getAvatar().setPosicion(jugadorActual.getAvatar().getPosicion() + avance, tablero.getCasillas()); - } - } else { // Avance negativo - if ((jugadorActual.getAvatar().getPosicion() + avance) <= 0) { // Si se pasa por la casilla de salida - jugadorActual.setVueltas(jugadorActual.getVueltas() - 1); // Se resta una vuelta - consolaNormal.imprimir("Pasas por la casilla de salida en sentido contrario y pagas " + pSalida + "$"); - jugadorActual.pagar(pSalida, banca); - jugadorActual.getAvatar().setPosicion((jugadorActual.getAvatar().getPosicion() + avance) + 40, tablero.getCasillas()); - } else { - jugadorActual.getAvatar().setPosicion(jugadorActual.getAvatar().getPosicion() + avance, tablero.getCasillas()); - } - } - } else { // Movimiento avanzado activado - if (jugadorActual.getAvatar().getTipoMov() == 0) { // PELOTA - jugadorActual.getAvatar().setAuxMovAvanzado(1); // Indica que el turno aún está en curso - if (avance > 4) { - avanzarCasillas(4, false); - int aux = jugadorActual.getAvatar().getPosicion(); // guardamos la posición tras avanzar 4 casillas para comprobar paridades - for (int i = 5; i <= avance; i++) { - avanzarCasillas(1, false); // avanzamos una casilla - if (jugadorActual.getAvatar().getPosicion() == 30) { // Si cae en la casilla de ir a la cárcel, se acaba la función. Recordemos que accionCasilla y menuAccion de la última parada/casilla se ejecutan fuera de aquí. - return; - } - if (i == avance) { - jugadorActual.getAvatar().setAuxMovAvanzado(0); - consolaNormal.imprimir("Ya has pasado por todas tus paradas."); - return; - } - if ((jugadorActual.getAvatar().getPosicion() - aux) % 2 != 0) { // Si es impar, se para en la casilla, se ejecuta la accion correspondiente y el jugador puede interactuar - consolaNormal.imprimir("¡Momento de pararse! Introduce \"acabar parada\" para avanzar a la siguiente casilla"); - tablero.imprimirTablero(); - accionCasilla(); - if (jugadorActual.getAvatar().inCarcel()) { - break; - } - menuAccion(true); - // menuAccion(true); - } - // Si es par, no se hace nada. - } - } else { - int aux = jugadorActual.getAvatar().getPosicion(); // guardamos la posición para comprobar paridades - for (int i = avance; i > 0; i--) { - avanzarCasillas(-1, false); - if (jugadorActual.getAvatar().getPosicion() == 30) { // Si cae en la casilla de ir a la cárcel, se acaba la función. Recordemos que accionCasilla y menuAccion de la última parada/casilla se ejecutan fuera de aquí. - return; - } - if (i == 1) { // Si es la última parada - jugadorActual.getAvatar().setAuxMovAvanzado(0); - consolaNormal.imprimir("Ya has pasado por todas tus paradas."); - return; - } - if ((jugadorActual.getAvatar().getPosicion() - aux) % 2 != 0) { // Si es impar, se para en la casilla, se ejecuta la accion correspondiente y el jugador puede interactuar - consolaNormal.imprimir("¡Momentito de pararse! Introduce \"acabar parada\" para ir a la próxima casilla"); - tablero.imprimirTablero(); - accionCasilla(); - if (jugadorActual.getAvatar().inCarcel()) { - break; - } - menuAccion(true); - } - // Si es par, no se hace nada. - } - } - } else if (jugadorActual.getAvatar().getTipoMov() == 1) { // COCHE - if (avance >= 4) { - avanzarCasillas(avance, false); - consolaNormal.imprimir("Puedes tirar los dados hasta 3 veces más mientras saques más de un 3."); - jugadorActual.getAvatar().setAuxMovAvanzado(3); - } else { - avanzarCasillas(-avance, false); - jugadorActual.getAvatar().setAuxMovAvanzado(-3); // Los números negativos sin el "-" indicarán los turnos restantes sin poder tirar (em el turno actual, por eso se inicializa en -3 y no en -2. al acabar el turno se suma 1, con lo que al acabar el turno en el que se estropea el motor tienes -3+1 = (-)2 turnos más sin tirar) - consolaNormal.imprimir("Se te ha estropeado el motor y deberás estar dos turnos sin tirar mientras se arregla."); - } - } - } - } - - private void nextJugador() {//Al final de cada turno, avanzamos jugador; - if (jugadores.indexOf(jugadorActual) == (jugadores.size() - 1)) - jugadorActual = jugadores.get(0); - else jugadorActual = jugadores.get(jugadores.indexOf(jugadorActual) + 1); - } - - private void accionSuerte(int numCarta) { - consolaNormal.imprimir(carta.getCartasSuerte().get(numCarta)); - switch (numCarta) { - case 0: - int contC = 0, contH = 0, contP = 0, contD = 0; - for (Casilla ite : jugadorActual.getPropiedades()) { - if (ite instanceof Solar) for (Edificio cite : ((Solar) ite).getEdificios()) { - if (cite instanceof Casa) contC++; - if (cite instanceof Hotel) contH++; - if (cite instanceof Piscina) contP++; - if (cite instanceof Pista) contD++; - } - } - - int total = (100 * contC) + (200 * contH) + (300 * contP) + (400 * contD); - if (total == 0) { - consolaNormal.imprimir("Como aun no tienes edificios construidos, te libras"); - } else { - consolaNormal.imprimir("En total, tienes que pagar" + total + "$"); - pagarAv(jugadorActual, total); - //jugadorActual.pagar(total); MAL - } - break; - - case 1: - ArrayList aux = new ArrayList<>(6); - for (Jugador ite : jugadores) { - if (!jugadorActual.equals(ite)) - aux.add(ite); //creamos una lista de los jugadores a los que pagar - } - for (Jugador ite : aux) { - pagarAv(jugadorActual, 500, ite); - jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + 500); - ite.setPremiosInversionesOBote(ite.getPremiosInversionesOBote() + 500); - } - break; - - case 2: - jugadorActual.addDinero(1000); - jugadorActual.setPremiosInversionesOBote(jugadorActual.getPremiosInversionesOBote() + 1000); - break; - - case 3: - jugadorActual.getAvatar().setPosicion((jugadorActual.getAvatar().getPosicion() - 3), tablero.getCasillas()); - tablero.imprimirTablero(); - accionCasilla(); - break; - - case 4: - int pTCercano = 5; - switch (jugadorActual.getAvatar().getPosicion()){ - case 7: - pTCercano = 15; - break; - case 22: - pTCercano = 25; - break; - case 36: - //pTCercano a 5 por defecto - consolaNormal.imprimir("Has pasado por la casilla de salida, cobras" + pSalida); - jugadorActual.addDinero(pSalida); - jugadorActual.setPasarPorCasillaDeSalida(jugadorActual.getPasarPorCasillaDeSalida() + pSalida); - addVuelta(jugadorActual); - break; - } - jugadorActual.getAvatar().setPosicion(pTCercano, tablero.getCasillas()); - tablero.imprimirTablero(); - Propiedad tCercano; - if (tablero.getCasilla(pTCercano) instanceof Transporte) tCercano = (Propiedad) tablero.getCasilla(pTCercano); - else break; - - int alquilersuerte = ((Transporte)tCercano).calcularAlquiler() * 2; - - if (!tCercano.getPropietario().equals(jugadorActual) && !tCercano.getPropietario().equals(banca) && !tCercano.getHipotecado()) { - pagarAv(jugadorActual, alquilersuerte, tCercano.getPropietario()); - tCercano.setRentabilidad(tCercano.getRentabilidad() + alquilersuerte); - jugadorActual.setPagoDeAlquileres(jugadorActual.getPagoDeAlquileres() + alquilersuerte); - tCercano.getPropietario().setCobroDeAlquileres(tCercano.getPropietario().getCobroDeAlquileres() + alquilersuerte); - consolaNormal.imprimir("Pagas " + alquilersuerte + "$ por caer en " + tCercano.getNombre()); - } else if (tCercano.getHipotecado()) { - consolaNormal.imprimir("La casilla de transporte esta hipotecada... No pagas alquiler :)"); - } - case 5: - jugadorActual.addDinero(2000); - jugadorActual.setPremiosInversionesOBote(jugadorActual.getPremiosInversionesOBote() + 2000); - break; - } - } - - private void accionCajaC(int numCarta) { - consolaNormal.imprimir(carta.getCartasCajaC().get(numCarta)); - switch (numCarta) { - case 0: - ArrayList aux = new ArrayList<>(6); - for (Jugador ite : jugadores) { - if (!jugadorActual.equals(ite)) - aux.add(ite); //literal igual que en suerte - } - for (Jugador ite : aux) { - pagarAv(jugadorActual, 200, ite); - jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + 200); - ite.setPremiosInversionesOBote(ite.getPremiosInversionesOBote() + 200); - } - break; - - case 1: - jugadorActual.getAvatar().setPosicion(30, tablero.getCasillas()); - accionCasilla(); - break; - - case 2: - jugadorActual.getAvatar().setPosicion(0, tablero.getCasillas()); - jugadorActual.addDinero(pSalida); - jugadorActual.setPasarPorCasillaDeSalida(jugadorActual.getPasarPorCasillaDeSalida() + pSalida); - addVuelta(jugadorActual); - break; - - case 3: - jugadorActual.getAvatar().setPosicion(34, tablero.getCasillas()); - accionCasilla(); //un poco cutre pq no hace falta hacer la comprobacion de salida - break; - - case 4: - jugadorActual.pagar(1000); - jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + 1000); - break; - - case 5: - jugadorActual.addDinero(2000); - jugadorActual.setPremiosInversionesOBote(jugadorActual.getPremiosInversionesOBote() + 2000); - break; - } - } - - /** - * Llamamos a funciones internas para todos los tipos de casilla menos para cartas - * En este caso necesitábamos acceder a demasiados métodos y atributos de juego para que tuviese sentido - */ - public void accionCasilla() { - contadorCasillas.get(jugadorActual).put(jugadorActual.getCasilla(tablero.getCasillas()), contadorCasillas.get(jugadorActual).get(jugadorActual.getCasilla(tablero.getCasillas())) + 1); - Casilla casilla = jugadorActual.getCasilla(tablero.getCasillas()); - if (casilla instanceof Solar) ((Solar) casilla).accionCasilla(jugadorActual); - else if (casilla instanceof Transporte) ((Transporte) casilla).accionCasilla(jugadorActual); - else if (casilla instanceof Servicios) ((Servicios) casilla).accionCasilla(jugadorActual,dado); - else if (casilla instanceof Impuesto) ((Impuesto) casilla).accionCasilla(jugadorActual); - else if (casilla instanceof ParkingGratuito) ((ParkingGratuito) casilla).accionCasilla(jugadorActual); - else if (casilla instanceof VasALaCarcel) ((VasALaCarcel) casilla).accionCasilla(jugadorActual,tablero.getCasillas(),dado); - else if (casilla instanceof Salida) ((Salida) casilla).accionCasilla(); - else if (casilla instanceof Carcel) ((Carcel) casilla).accionCasilla(jugadorActual); - - else if (casilla instanceof Comunidad || casilla instanceof Suerte) { - carta = new Carta(jugadorActual.getAvatar().getPosicion()); - carta.barajar(); - int indice = consolaNormal.leerInt("Elige una carta (introduciendo un numero del 1 al 6)"); - int numCarta = (carta.getCartas().get(indice - 1)); - if (carta.getTipo() == 0) - accionSuerte(numCarta); - if (carta.getTipo() == 1) - accionCajaC(numCarta); - } - } - - - - /** - * Función de compra de la casilla, con comprobación de si el jugadorActual tienen suficiente dinero - * Realiza la transacción correspondiente entre el jugador y la banca, y mueve la propiedad de la Procesos.Casilla, y del grupo en caso de que corresponda - */ - public void comprarCasilla() { //todo garantizar que se añade a propie - Casilla casillac = jugadorActual.getCasilla(tablero.getCasillas()); - if (!(casillac instanceof Propiedad)) { //RARO - consolaNormal.imprimir("No puedes comprar esta casilla"); - return; - } - Propiedad casilla = (Propiedad) casillac; - if (jugadorActual.getDinero() >= casilla.getPrecio()) { - casilla.getPropietario().addDinero(casilla.getPrecio()); - casilla.setPropietario(jugadorActual); - jugadorActual.setDinero(jugadorActual.getDinero() - casilla.getPrecio()); - jugadorActual.setDineroInvertido(jugadorActual.getDineroInvertido() + casilla.getPrecio()); - jugadorActual.setFortuna(jugadorActual.getFortuna() + casilla.getPrecio()); - } else consolaNormal.imprimir("Cuidado... Ya no tienes dinero suficiente para comprar esta casilla."); - } - - - //INTERFAZ COMANDO - /** - * ayuda copia los condicionales de menuAcción para enseñar al jugador las opciones que tiene disponibles. - * - * @param haTirado si el jugadorActual ha tirado ya en este turno - */ - public void ayuda(boolean haTirado){ - consolaNormal.imprimir("Listado de acciones"); - } - public void imprimirTablero(){ - tablero.imprimirTablero(); - } - public void jugador(){ - consolaNormal.imprimir("Nombre: " + jugadorActual.getNombre()); - consolaNormal.imprimir("Avatar: " + jugadorActual.getAvatar()); - consolaNormal.imprimir("Dinero: " + jugadorActual.getDinero()); - consolaNormal.imprimir("Posición: " + jugadorActual.getAvatar().getPosicion()); - } - public boolean tirarDados(boolean haTirado, String[] entradaPartida){ -// EN PRIMER LUGAR, COMPROBAMOS SI EL JUGADOR ESTÁ EN LA CÁRCEL Y EJECUTAMOS LAS ACCIONES CORRESPONDIENTES - if (jugadorActual.getAvatar().inCarcel()) { - if (jugadorActual.getAvatar().getTurnosCarcel() == 1) { - //En el último turno de carcel, tiene que pagar, y no juega, no puede tirar más veces - consolaNormal.imprimir("Ya no puedes tirar más veces los dados :("); - } - else if (jugadorActual.getAvatar().getTurnosCarcel() > 1) { - consolaNormal.imprimir("Te quedan " + (jugadorActual.getAvatar().getTurnosCarcel() - 1) + " oportunidades para salir de la cárcel tirando los dados. ¡Adelante!"); - if (entradaPartida.length == 5 && entradaPartida[2].equals("trucados")) { - dado.tirarDados(Integer.parseInt(entradaPartida[3]), Integer.parseInt(entradaPartida[4])); - jugadorActual.addVecesDados(); - } else { - dado.tirarDados(); - jugadorActual.addVecesDados(); - } - if (dado.areEqual()) { - consolaNormal.imprimir("¡Dados dobles! Enhorabuena, sales de la cárcel :)"); - return true; - } else { - consolaNormal.imprimir("Oh no... No has sacado dados dobles. Te quedas en la cárcel."); - jugadorActual.getAvatar().setTurnosCarcel(jugadorActual.getAvatar().getTurnosCarcel() - 1); - return true; - } - } - } else { // SI NO ESTÁ EN LA CÁRCEL... - - // 1. NO LE DEJAMOS TIRAR SI TIENE EL MOTOR ROTO - if (jugadorActual.getAvatar().getTipoMov() == 1 && jugadorActual.getAvatar().getAuxMovAvanzado() < 0) { // importante no poner movAuxActivado para evitar exploit de que el usuario reinicie los turnos sin poder moverse mediante la introducción de cambiar movimiento - consolaNormal.imprimir("Tu motor sigue roto. ¡No puedes moverte!"); - return true; - } - - // 2. HACEMOS RETURN EN LOS CASOS EN LOS QUE *NO* PUEDE LANZAR DADOS - - if (!puedeTirarOtraVez(haTirado)) { - consolaNormal.imprimir("¡No puedes volver a tirar los dados!"); - return true; - } - - // SI LLEGAMOS HASTA AQUÍ, EL JUGADOR PUEDE TIRAR. PROCEDEMOS A TIRAR: - - if (entradaPartida.length == 5 && entradaPartida[2].equals("trucados")) { - dado.tirarDados(Integer.parseInt(entradaPartida[3]), Integer.parseInt(entradaPartida[4])); - jugadorActual.addVecesDados(); - } else { - dado.tirarDados(); - jugadorActual.addVecesDados(); - } - consolaNormal.imprimir("Has sacado un " + dado.getDado1() + " y un " + dado.getDado2()); - - // REALIZAMOS LA ACCIÓN CORRESPONDIENTE SI SE SACA DOBLES: - - if (dado.areEqual()) { - if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov() == 1) { // Si es coche, solo importan los dobles en la última tirada. - if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0) - consolaNormal.imprimir("Has sacado dobles! Puedes volver a tirar."); - } else { // De ser de otro modo, siempre importan los dobles, así que imprimimos el mensaje correspondiente. - consolaNormal.imprimir("Has sacado dobles! Puedes volver a tirar."); - } - if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov() == 0 && jugadorActual.getAvatar().getAuxMovAvanzado() == 999) { - consolaNormal.imprimir("Como el movimiento avanzado está activado, la tirada extra de dados será cuando pases por todas las paradas."); - } - } - - // DESPUÉS DE TIRAR, AVANZAMOS EN MOVIMIENTO NORMAL O AVANZADO, SEGÚN CORRESPONDA: - - // Primero, mandamos a la cárcel si corresponde - if (dado.getC() == 3) { - consolaNormal.imprimir("Has sacado dados dobles 3 veces seguidas. ¡Vas a la cárcel! "); - jugadorActual.getAvatar().enviarCarcel(tablero.getCasillas()); - if (!jugadorActual.getAvatar().getMovAvanzadoActivado() || (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov() == 1)) - tablero.imprimirTablero(); - return true; - } - - // Si el Movimiento Avanzado está activado... - if (jugadorActual.getAvatar().getMovAvanzadoActivado()) { - if (jugadorActual.getAvatar().getTipoMov() == 0) { // MOVIMIENTO AVANZADO "PELOTA" ------------------------------------------------------------------------------ - if(jugadorActual.getAvatar().getAuxMovAvanzado()==999){ // Si es el primer turno - jugadorActual.getAvatar().avanzarCasillasAvanzado(this, tablero, dado.getSuma(), jugadorActual, banca); - }else{ // Si no es el primer turno y puede tirar, significa que ha sacado dobles. No obstante, tira en movimiento simple. - jugadorActual.getAvatar().avanzarCasillasSimple(this, tablero, dado.getSuma(), jugadorActual, banca); - } - } - if (jugadorActual.getAvatar().getTipoMov() == 1) { // MOVIMIENTO AVANZADO "COCHE" ------------------------------------------------------------------------------ - if (jugadorActual.getAvatar().getAuxMovAvanzado() == 999) { // Si es el primer turno - jugadorActual.getAvatar().avanzarCasillasAvanzado(this, tablero, dado.getSuma(), jugadorActual, banca); - } else { // Si no es el primer turno... - if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0) { // Si ya acabó sus tiradas extra y puede tirar, significa que ha sacado dobles. Nos movemos en modo simple sin restar auxMovAvanzado. - jugadorActual.getAvatar().avanzarCasillasSimple(this, tablero, dado.getSuma(), jugadorActual, banca); - } else { // Si no acabó sus tiradas extra - if (dado.getSuma() > 3) { - jugadorActual.getAvatar().setAuxMovAvanzado(jugadorActual.getAvatar().getAuxMovAvanzado() - 1); // Restamos 1 a las tiradas extra - jugadorActual.getAvatar().avanzarCasillasSimple(this, tablero, dado.getSuma(), jugadorActual, banca); - // Avisamos de cuántas tiradas extra le quedan - if (jugadorActual.getAvatar().getAuxMovAvanzado() > 0) { - Juego.getConsolaNormal().imprimir("\nLanzamientos extra restantes: %d. Cuando saques menos de un 4, no podrás tirar de nuevo.\n" + jugadorActual.getAvatar().getAuxMovAvanzado()); - } else { - Juego.getConsolaNormal().imprimir("\nNo te quedan más lanzamientos extra por el movimiento especial.\n"); - if (dado.areEqual()) { - Juego.getConsolaNormal().imprimir("\nPero como has sacado dobles... ¡Tienes otra tirada extra!\n"); - } - } - } else { // Si saca menos de 4, no se mueve y además no tiene más tiradas extra. - jugadorActual.getAvatar().setAuxMovAvanzado(0); - consolaNormal.imprimir("\nHas sacado menos de un 4, por lo que no tienes más lanzamientos extra."); - if (dado.areEqual()) { - Juego.getConsolaNormal().imprimir("\nPero como has sacado dobles... ¡Tienes otra tirada más!\n"); - } - } - } - } - } - } else { // Si el movimiento avanzado no está activado - jugadorActual.getAvatar().avanzarCasillasSimple(this, tablero, dado.getSuma(), jugadorActual, banca); - } - tablero.imprimirTablero(); - accionCasilla(); - return true; - } // Finalización del "if" "¿Está en la cárcel?" - return false; - } - - public void comprar(String[] entradaPartida, boolean haTirado){ //todo comprobar si funciona; PQ FUERON MAZO DE CAMBIOS - if (jugadorActual.getBancarrota()) { - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); - } - else if (!haTirado) { - consolaNormal.imprimir("Aun no has tirado los dados. Tiralos para poder comprar propiedades"); - } - else if (entradaPartida.length > 1 && entradaPartida[1].equals("propiedad") || entradaPartida[1].equals(jugadorActual.getAvatar().getCasilla(tablero.getCasillas()).getNombre())) { - if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov() == 1) { // Si es coche - if (((Coche) jugadorActual.getAvatar()).getPuedeComprarPropiedades()) { - if (!jugadorActual.getAvatar().getCasilla(tablero.getCasillas()).isComprable()) { - consolaNormal.imprimir("No puedes comprar esta propiedad"); - } else { - comprarCasilla(); - consolaNormal.imprimir("Propiedad comprada con éxito por " + ((Propiedad) jugadorActual.getAvatar().getCasilla(tablero.getCasillas())).getPrecio() + "$"); - consolaNormal.imprimir("No podrás comprar más propiedades, casillas, servicios o transportes hasta que acabe tu turno."); - ((Coche) jugadorActual.getAvatar()).setPuedeComprarPropiedades(false); - } - } else { - consolaNormal.imprimir("No puedes comprar más propiedades, casillas, servicios o transportes hasta que acabe tu turno."); - } - } - else if (!jugadorActual.getAvatar().getCasilla(tablero.getCasillas()).isComprable()) { - consolaNormal.imprimir("No puedes comprar esta propiedad"); - //break; - } else { - comprarCasilla(); - consolaNormal.imprimir("Propiedad comprada con éxito por " + ((Propiedad) jugadorActual.getAvatar().getCasilla(tablero.getCasillas())).getPrecio() + "$"); - } - } else { //Si está intentando comprar otra propiedad le avisamos... - boolean c = true; - for (Casilla ite : getTablero().getCasillas()) { - if (entradaPartida[1].equals(ite.getNombre())) { - consolaNormal.imprimir("Solo puedes comprar la casilla en la que caes..."); - c = false; - } - } - if (c) consolaNormal.imprimir("Esta casilla no existe"); - } - } - public void edificar(String[] entradaPartida){ - boolean caidas = false; - caidas = contadorCasillas.get(jugadorActual).get(jugadorActual.getCasilla(tablero.getCasillas())) == 2; - - if (entradaPartida.length > 1) - if (jugadorActual.getCasilla(tablero.getCasillas()) instanceof Solar) - switch (entradaPartida[1]) { - case "casa": - case "Casa": - ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(0, jugadorActual, caidas); - break; - case "hotel": - case "Hotel": - ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(1, jugadorActual, caidas); - break; - case "piscina": - case "Piscina": - ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(2, jugadorActual, caidas); - break; - case "pista": - case "Pista": - ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(3, jugadorActual, caidas); - break; - default: - consolaNormal.imprimir("No existe este edificio. Prueba con casa, hotel, piscina o pista :)"); - } - else - consolaNormal.imprimir("No estás en un solar >: ("); - } - public void venderEdificio(String[] entradaPartida){ - Edificio aux = null; - if (entradaPartida.length > 2) { - String identificador = entradaPartida[1] + " " + entradaPartida[2]; - if (jugadorActual.getPropiedades() != null) for (Propiedad cite : jugadorActual.getPropiedades()) - if (cite instanceof Solar) - - if (((Solar) cite).getEdificios() != null) - for (Edificio eite : ((Solar) cite).getEdificios()) { - if (eite.getIdentificador().equals(identificador)) aux = eite; - } - - if (aux != null) aux.getCasilla().venderEdificio(aux, jugadorActual); - else consolaNormal.imprimir("Identificador inválido..."); - } else consolaNormal.imprimir("Identificador inválido..."); - } - public void hipotecar(String[] entradaPartida){ - if (jugadorActual.getBancarrota()) - consolaNormal.imprimir("Ya no puedes hipotecar, desgraciadamente estas en bancarrota y la partida se ha acabado para ti."); - else if (entradaPartida.length > 1) { - Casilla casilla = tablero.getCasilla(entradaPartida[1]); - if (casilla == null) - consolaNormal.imprimir("Esta casilla no existe"); - else if (!(casilla instanceof Propiedad)) - consolaNormal.imprimir("Esta casilla no es hipotecable"); - else if (!((Propiedad) casilla).getPropietario().equals(jugadorActual)) - consolaNormal.imprimir("No puedes hipotecar una casilla que no es tuya"); - else - ((Propiedad) casilla).hipotecar(); - } - } - public void deshipotecar(String[] entradaPartida){ - if (jugadorActual.getBancarrota()) - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); - else if (entradaPartida.length > 1) { - Casilla casilla = tablero.getCasilla(entradaPartida[1]); - if (casilla == null) - consolaNormal.imprimir("Esta casilla no existe"); - else if (!(casilla instanceof Propiedad)) - consolaNormal.imprimir("Esta casilla no es hipotecable"); - else if (!((Propiedad) casilla).getPropietario().equals(jugadorActual)) { - consolaNormal.imprimir("No puedes deshipotecar una casilla que no es tuya"); - } - else ((Propiedad) casilla).deshipotecar(); - } - } - public void bancarrota(){ - String respuesta = consolaNormal.leer("¿Estás seguro de que quieres declararte en bancarrota?"); - if (respuesta.equals("si") || respuesta.equals("Si") || respuesta.equals("SI")) - jugadorActual.declararBancarrota(cobradorPendiente); - } - public void describirJugador(String[] entradaPartida){ - boolean c = true; - for (Jugador ite : jugadores) { - if (entradaPartida.length > 2 && entradaPartida[2].equals(ite.getNombre())) { - Juego.getConsolaNormal().imprimir(ite.toString()); - c = false; - } - } - if (c) consolaNormal.imprimir("Vaya! No existe este jugador..."); - } - public void describirCasilla(String s){ - if (tablero.getCasilla(s) != null) { - Juego.getConsolaNormal().imprimir(tablero.getCasilla(s).descripcionDetallada()); - } else consolaNormal.imprimir("No hay ninguna casilla que se llame así"); - } - public void describirAvatar(String[] entradaPartida){ - boolean c = true; - for (Jugador ite : jugadores) { - if (entradaPartida.length > 2 && entradaPartida[2].equals(String.valueOf(ite.getAvatar()))) { - Juego.getConsolaNormal().imprimir("{\n" + - "id: " + "A" + ",\n" + //El avatar que corresponda - "tipo: " + "N/A" + ",\n" + - "casilla: " + ite.getCasilla(tablero.getCasillas()).getNombre() + ",\n" + - "jugador: [" + ite.getNombre() + "]\n" + - "}"); - c = false; - } - } - if (c) consolaNormal.imprimir("Vaya! No existe este avatar..."); - } - public void listarJugadores(){ - for (Jugador jugadore : jugadores) { - consolaNormal.imprimir(jugadore.toString()); - } - } - public void listarEnVenta(){ - for (Casilla casilla : tablero.getCasillas()) { - if (casilla.isComprable()) consolaNormal.imprimir(" " + casilla.descripcion()); - } - } - public void listarAvatares(){ - for (Jugador ite : jugadores) { - consolaNormal.imprimir("{\n" + - "id: " + ite.getAvatar() + "\n" + - "tipo: " + "N/A" + ",\n" + - "casilla: " + ite.getCasilla(tablero.getCasillas()) + "\n" + - "jugador: " + ite.getNombre() + "\n" + - "}"); - } - } - public void listarEdificios() { - for (Casilla cite : tablero.getCasillas()) { - if (cite instanceof Solar) - if (((Solar) cite).getEdificios() != null) - for (Edificio eite : ((Solar) cite).getEdificios()) - consolaNormal.imprimir(" " + eite.getIdentificador() + " - " + eite.getCasilla()); - } - } - public void listarEdificiosColor(String[] entradaPartida){ - for (Grupo ite : tablero.getGrupos()) { - if (ite.getColor().equals(entradaPartida[2])) { - for (Solar cite : ite.getCasillas()) { - if (cite != null) - for (Edificio eite : cite.getEdificios()) - consolaNormal.imprimir(" " + eite.getIdentificador() + " - " + eite.getCasilla()); - } - } - } - consolaNormal.imprimir("No se reconoce el grupo/color"); - } - public void salirCarcel(){ - if (!jugadorActual.getAvatar().inCarcel()) { - consolaNormal.imprimir("No estas en la cárcel..."); - } else { - consolaNormal.imprimir("Pagas " + precioCarcel + " para salir de la cárcel."); - pagarAv(jugadorActual, precioCarcel); - jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + precioCarcel); - jugadorActual.getAvatar().setTurnosCarcel(0); - } - } - public void pagarDeuda(){ - if (pagando) { - pagarAv(jugadorActual, pagoPendiente, cobradorPendiente); - } else consolaNormal.imprimir("No tienes nada que pagar :D"); - } - public boolean acabarTurno(boolean haTirado){ - boolean c = false; - if (puedeTirarOtraVez(haTirado) && !jugadorActual.getBancarrota()) { // SI PUEDE TIRAR OTRA VEZ, DEBE HACERLO. AVISAMOS. - consolaNormal.imprimir("Tienes que tirar antes de terminar el turno"); - } - // Sin embargo, existe un caso en el que el jugador no puede tirar, pero tampoco puede acabar el turno. Lo tratamos: - else if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov() == 0 && jugadorActual.getAvatar().getAuxMovAvanzado() == 1) { - // (Si es tipo Pelota, el movimiento avanzado está activado y aún le quedan paradas por recorrer) - consolaNormal.imprimir("¡Aún te quedan paradas por recorrer!"); - } - else if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov() == 1) { // MOVIMIENTO AVANZADO "COCHE" ------------------------------------------------------------------------------ - if (jugadorActual.getAvatar().getAuxMovAvanzado() < 0) { // SI EL JUGADOR QUE ACABA EL TURNO ES UN COCHE CON MOTOR ROTO - jugadorActual.getAvatar().setAuxMovAvanzado(jugadorActual.getAvatar().getAuxMovAvanzado() + 1); - if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0) { - jugadorActual.getAvatar().setAuxMovAvanzado(999); - consolaNormal.imprimir("¡Motor reparado! En el siguiente turno podrás moverte."); - } else{ - Juego.getConsolaNormal().imprimir("\nTurnos restantes para poder moverte: \n" + -jugadorActual.getAvatar().getAuxMovAvanzado()); - ((Coche) jugadorActual.getAvatar()).setPuedeComprarPropiedades(true); - // jugadorActual.setAuxMovAvanzado(999); - if (jugadorActual.getAvatar().getTipoMov() == 1) { - Coche cocheActual = (Coche) jugadorActual.getAvatar(); - cocheActual.setPuedeComprarPropiedades(true); - } - nextJugador(); - consolaNormal.imprimir("Turno de: " + jugadorActual.getNombre()); - c = true; - } - } - } - else if (pagando && !jugadorActual.getBancarrota()) { - consolaNormal.imprimir("Debes saldar tu deuda antes de acabar el turno, o declararte en bancarrota"); - } else { - if (!(jugadorActual.getAvatar().getTipoMov() == 1 && jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getAuxMovAvanzado() < 0)) { - jugadorActual.getAvatar().setAuxMovAvanzado(999); - } - if (jugadorActual.getAvatar().getTipoMov() == 1) { - Coche cocheActual = (Coche) jugadorActual.getAvatar(); - cocheActual.setPuedeComprarPropiedades(true); - } - /* if(jugadorActual.getMovAvanzadoActivado() && jugadorActual.getTipoMov()==0){ - hayBug=true; - } */ - nextJugador(); - consolaNormal.imprimir("Turno de: " + jugadorActual.getNombre()); - c = true; - pagando = false; - cobradorPendiente = banca; - } - return c; - } - - public void cambiarMovimiento(boolean haTirado) { - if (haTirado) { - consolaNormal.imprimir("¡Solo puedes cambiar de movimiento al inicio de tu turno!"); - } else { - jugadorActual.getAvatar().setMovAvanzadoActivado(!jugadorActual.getAvatar().getMovAvanzadoActivado()); - if (jugadorActual.getAvatar().getMovAvanzadoActivado()) - consolaNormal.imprimir("El movimiento avanzado está ahora activado"); - else - consolaNormal.imprimir("El movimiento avanzado está ahora desactivado"); - } - } - - public void estadisticas(){ - consolaNormal.imprimir("Casilla(s) mas rentables: "); - imprimirCasillas(casillaMasRentable()); - consolaNormal.imprimir("Grupo(s) mas rentables: "); - imprimirGrupos(grupoMasRentable(tablero.getCasillas())); - consolaNormal.imprimir("Casilla(s) mas frecuentadas: "); - imprimirCasillas(casillaMasFrecuentada(tablero.getCasillas())); - consolaNormal.imprimir("Jugador(es) con mas vueltas: "); - imprimirJugadores(jugadorMasVueltas(jugadores)); - consolaNormal.imprimir("Jugador(es) con mas tiradas de dado: "); - imprimirJugadores(jugadorMasDados(jugadores)); - consolaNormal.imprimir("Jugador(es) en cabeza: "); - imprimirJugadores(jugadorEnCabeza(jugadores)); - } - public void estadisticasJugador(String[] entradaPartida){ - for (Jugador ite : jugadores) { - if (entradaPartida[1].equals(ite.getNombre())) { - consolaNormal.imprimir("Dinero invertido: " + ite.getDineroInvertido()); - consolaNormal.imprimir("Pago Tasas e Impuestos: " + ite.getPagoTasasEImpuestos()); - consolaNormal.imprimir("Pago De Alquileres: " + ite.getPagoDeAlquileres()); - consolaNormal.imprimir("Cobro de Alquileres: " + ite.getCobroDeAlquileres()); - consolaNormal.imprimir("Dinero por pasar por la casilla de salida:" + ite.getPasarPorCasillaDeSalida()); - consolaNormal.imprimir("Premios por inversiones o bote: " + ite.getPremiosInversionesOBote()); - consolaNormal.imprimir("Veces en la carcel: " + ite.getVecesEnLaCarcel()); - break; - } - } - } - - - public boolean menuAccion(boolean haTirado) { //Lee y llama a la acción indicada sobre el jugadorActual - //Comprobaciones/actualizaciones en cada turno - actualizarPropietarioCasillas(); - // System.out.printf("\nAuxiliar es %d\n", jugadorActual.getAuxMovAvanzado()); - - String[] entradaPartida = consolaNormal.leerFragmentado("Introduce una acción. Puedes escribir \"ayuda\" para obtener un listado de acciones.\n $>"); - - switch (entradaPartida[0]) { //Si no reconoce lo introducido, no llamamos a nada, se llama después del switch - //case "numero": consolaNormal.imprimir(jugadores.size());break; - case "ayuda": - case "Ayuda": - ayuda(haTirado); - break; - case "jugador": - case "Jugador": - jugador(); - case "listar": - if (entradaPartida.length > 1) switch (entradaPartida[1]) { - case "Jugadores": - case "jugadores": - listarJugadores(); - break; - case "en": - case "En": - if (entradaPartida.length > 2 && (entradaPartida[2].equals("venta") || entradaPartida[2].equals("Venta"))) { - listarEnVenta(); - } - break; - case "Avatares": - case "avatares": - listarAvatares(); - break; - case "Edificios": - case "edificios": - if (entradaPartida.length > 2) { - listarEdificiosColor(entradaPartida); - } else listarEdificios(); - break; - } - break; - case "hipotecar": - case "Hipotecar": - hipotecar(entradaPartida); - break; - case "deshipotecar": - case "Deshipotecar": - deshipotecar(entradaPartida); - break; - case "comprar": - comprar(entradaPartida, haTirado); - break; - case "salir": - if (jugadorActual.getBancarrota()) { - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); - break; - } - if (entradaPartida.length > 1) - if (entradaPartida[1].equals("carcel") || entradaPartida[1].equals("cárcel")) { - salirCarcel(); - } - break; - case "ver": - if (entradaPartida[1].equals("tablero")) { - imprimirTablero(); - } - break; - case "tirar": - case "lanzar": - if (jugadorActual.getBancarrota()) { - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); - break; - } - if (entradaPartida[1].equals("dados")) { - haTirado = tirarDados(haTirado,entradaPartida); - } - break; - case "cambiar": - if (entradaPartida.length > 1 && entradaPartida[1].equals("movimiento")) { - cambiarMovimiento(haTirado); - } - break; - case "describir": - case "descripción": - case "descripcion": - if (entradaPartida.length > 1) switch (entradaPartida[1]) { - case "jugador": - case "Jugador": - describirJugador(entradaPartida); - break; - case "avatar": - case "Avatar": - describirAvatar(entradaPartida); - break; - default: - describirCasilla(entradaPartida[1]); - } - case "fin": - if (entradaPartida.length > 1 && entradaPartida[1].equals("partida")) return false; - break; - case "pagar": - if (jugadorActual.getBancarrota()) { - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); - break; - } - pagarDeuda(); - break; - case "acabar": - if (entradaPartida.length > 1 && entradaPartida[1].equals("turno")) { - if (acabarTurno(haTirado)) - return true; - } - if (entradaPartida.length > 1 && entradaPartida[1].equals("parada")) { - if(jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov()==0 && jugadorActual.getAvatar().getAuxMovAvanzado()==0){ - System.out.println("Ya has pasado por todas tus paradas."); - break; - } - else if(!jugadorActual.getAvatar().getMovAvanzadoActivado() || (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov()==1)){ - System.out.println("¿Paradas? Bro think he pelota con movAvanzadoActivado"); - break; - } - else if (!(jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getTipoMov()==0)) tablero.imprimirTablero(); - return haTirado; - } - break; - case "bancarrota": - case "Bancarrota": - if (jugadorActual.getBancarrota()) { - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, tristemente la partida se ha acabado para ti."); - break; - } - bancarrota(); - break; - case "estadisticas": - case "estadísticas": - if (entradaPartida.length > 1) { - estadisticasJugador(entradaPartida); - } else { - estadisticas(); - } - break; - case "edificar": - case "construir": - if (jugadorActual.getBancarrota()) { - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); - break; - } - edificar(entradaPartida); - break; - case "vender": - case "Vender": - if (jugadorActual.getBancarrota()) { - consolaNormal.imprimir("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); - break; - } - venderEdificio(entradaPartida); - break; - default: - consolaNormal.imprimir("No se reconoce la acción... Introduce 'ayuda' para ver tus opciones."); - } - return menuAccion(haTirado); - } - - private void pagarAv(Jugador pagador, int importe) { - pagarAv(pagador, importe, banca); - } - - private void pagarAv(Jugador pagador, int importe, Jugador cobrador) { - while (!pagador.pagar(importe, cobrador) && !pagador.getBancarrota()) { - consolaNormal.imprimir("No tienes suficiente para pagar tu deuda, debes vender o hipotecar propiedades... "); - cobradorPendiente = cobrador; - pagoPendiente = importe; - gestInsuf(); - } - cobradorPendiente = banca; - pagando = false; - } - - /** - * Gestión de dinero insuficiente. Llama a menú solo con opciones de vender, hipotecar e información... - */ - private void gestInsuf() { - pagando = true; - menuAccion(true); - } - - private void actualizarPropietarioCasillas() { - for (Casilla ite : tablero.getCasillas()) { - if (ite instanceof Propiedad) - if (((Propiedad) ite).getPropietario() == null) ((Propiedad) ite).setPropietario(banca); - } - } - - public void turnoInicial() { - int cont = 0; //Para controlar el numero de jugadores inicializados - consolaNormal.imprimir("Bienvenidos. Empezaremos definiendo los jugadores."); - String entradaString; - - do { //J1 - entradaString = consolaNormal.leer("Introduce crear jugador para darte de alta: "); - } while (!entradaString.contains("crear jugador")); - darAlta(); - consolaNormal.imprimir("¡Primer jugador registrado!"); - do { //J2 - entradaString = consolaNormal.leer("Introduce crear jugador para darte de alta: ");; - } while (!entradaString.contains("crear jugador")); - darAlta(); - consolaNormal.imprimir("¡Segundo jugador registrado!"); - - do { - do { //Jx - entradaString = consolaNormal.leer("Ahora puedes introducir 'crear jugador' para darte de alta o 'empezar juego' para comenzar a jugar: "); - } while (!entradaString.contains("crear jugador") && !entradaString.contains("empezar juego")); - - if (entradaString.contains("crear jugador")) { - darAlta(); - cont++; - consolaNormal.imprimir("¡Jugador registrado!"); - } - - } while (!entradaString.contains("empezar juego") && cont < 4); - if (cont == 4) consolaNormal.imprimir("No se pueden agregar más jugadores"); - consolaNormal.imprimir("¡Jugadores registrados!"); - - jugadorActual = jugadores.get(0); - - tablero.getCasilla(0).setOcupantes(jugadores); - - // Inicializar el contador para cada jugador y cada casilla - for (Jugador jugador : jugadores) { - contadorCasillas.put(jugador, new HashMap<>()); - for (Casilla casilla : tablero.getCasillas()) { - contadorCasillas.get(jugador).put(casilla, 0); - } - } - } - - public void addVuelta(Jugador jugador) { - jugador.setVueltas(jugador.getVueltas() + 1); - for (Jugador ite : jugadores) { //Comprobamos que sea el jugador que va de último - if (jugador.getVueltas() > ite.getVueltas()) return; - } - if (jugador.getVueltas() % 4 == 0 && jugador.getVueltas() != 0) //Y que comienza una vuelta múltiplo de 4 - actualizarPrecioCasillas(); - } - - private void actualizarPrecioCasillas() { - for (Casilla ite : getTablero().getCasillas()) - if (ite instanceof Propiedad) - if (((Propiedad) ite).getPropietario().isBanca()) { - ((Propiedad) ite).setPrecio((int) (((Propiedad) ite).getPrecio() * 1.05)); - } - } - - private ArrayList casillaMasRentable() { - ArrayList casillas = tablero.getCasillas(); - int maximo = 0; - for (Casilla ite : casillas) { - if (ite instanceof Propiedad) - if (((Propiedad) ite).getRentabilidad() > maximo) - maximo = ((Propiedad) ite).getRentabilidad(); - } - - ArrayList casillasConMaximo = new ArrayList<>(); - for (Casilla ite : casillas) { - if (ite instanceof Propiedad) - if (((Propiedad) ite).getRentabilidad() == maximo) - casillasConMaximo.add(ite); - } - return casillasConMaximo; - } - - private void imprimirCasillas(ArrayList casillasEstad) { - for (Casilla ite : casillasEstad) - Juego.getConsolaNormal().imprimir(ite.getNombre() + ", "); - consolaNormal.imprimir("\n"); - } - - private void imprimirGrupos(ArrayList gruposEstad) { - for (Grupo ite : gruposEstad) - Juego.getConsolaNormal().imprimir(ite.getColor() + ", "); - consolaNormal.imprimir("\n"); - } - - private ArrayList grupoMasRentable(ArrayList tablero) { - int maximo = 0; - for (Casilla ite : tablero) { - if (ite instanceof Solar) { - if (((Solar) ite).getGrupo().getRentabilidad() > maximo) - maximo = ((Solar) ite).getGrupo().getRentabilidad(); - } - } - ArrayList gruposConMaximo = new ArrayList<>(); - for (Casilla ite : tablero) { - if (ite instanceof Solar) { - if (((Solar) ite).getGrupo().getRentabilidad() == maximo && !gruposConMaximo.contains(((Solar) ite).getGrupo())) - gruposConMaximo.add(((Solar) ite).getGrupo()); - } - } - return gruposConMaximo; - } - - private ArrayList casillaMasFrecuentada(ArrayList tablero) { - int maximo = tablero.get(0).getVisitas(); - for (Casilla ite : tablero) { - if (ite.getVisitas() > maximo) { - maximo = ite.getVisitas(); - } - } - ArrayList casillasConMaximo = new ArrayList<>(); - for (Casilla ite : tablero) { - if (ite.getVisitas() == maximo) { - casillasConMaximo.add(ite); - } - } - return casillasConMaximo; - } - - private ArrayList jugadorMasVueltas(ArrayList jugadores) { - int maximo = jugadores.get(0).getVueltas(); - for (Jugador ite : jugadores) { - if (ite.getVueltas() > maximo) { - maximo = ite.getVueltas(); - } - } - ArrayList jugadoresConMaximo = new ArrayList<>(); - for (Jugador ite : jugadores) { - if (ite.getVueltas() == maximo) { - jugadoresConMaximo.add(ite); - } - } - return jugadoresConMaximo; - } - - private ArrayList jugadorMasDados(ArrayList jugadores) { - int maximo = jugadores.get(0).getVecesDados(); - for (Jugador ite : jugadores) { - if (ite.getVecesDados() > maximo) { - maximo = ite.getVecesDados(); - } - } - ArrayList jugadoresConMaximo = new ArrayList<>(); - for (Jugador ite : jugadores) { - if (ite.getVecesDados() == maximo) { - jugadoresConMaximo.add(ite); - } - } - return jugadoresConMaximo; - } - - private ArrayList jugadorEnCabeza(ArrayList jugadores) { - int maximo = jugadores.get(0).getFortuna(); - for (Jugador ite : jugadores) { - if (ite.getFortuna() > maximo) { - maximo = ite.getFortuna(); - } - } - ArrayList jugadoresConMaximo = new ArrayList<>(); - for (Jugador ite : jugadores) { - if (ite.getFortuna() == maximo) { - jugadoresConMaximo.add(ite); - } - } - return jugadoresConMaximo; - } - - private void imprimirJugadores(ArrayList jugadoresEstad) { - for (Jugador ite : jugadoresEstad) - Juego.getConsolaNormal().imprimir(ite.getNombre() + ", "); - consolaNormal.imprimir("\n"); - } - - private boolean puedeTirarOtraVez(boolean haTirado) { - if (jugadorActual.getAvatar().getMovAvanzadoActivado()) { // SI ESTÁ EL MOVIMIENTO AVANZADO ACTIVADO, DISTINGUIMOS ENTRE "PELOTA" Y "COCHE" - if (jugadorActual.getAvatar().getTipoMov() == 0) { // MOVIMIENTO AVANZADO "PELOTA" ------------------------------------------------------------------------------ - if (jugadorActual.getAvatar().getAuxMovAvanzado() == 1) { // Si le quedan paradas sin recorrer, no puede tirar - return false; - } - if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0 && !dado.areEqual()) { // Si no le quedan paradas y tampoco sacó dobles, no puede tirar - return false; - } - } - - if (jugadorActual.getAvatar().getTipoMov() == 1) { // MOVIMIENTO AVANZADO "COCHE" ------------------------------------------------------------------------------ - if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0 && !dado.areEqual()) { // Si se le acabaron las tiradas extra y no sacó dobles en la anterior, no puede tirar - return false; - } - // Motor roto - return jugadorActual.getAvatar().getTipoMov() != 1 || jugadorActual.getAvatar().getAuxMovAvanzado() >= 0; - } - } else { // SI NO ESTÁ ACTIVADO EL MOV AVANZADO... - return !haTirado || dado.areEqual(); - } - return true; // En el resto de los casos, el jugador SÍ puede tirar. - } -} - +package Juego; + +import java.util.*; + +import Juego.Exceptions.*; +import Juego.Exceptions.Comandos.*; +import Juego.Exceptions.Lectura.*; +import Juego.Exceptions.Hipotecar.*; +import Juego.Exceptions.Comprar.*; +import Procesos.*; +import Procesos.Casillas.*; +import Procesos.Avatares.*; + +public final class Juego implements Comando{ + private static ConsolaNormal consolaNormal; + //ATRIBUTOS + private static Tablero tablero; + private final int dineroInicial; + private final int pSalida; //Premio salida + private int pBase; //Precio casilla primer grupo + private Jugador jugadorActual; + private final ArrayList jugadores; + // private boolean hayBug; //Encontramos un error por el cual, tras la finalización del turno de un coche con movimiento avanzado, el siguiente jugador no puede tirar. Este booleano lo detectará y nos permitirá solucionarlo en menuAccion. + + private final Jugador banca; + private final Dado dado; + private final CartaSuerte cartaSuerte; + private final CartaCajaC cartaCajaC; + private final int precioCarcel; + private static boolean pagando; //Un booleano que se activa si el usuario está en trámites de pagar una deuda (para darle opciones de vender, hipotecar, etc)... + private static int pagoPendiente; + private static Jugador cobradorPendiente; + private final StringBuilder avataresRep = new StringBuilder("!"); + + Map> contadorCasillas = new HashMap<>(); + + public static ConsolaNormal getConsolaNormal() { + return consolaNormal; + } + + private char generaCharRandom() { + Random randomC = new Random(); + return (char) (randomC.nextInt(26) + 'A'); + } + + //CONSTRUCTORES + public Juego() { + jugadores = new ArrayList<>(6); //La banca se maneja como un jugador externo (banca). + banca = new Jugador(); + pSalida = Grupo.mediaSolares(); + tablero = new Tablero(pBase, pSalida, banca); + dado = new Dado(); + dineroInicial = tablero.precioTotal() / 3; + precioCarcel = (int) (pSalida * 0.25); + pBase = 100; + pagando = false; + cobradorPendiente = banca; + pagoPendiente = 0; + consolaNormal = new ConsolaNormal(); + cartaSuerte= new CartaSuerte(); + cartaCajaC= new CartaCajaC(); + } + + //METODOS PUBLICOS + public void darAlta(String nombre,int tipoMov){ + char miAvatar = generaAvatar(); + + Avatar avatar; + if (tipoMov == 0) { + avatar = new Coche(miAvatar); + } else { + avatar = new Pelota(miAvatar); + } + Jugador j = new Jugador(dineroInicial, nombre, avatar); + avatar.setJugador(j); + jugadores.add(j); + for (Jugador ite : jugadores) + ite.setFortuna(dineroInicial); + } + + public void darAlta() { + String miNombre = consolaNormal.leer("Introduce tu nombre, Jugador " + (jugadores.size() + 1) + " : \n"); + char miAvatar = generaAvatar(); + String inputTipo; + do { + inputTipo = consolaNormal.leer("Elige tipo de ficha (coche o pelota): "); + if (inputTipo.equalsIgnoreCase("coche")) { + Coche coche = new Coche(miAvatar); + Jugador jugador = new Jugador(dineroInicial, miNombre, coche); + coche.setJugador(jugador); // Establecer la relación inversa + jugadores.add(jugador); + break; + } + else if (inputTipo.equalsIgnoreCase("pelota")) { + Pelota pelota = new Pelota(miAvatar); + Jugador jugador = new Jugador(dineroInicial, miNombre, pelota); + pelota.setJugador(jugador); // Establecer la relación inversa + jugadores.add(jugador); + break; + } + else { + consolaNormal.imprimir("Tipo no válido. Por favor, introduce coche o pelota."); + } + } while (true); + for (Jugador ite : jugadores) + ite.setFortuna(dineroInicial); + } + + private char generaAvatar() { + char miavatar; + do { + miavatar = generaCharRandom(); + } while (avataresRep.toString().contains(String.valueOf(miavatar))); + avataresRep.append(miavatar); + return miavatar; + } + + //GETTERS + + public int getPSalida(){ + return pSalida; + } + + public Tablero getTablero() { + return tablero; + } + + + //Ejecución del juego + + /** + * Este método mueve al jugador y ejecuta las funciones de la casilla de salida + * Si el movimiento activado está desactivado, no llama al siguiente turno, ni al menú, ni nada, eso va fuera + * Pero como diría J. Mota, ¿pero y si sí? Si está activado, es necesario que se ejecuten ciertas acciones dentro de la función. + * + * @param avance, movAvanzado + */ + private void avanzarCasillas(int avance, boolean movAvanzado) throws LeerException { + if (!movAvanzado) { + if (avance >= 0) { // Funcionamiento normal (realmente podríamos poner "if getposicion+avance >0" pero así queda más legible) + if ((jugadorActual.getAvatar().getPosicion() + avance) > 39) { + addVuelta(jugadorActual); + consolaNormal.imprimir("Pasas por la casilla de salida y cobras " + pSalida + "$"); + jugadorActual.setDinero(jugadorActual.getDinero() + pSalida); + jugadorActual.getAvatar().setPosicion((jugadorActual.getAvatar().getPosicion() + avance) - 40, tablero.getCasillas()); + } else { + jugadorActual.getAvatar().setPosicion(jugadorActual.getAvatar().getPosicion() + avance, tablero.getCasillas()); + } + } else { // Avance negativo + if ((jugadorActual.getAvatar().getPosicion() + avance) <= 0) { // Si se pasa por la casilla de salida + jugadorActual.setVueltas(jugadorActual.getVueltas() - 1); // Se resta una vuelta + consolaNormal.imprimir("Pasas por la casilla de salida en sentido contrario y pagas " + pSalida + "$"); + pagarAv(jugadorActual, pSalida); + jugadorActual.getAvatar().setPosicion((jugadorActual.getAvatar().getPosicion() + avance) + 40, tablero.getCasillas()); + } else { + jugadorActual.getAvatar().setPosicion(jugadorActual.getAvatar().getPosicion() + avance, tablero.getCasillas()); + } + } + } else { // Movimiento avanzado activado + if (jugadorActual.getAvatar() instanceof Pelota) { // PELOTA + jugadorActual.getAvatar().setAuxMovAvanzado(1); // Indica que el turno aún está en curso + if (avance > 4) { + avanzarCasillas(4, false); + int aux = jugadorActual.getAvatar().getPosicion(); // guardamos la posición tras avanzar 4 casillas para comprobar paridades + for (int i = 5; i <= avance; i++) { + avanzarCasillas(1, false); // avanzamos una casilla + if (jugadorActual.getAvatar().getPosicion() == 30) { // Si cae en la casilla de ir a la cárcel, se acaba la función. Recordemos que accionCasilla y menuAccion de la última parada/casilla se ejecutan fuera de aquí. + return; + } + if (i == avance) { + jugadorActual.getAvatar().setAuxMovAvanzado(0); + consolaNormal.imprimir("Ya has pasado por todas tus paradas."); + return; + } + if ((jugadorActual.getAvatar().getPosicion() - aux) % 2 != 0) { // Si es impar, se para en la casilla, se ejecuta la accion correspondiente y el jugador puede interactuar + consolaNormal.imprimir("¡Momento de pararse! Introduce \"acabar parada\" para avanzar a la siguiente casilla"); + tablero.imprimirTablero(); + accionCasilla(); + if (jugadorActual.getAvatar().inCarcel()) { + break; + } + menuAccion(true); + // menuAccion(true); + } + // Si es par, no se hace nada. + } + } else { + int aux = jugadorActual.getAvatar().getPosicion(); // guardamos la posición para comprobar paridades + for (int i = avance; i > 0; i--) { + avanzarCasillas(-1, false); + if (jugadorActual.getAvatar().getPosicion() == 30) { // Si cae en la casilla de ir a la cárcel, se acaba la función. Recordemos que accionCasilla y menuAccion de la última parada/casilla se ejecutan fuera de aquí. + return; + } + if (i == 1) { // Si es la última parada + jugadorActual.getAvatar().setAuxMovAvanzado(0); + consolaNormal.imprimir("Ya has pasado por todas tus paradas."); + return; + } + if ((jugadorActual.getAvatar().getPosicion() - aux) % 2 != 0) { // Si es impar, se para en la casilla, se ejecuta la accion correspondiente y el jugador puede interactuar + consolaNormal.imprimir("¡Momentito de pararse! Introduce \"acabar parada\" para ir a la próxima casilla"); + tablero.imprimirTablero(); + accionCasilla(); + if (jugadorActual.getAvatar().inCarcel()) { + break; + } + menuAccion(true); + } + // Si es par, no se hace nada. + } + } + } else if (jugadorActual.getAvatar() instanceof Coche) { // COCHE + if (avance >= 4) { + avanzarCasillas(avance, false); + consolaNormal.imprimir("Puedes tirar los dados hasta 3 veces más mientras saques más de un 3."); + jugadorActual.getAvatar().setAuxMovAvanzado(3); + } else { + avanzarCasillas(-avance, false); + jugadorActual.getAvatar().setAuxMovAvanzado(-3); // Los números negativos sin el "-" indicarán los turnos restantes sin poder tirar (em el turno actual, por eso se inicializa en -3 y no en -2. al acabar el turno se suma 1, con lo que al acabar el turno en el que se estropea el motor tienes -3+1 = (-)2 turnos más sin tirar) + consolaNormal.imprimir("Se te ha estropeado el motor y deberás estar dos turnos sin tirar mientras se arregla."); + } + } + } + } + + private void nextJugador() {//Al final de cada turno, avanzamos jugador; + if (jugadores.indexOf(jugadorActual) == (jugadores.size() - 1)) + jugadorActual = jugadores.get(0); + else jugadorActual = jugadores.get(jugadores.indexOf(jugadorActual) + 1); + } + + private void accionSuerte(int numCarta) throws LeerException { + consolaNormal.imprimir(cartaSuerte.getCartasSuerte().get(numCarta)); + switch (numCarta) { + case 0: + int contC = 0, contH = 0, contP = 0, contD = 0; + for (Casilla ite : jugadorActual.getPropiedades()) { + if (ite instanceof Solar) for (Edificio cite : ((Solar) ite).getEdificios()) { + if (cite instanceof Casa) contC++; + if (cite instanceof Hotel) contH++; + if (cite instanceof Piscina) contP++; + if (cite instanceof Pista) contD++; + } + } + + int total = (100 * contC) + (200 * contH) + (300 * contP) + (400 * contD); + if (total == 0) { + consolaNormal.imprimir("Como aun no tienes edificios construidos, te libras"); + } else { + consolaNormal.imprimir("En total, tienes que pagar" + total + "$"); + pagarAv(jugadorActual, total); + } + break; + + case 1: + ArrayList aux = new ArrayList<>(6); + for (Jugador ite : jugadores) { + if (!jugadorActual.equals(ite)) + aux.add(ite); //creamos una lista de los jugadores a los que pagar + } + for (Jugador ite : aux) { + pagarAv(jugadorActual, 500, ite); + jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + 500); + ite.setPremiosInversionesOBote(ite.getPremiosInversionesOBote() + 500); + } + break; + + case 2: + jugadorActual.addDinero(1000); + jugadorActual.setPremiosInversionesOBote(jugadorActual.getPremiosInversionesOBote() + 1000); + break; + + case 3: + jugadorActual.getAvatar().setPosicion((jugadorActual.getAvatar().getPosicion() - 3), tablero.getCasillas()); + tablero.imprimirTablero(); + accionCasilla(); + break; + + case 4: + int pTCercano = 5; + switch (jugadorActual.getAvatar().getPosicion()){ + case 7: + pTCercano = 15; + break; + case 22: + pTCercano = 25; + break; + case 36: + //pTCercano a 5 por defecto + consolaNormal.imprimir("Has pasado por la casilla de salida, cobras" + pSalida); + jugadorActual.addDinero(pSalida); + jugadorActual.setPasarPorCasillaDeSalida(jugadorActual.getPasarPorCasillaDeSalida() + pSalida); + addVuelta(jugadorActual); + break; + } + jugadorActual.getAvatar().setPosicion(pTCercano, tablero.getCasillas()); + tablero.imprimirTablero(); + Propiedad tCercano; + if (tablero.getCasilla(pTCercano) instanceof Transporte) tCercano = (Propiedad) tablero.getCasilla(pTCercano); + else break; + + int alquilersuerte = ((Transporte)tCercano).calcularAlquiler() * 2; + + if (!tCercano.getPropietario().equals(jugadorActual) && !tCercano.getPropietario().equals(banca) && !tCercano.getHipotecado()) { + pagarAv(jugadorActual, alquilersuerte, tCercano.getPropietario()); + tCercano.setRentabilidad(tCercano.getRentabilidad() + alquilersuerte); + jugadorActual.setPagoDeAlquileres(jugadorActual.getPagoDeAlquileres() + alquilersuerte); + tCercano.getPropietario().setCobroDeAlquileres(tCercano.getPropietario().getCobroDeAlquileres() + alquilersuerte); + consolaNormal.imprimir("Pagas " + alquilersuerte + "$ por caer en " + tCercano.getNombre()); + } else if (tCercano.getHipotecado()) { + consolaNormal.imprimir("La casilla de transporte esta hipotecada... No pagas alquiler :)"); + } + case 5: + jugadorActual.addDinero(2000); + jugadorActual.setPremiosInversionesOBote(jugadorActual.getPremiosInversionesOBote() + 2000); + break; + } + } + + private void accionCajaC(int numCarta) throws LeerException { + consolaNormal.imprimir(cartaCajaC.getCartasCajaC().get(numCarta)); + switch (numCarta) { + case 0: + ArrayList aux = new ArrayList<>(6); + for (Jugador ite : jugadores) { + if (!jugadorActual.equals(ite)) + aux.add(ite); //literal igual que en suerte + } + for (Jugador ite : aux) { + pagarAv(jugadorActual, 200, ite); + jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + 200); + ite.setPremiosInversionesOBote(ite.getPremiosInversionesOBote() + 200); + } + break; + + case 1: + jugadorActual.getAvatar().setPosicion(30, tablero.getCasillas()); + accionCasilla(); + break; + + case 2: + jugadorActual.getAvatar().setPosicion(0, tablero.getCasillas()); + jugadorActual.addDinero(pSalida); + jugadorActual.setPasarPorCasillaDeSalida(jugadorActual.getPasarPorCasillaDeSalida() + pSalida); + addVuelta(jugadorActual); + break; + + case 3: + jugadorActual.getAvatar().setPosicion(34, tablero.getCasillas()); + accionCasilla(); //un poco cutre pq no hace falta hacer la comprobacion de salida + break; + + case 4: + pagarAv(jugadorActual,1000); + jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + 1000); + break; + + case 5: + jugadorActual.addDinero(2000); + jugadorActual.setPremiosInversionesOBote(jugadorActual.getPremiosInversionesOBote() + 2000); + break; + } + } + + /** + * Llamamos a funciones internas para todos los tipos de casilla menos para cartas + * En este caso necesitábamos acceder a demasiados métodos y atributos de juego para que tuviese sentido + */ + public void accionCasilla() throws LeerException { + try { + contadorCasillas.get(jugadorActual).put(jugadorActual.getCasilla(tablero.getCasillas()), contadorCasillas.get(jugadorActual).get(jugadorActual.getCasilla(tablero.getCasillas())) + 1); + Casilla casilla = jugadorActual.getCasilla(tablero.getCasillas()); + if (casilla instanceof Solar) ((Solar) casilla).accionCasilla(jugadorActual); + else if (casilla instanceof Transporte) ((Transporte) casilla).accionCasilla(jugadorActual); + else if (casilla instanceof Servicios) ((Servicios) casilla).accionCasilla(jugadorActual, dado); + else if (casilla instanceof Impuesto) ((Impuesto) casilla).accionCasilla(jugadorActual); + else if (casilla instanceof ParkingGratuito) ((ParkingGratuito) casilla).accionCasilla(jugadorActual); + else if (casilla instanceof VasALaCarcel) + ((VasALaCarcel) casilla).accionCasilla(jugadorActual, tablero.getCasillas(), dado); + else if (casilla instanceof Salida) ((Salida) casilla).accionCasilla(); + else if (casilla instanceof Carcel) ((Carcel) casilla).accionCasilla(jugadorActual); + + else if (casilla instanceof Suerte) { + cartaSuerte.barajar(); + int indice = consolaNormal.leerInt("Elige una carta (introduciendo un numero del 1 al 6)"); + int numCarta = (cartaSuerte.getCartas().get(indice - 1)); + accionSuerte(numCarta); + } else if (casilla instanceof Comunidad) { + cartaCajaC.barajar(); + int indice = consolaNormal.leerInt("Elige una carta (introduciendo un numero del 1 al 6)"); + int numCarta = (cartaCajaC.getCartas().get(indice - 1)); + accionCajaC(numCarta); + } + } + catch(AlquilerDineroInsufException a){ + consolaNormal.imprimir("No tienes suficiente para pagar tu deuda, debes vender o hipotecar propiedades... "); + cobradorPendiente = a.getCobrador(); + pagoPendiente = a.getDineroPendiente(); + gestInsuf(); + } + } + + + + /** + * Función de compra de la casilla, con comprobación de si el jugadorActual tienen suficiente dinero + * Realiza la transacción correspondiente entre el jugador y la banca, y mueve la propiedad de la Procesos.Casilla, y del grupo en caso de que corresponda + */ + public boolean comprarCasilla() throws LeerException { //todo garantizar que se añade a propie + Propiedad casilla; + Casilla casillac = jugadorActual.getCasilla(tablero.getCasillas()); + casilla = (Propiedad) casillac; + + try{ + if (!(casillac instanceof Propiedad)) + throw new ComprarExceptionCasillaNoPropiedad(); + if (!casilla.getPropietario().isBanca() || casilla.getPropietario() == null) + throw new ComprarExceptionCasillaConDueno(); + if (jugadorActual.getDinero() < casilla.getPrecio()) + throw new ComprarExceptionDineroInsuficiente(); + if (!casillac.getOcupantes().contains(jugadorActual)) + throw new ComprarExceptionCasillaDistinta(); + + + } catch(ComprarException e) {return false;} + + casilla.getPropietario().addDinero(casilla.getPrecio()); + casilla.setPropietario(jugadorActual); + + pagarAv(jugadorActual,casilla.getPrecio()); + jugadorActual.setDineroInvertido(jugadorActual.getDineroInvertido() + casilla.getPrecio()); + jugadorActual.setFortuna(jugadorActual.getFortuna() + casilla.getPrecio()); + + consolaNormal.imprimir("Propiedad comprada con éxito por " + ((Propiedad) jugadorActual.getCasilla(tablero.getCasillas())).getPrecio() + "$"); + + return true; + } + + + //INTERFAZ COMANDO + /** + * ayuda copia los condicionales de menuAcción para enseñar al jugador las opciones que tiene disponibles. + * + * @param haTirado si el jugadorActual ha tirado ya en este turno + */ + public void ayuda(boolean haTirado){ + consolaNormal.imprimir("Listado de acciones"); + } + public void imprimirTablero(){ + tablero.imprimirTablero(); + } + public void jugador(){ + consolaNormal.imprimir("Nombre: " + jugadorActual.getNombre()); + consolaNormal.imprimir("Avatar: " + jugadorActual.getAvatar().getClass().getSimpleName()); + consolaNormal.imprimir("Dinero: " + jugadorActual.getDinero()); + consolaNormal.imprimir("Posición: " + jugadorActual.getAvatar().getPosicion()); + } + public boolean tirarDados(boolean haTirado, String[] entradaPartida) throws LeerException { + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return false; + } +// EN PRIMER LUGAR, COMPROBAMOS SI EL JUGADOR ESTÁ EN LA CÁRCEL Y EJECUTAMOS LAS ACCIONES CORRESPONDIENTES + if (jugadorActual.getAvatar().inCarcel()) { + if (jugadorActual.getAvatar().getTurnosCarcel() == 1) { + //En el último turno de carcel, tiene que pagar, y no juega, no puede tirar más veces + consolaNormal.imprimir("Ya no puedes tirar más veces los dados :("); + } + else if (jugadorActual.getAvatar().getTurnosCarcel() > 1) { + consolaNormal.imprimir("Te quedan " + (jugadorActual.getAvatar().getTurnosCarcel() - 1) + " oportunidades para salir de la cárcel tirando los dados. ¡Adelante!"); + if (entradaPartida.length == 5 && entradaPartida[2].equals("trucados")) { + dado.tirarDados(Integer.parseInt(entradaPartida[3]), Integer.parseInt(entradaPartida[4])); + jugadorActual.addVecesDados(); + } else { + dado.tirarDados(); + jugadorActual.addVecesDados(); + } + if (dado.areEqual()) { + consolaNormal.imprimir("¡Dados dobles! Enhorabuena, sales de la cárcel :)"); + return true; + } else { + consolaNormal.imprimir("Oh no... No has sacado dados dobles. Te quedas en la cárcel."); + jugadorActual.getAvatar().setTurnosCarcel(jugadorActual.getAvatar().getTurnosCarcel() - 1); + return true; + } + } + } else { // SI NO ESTÁ EN LA CÁRCEL... + + // 1. NO LE DEJAMOS TIRAR SI TIENE EL MOTOR ROTO + if (jugadorActual.getAvatar() instanceof Coche && jugadorActual.getAvatar().getAuxMovAvanzado() < 0) { // importante no poner movAuxActivado para evitar exploit de que el usuario reinicie los turnos sin poder moverse mediante la introducción de cambiar movimiento + consolaNormal.imprimir("Tu motor sigue roto. ¡No puedes moverte!"); + return true; + } + + // 2. HACEMOS RETURN EN LOS CASOS EN LOS QUE *NO* PUEDE LANZAR DADOS + + if (!puedeTirarOtraVez(haTirado)) { + consolaNormal.imprimirError("¡No puedes volver a tirar los dados!"); + return true; + } + + // SI LLEGAMOS HASTA AQUÍ, EL JUGADOR PUEDE TIRAR. PROCEDEMOS A TIRAR: + + if (entradaPartida.length == 5 && entradaPartida[2].equals("trucados")) { + dado.tirarDados(Integer.parseInt(entradaPartida[3]), Integer.parseInt(entradaPartida[4])); + jugadorActual.addVecesDados(); + } else { + dado.tirarDados(); + jugadorActual.addVecesDados(); + } + consolaNormal.imprimir("Has sacado un " + dado.getDado1() + " y un " + dado.getDado2()); + + // REALIZAMOS LA ACCIÓN CORRESPONDIENTE SI SE SACA DOBLES: + + if (dado.areEqual()) { + if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Coche) { // Si es coche, solo importan los dobles en la última tirada. + if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0) + consolaNormal.imprimir("Has sacado dobles! Puedes volver a tirar."); + } else { // De ser de otro modo, siempre importan los dobles, así que imprimimos el mensaje correspondiente. + consolaNormal.imprimir("Has sacado dobles! Puedes volver a tirar."); + } + if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Pelota && jugadorActual.getAvatar().getAuxMovAvanzado() == 999) { + consolaNormal.imprimir("Como el movimiento avanzado está activado, la tirada extra de dados será cuando pases por todas las paradas."); + } + } + + // DESPUÉS DE TIRAR, AVANZAMOS EN MOVIMIENTO NORMAL O AVANZADO, SEGÚN CORRESPONDA: + + // Primero, mandamos a la cárcel si corresponde + if (dado.getC() == 3) { + consolaNormal.imprimir("Has sacado dados dobles 3 veces seguidas. ¡Vas a la cárcel! "); + jugadorActual.getAvatar().enviarCarcel(tablero.getCasillas()); + if (!jugadorActual.getAvatar().getMovAvanzadoActivado() || (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Coche)) + tablero.imprimirTablero(); + return true; + } + // Si el Movimiento Avanzado está activado... + if (jugadorActual.getAvatar().getMovAvanzadoActivado()) { + if (jugadorActual.getAvatar() instanceof Pelota) { // MOVIMIENTO AVANZADO "PELOTA" ------------------------------------------------------------------------------ + // Si es el primer turno + // Si no es el primer turno y puede tirar, significa que ha sacado dobles. No obstante, tira en movimiento simple. + avanzarCasillas(dado.getSuma(), jugadorActual.getAvatar().getAuxMovAvanzado() == 999); + } + if (jugadorActual.getAvatar() instanceof Coche) { // MOVIMIENTO AVANZADO "COCHE" ------------------------------------------------------------------------------ + if (jugadorActual.getAvatar().getAuxMovAvanzado() == 999) { // Si es el primer turno + avanzarCasillas(dado.getSuma(), true); + } else { // Si no es el primer turno... + if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0) { // Si ya acabó sus tiradas extra y puede tirar, significa que ha sacado dobles. Nos movemos en modo simple sin restar auxMovAvanzado. + avanzarCasillas(dado.getSuma(), false); + } else { // Si no acabó sus tiradas extra + if (dado.getSuma() > 3) { + jugadorActual.getAvatar().setAuxMovAvanzado(jugadorActual.getAvatar().getAuxMovAvanzado() - 1); // Restamos 1 a las tiradas extra + avanzarCasillas(dado.getSuma(), false); + // Avisamos de cuántas tiradas extra le quedan + if (jugadorActual.getAvatar().getAuxMovAvanzado() > 0) { + Juego.getConsolaNormal().imprimir("\nLanzamientos extra restantes: %d. Cuando saques menos de un 4, no podrás tirar de nuevo.\n" + jugadorActual.getAvatar().getAuxMovAvanzado()); + } else { + Juego.getConsolaNormal().imprimir("\nNo te quedan más lanzamientos extra por el movimiento especial.\n"); + if (dado.areEqual()) { + Juego.getConsolaNormal().imprimir("\nPero como has sacado dobles... ¡Tienes otra tirada extra!\n"); + } + } + } else { // Si saca menos de 4, no se mueve y además no tiene más tiradas extra. + jugadorActual.getAvatar().setAuxMovAvanzado(0); + consolaNormal.imprimir("\nHas sacado menos de un 4, por lo que no tienes más lanzamientos extra."); + if (dado.areEqual()) { + Juego.getConsolaNormal().imprimir("\nPero como has sacado dobles... ¡Tienes otra tirada más!\n"); + } + } + } + } + } + } else { // Si el movimiento avanzado no está activado + avanzarCasillas(dado.getSuma(), false); + } + tablero.imprimirTablero(); + accionCasilla(); + return true; + } // Finalización del "if" "¿Está en la cárcel?" + return false; + } + + + public void comprarComando(String[] entradaPartida, boolean haTirado) { //todo comprobar si funciona; PQ FUERON MAZO DE CAMBIOS + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + else if (!haTirado) + throw new ComandoNoHaTiradoException(); + else if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Coche) + if (((Coche) jugadorActual.getAvatar()).getPuedeComprarPropiedades()) throw new ComandoNoMasComprasException(); + }catch (ComandoException ce){ + return; + } + try { + if (entradaPartida.length > 1 && entradaPartida[1].equals("propiedad") || entradaPartida[1].equals(jugadorActual.getCasilla(tablero.getCasillas()).getNombre())) { + if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Coche) { // Si es coche + if (((Coche)jugadorActual.getAvatar()).getPuedeComprarPropiedades()) { + if (comprarCasilla()) { + consolaNormal.imprimir("No podrás comprar más propiedades, casillas, servicios o transportes hasta que acabe tu turno."); + ((Coche)jugadorActual.getAvatar()).setPuedeComprarPropiedades(false); + } + } else { + consolaNormal.imprimir("No puedes comprar más propiedades, casillas, servicios o transportes hasta que acabe tu turno."); + } + } else if (!jugadorActual.getCasilla(tablero.getCasillas()).isComprable()) { + consolaNormal.imprimir("No puedes comprar esta propiedad"); + //break; + } else { + comprarCasilla(); + } + } else { //Si está intentando comprar otra propiedad le avisamos... + if (tablero.getCasilla(entradaPartida[1]) == null) throw new CasillaInexistenteException(); + else consolaNormal.imprimir("No estás en esta casilla"); + } + }catch(ArrayIndexOutOfBoundsException | CasillaInexistenteException | LeerException ignored){ + + } + } + public void edificar(String[] entradaPartida){ + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return; + } + boolean caidas; + caidas = contadorCasillas.get(jugadorActual).get(jugadorActual.getCasilla(tablero.getCasillas())) == 2; + + if (entradaPartida.length > 1) + if (jugadorActual.getCasilla(tablero.getCasillas()) instanceof Solar) + switch (entradaPartida[1]) { + case "casa": + case "Casa": + ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(0, jugadorActual, caidas); + break; + case "hotel": + case "Hotel": + ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(1, jugadorActual, caidas); + break; + case "piscina": + case "Piscina": + ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(2, jugadorActual, caidas); + break; + case "pista": + case "Pista": + ((Solar) jugadorActual.getCasilla(tablero.getCasillas())).construir(3, jugadorActual, caidas); + break; + default: + consolaNormal.imprimir("No existe este edificio. Prueba con casa, hotel, piscina o pista :)"); + } + else + consolaNormal.imprimir("No estás en un solar >: ("); + } + + public void venderEdificio(String[] entradaPartida){ + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return; + } + Edificio aux = null; + if (entradaPartida.length > 2) { + String identificador = entradaPartida[1] + " " + entradaPartida[2]; + if (jugadorActual.getPropiedades() != null) for (Propiedad cite : jugadorActual.getPropiedades()) + if (cite instanceof Solar) + + if (((Solar) cite).getEdificios() != null) + for (Edificio eite : ((Solar) cite).getEdificios()) { + if (eite.getIdentificador().equals(identificador)) aux = eite; + } + + if (aux != null) aux.getCasilla().venderEdificio(aux, jugadorActual); + else consolaNormal.imprimir("Identificador inválido..."); + } else consolaNormal.imprimir("Identificador inválido..."); + } + public void hipotecar(String[] entradaPartida) throws LeerIncorrectoException { + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return; + } + Casilla casilla; + if (entradaPartida.length > 1) { + try{ + casilla = tablero.getCasilla(entradaPartida[1]); + if (casilla == null) + throw new HipotecarCasillaInexistenteException(); + else if (!(casilla instanceof Propiedad)) + throw new HipotecarCasillanNoHipotecableException(); + else if (!((Propiedad) casilla).getPropietario().equals(jugadorActual)) + throw new HipotecarPropiedadDeOtro(); + + }catch(HipotecarException he){ + return; + } + ((Propiedad) casilla).hipotecar(); + } + else throw new LeerIncorrectoException(); + } + public void deshipotecar(String[] entradaPartida) throws LeerIncorrectoException { + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return; + } + Casilla casilla; + if (entradaPartida.length > 1) { + try{ + casilla = tablero.getCasilla(entradaPartida[1]); + if (casilla == null) + throw new HipotecarCasillaInexistenteException(); + else if (!(casilla instanceof Propiedad)) + throw new HipotecarCasillanNoHipotecableException(); + else if (!((Propiedad) casilla).getPropietario().equals(jugadorActual)) + throw new desHipotecarPropiedadDeOtro(); + + }catch(HipotecarException he){ + return; + } + ((Propiedad) casilla).deshipotecar(); + } + else throw new LeerIncorrectoException(); + } + public void bancarrota(){ + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return; + } + String respuesta = consolaNormal.leer("¿Estás seguro de que quieres declararte en bancarrota?"); + if (respuesta.equals("si") || respuesta.equals("Si") || respuesta.equals("SI")) + jugadorActual.declararBancarrota(cobradorPendiente); + } + + public void describirJugador(String[] entradaPartida){ + boolean c = true; + for (Jugador ite : jugadores) { + if (entradaPartida.length > 2 && entradaPartida[2].equals(ite.getNombre())) { + Juego.getConsolaNormal().imprimir(ite.toString()); + c = false; + } + } + if (c) consolaNormal.imprimir("Vaya! No existe este jugador..."); + } + public void describirCasilla(String s){ + if (tablero.getCasilla(s) != null) { + Juego.getConsolaNormal().imprimir(tablero.getCasilla(s).descripcionDetallada()); + } else consolaNormal.imprimir("No hay ninguna casilla que se llame así"); + } + public void describirAvatar(String[] entradaPartida){ + boolean c = true; + for (Jugador ite : jugadores) { + if (entradaPartida.length > 2 && entradaPartida[2].equals(String.valueOf(ite.getAvatar()))) { + Juego.getConsolaNormal().imprimir("{\n" + + "id: " + "A" + ",\n" + //El avatar que corresponda + "tipo: " + "N/A" + ",\n" + + "casilla: " + ite.getCasilla(tablero.getCasillas()).getNombre() + ",\n" + + "jugador: [" + ite.getNombre() + "]\n" + + "}"); + c = false; + } + } + if (c) consolaNormal.imprimir("Vaya! No existe este avatar..."); + } + public void listarJugadores(){ + for (Jugador jugadore : jugadores) { + consolaNormal.imprimir(jugadore.toString()); + } + } + public void listarEnVenta(){ + for (Casilla casilla : tablero.getCasillas()) { + if (casilla.isComprable()) consolaNormal.imprimir(" " + casilla.descripcion()); + } + } + public void listarAvatares(){ + for (Jugador ite : jugadores) { + consolaNormal.imprimir("{\n" + + "id: " + ite.getAvatar() + "\n" + + "tipo: " + "N/A" + ",\n" + + "casilla: " + ite.getCasilla(tablero.getCasillas()) + "\n" + + "jugador: " + ite.getNombre() + "\n" + + "}"); + } + } + public void listarEdificios() { + for (Casilla cite : tablero.getCasillas()) { + if (cite instanceof Solar) + if (((Solar) cite).getEdificios() != null) + for (Edificio eite : ((Solar) cite).getEdificios()) + consolaNormal.imprimir(" " + eite.getIdentificador() + " - " + eite.getCasilla()); + } + } + public void listarEdificiosColor(String[] entradaPartida){ + for (Grupo ite : tablero.getGrupos()) { + if (ite.getColor().equals(entradaPartida[2])) { + for (Solar cite : ite.getCasillas()) { + if (cite != null) + for (Edificio eite : cite.getEdificios()) + consolaNormal.imprimir(" " + eite.getIdentificador() + " - " + eite.getCasilla()); + } + } + } + consolaNormal.imprimir("No se reconoce el grupo/color"); + } + public void salirCarcel() throws LeerException { + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return; + } + if (!jugadorActual.getAvatar().inCarcel()) { + consolaNormal.imprimir("No estas en la cárcel..."); + } else { + consolaNormal.imprimir("Pagas " + precioCarcel + " para salir de la cárcel."); + pagarAv(jugadorActual, precioCarcel); + jugadorActual.setPagoTasasEImpuestos(jugadorActual.getPagoTasasEImpuestos() + precioCarcel); + jugadorActual.getAvatar().setTurnosCarcel(0); + } + } + public void pagarDeuda() throws LeerException { + try{ + if (jugadorActual.getBancarrota()) + throw new ComandoBancarrotaException(); + }catch (ComandoException ce){ + return; + } + if (pagando) { + pagarAv(jugadorActual, pagoPendiente, cobradorPendiente); + } else consolaNormal.imprimir("No tienes nada que pagar :D"); + } + public boolean acabarTurno(boolean haTirado){ + boolean c = false; + if (puedeTirarOtraVez(haTirado) && !jugadorActual.getBancarrota()) { // SI PUEDE TIRAR OTRA VEZ, DEBE HACERLO. AVISAMOS. + consolaNormal.imprimir("Tienes que tirar antes de terminar el turno"); + } + // Sin embargo, existe un caso en el que el jugador no puede tirar, pero tampoco puede acabar el turno. Lo tratamos: + else if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Pelota && jugadorActual.getAvatar().getAuxMovAvanzado() == 1) { + // (Si es tipo Pelota, el movimiento avanzado está activado y aún le quedan paradas por recorrer) + consolaNormal.imprimir("¡Aún te quedan paradas por recorrer!"); + } + else if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Coche) { // MOVIMIENTO AVANZADO "COCHE" ------------------------------------------------------------------------------ + if (jugadorActual.getAvatar().getAuxMovAvanzado() < 0) { // SI EL JUGADOR QUE ACABA EL TURNO ES UN COCHE CON MOTOR ROTO + jugadorActual.getAvatar().setAuxMovAvanzado(jugadorActual.getAvatar().getAuxMovAvanzado() + 1); + if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0) { + jugadorActual.getAvatar().setAuxMovAvanzado(999); + consolaNormal.imprimir("¡Motor reparado! En el siguiente turno podrás moverte."); + } else{ + Juego.getConsolaNormal().imprimir("\nTurnos restantes para poder moverte: \n" + -jugadorActual.getAvatar().getAuxMovAvanzado()); + ((Coche) jugadorActual.getAvatar()).setPuedeComprarPropiedades(true); + // jugadorActual.setAuxMovAvanzado(999); + if (jugadorActual.getAvatar() instanceof Coche) { + Coche cocheActual = (Coche) jugadorActual.getAvatar(); + cocheActual.setPuedeComprarPropiedades(true); + } + nextJugador(); + consolaNormal.imprimir("Turno de: " + jugadorActual.getNombre()); + if(jugadorActual.getTratosRecibidos()!=null){ + consolaNormal.imprimir("Tienes los siguientes tratos propuestos: "); + jugadorActual.imprimirTratosRecibidos();} + c = true; + } + } + } + else if (pagando && !jugadorActual.getBancarrota()) { + consolaNormal.imprimir("Debes saldar tu deuda antes de acabar el turno, o declararte en bancarrota"); + } else { + if (!(jugadorActual.getAvatar() instanceof Coche && jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar().getAuxMovAvanzado() < 0)) { + jugadorActual.getAvatar().setAuxMovAvanzado(999); + } + if (jugadorActual.getAvatar() instanceof Coche) { + Coche cocheActual = (Coche) jugadorActual.getAvatar(); + cocheActual.setPuedeComprarPropiedades(true); + } + /* if(jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getTipoMov()==0){ + hayBug=true; + } */ + nextJugador(); + consolaNormal.imprimir("Turno de: " + jugadorActual.getNombre()); + if(jugadorActual.getTratosRecibidos()!=null){ // + consolaNormal.imprimir("Tienes los siguientes tratos propuestos: "); + jugadorActual.imprimirTratosRecibidos();} + c = true; + pagando = false; + cobradorPendiente = banca; + } + return c; + } + + public void cambiarMovimiento(boolean haTirado) { + if (haTirado) { + consolaNormal.imprimir("¡Solo puedes cambiar de movimiento al inicio de tu turno!"); + } else { + jugadorActual.getAvatar().setMovAvanzadoActivado(!jugadorActual.getAvatar().getMovAvanzadoActivado()); + if (jugadorActual.getAvatar().getMovAvanzadoActivado()) + consolaNormal.imprimir("El movimiento avanzado está ahora activado"); + else + consolaNormal.imprimir("El movimiento avanzado está ahora desactivado"); + } + } + + public void estadisticas(){ + consolaNormal.imprimir("Casilla(s) mas rentables: "); + imprimirCasillas(casillaMasRentable()); + consolaNormal.imprimir("Grupo(s) mas rentables: "); + imprimirGrupos(grupoMasRentable(tablero.getCasillas())); + consolaNormal.imprimir("Casilla(s) mas frecuentadas: "); + imprimirCasillas(casillaMasFrecuentada(tablero.getCasillas())); + consolaNormal.imprimir("Jugador(es) con mas vueltas: "); + imprimirJugadores(jugadorMasVueltas(jugadores)); + consolaNormal.imprimir("Jugador(es) con mas tiradas de dado: "); + imprimirJugadores(jugadorMasDados(jugadores)); + consolaNormal.imprimir("Jugador(es) en cabeza: "); + imprimirJugadores(jugadorEnCabeza(jugadores)); + } + public void estadisticasJugador(String[] entradaPartida){ + for (Jugador ite : jugadores) { + if (entradaPartida[1].equals(ite.getNombre())) { + consolaNormal.imprimir("Dinero invertido: " + ite.getDineroInvertido()); + consolaNormal.imprimir("Pago Tasas e Impuestos: " + ite.getPagoTasasEImpuestos()); + consolaNormal.imprimir("Pago De Alquileres: " + ite.getPagoDeAlquileres()); + consolaNormal.imprimir("Cobro de Alquileres: " + ite.getCobroDeAlquileres()); + consolaNormal.imprimir("Dinero por pasar por la casilla de salida:" + ite.getPasarPorCasillaDeSalida()); + consolaNormal.imprimir("Premios por inversiones o bote: " + ite.getPremiosInversionesOBote()); + consolaNormal.imprimir("Veces en la carcel: " + ite.getVecesEnLaCarcel()); + break; + } + } + } + + public boolean menuAccion(boolean haTirado){ + try{//Lee y llama a la acción indicada sobre el jugadorActual + //Comprobaciones/actualizaciones en cada turno + actualizarPropietarioCasillas(); + // System.out.printf("\nAuxiliar es %d\n", jugadorActual.getAvatar().getAuxMovAvanzado()); + + String[] entradaPartida = consolaNormal.leerConsolaFragmentado("Introduce una acción. Puedes escribir \"ayuda\" para obtener un listado de acciones.\n $>"); + + switch (entradaPartida[0]) { //Si no reconoce lo introducido, no llamamos a nada, se llama después del switch + //case "numero": consolaNormal.imprimir(jugadores.size());break; + case "ayuda": + case "Ayuda": + ayuda(haTirado); + break; + case "jugador": + case "Jugador": + jugador(); + case "listar": + if (entradaPartida.length > 1) switch (entradaPartida[1]) { + case "Jugadores": + case "jugadores": + listarJugadores(); + break; + case "en": + case "En": + if (entradaPartida.length > 2 && (entradaPartida[2].equals("venta") || entradaPartida[2].equals("Venta"))) { + listarEnVenta(); + } + else throw new LeerIncorrectoException(); + break; + case "Avatares": + case "avatares": + listarAvatares(); + break; + case "Edificios": + case "edificios": + if (entradaPartida.length > 2) { + listarEdificiosColor(entradaPartida); + } else listarEdificios(); + break; + case "Tratos": + case "tratos": + + break; + } + break; + case "hipotecar": + case "Hipotecar": + hipotecar(entradaPartida); + break; + case "deshipotecar": + case "Deshipotecar": + deshipotecar(entradaPartida); + break; + case "comprar": + comprarComando(entradaPartida, haTirado); + break; + case "salir": + if (entradaPartida.length > 1) + if (entradaPartida[1].equals("carcel") || entradaPartida[1].equals("cárcel")) { + salirCarcel(); + } + else throw new LeerIncorrectoException(); + break; + case "ver": + if (entradaPartida[1].equals("tablero")) { + imprimirTablero(); + } + break; + case "tirar": + case "lanzar": + try { + if (entradaPartida[1].equals("dados")) { + haTirado = tirarDados(haTirado, entradaPartida); + } else throw new LeerIncorrectoException(); + }catch(ArrayIndexOutOfBoundsException a){ + throw new LeerIncorrectoException(); + } + break; + case "cambiar": + if (entradaPartida.length > 1 && entradaPartida[1].equals("movimiento")) { + cambiarMovimiento(haTirado); + } + break; + case "describir": + case "descripción": + case "descripcion": + if (entradaPartida.length > 1) switch (entradaPartida[1]) { + case "jugador": + case "Jugador": + describirJugador(entradaPartida); + break; + case "avatar": + case "Avatar": + describirAvatar(entradaPartida); + break; + default: + describirCasilla(entradaPartida[1]); + } + case "fin": + if (entradaPartida.length > 1 && entradaPartida[1].equals("partida")) return false; + break; + case "pagar": + pagarDeuda(); + break; + case "acabar": + if (entradaPartida.length > 1 && entradaPartida[1].equals("turno")) { + if (acabarTurno(haTirado)) + return true; + } + if (entradaPartida.length > 1 && entradaPartida[1].equals("parada")) { + acabarParada(); + } + break; + case "bancarrota": + case "Bancarrota": + bancarrota(); + break; + case "estadisticas": + case "estadísticas": + if (entradaPartida.length > 1) { + estadisticasJugador(entradaPartida); + } else { + estadisticas(); + } + break; + case "edificar": + case "construir": + edificar(entradaPartida); + break; + case "vender": + case "Vender": + venderEdificio(entradaPartida); + break; + case "trato": //crear propuesta + proponerTrato(jugadorActual,tablero); + break; + case "tratos": //ver todas las propuestas que te han hecho + jugadorActual.imprimirTratosRecibidos(); + break; + case "aceptar": //aceptar una propuesta + if (entradaPartida[1].equals("trato")) { + int numTrato; + if(jugadorActual.getTratosRecibidos()!=null) { + do { + numTrato = consolaNormal.leerInt("Introduce el numero de trato que quieres aceptar: "); + } while (numTrato > 0 && numTrato < jugadorActual.getTratosRecibidos().size()); + jugadorActual.aceptarTrato(numTrato); + } + else + consolaNormal.imprimir("No tienes tratos pendientes."); + } + break; + case "eliminar": //eliminar una propuesta + if (entradaPartida[1].equals("trato")) { + int numTrato; + if (jugadorActual.getTratosPropuestos()!=null) { + do { + numTrato = consolaNormal.leerInt("Introduce el numero de trato que quieres eliminar: "); + } while (numTrato > 0 && numTrato < jugadorActual.getTratosPropuestos().size()); + jugadorActual.eliminarTrato(numTrato); + } + } + else + consolaNormal.imprimir("No tienes tratos que eliminar."); + break; + + default: + throw new LeerIncorrectoException(); + } + } + catch(LeerException le){ + return menuAccion(haTirado); + } + return menuAccion(haTirado); + } + + public void acabarParada(){ + if (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Pelota && jugadorActual.getAvatar().getAuxMovAvanzado() == 0) { + consolaNormal.imprimir("Ya has pasado por todas tus paradas."); + } else if (!jugadorActual.getAvatar().getMovAvanzadoActivado() || (jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Coche)) { + consolaNormal.imprimir("¿Paradas? Bro think he pelota con movAvanzadoActivado"); + } else if (!(jugadorActual.getAvatar().getMovAvanzadoActivado() && jugadorActual.getAvatar() instanceof Pelota)) + tablero.imprimirTablero(); + } + private void pagarAv(Jugador pagador, int importe) throws LeerException { + pagarAv(pagador, importe, banca); + } + + private void pagarAv(Jugador pagador, int importe, Jugador cobrador) throws LeerException { + while (!pagador.pagar(importe, cobrador) && !pagador.getBancarrota()) { + consolaNormal.imprimir("No tienes suficiente para pagar tu deuda, debes vender o hipotecar propiedades... "); + cobradorPendiente = cobrador; + pagoPendiente = importe; + gestInsuf(); + } + cobradorPendiente = banca; + pagando = false; + } + + /** + * Gestión de dinero insuficiente. Llama a menú solo con opciones de vender, hipotecar e información... + */ + private void gestInsuf() throws LeerException { + pagando = true; + menuAccion(true); + } + + private void actualizarPropietarioCasillas() { + for (Casilla ite : tablero.getCasillas()) { + if (ite instanceof Propiedad) + if (((Propiedad) ite).getPropietario() == null) ((Propiedad) ite).setPropietario(banca); + } + } + + public void turnoInicial() { + int cont = 0; //Para controlar el numero de jugadores inicializados + consolaNormal.imprimir("Bienvenidos. Empezaremos definiendo los jugadores."); + String entradaString; + boolean turnoPruebas = false; + do { //J1 + entradaString = consolaNormal.leer("Introduce crear jugador para darte de alta: \n"); + if (entradaString.equals("Prueba2J")){ + darAlta("Mateo",0); + darAlta("Cese",1); + turnoPruebas = true; + break; + } + else if (entradaString.equals("Prueba3J")){ + darAlta("Mateo",0); + darAlta("Cese",1); + darAlta("Mencia",1); + turnoPruebas = true; + break; + } + } while (!entradaString.contains("crear jugador")); + if (!turnoPruebas) darAlta(); + consolaNormal.imprimir("¡Primer jugador registrado!"); + if (!turnoPruebas) { + do { //J2 + entradaString = consolaNormal.leer("Introduce crear jugador para darte de alta: \n"); + } while (!entradaString.contains("crear jugador")); + darAlta(); + consolaNormal.imprimir("¡Segundo jugador registrado!"); + + do { + do { //Jx + entradaString = consolaNormal.leer("Ahora puedes introducir 'crear jugador' para darte de alta o 'empezar juego' para comenzar a jugar: \n"); + } while (!entradaString.contains("crear jugador") && !entradaString.contains("empezar juego")); + + if (entradaString.contains("crear jugador")) { + darAlta(); + cont++; + consolaNormal.imprimir("¡Jugador registrado!"); + } + + } while (!entradaString.contains("empezar juego") && cont < 4); + } + if (cont == 4) consolaNormal.imprimir("No se pueden agregar más jugadores"); + consolaNormal.imprimir("¡Jugadores registrados!"); + + jugadorActual = jugadores.get(0); + + tablero.getCasilla(0).setOcupantes(jugadores); + + // Inicializar el contador para cada jugador y cada casilla + for (Jugador jugador : jugadores) { + contadorCasillas.put(jugador, new HashMap<>()); + for (Casilla casilla : tablero.getCasillas()) { + contadorCasillas.get(jugador).put(casilla, 0); + } + } + } + + + public void addVuelta(Jugador jugador) { + jugador.setVueltas(jugador.getVueltas() + 1); + for (Jugador ite : jugadores) { //Comprobamos que sea el jugador que va de último + if (jugador.getVueltas() > ite.getVueltas()) return; + } + if (jugador.getVueltas() % 4 == 0 && jugador.getVueltas() != 0) //Y que comienza una vuelta múltiplo de 4 + actualizarPrecioCasillas(); + } + + private void actualizarPrecioCasillas() { + for (Casilla ite : getTablero().getCasillas()) + if (ite instanceof Propiedad) + if (((Propiedad) ite).getPropietario().isBanca()) { + ((Propiedad) ite).setPrecio((int) (((Propiedad) ite).getPrecio() * 1.05)); + } + } + + private ArrayList casillaMasRentable() { + ArrayList casillas = tablero.getCasillas(); + int maximo = 0; + for (Casilla ite : casillas) { + if (ite instanceof Propiedad) + if (((Propiedad) ite).getRentabilidad() > maximo) + maximo = ((Propiedad) ite).getRentabilidad(); + } + + ArrayList casillasConMaximo = new ArrayList<>(); + for (Casilla ite : casillas) { + if (ite instanceof Propiedad) + if (((Propiedad) ite).getRentabilidad() == maximo) + casillasConMaximo.add(ite); + } + return casillasConMaximo; + } + + private void imprimirCasillas(ArrayList casillasEstad) { + for (Casilla ite : casillasEstad) + Juego.getConsolaNormal().imprimir(ite.getNombre() + ", "); + consolaNormal.imprimir("\n"); + } + + private void imprimirGrupos(ArrayList gruposEstad) { + for (Grupo ite : gruposEstad) + Juego.getConsolaNormal().imprimir(ite.getColor() + ", "); + consolaNormal.imprimir("\n"); + } + + private ArrayList grupoMasRentable(ArrayList tablero) { + int maximo = 0; + for (Casilla ite : tablero) { + if (ite instanceof Solar) { + if (((Solar) ite).getGrupo().getRentabilidad() > maximo) + maximo = ((Solar) ite).getGrupo().getRentabilidad(); + } + } + ArrayList gruposConMaximo = new ArrayList<>(); + for (Casilla ite : tablero) { + if (ite instanceof Solar) { + if (((Solar) ite).getGrupo().getRentabilidad() == maximo && !gruposConMaximo.contains(((Solar) ite).getGrupo())) + gruposConMaximo.add(((Solar) ite).getGrupo()); + } + } + return gruposConMaximo; + } + + private ArrayList casillaMasFrecuentada(ArrayList tablero) { + int maximo = tablero.get(0).getVisitas(); + for (Casilla ite : tablero) { + if (ite.getVisitas() > maximo) { + maximo = ite.getVisitas(); + } + } + ArrayList casillasConMaximo = new ArrayList<>(); + for (Casilla ite : tablero) { + if (ite.getVisitas() == maximo) { + casillasConMaximo.add(ite); + } + } + return casillasConMaximo; + } + + private ArrayList jugadorMasVueltas(ArrayList jugadores) { + int maximo = jugadores.get(0).getVueltas(); + for (Jugador ite : jugadores) { + if (ite.getVueltas() > maximo) { + maximo = ite.getVueltas(); + } + } + ArrayList jugadoresConMaximo = new ArrayList<>(); + for (Jugador ite : jugadores) { + if (ite.getVueltas() == maximo) { + jugadoresConMaximo.add(ite); + } + } + return jugadoresConMaximo; + } + + private ArrayList jugadorMasDados(ArrayList jugadores) { + int maximo = jugadores.get(0).getVecesDados(); + for (Jugador ite : jugadores) { + if (ite.getVecesDados() > maximo) { + maximo = ite.getVecesDados(); + } + } + ArrayList jugadoresConMaximo = new ArrayList<>(); + for (Jugador ite : jugadores) { + if (ite.getVecesDados() == maximo) { + jugadoresConMaximo.add(ite); + } + } + return jugadoresConMaximo; + } + + private ArrayList jugadorEnCabeza(ArrayList jugadores) { + int maximo = jugadores.get(0).getFortuna(); + for (Jugador ite : jugadores) { + if (ite.getFortuna() > maximo) { + maximo = ite.getFortuna(); + } + } + ArrayList jugadoresConMaximo = new ArrayList<>(); + for (Jugador ite : jugadores) { + if (ite.getFortuna() == maximo) { + jugadoresConMaximo.add(ite); + } + } + return jugadoresConMaximo; + } + + private void imprimirJugadores(ArrayList jugadoresEstad) { + for (Jugador ite : jugadoresEstad) + Juego.getConsolaNormal().imprimir(ite.getNombre() + ", "); + consolaNormal.imprimir("\n"); + } + + private boolean puedeTirarOtraVez(boolean haTirado) { + if (jugadorActual.getAvatar().getMovAvanzadoActivado()) { // SI ESTÁ EL MOVIMIENTO AVANZADO ACTIVADO, DISTINGUIMOS ENTRE "PELOTA" Y "COCHE" + if (jugadorActual.getAvatar() instanceof Pelota) { // MOVIMIENTO AVANZADO "PELOTA" ------------------------------------------------------------------------------ + if (jugadorActual.getAvatar().getAuxMovAvanzado() == 1) { // Si le quedan paradas sin recorrer, no puede tirar + return false; + } + if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0 && !dado.areEqual()) { // Si no le quedan paradas y tampoco sacó dobles, no puede tirar + return false; + } + } + + if (jugadorActual.getAvatar() instanceof Coche) { // MOVIMIENTO AVANZADO "COCHE" ------------------------------------------------------------------------------ + if (jugadorActual.getAvatar().getAuxMovAvanzado() == 0 && !dado.areEqual()) { // Si se le acabaron las tiradas extra y no sacó dobles en la anterior, no puede tirar + return false; + } + // Motor roto + return jugadorActual.getAvatar() instanceof Pelota || jugadorActual.getAvatar().getAuxMovAvanzado() >= 0; + } + } else { // SI NO ESTÁ ACTIVADO EL MOV AVANZADO... + return !haTirado || dado.areEqual(); + } + return true; // En el resto de los casos, el jugador SÍ puede tirar. + } + + + public Jugador getJugador(String nombre) { // DADO UN NOMBRE, DEVUELVE EL JUGADOR CON ESE NOMBRE + for (Jugador jugador : jugadores) { + if (jugador.getNombre().equals(nombre)) { + return jugador; + } + } + return null; + } + + public void proponerTrato(Jugador jugadorActual, Tablero tablero){ + + // Pedimos el tipo de trato + int tipoTrato; + do { + consolaNormal.imprimir("Los tipos de trato que puedes proponer son los siguientes:"); + consolaNormal.imprimir(" 0. Cambiar una propiedad por otra"); + consolaNormal.imprimir(" 1. Vender una propiedad"); + consolaNormal.imprimir(" 2. Comprar una propiedad"); + consolaNormal.imprimir(" 3. Cambiar una propiedad por otra y pedir dinero"); + consolaNormal.imprimir(" 4. Cambiar una propiedad por otra y ofrecer dinero"); + consolaNormal.imprimir(" 5. Cambiar una propiedad por otra, y no pagar alquiler en otra propiedad de tu elección durante un número de turnos"); + tipoTrato = consolaNormal.leerInt("Introduce el tipo de trato que quieres proponer (0-5) " + " : "); + if(tipoTrato > -1 && tipoTrato <6){ + break; + } + } while (true); + + // Pedimos el nombre del jugador al que se le va a proponer el trato + + String nombreReceptor = Juego.getConsolaNormal().leer("Introduce el nombre del jugador a quien quieres proponer el trato" + " : "); + if (getJugador(nombreReceptor) == null){ + Juego.getConsolaNormal().imprimir("De momento, ese tal " + nombreReceptor + " no está disfrutando de nuestro increíble Monopoly..."); + return; + } + + // Pedimos los datos necesarios para cada tipo de trato + + String nombrePropOfrecida; + String nombrePropSolicitada; + String nombrePropExenta; + int dineroOfrecido; + int dineroSolicitado; + int turnosExento; + + switch (tipoTrato){ + case 0: + + // Pedimos la propiedad ofrecida + + nombrePropOfrecida = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres ofrecer" + " : "); + if (!(tablero.getCasilla(nombrePropOfrecida) instanceof Propiedad) || tablero.getCasilla(nombrePropOfrecida)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropOfrecida)).getPropietario().equals(jugadorActual))){ // Si el jugador que propone el trato no es propietario... + Juego.getConsolaNormal().imprimir("Okupa, ¡esa propiedad no es tuya!"); + return; + } + + // Pedimos la propiedad solicitada + + nombrePropSolicitada = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres solicitar" + " : "); + if (!(tablero.getCasilla(nombrePropSolicitada) instanceof Propiedad) || tablero.getCasilla(nombrePropSolicitada)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropSolicitada)).getPropietario().equals(getJugador(nombreReceptor)))){ // Si el jugador al que se le propone el trato no es propietario de dicha propiedad + Juego.getConsolaNormal().imprimir(nombreReceptor + " no es el propietario de " + nombrePropSolicitada); + return; + } + + // Ahora que ya tenemos lo necesario, llamamos al constructor + + jugadorActual.addTratoPropuesto(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), (Propiedad) tablero.getCasilla(nombrePropSolicitada))); + getJugador(nombreReceptor).addTratoRecibido(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), (Propiedad) tablero.getCasilla(nombrePropSolicitada))); + break; + case 1: + + // Pedimos la propiedad ofrecida + + nombrePropOfrecida = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres vender" + " : "); + if (!(tablero.getCasilla(nombrePropOfrecida) instanceof Propiedad) || tablero.getCasilla(nombrePropOfrecida)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropOfrecida)).getPropietario().equals(jugadorActual))){ // Si el jugador que propone el trato no es propietario... + Juego.getConsolaNormal().imprimir("Okupa, ¡esa propiedad no es tuya!"); + return; + } + + // Pedimos el dinero solicitado + + dineroSolicitado = Juego.getConsolaNormal().leerInt("Introduce el dinero que quieres solicitar" + " : "); + // todo COMPROBACIÓN DE QUE ES MAYOR QUE 0 (Ya si tal...) + + // Ahora que ya tenemos lo necesario, llamamos al constructor + + jugadorActual.addTratoPropuesto(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), dineroSolicitado)); + getJugador(nombreReceptor).addTratoRecibido(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), dineroSolicitado)); + break; + case 2: + + // Pedimos la propiedad solicitada + + nombrePropSolicitada = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres solicitar" + " : "); + if (!(tablero.getCasilla(nombrePropSolicitada) instanceof Propiedad) || tablero.getCasilla(nombrePropSolicitada)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropSolicitada)).getPropietario().equals(getJugador(nombreReceptor)))){ // Si el jugador al que se le propone el trato no es propietario de dicha propiedad + Juego.getConsolaNormal().imprimir(nombreReceptor + " no es el propietario de " + nombrePropSolicitada); + return; + } + + // Pedimos el dinero ofrecido + + dineroOfrecido = Juego.getConsolaNormal().leerInt("Introduce el dinero que quieres ofrecer" + " : "); + + jugadorActual.addTratoPropuesto(new Trato(jugadorActual, getJugador(nombreReceptor), dineroOfrecido, (Propiedad) tablero.getCasilla(nombrePropSolicitada))); + getJugador(nombreReceptor).addTratoRecibido(new Trato(jugadorActual, getJugador(nombreReceptor), dineroOfrecido, (Propiedad) tablero.getCasilla(nombrePropSolicitada))); + break; + case 3: + + // Pedimos la propiedad ofrecida + + nombrePropOfrecida = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres ofrecer" + " : "); + if (!(tablero.getCasilla(nombrePropOfrecida) instanceof Propiedad) || tablero.getCasilla(nombrePropOfrecida)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropOfrecida)).getPropietario().equals(jugadorActual))){ // Si el jugador que propone el trato no es propietario... + Juego.getConsolaNormal().imprimir("Okupa, ¡esa propiedad no es tuya!"); + return; + } + + // Pedimos la propiedad solicitada + + nombrePropSolicitada = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres solicitar" + " : "); + if (!(tablero.getCasilla(nombrePropSolicitada) instanceof Propiedad) || tablero.getCasilla(nombrePropSolicitada)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropSolicitada)).getPropietario().equals(getJugador(nombreReceptor)))){ // Si el jugador al que se le propone el trato no es propietario de dicha propiedad + Juego.getConsolaNormal().imprimir(nombreReceptor + " no es el propietario de " + nombrePropSolicitada); + return; + } + + // Pedimos el dinero solicitado + + dineroSolicitado = Juego.getConsolaNormal().leerInt("Introduce el dinero que quieres solicitar" + " : "); + + // Ahora que ya tenemos lo necesario, llamamos al constructor + + jugadorActual.addTratoPropuesto(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), (Propiedad) tablero.getCasilla(nombrePropSolicitada), dineroSolicitado)); + getJugador(nombreReceptor).addTratoRecibido(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), (Propiedad) tablero.getCasilla(nombrePropSolicitada), dineroSolicitado)); + break; + case 4: + + // Pedimos la propiedad ofrecida + + nombrePropOfrecida = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres ofrecer" + " : "); + if (!(tablero.getCasilla(nombrePropOfrecida) instanceof Propiedad) || tablero.getCasilla(nombrePropOfrecida)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropOfrecida)).getPropietario().equals(jugadorActual))){ // Si el jugador que propone el trato no es propietario... + Juego.getConsolaNormal().imprimir("Okupa, ¡esa propiedad no es tuya!"); + return; + } + + // Pedimos la propiedad solicitada + + nombrePropSolicitada = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres solicitar" + " : "); + if (!(tablero.getCasilla(nombrePropSolicitada) instanceof Propiedad) || tablero.getCasilla(nombrePropSolicitada)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropSolicitada)).getPropietario().equals(getJugador(nombreReceptor)))){ // Si el jugador al que se le propone el trato no es propietario de dicha propiedad + Juego.getConsolaNormal().imprimir(nombreReceptor + " no es el propietario de " + nombrePropSolicitada); + return; + } + + // Pedimos el dinero ofrecido + + dineroOfrecido = Juego.getConsolaNormal().leerInt("Introduce el dinero que quieres ofrecer" + " : "); + + // Ahora que ya tenemos lo necesario, llamamos al constructor + + jugadorActual.addTratoPropuesto(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), dineroOfrecido, (Propiedad) tablero.getCasilla(nombrePropSolicitada))); + getJugador(nombreReceptor).addTratoRecibido(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), dineroOfrecido, (Propiedad) tablero.getCasilla(nombrePropSolicitada))); + break; + case 5: + + // Pedimos la propiedad ofrecida + + nombrePropOfrecida = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres ofrecer" + " : "); + if (!(tablero.getCasilla(nombrePropOfrecida) instanceof Propiedad) || tablero.getCasilla(nombrePropOfrecida)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropOfrecida)).getPropietario().equals(jugadorActual))){ // Si el jugador que propone el trato no es propietario... + Juego.getConsolaNormal().imprimir("Okupa, ¡esa propiedad no es tuya!"); + return; + } + + // Pedimos la propiedad solicitada + + nombrePropSolicitada = Juego.getConsolaNormal().leer("Nombre de la propiedad que quieres solicitar" + " : "); + if (!(tablero.getCasilla(nombrePropSolicitada) instanceof Propiedad) || tablero.getCasilla(nombrePropSolicitada)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropSolicitada)).getPropietario().equals(getJugador(nombreReceptor)))){ // Si el jugador al que se le propone el trato no es propietario de dicha propiedad + Juego.getConsolaNormal().imprimir(nombreReceptor + " no es el propietario de " + nombrePropSolicitada); + return; + } + + //Pedimos la propiedad en la que desea no pagar alquiler el solicitante + + nombrePropExenta = Juego.getConsolaNormal().leer("Nombre de la propiedad en la que quieres no pagar alquiler durante cierto número de turnos" + " : "); + if (!(tablero.getCasilla(nombrePropExenta) instanceof Propiedad) || tablero.getCasilla(nombrePropExenta)==null){ // Si lo introducido NO es una propiedad o es una casilla inexistente... + Juego.getConsolaNormal().imprimir("Eso no es una propiedad."); + return; + } + if(!(((Propiedad) tablero.getCasilla(nombrePropExenta)).getPropietario().equals(getJugador(nombreReceptor)))){ // Si el jugador al que se le propone el trato no es propietario de dicha propiedad + Juego.getConsolaNormal().imprimir(nombreReceptor + " no es el propietario de " + nombrePropExenta); + return; + } + + // Pedimos el número de turnos de exención + + turnosExento = Juego.getConsolaNormal().leerInt("Introduce el número de turnos de exención que quieres solicitar" + " : "); + + + // Ahora que ya tenemos lo necesario, llamamos al constructor + + jugadorActual.addTratoPropuesto(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), (Propiedad) tablero.getCasilla(nombrePropSolicitada), (Propiedad) tablero.getCasilla(nombrePropExenta), turnosExento)); + getJugador(nombreReceptor).addTratoRecibido(new Trato(jugadorActual, getJugador(nombreReceptor), (Propiedad) tablero.getCasilla(nombrePropOfrecida), (Propiedad) tablero.getCasilla(nombrePropSolicitada), (Propiedad) tablero.getCasilla(nombrePropExenta), turnosExento)); + } + } +} + diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Avatar.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Avatar.java index 3ad2f97..ecdd4b6 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Avatar.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Avatar.java @@ -1,5 +1,6 @@ package Procesos.Avatares; +import Juego.Exceptions.Lectura.LeerException; import Procesos.Jugador; import Procesos.Casillas.*; import Procesos.Avatares.*; @@ -8,11 +9,11 @@ import Procesos.Tablero; -public abstract class Avatar { +public abstract class Avatar { // Avatar es una clase abstracta porque no existe ningún objeto que pertenezca a la clase Avatar pero no pertenezca a ninguna de las subclases. // ATRIBUTOS - private char identificador; // La letra que identifica al jugador + private final char identificador; // La letra que identifica al jugador private int posicion; private int turnosCarcel; //informa de la situación del jugador respecto de la cárcel: // 0: No está en la cárcel / está en la casilla de cárcel pero si tira dados mueve @@ -20,7 +21,6 @@ public abstract class Avatar { // 2: Está en la cárcel, y tiene UNA oportunidad para tirar dados, sacar dobles y salir // 3: Está en la cárcel, y tiene DOS oportunidades para tirar dados, sacar dobles y salir // 4: Está en la cárcel, y tiene TRES oportunidades para tirar dados, sacar dobles y salir - // private Jugador jugador; // El jugador que lleva el avatar private boolean movAvanzadoActivado; private int auxMovAvanzado; private Jugador jugador; // El jugador al que pertenece el avatar @@ -63,8 +63,7 @@ public char getIdentificador() { } /** - * @param casillas - * @return + * @return Casilla en la posicion del avatar */ public Casilla getCasilla(ArrayList casillas) { return casillas.get(posicion); @@ -137,8 +136,7 @@ public void avanzarCasillasSimple(Juego juego, Tablero tablero, int avance, Juga } } } - public abstract void avanzarCasillasAvanzado(Juego juego, Tablero tablero, int avance, Jugador jugadorActual, Jugador banca); - public abstract int getTipoMov(); - // Podríamos haber optado por poner if(avatar instanceof Coche), por ejemplo, pero nos quedamos con getTipoMov porque cambiar la implementación anterior era más sencillo. + public abstract void avanzarCasillasAvanzado(Juego juego, Tablero tablero, int avance, Jugador jugadorActual, Jugador banca) throws LeerException; + } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Coche.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Coche.java index 006b90e..9e71b05 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Coche.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Coche.java @@ -4,7 +4,7 @@ import Procesos.Jugador; import Procesos.Tablero; -public final class Coche extends Avatar { +public final class Coche extends Avatar { // Clase final porque no tiene subclases // ATRIBUTOS private boolean puedeComprarPropiedades; diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Pelota.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Pelota.java index 163093c..49af6c2 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Pelota.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Avatares/Pelota.java @@ -1,10 +1,11 @@ package Procesos.Avatares; +import Juego.Exceptions.Lectura.LeerException; import Juego.Juego; import Procesos.Jugador; import Procesos.Tablero; -public final class Pelota extends Avatar{ +public final class Pelota extends Avatar{ // Clase final porque no tiene subclases // indicadorParadas == 1: el jugador aún no ha llegado a la casilla final // indicadorParadas == 0: el jugador ya está en la casilla final @@ -18,7 +19,7 @@ public Pelota(char identificador) { // OTROS MÉTODOS - public void avanzarCasillasAvanzado(Juego juego, Tablero tablero, int avance, Jugador jugadorActual, Jugador banca){ + public void avanzarCasillasAvanzado(Juego juego, Tablero tablero, int avance, Jugador jugadorActual, Jugador banca) throws LeerException { setAuxMovAvanzado(1); // Indica que el turno aún está en curso if (avance > 4) { avanzarCasillasSimple(juego, tablero, 4, jugadorActual, banca); @@ -36,7 +37,9 @@ public void avanzarCasillasAvanzado(Juego juego, Tablero tablero, int avance, Ju if ((jugadorActual.getAvatar().getPosicion() - aux) % 2 != 0) { // Si es impar, se para en la casilla, se ejecuta la accion correspondiente y el jugador puede interactuar Juego.getConsolaNormal().imprimir("¡Momento de pararse! Introduce \"acabar parada\" para avanzar a la siguiente casilla"); tablero.imprimirTablero(); + juego.accionCasilla(); + if (jugadorActual.getAvatar().inCarcel()) { break; } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Carta.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Carta.java index e384b34..b7d3e50 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Carta.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Carta.java @@ -1,44 +1,13 @@ package Procesos; import java.util.*; -public class Carta { +public abstract class Carta { //Atributos - private int tipo; //0-1. 0.Suerte 1. Comunidad private final List cartas = new ArrayList<>(6); - private final List cartasSuerte = new ArrayList<>(6); - private final List cartasCajaC = new ArrayList<>(6); - //CONTRUCTORES - public Carta(int posicion){ - if (posicion==7 || posicion ==22 || posicion ==36) - this.tipo=0; - if (posicion==2 || posicion ==17 || posicion==33) - this.tipo=1; - + public Carta(){ for (int i = 0; i <= 5; i++) { cartas.add(i); } - - inicializaSuerte(); - inicializaCajaC(); - } - - //METODOS PRIVADOS - private void inicializaSuerte(){ - cartasSuerte.add("El aumento del impuesto sobre bienes inmuebles afecta a todas tus propiedades. Paga 100$ por casa, 1000$ por hotel, 1500$ por piscina y 2000$ por pista de deportes."); - cartasSuerte.add("Tus compañeros descubren tu afición por la evasión de impuestos. Compra su silencio pagando 500$ a cada jugador."); - cartasSuerte.add("¡Yuhuu!¡Has ganado el bote de la lotería! Recibes 1000$."); - cartasSuerte.add("¡Hora punta de tráfico! Retrocede tres casillas."); - cartasSuerte.add("Avanza hasta la casilla de transporte más cercana. Si no tiene dueño, puedes comprársela a la banca. Si tiene dueño, paga al dueño el doble de la operación indicada."); - cartasSuerte.add("¡Felicidades! Hoy es tu cumpleaños y tu abuela te da tu regalo. Recibe 2000$"); - } - - private void inicializaCajaC(){ - cartasCajaC.add("Alquilas a tus compañeros una villa en San Vicente do Mar durante una semana. Paga 200$ a cada jugador."); - cartasCajaC.add("Uy... Te investigan por fraude de identidad... Vas a la Cárcel directamente sin pasar por la casilla de Salida."); - cartasCajaC.add("Colócate en la casilla de Salida y cobra el premio :)."); - cartasCajaC.add("Vas a Circus para disfrutar de una gran noche de fiesta. Si pasas por la casilla de Salida, cobra el premio"); - cartasCajaC.add("Decides irte de viaje a Bali con tus amigos. Aunque os lo pasais en grande, ahora te toca pagar un total de 1000$."); - cartasCajaC.add("Obtienes 2000€ de beneficios por tus magníficas gestiones empresariales. ¡Buen trabajo!"); } //METODOS PUBLICOS @@ -47,17 +16,6 @@ public void barajar(){ //se altera la lista 0,1,2,3,4 y luego depende del numero } //GETTERS - public int getTipo(){ - return tipo;} - - public List getCartasSuerte() { - return cartasSuerte; - } - - public List getCartasCajaC(){ - return cartasCajaC; - } - public List getCartas(){ return cartas; } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/CartaCajaC.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/CartaCajaC.java new file mode 100644 index 0000000..5fb9956 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/CartaCajaC.java @@ -0,0 +1,23 @@ +package Procesos; + +import java.util.ArrayList; +import java.util.List; + +public final class CartaCajaC extends Carta{ + private final List cartasCajaC= new ArrayList<>(6); + public CartaCajaC(){ + super(); + inicializaCajaC(); + } + private void inicializaCajaC(){ + cartasCajaC.add("Alquilas a tus compañeros una villa en San Vicente do Mar durante una semana. Paga 200$ a cada jugador."); + cartasCajaC.add("Uy... Te investigan por fraude de identidad... Vas a la Cárcel directamente sin pasar por la casilla de Salida."); + cartasCajaC.add("Colócate en la casilla de Salida y cobra el premio :)."); + cartasCajaC.add("Vas a Circus para disfrutar de una gran noche de fiesta. Si pasas por la casilla de Salida, cobra el premio"); + cartasCajaC.add("Decides irte de viaje a Bali con tus amigos. Aunque os lo pasais en grande, ahora te toca pagar un total de 1000$."); + cartasCajaC.add("Obtienes 2000€ de beneficios por tus magníficas gestiones empresariales. ¡Buen trabajo!"); + } + public List getCartasCajaC(){ + return cartasCajaC; + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/CartaSuerte.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/CartaSuerte.java new file mode 100644 index 0000000..956cf92 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/CartaSuerte.java @@ -0,0 +1,23 @@ +package Procesos; + +import java.util.ArrayList; +import java.util.List; + +public final class CartaSuerte extends Carta { + private final List cartasSuerte= new ArrayList<>(6); + public CartaSuerte(){ + super(); + inicializaSuerte(); + } + private void inicializaSuerte(){ + cartasSuerte.add("El aumento del impuesto sobre bienes inmuebles afecta a todas tus propiedades. Paga 100$ por casa, 1000$ por hotel, 1500$ por piscina y 2000$ por pista de deportes."); + cartasSuerte.add("Tus compañeros descubren tu afición por la evasión de impuestos. Compra su silencio pagando 500$ a cada jugador."); + cartasSuerte.add("¡Yuhuu!¡Has ganado el bote de la lotería! Recibes 1000$."); + cartasSuerte.add("¡Hora punta de tráfico! Retrocede tres casillas."); + cartasSuerte.add("Avanza hasta la casilla de transporte más cercana. Si no tiene dueño, puedes comprársela a la banca. Si tiene dueño, paga al dueño el doble de la operación indicada."); + cartasSuerte.add("¡Felicidades! Hoy es tu cumpleaños y tu abuela te da tu regalo. Recibe 2000$"); + } + public List getCartasSuerte() { + return cartasSuerte; + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Casilla.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Casilla.java index f8ee7ae..adb7445 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Casilla.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Casilla.java @@ -5,7 +5,7 @@ import java.util.ArrayList; public abstract class Casilla{ - private int posicion; //0-43 + private final int posicion; //0-43 private String nombre; private int visitas; private ArrayList ocupantes; @@ -95,482 +95,11 @@ public String descripcionDetallada() { public String descripcion(){ return "{\nnombre: " + getNombre() +"\n"+ - "tipo: "+ getClass() +" \n" + + "tipo: "+ getClass().getName() +" \n" + "}\n"; } -} -// -//public class Casilla { -// //ATRIBUTOS -// private int tipo; //0-8. 0.Solar; 1.Transporte; 2.Servicios 3. Suerte o Caja de comunidad. 4.Cárcel. 5.Parkineos. 6. Impuesto. 7.Salida 8.Ir cárcel -// private int posicion; //0-43 -// private String nombre; -// private Jugador propietario; -// private boolean hipotecado; -// private int precio; -// private int alquilerBase; -// private int vHipoteca; -// private Grupo grupo; //Color/grupo -// private ArrayList edificios; -// private int rentabilidad; //dinero generado -// private int visitas; -// -// //0 - Marrón 1 - Cián 2 - Fucsia 3 - Tangerina 4 - Escarlateta 5 - Amarillo 6 - Verde 7 - Azul -// -// private ArrayList ocupantes; -// private static int lonMaxNombre = 11; //Longitud del nombre en impresión. Función que mira long del nombre + largo -// -// -// //CONSTRUCTORES -// public Casilla (int pBase,int pSalida, int posicion, String nombre, ArrayList grupos) { -// Grupo[] ArrayAux_grupo= {null, grupos.get(1-1), null, grupos.get(1-1), null, null, grupos.get(2-1), null, grupos.get(2-1), grupos.get(2-1), null, grupos.get(3-1), null, grupos.get(3-1), grupos.get(3-1), null, grupos.get(4-1), null, grupos.get(4-1), grupos.get(4-1), null, grupos.get(5-1), null, grupos.get(5-1), grupos.get(5-1), null, grupos.get(6-1), grupos.get(6-1), null, grupos.get(6-1), null, grupos.get(7-1), grupos.get(7-1), null, grupos.get(7-1), null, null, grupos.get(8-1), null, grupos.get(8-1)}; -// int[] ArrayAux_tipoCasilla = {7, 0, 3, 0, 6, 1, 0, 3, 0, 0, 4, 0, 2, 0, 0, 1, 0, 3, 0, 0, 5, 0, 3, 0, 0, 1, 0, 0, 2, 0, 8, 0, 0, 3, 0, 1, 3, 0, 6, 0}; -// -// ocupantes = new ArrayList<>(6); -// grupo = ArrayAux_grupo[posicion]; -// this.tipo = ArrayAux_tipoCasilla[posicion]; -// this.posicion = posicion; -// this.nombre = nombre; -// this.alquilerBase = 0; -// this.hipotecado = false; -// this.propietario = null; -// this.precio = 0; -// rentabilidad=0; -// visitas=0; -// -// switch (tipo) { -// case 0: //Solar -// grupo.addCasilla(this); -// precio = grupo.getPrecio(); -// alquilerBase =(int)(precio * 0.1); -// edificios = new ArrayList<>(); -// break; -// case 1: //Transporte -// precio = pSalida; -// alquilerBase =(int)(0.25*pSalida); -// break; -// -// case 2: //Servicios -// precio = (int) (pSalida * 0.75); -// alquilerBase =(int)(pSalida/200); //POR EL VALOR DE LOS DADOS -// //factorServicio=200 veces menos que pSalida -// break; -// -// case 3: //Suerte / Caja Comunidad -// break; -// -// case 4: // Carcel -// break; -// -// case 5: // Parking -// alquilerBase = 0; -// break; -// -// case 6: //Impuesto -// if (posicion<20) alquilerBase = pSalida/2; -// else alquilerBase = pSalida; -// break; -// -// case 7: //Salida -// break; -// -// case 8: // Ir Carcel -// break; -// } -// vHipoteca = (int) precio / 2; -// } -// -// //SETTERS -// -// /** -// * Añade a una casilla (solar) edificio del tipo que corresponda, realizando las comprobaciones pertinentes, y cobra su precio al jugador -// * @param tipo 0-3 tipo de edificio a construir (C,H,P,D) -// */ -// public void construir(int tipo,Jugador jugador, boolean caida) { -// if (this.tipo!=0){ -// System.out.println("No puedes costruir en una casilla que no sea un solar"); -// return; -// } -// -// if (grupo.getPropietario()!=propietario && !caida || !jugador.equals(propietario)) { //Comprobación de propiedad -// System.out.println("No puedes construir si no tienes tod el grupo on no has caído 2 veces en esta casilla..."); -// return; -// } -// -// int countc = 0, counth = 0, countp = 0, countd = 0, countgh = 0, countgc=0; //Contador de casas por casilla, hoteles por grupo y casas por grupo -// Edificio edificio = new Edificio(tipo,precio); -// -// if(jugador.getDinero()=4){ //Comprobación de casas/solar //HAY QUE MIRAR QUE DEJA CONSTRUIR MÁS CASAS DE LAS DEBIDAS CUANDO ESTÁ LLENO DE HOTELES -// System.out.println("Pedro Sánchez ha aprobado una ley de urbanismo que impide tener más de 4 casas por casilla ¡Vaya con estos socialistas!"); -// } -// else if(countgh >= grupo.getTam() && countgc>=grupo.getTam()){ -// System.out.println("El ministerio de igualdad prohibe que un solo grupo tenga tantos hoteles y casas a la vez, si quieres construir otra casa, debes vender algo antes o haber votado mejor..."); -// } -// else{ -// System.out.println("¡OLE! Enhorabuena por la construcción de tu casa, ahora eres aún más especulador"); -// System.out.println("Pagas "+edificio.getPrecio()+" por la construccion"); -// edificios.add(edificio); -// jugador.pagar(edificio.getPrecio()); -// jugador.setFortuna(jugador.getFortuna()+ 2*edificio.getPrecio()); //en pagar lo quitamos y ahora tenemos q sumarlo -// jugador.setDineroInvertido(jugador.getDineroInvertido()+precio); -// edificio.setCasilla(this); -// Tablero.addCcasa(); -// } -// break; -// case 1: //Se cobra aunq no se construya el hotel Y NO SE COMPRUEBA QUE HAYA CASAS SUFICIENTES y se crea el edificio aunq no corresponda -// if (countc<4) System.out.println("Debes tener 4 casas en esta propiedad para construir un hotel..."); -// else if (countgh>=grupo.getTam()) System.out.println("No puedes construir más hoteles en esta propiedad"); -// else{ -// System.out.println("Enhorabuena, estás colaborando con la gentrificación de tu ciudad"); -// System.out.println("Pagas "+edificio.getPrecio()+" por construir"); -// edificios.add(edificio); -// jugador.pagar(edificio.getPrecio()); -// jugador.setFortuna(jugador.getFortuna()+ 2*edificio.getPrecio()); //en pagar lo quitamos y ahora tenemos q sumarlo -// jugador.setDineroInvertido(jugador.getDineroInvertido()+precio); -// edificio.setCasilla(this); -// Tablero.addChotel(); -// edificios.removeIf(ite -> ite.getTipo() == 0); -// } -// break; -// case 2: -// if (countp>=1) System.out.println("No puedes construir más piscinas en esta propiedad"); -// else if (countc<2 || counth<1) System.out.println("Necesitas tener al menos 2 casas y 1 hotel para construir una piscina en esta propiedad"); -// else{ -// System.out.println("Enhorabuena, estás colaborando con la gentrificación de tu ciudad"); -// System.out.println("Pagas "+edificio.getPrecio()+" por construir"); -// edificios.add(edificio); -// jugador.pagar(edificio.getPrecio()); -// jugador.setFortuna(jugador.getFortuna()+ 2*edificio.getPrecio()); //en pagar lo quitamos y ahora tenemos q sumarlo -// jugador.setDineroInvertido(jugador.getDineroInvertido()+precio); -// edificio.setCasilla(this); -// Tablero.addCpiscina(); -// } -// break; -// case 3: -// if (countd>=1) System.out.println("No puedes construir más pistas en esta propiedad"); -// else if (counth<2) System.out.println("Necesitas tener al menos 2 hoteles para construir una piscina en esta propiedad"); -// else{ -// System.out.println("Enhorabuena, estás colaborando con la gentrificación de tu ciudad"); -// System.out.println("Pagas "+edificio.getPrecio()+" por construir"); -// edificios.add(edificio); -// jugador.pagar(edificio.getPrecio()); -// jugador.setFortuna(jugador.getFortuna()+ 2*edificio.getPrecio()); //en pagar lo quitamos y ahora tenemos q sumarlo -// jugador.setDineroInvertido(jugador.getDineroInvertido()+precio); -// edificio.setCasilla(this); -// Tablero.addCdeporte(); -// } -// break; -// } -// } -// -// /** -// * Realiza las comprobaciones correspondientes, destruye un edificio y devuelve su coste al jugador -// * @param edificio -// * @param jugador -// */ -// public void venderEdificio(Edificio edificio, Jugador jugador){ -// if (propietario.equals(jugador)&&!hipotecado&&edificio!=null){ -// jugador.addDinero(edificio.getPrecio()/2); -// System.out.println("Cobras "+edificio.getPrecio()+" por "+edificio.getIdentificador()); -// removeEdificio(edificio); -// } -// else System.out.println("No se puede vender este edificio"); -// } -// public void venderEdificio(String sedificio, Jugador jugador){ -// Edificio edificio = getEdificio(sedificio); -// if (propietario.equals(jugador)&&!hipotecado&&edificio!=null){ -// jugador.addDinero(edificio.getPrecio()/2); -// removeEdificio(edificio); -// } -// else System.out.println("No se puede vender este edificio"); -// } -// public Edificio getEdificio(String identificador){ -// for(Edificio ite: edificios){ -// if (ite.getIdentificador().equals(identificador)) return ite; -// } -// return null; //Comprobar en la función desde la que se llame -// } -// public void removeEdificio(Edificio edificio){ -// edificios.remove(edificio); -// } -// -// public ArrayList getEdificios() { -// return edificios; -// } -// -// public void hipotecar(){ -// if (edificios!=null && !edificios.isEmpty()){ -// System.out.println("Debes vender todos los edificios antes de hipotecar."); -// return; -// } -// else if (hipotecado){ -// System.out.println("No puedes hipotecar una propiedad ya hipotecada."); -// return; -// } -// hipotecado = true; -// propietario.addDinero(precio/2); -// System.out.println("Has hipotecado "+ this+" por "+precio/2+"$"); -// } -// public void deshipotecar(){ -// if (!hipotecado){ -// System.out.println("No puedes deshipotecar una propiedad no hipotecada."); -// return; -// } -// if (propietario.getDinero()<(int) ((-precio/2)*1.1)){ -// System.out.println("Dinero insuficiente para deshipotecar, necesitas "+(int) ((-precio/2)*1.1)); -// return; -// } -// hipotecado = false; -// propietario.addDinero((int) ((-precio/2)*1.1)); //Add dinero negativo... -// System.out.println("Has deshipotecado "+nombre+" por "+(int) ((precio/2)*1.1)+"$ ¡Qué bien!"); -// } -// -// -// public void removeOcupante(Jugador jugador){ -// ArrayList aux = new ArrayList<>(6); -// ArrayList aux = new ArrayList<>(6); -// for (Jugador ite: ocupantes){ -// if (!ite.equals(jugador)) aux.add(ite); -// } -// ocupantes = aux; -// } -// -// public void addOcupante(Jugador jugador) { -// ocupantes.add(jugador); -// } -// -// public void setOcupantes(ArrayList ocupantes) {this.ocupantes = ocupantes;} -// public void setPrecio(int precio) {this.precio = precio;} -// public void setRentabilidad(int rentabilidad) {this.rentabilidad = rentabilidad;} -// public void setVisitas(int visitas) {this.visitas = visitas;} -// /** -// * Settea el propietario, añadiendo además la casilla a su lista de propiedades -// * Al llamar a addPropiedad, también hace la comprobación de los grupos -// * @param propietario -// */ -// public void setPropietario(Jugador propietario){ -// if (tipo>2) return; //Si no es un solar, servicio o transporte, no se le puede asignar propietario -// this.propietario = propietario; -// propietario.addPropiedad(this);} -// -// public void setAlquilerBase(int alquilerBase) { //Pensada para trabajar con parking gratuito -// this.alquilerBase = alquilerBase; -// } -// -// //GETTERS -// public int getAlquilerBase() { -// return alquilerBase; -// } -// -// public String getTipoString(){ -// String aux = new String[]{"Solar", "Transporte", "Servicios","Suerte/Comunidad","Cárcel","Parking","Impuestos","Salida","Ir Cárcel"}[tipo]; -// return aux; -// } -// public String getGrupoString(){ -// return grupo.getColor(); -// } -// public Boolean getHipotecado(){ -// return hipotecado; -// } -// public ArrayList getOcupantes() {return ocupantes;} -// public int getPosicion() {return posicion;} -// public static int getLonMaxNombre() {return lonMaxNombre;} -// public int getTipo() { return tipo;} -// public Grupo getGrupo() {return grupo;} -// public Jugador getPropietario() {return propietario;} -// public String getNombre() {return nombre;} -// public int getPrecio(){ -// return precio; -// } -// public int getvHipoteca(){ -// return vHipoteca; -// } -// public int getRentabilidad() {return rentabilidad;} -// public int getVisitas() {return visitas;} -// -// //METODOS PUBLICOS - - -// public Boolean pagasAlquiler(Jugador jugador){ //Puede que tenga 0 usos esta funciíon -// //return propietario!=jugador && ; -// //return !Propietario().equals(jugador)&&!casilla.isComprable() && !casilla.getHipotecado(); -// return true; -// } -// /** -// * Calcula el alquiler que debe ser pagado al caer en una casilla de tipo solar, transporte, servicio o impuesto -// * @return int con el valor que el jugador que caiga en esa casilla debe pagar. -// */ -// public int calcularAlquiler(Dado dado){ -// int alq = alquilerBase; -// switch (tipo){ -// case 0: -// if (!edificios.isEmpty()){ -// int ncasas = 0; -// for(Edificio ite: edificios){ -// switch (ite.getTipo()){ -// case 0: -// ncasas++; -// break; -// case 1: -// alq+=alquilerBase*70; -// break; -// case 2: -// case 3: -// alq+=alquilerBase*25; -// break; -// } -// } -// switch (ncasas){ -// case 1: alq+=5*alquilerBase; break; -// case 2: alq+=15*alquilerBase; break; -// case 3: alq+=35*alquilerBase; break; -// case 4: alq+=50*alquilerBase; break; -// } -// if(grupo.getPropietario()!=null){ -// return alq+alquilerBase; -// }else{ -// return alq; -// } -// } -// else return alquilerBase; -// case 1: -// return propietario.getNTrans()*alquilerBase; -// case 2: -// if (propietario.getNServicios() == 1) return dado.getSuma()*alquilerBase*4; -// else if (propietario.getNServicios() == 2) return dado.getSuma()*alquilerBase*10; -// return 0; -// case 6: return alquilerBase; -// default: return 0; //En los casos especiales, usamos otras funciones -// } -// } -// -// //toString -// private String StringAvatares(){ -// StringBuilder avs = new StringBuilder(); -// for (Jugador jugador:ocupantes){ -// avs.append("&").append(jugador.getAvatar()); -// } -// return avs.toString(); -// } -// -// public String toString (){ -// String formato = "|\u001B[4m%"+lonMaxNombre+"s %"+6+"s\u001B[0m|"; -// if (grupo!=null) formato = grupo.colorFormato() + formato + "\u001B[0m"; -// return String.format(formato,this.nombre,StringAvatares()); -// } -// -// public String descripcion() { -// if (tipo==0) return "{\n" + -// "nombre: " + nombre +"\n"+ -// "color: " + grupo.getColor() + "\n"+ -// "tipo: "+getTipoString()+" \n" + -// "valor: "+precio+" \n" + -// "edificios: "+edificios+" \n" + -// "}\n"; -// else return "{\n" + -// "nombre: " + nombre +"\n"+ -// "tipo: "+getTipoString()+" \n" + -// "valor: "+precio+" \n" + -// "}\n"; -// } -// public String descripcionDetallada() { -// switch (tipo){ -// case 0: -// return "{\n" + -// "nombre: " + nombre +"\n"+ -// "color: " + grupo.getColor() + "\n"+ //Estaría chulo meterle el formateo para que se vea del color que es -// "tipo: "+getTipoString()+" \n" + -// "Propietario: "+propietario.getNombre()+" \n" + -// "Precio: "+ precio +" \n" + -// "Edificios: " + edificios +"\n"+ -// "ALQUILER ACTUAL: "+ calcularAlquiler(null) + "$\n" + -// " -Alquiler Básico: "+alquilerBase+"$ \n" + -// " -Alquiler con tod el grupo: "+alquilerBase*2+"$ \n" + -// //Podemos meter aquí alquiler con construcones (igual no todas las combinaciones, pero un poquito). -// "Puedes hipotecar esta casilla por "+precio/2+"$\n"+ -// -// //"Ocupantes: "+ ocupantes +" \n" + -// -// "}\n"; -// case 1: -// return "{\n" + -// "nombre: " + nombre +"\n"+ -// "tipo: "+getTipoString()+" \n" + -// "Propietario: "+propietario.getNombre() +" \n" + -// "Precio: "+ precio +" \n" + -// " Alquiler Básico: "+alquilerBase+" \n" + -// " El alquiler de esta propiedad escala según la cantidad de transportes que tenga el dueño \n" + -// "}\n"; -// case 2: -// return "{\n" + -// "nombre: " + nombre +"\n"+ -// "tipo: "+getTipoString()+" \n" + -// "Propietario: "+propietario.getNombre()+" \n" + -// "Precio: "+ precio +" \n" + -// " Alquiler Básico: "+alquilerBase+" \n" + -// " El alquiler de esta propiedad escala según la cantidad de servicios que tenga el dueño \n" + -// "}\n"; -// case 3: -// return "{\n"+ -// "nombre: " + nombre+ "\n"+ -// "descripción: sacas la carta que corresponda al caer en esta casilla.\n" + -// "}\n"; -// case 4: -// case 5: -// return "{\n"+ -// "nombre: " + nombre+ -// "}\n"; -// case 6: -// return "{\n"+ -// "nombre: " + nombre+ -// "descripción: al caer en esta casilla, pagas un impuesto a la banca.\n" + -// "}\n"; -// case 7: -// return "{\n"+ -// "nombre: " + nombre+ -// "descripción: al pasar por esta casilla recibes un salario\n" + -// "}\n"; -// case 8: -// return "{\n"+ -// "nombre: " + nombre+ -// "descripción: al caer en esta casilla eres enviado a la cárcel\n" + -// "}\n"; -// -// } -// return ""; -// /*return "{\n" + -// "nombre: " + nombre +"\n"+ -// "color: " + grupo.getColor() + "\n"+ //Estaría chulo meterle el formateo para que se vea del color que es -// "tipo: "+getTipoString()+" \n" + -// " Alquiler Básico: "+alquilerBase+" \n" + -// " Alquiler con tod el grupo: "+alquilerBase*2+" \n" + -// "valor: "+precio+" \n" + -// "valor: "+precio+" \n" + -// -// "}\n";*/ -// } -// -// public void setEdificios(ArrayList edificios) { -// this.edificios = edificios; -// } -//} \ No newline at end of file + public int getPosicion() { + return posicion; + } +} diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Hotel.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Hotel.java index bccc58a..e10f094 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Hotel.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Hotel.java @@ -7,6 +7,6 @@ public final class Hotel extends Edificio { public Hotel(int precioC){ super(); setPrecio((int)(precioC*0.6)); - setIdentificador("Casa "+ Tablero.getChotel()); + setIdentificador("Hotel "+ Tablero.getChotel()); } } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Impuesto.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Impuesto.java index 64f3a87..d7334d4 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Impuesto.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Impuesto.java @@ -1,5 +1,6 @@ package Procesos.Casillas; +import Juego.Exceptions.AlquilerDineroInsufException; import Juego.Juego; import Procesos.Jugador; @@ -10,10 +11,11 @@ public Impuesto(int posicion, String nombre, int valor) { this.valor = valor; } - public void accionCasilla(Jugador jugador){ + public void accionCasilla(Jugador jugador) throws AlquilerDineroInsufException { Juego.getConsolaNormal().imprimir("Has caído en la casilla impuestos, debes pagar " + valor + "$"); if (jugador.pagar(valor)) ParkingGratuito.addDineroAcumulado(valor); + else throw new AlquilerDineroInsufException(null,valor); jugador.setPagoTasasEImpuestos(jugador.getPagoTasasEImpuestos() + valor); } } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Piscina.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Piscina.java index 025277b..87fe588 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Piscina.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Piscina.java @@ -7,6 +7,6 @@ public final class Piscina extends Edificio { public Piscina(int precioC){ super(); setPrecio((int)(precioC*0.6)); - setIdentificador("Casa "+ Tablero.getCpiscina()); + setIdentificador("Piscina "+ Tablero.getCpiscina()); } } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Pista.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Pista.java index 579f315..c38d0b1 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Pista.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Pista.java @@ -7,6 +7,6 @@ public final class Pista extends Edificio { public Pista(int precioC){ super(); setPrecio((int)(precioC*0.6)); - setIdentificador("Casa "+ Tablero.getCdeporte()); + setIdentificador("Pista "+ Tablero.getCdeporte()); } } diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Propiedad.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Propiedad.java index 72d0ccb..e2af079 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Propiedad.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Propiedad.java @@ -1,5 +1,6 @@ package Procesos.Casillas; +import Juego.Exceptions.AlquilerDineroInsufException; import Juego.Juego; import Procesos.Jugador; @@ -120,6 +121,9 @@ public int getRentabilidad() { return rentabilidad; } + public String descripcionDetallada() { + return "Descripción genérica"; + } public String descripcion(){ return "{\nnombre: " + getNombre() +"\n"+ "tipo: "+ getClass() +" \n" + @@ -127,7 +131,7 @@ public String descripcion(){ "Propietario: " + getPropietario().getNombre() +"\n" + "}\n"; } - public void accionCasilla(Jugador jugador){ + public void accionCasilla(Jugador jugador) throws AlquilerDineroInsufException { if (!propietario.equals(jugador) && !propietario.isBanca() && !hipotecado) { jugador.pagar(calcularAlquiler(), propietario); setRentabilidad(rentabilidad + calcularAlquiler()); //edificios?? diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Servicios.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Servicios.java index 1ee6c3f..2c1ea5b 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Servicios.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Servicios.java @@ -1,4 +1,5 @@ package Procesos.Casillas; +import Juego.Exceptions.AlquilerDineroInsufException; import Juego.Juego; import Procesos.Dado; @@ -11,15 +12,16 @@ public Servicios(int posicion, String nombre, Jugador propietario, int pSalida) Servicios.alquilerBase = pSalida/200; setPrecio((int) (pSalida*0.75)); } + public int calcularAlquiler(Dado dado){ if (getPropietario().getNServicios() == 1) return dado.getSuma()*alquilerBase*4; else if (getPropietario().getNServicios() == 2) return dado.getSuma()*alquilerBase*10; return 0; } - public void accionCasilla(Jugador jugador, Dado dado){ + public void accionCasilla(Jugador jugador, Dado dado) throws AlquilerDineroInsufException { if (!getPropietario().equals(jugador) && !getPropietario().isBanca() && !getHipotecado()) { - jugador.pagar(calcularAlquiler(dado), getPropietario()); + if(!jugador.pagar(calcularAlquiler(dado), getPropietario())) throw new AlquilerDineroInsufException(getPropietario(),calcularAlquiler(dado)); setRentabilidad(getRentabilidad() + calcularAlquiler(dado)); //edificios?? jugador.setPagoDeAlquileres(jugador.getPagoDeAlquileres() + calcularAlquiler(dado)); getPropietario().setCobroDeAlquileres(getPropietario().getCobroDeAlquileres() + calcularAlquiler(dado)); diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Solar.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Solar.java index 00a03a1..2f58fdf 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Solar.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Solar.java @@ -1,8 +1,10 @@ package Procesos.Casillas; +import Juego.Exceptions.Comprar.ComprarExceptionDineroInsuficiente; import Procesos.Jugador; import Procesos.Tablero; import Juego.Juego; +import Juego.Exceptions.*; import java.util.ArrayList; @@ -226,9 +228,9 @@ public final Grupo getGrupo() { //Acción @Override - public void accionCasilla(Jugador jugador) { + public void accionCasilla(Jugador jugador) throws AlquilerDineroInsufException { if (!getPropietario().equals(jugador) && !getPropietario().isBanca() && !getHipotecado()) { - jugador.pagar(calcularAlquiler(), getPropietario()); + if (!jugador.pagar(calcularAlquiler(), getPropietario())) throw new AlquilerDineroInsufException(getPropietario(),calcularAlquiler()); setRentabilidad(getRentabilidad() + calcularAlquiler()); jugador.setPagoDeAlquileres(jugador.getPagoDeAlquileres() + calcularAlquiler()); getPropietario().setCobroDeAlquileres(getPropietario().getCobroDeAlquileres() + calcularAlquiler()); diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Transporte.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Transporte.java index c5ceba2..2445cdc 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Transporte.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Casillas/Transporte.java @@ -1,17 +1,52 @@ package Procesos.Casillas; + +import Juego.Exceptions.AlquilerDineroInsufException; +import Juego.Juego; import Procesos.Jugador; -public class Transporte extends Propiedad{ +public class Transporte extends Propiedad { private static int factorTransporte; public Transporte(int posicion, String nombre, Jugador propietario, int pSalida) { super(posicion, nombre, propietario); - Transporte.factorTransporte = pSalida/4; + Transporte.factorTransporte = pSalida / 4; setPrecio(pSalida); } - public int calcularAlquiler(){ + @Override + public String descripcionDetallada() { + return "{\n" + + "nombre: " + getNombre() + "\n" + + "tipo: Transporte \n" + + "Propietario: " + getPropietario().getNombre() + " \n" + + "Precio: " + getPrecio() + " \n" + + "ALQUILER ACTUAL: " + calcularAlquiler() + "$\n" + + "Factor transporte: " + factorTransporte + "\n " + + "Puedes hipotecar esta casilla por " + getPrecio() / 2 + "$\n" + + + //"Ocupantes: "+ ocupantes +" \n" + + + "}\n"; + } + + public int calcularAlquiler() { return getPropietario().getNTrans() * factorTransporte; } + @Override + public void accionCasilla(Jugador jugador) throws AlquilerDineroInsufException { + if (!getPropietario().equals(jugador) && !getPropietario().isBanca() && !getHipotecado()) { + if (!jugador.pagar(calcularAlquiler(), getPropietario())) throw new AlquilerDineroInsufException(getPropietario(),calcularAlquiler()); + setRentabilidad(getRentabilidad() + calcularAlquiler()); + jugador.setPagoDeAlquileres(jugador.getPagoDeAlquileres() + calcularAlquiler()); + getPropietario().setCobroDeAlquileres(getPropietario().getCobroDeAlquileres() + calcularAlquiler()); + Juego.getConsolaNormal().imprimir("Pagas " + calcularAlquiler() + "$ por caer en " + getNombre()); + } else if (getHipotecado()) { + Juego.getConsolaNormal().imprimir("Casilla hipotecada... No pagas alquiler :)"); + } else if (getPropietario().isBanca()) { + Juego.getConsolaNormal().imprimir("Esta propiedad aun no tiene dueño, la puedes comprar."); + } else if (getPropietario().equals(jugador)) { + Juego.getConsolaNormal().imprimir("Has caído en una casilla de tu propiedad, disfruta de tu estancia"); + } + } } \ No newline at end of file diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Dado.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Dado.java index 8723904..ffb6703 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Dado.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Dado.java @@ -1,7 +1,7 @@ package Procesos; import java.util.Random; -public class Dado { +public final class Dado { private int Dado1; private int Dado2; private int c; //Registra el número de tiradas iguales seguidas diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Jugador.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Jugador.java index 453027e..5fcde2c 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Jugador.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Jugador.java @@ -1,301 +1,453 @@ -package Procesos; - -import Juego.Juego; -import Procesos.Casillas.*; -import Procesos.Avatares.*; - -import java.util.*; - - -public class Jugador { - //ATRIBUTOS - private Avatar avatar; // Avatar del jugador. Almacena to' lo relativo a posiciones, movimiento y cárcel - private String nombre; - private int dinero; - private ArrayList propiedades; - private ArrayList cartasSuerte; - private int vueltas; - private boolean bancarrota; - private boolean puedeComprarPropiedades; // Solo se hacen comprobaciones con él en el caso de que movAvanzado esté activado y sea tipo coche. Es como un segundo auxMovAvanzado - private int dineroInvertido; //en tus propiedades. Hecho menos edificios - private int pagoTasasEImpuestos; //suerte, carcel, impuestos. Hecho - private int pagoDeAlquileres; //Hecho - private int cobroDeAlquileres; //Hecho - private int pasarPorCasillaDeSalida; //Hecho - private int premiosInversionesOBote; //suerte, parking. Hecho - private int vecesEnLaCarcel; // - private int vecesDados; - private int fortuna; //falta edificios - - - //CONSTRUCTORES - public Jugador(int dinero, String nombre, Avatar avatar) { - this.dinero = dinero; //inicial: un tercio del valor total de los solares - this.nombre = nombre; - this.avatar = avatar; //Generacion del avatar random - propiedades = new ArrayList<>(20); - cartasSuerte = null; - bancarrota = false; - dineroInvertido = 0; - pagoTasasEImpuestos = 0; - pagoDeAlquileres = 0; - cobroDeAlquileres = 0; - pasarPorCasillaDeSalida = 0; - premiosInversionesOBote = 0; - vecesEnLaCarcel = 0; - vecesDados=0; - fortuna=0; - } - - public Jugador() { - dinero = 100000000; - fortuna= 100000000; - nombre = "Banca"; - cartasSuerte = null; - propiedades = new ArrayList<>(40); //Se le meten cuando se crean las propiedades - } - - //GETTERS - public String getNombre() { - return nombre; - } - - public ArrayList getPropiedades() { - return propiedades; - } - - public int getDinero() { - return dinero; - } - - public int getVueltas() { - return vueltas; - } - - public Avatar getAvatar() { - return avatar; - } - - public Boolean getBancarrota() {return bancarrota;} - - public int getDineroInvertido() {return dineroInvertido;} - - public int getPagoDeAlquileres() {return pagoDeAlquileres;} - - public int getCobroDeAlquileres() {return cobroDeAlquileres;} - - public int getPagoTasasEImpuestos() {return pagoTasasEImpuestos;} - - public int getPremiosInversionesOBote() {return premiosInversionesOBote;} - - public int getPasarPorCasillaDeSalida() {return pasarPorCasillaDeSalida;} - - public int getVecesEnLaCarcel() {return vecesEnLaCarcel;} - - public int getVecesDados() {return vecesDados;} - - public int getFortuna() {return fortuna;} - - - - - /** - * @param casillas - * @return - */ - public Casilla getCasilla(ArrayList casillas) { - return casillas.get(avatar.getPosicion()); - } - - //SETTERS - public void addDinero(int dinero) { - fortuna += dinero; - this.dinero += dinero; - } - - public void setAvatar(Avatar avatar){ - this.avatar = avatar; - } - - public void setDinero(int dinero) { - this.dinero = dinero; - } - - //METODOS PUBLICOS - - public Boolean isBanca() { - return nombre.equals("Banca"); - } - - public void declararBancarrota(Jugador acreedor) { //acabar función - ArrayList vacio = new ArrayList<>(); - if (acreedor.isBanca()){ - for (Propiedad ite: propiedades) if (ite instanceof Solar) { - int n = ((Solar)ite).getEdificios().size(); - for (int i = 0; i propiedades) { - this.propiedades = propiedades; - } - - public void setBancarrota(boolean bancarrota) { - this.bancarrota = bancarrota; - } - - public void setVueltas(int vueltas) { - this.vueltas = vueltas; - } - - public void setCobroDeAlquileres(int cobroDeAlquileres) { - this.cobroDeAlquileres = cobroDeAlquileres; - } - - public void setDineroInvertido(int dineroInvertido) { - this.dineroInvertido = dineroInvertido; - } - - public void setVecesEnLaCarcel(int vecesEnLaCarcel) { - this.vecesEnLaCarcel = vecesEnLaCarcel; - } - - public void setPremiosInversionesOBote(int premiosInversionesOBote) { - this.premiosInversionesOBote = premiosInversionesOBote; - } - - public void setPasarPorCasillaDeSalida(int pasarPorCasillaDeSalida) { - this.pasarPorCasillaDeSalida = pasarPorCasillaDeSalida; - } - - public void setPagoDeAlquileres(int pagoDeAlquileres) { - this.pagoDeAlquileres = pagoDeAlquileres; - } - - public void setPagoTasasEImpuestos(int pagoTasasEImpuestos) { - this.pagoTasasEImpuestos = pagoTasasEImpuestos; - } - - public void addVecesDados() { - this.vecesDados++; - } - public void setFortuna(int fortuna) {this.fortuna = fortuna;} - - //Utilidad - - /** - * Añade una propiedad a un jugador, marcandolo también como propietario del grupo en caso de que corresponda - * - * @param propiedad - */ - public void addPropiedad(Propiedad propiedad) { - propiedades.add(propiedad); - if (propiedad instanceof Solar) { //Solo trabajamos con grupos si es un solar - for (Solar ite : ((Solar)propiedad).getGrupo().getCasillas()) { - if (!ite.getPropietario().equals(this) || ite.getPropietario().getNombre().equals("Banca")) return; - } - ((Solar)propiedad).getGrupo().setPropietario(this); - } - } - - public void removePropiedad(Casilla propiedad) { - propiedades.remove(propiedad); - } - - public int getNTrans() { - int i = 0; - for (Casilla casilla : propiedades) { - if (casilla instanceof Transporte) i++; - } - return i; - } - - public int getNServicios() { - int i = 0; - for (Casilla casilla : propiedades) { - if (casilla instanceof Servicios) i++; - } - return i; - } - - - public boolean equals(Jugador obj) { - return nombre.equals(obj.getNombre()); - } - - @Override - public String toString() { - ArrayList edificios = new ArrayList<>(); - StringBuilder sHip = new StringBuilder(); - for (Propiedad prop : propiedades) { - if (prop instanceof Solar && ((Solar)prop).getEdificios()!=null) edificios.addAll(((Solar)prop).getEdificios()); - else sHip.append(prop.getNombre()).append(" "); - } - return "{\n" + - "nombre: " + nombre + ",\n" + - "avatar: " + avatar.getIdentificador() + ",\n" + - "fortuna: " + dinero + ",\n" + - "propiedades: "+ propiedades +"\n" + - "hipotecas: [" + sHip + "]\n" + - "edificios: "+edificios+"\n" + - "}"; - } -} - +package Procesos; + +import Juego.Juego; +import Procesos.Casillas.*; +import Procesos.Avatares.*; + +import java.util.*; + + +public final class Jugador { + //ATRIBUTOS + private Avatar avatar; // Avatar del jugador. Almacena to' lo relativo a posiciones, movimiento y cárcel + private final String nombre; + private int dinero; + private ArrayList propiedades; + private int vueltas; + private boolean bancarrota; + private boolean puedeComprarPropiedades; // Solo se hacen comprobaciones con él en el caso de que movAvanzado esté activado y sea tipo coche. Es como un segundo auxMovAvanzado + private int dineroInvertido; //en tus propiedades. Hecho menos edificios + private int pagoTasasEImpuestos; //suerte, carcel, impuestos. Hecho + private int pagoDeAlquileres; //Hecho + private int cobroDeAlquileres; //Hecho + private int pasarPorCasillaDeSalida; //Hecho + private int premiosInversionesOBote; //suerte, parking. Hecho + private int vecesEnLaCarcel; // + private int vecesDados; + private int fortuna; //falta edificios + + private ArrayList tratosPropuestos; + private ArrayList tratosRecibidos; + private int[] casillasExentas; // Array de tamaño 40 que almacenará los turnos de exención de alquiler, si corresponde, en cada una de las casillas. + + + //CONSTRUCTORES + public Jugador(int dinero, String nombre, Avatar avatar) { + this.dinero = dinero; //inicial: un tercio del valor total de los solares + this.nombre = nombre; + this.avatar = avatar; //Generacion del avatar random + propiedades = new ArrayList<>(20); + bancarrota = false; + dineroInvertido = 0; + pagoTasasEImpuestos = 0; + pagoDeAlquileres = 0; + cobroDeAlquileres = 0; + pasarPorCasillaDeSalida = 0; + premiosInversionesOBote = 0; + vecesEnLaCarcel = 0; + vecesDados=0; + fortuna=0; + casillasExentas = new int[40]; + for (int i = 0; i < casillasExentas.length; i++) { + casillasExentas[i] = 0; + } + + } + + public Jugador() { + dinero = 100000000; + fortuna= 100000000; + nombre = "Banca"; + propiedades = new ArrayList<>(40); //Se le meten cuando se crean las propiedades + } + + //GETTERS + public String getNombre() { + return nombre; + } + + public int getCasillaExenta(int posicion) { + return (casillasExentas[posicion]); + } + + public ArrayList getPropiedades() { + return propiedades; + } + + public int getDinero() { + return dinero; + } + + public int getVueltas() { + return vueltas; + } + + public Avatar getAvatar() { + return avatar; + } + + public Boolean getBancarrota() {return bancarrota;} + + public int getDineroInvertido() {return dineroInvertido;} + + public int getPagoDeAlquileres() {return pagoDeAlquileres;} + + public int getCobroDeAlquileres() {return cobroDeAlquileres;} + + public int getPagoTasasEImpuestos() {return pagoTasasEImpuestos;} + + public int getPremiosInversionesOBote() {return premiosInversionesOBote;} + + public int getPasarPorCasillaDeSalida() {return pasarPorCasillaDeSalida;} + + public int getVecesEnLaCarcel() {return vecesEnLaCarcel;} + + public int getVecesDados() {return vecesDados;} + + public int getFortuna() {return fortuna;} + + public ArrayList getTratosPropuestos() { + return tratosPropuestos; + } + + // Getter para obtener la lista de tratos recibidos + public ArrayList getTratosRecibidos() { + return tratosRecibidos; + } + + + + + /** + * @param casillas + * @return + */ + public Casilla getCasilla(ArrayList casillas) { + return casillas.get(avatar.getPosicion()); + } + + //SETTERS + public void addDinero(int dinero) { + fortuna += dinero; + this.dinero += dinero; + } + + public void setCasillaExenta(int posicion, int turnos) { + casillasExentas[posicion] = turnos; + } + + public void setAvatar(Avatar avatar){ + this.avatar = avatar; + } + + public void setDinero(int dinero) { + this.dinero = dinero; + } + + //METODOS PUBLICOS + + public Boolean isBanca() { + return nombre.equals("Banca"); + } + + public void declararBancarrota(Jugador acreedor) { //acabar función + ArrayList vacio = new ArrayList<>(); + if (acreedor.isBanca()){ + for (Propiedad ite: propiedades) if (ite instanceof Solar) { + int n = ((Solar)ite).getEdificios().size(); + for (int i = 0; i propiedades) { + this.propiedades = propiedades; + } + + public void setBancarrota(boolean bancarrota) { + this.bancarrota = bancarrota; + } + + public void setVueltas(int vueltas) { + this.vueltas = vueltas; + } + + public void setCobroDeAlquileres(int cobroDeAlquileres) { + this.cobroDeAlquileres = cobroDeAlquileres; + } + + public void setDineroInvertido(int dineroInvertido) { + this.dineroInvertido = dineroInvertido; + } + + public void setVecesEnLaCarcel(int vecesEnLaCarcel) { + this.vecesEnLaCarcel = vecesEnLaCarcel; + } + + public void setPremiosInversionesOBote(int premiosInversionesOBote) { + this.premiosInversionesOBote = premiosInversionesOBote; + } + + public void setPasarPorCasillaDeSalida(int pasarPorCasillaDeSalida) { + this.pasarPorCasillaDeSalida = pasarPorCasillaDeSalida; + } + + public void setPagoDeAlquileres(int pagoDeAlquileres) { + this.pagoDeAlquileres = pagoDeAlquileres; + } + + public void setPagoTasasEImpuestos(int pagoTasasEImpuestos) { + this.pagoTasasEImpuestos = pagoTasasEImpuestos; + } + + public void addVecesDados() { + this.vecesDados++; + } + public void setFortuna(int fortuna) {this.fortuna = fortuna;} + + //Utilidad + + /** + * Añade una propiedad a un jugador, marcandolo también como propietario del grupo en caso de que corresponda + * + * @param propiedad + */ + public void addPropiedad(Propiedad propiedad) { + propiedades.add(propiedad); + if (propiedad instanceof Solar) { //Solo trabajamos con grupos si es un solar + for (Solar ite : ((Solar)propiedad).getGrupo().getCasillas()) { + if (!ite.getPropietario().equals(this) || ite.getPropietario().getNombre().equals("Banca")) return; + } + ((Solar)propiedad).getGrupo().setPropietario(this); + } + } + + public void removePropiedad(Casilla propiedad) { + propiedades.remove(propiedad); + } + + public int getNTrans() { + int i = 0; + for (Propiedad casilla : propiedades) { + if (casilla instanceof Transporte) i++; + } + return i; + } + + public int getNServicios() { + int i = 0; + for (Casilla casilla : propiedades) { + if (casilla instanceof Servicios) i++; + } + return i; + } + public void addTratoPropuesto(Trato trato) { + if (tratosPropuestos == null) { + tratosPropuestos = new ArrayList<>(); + } + tratosPropuestos.add(trato); + } + + public void addTratoRecibido(Trato trato) { + if (tratosRecibidos == null) { + tratosRecibidos = new ArrayList<>(); + } + tratosRecibidos.add(trato); + } + public void imprimirTratosRecibidos(){ + if(tratosRecibidos!=null){ //HODer + for (int i=0; i= trato.getDineroSolicitado()) { + trato.getOfertante().removePropiedad(trato.getPropOfrecida()); + trato.getReceptor().addPropiedad(trato.getPropOfrecida()); + trato.getReceptor().pagar(trato.getDineroSolicitado(), trato.getOfertante()); + trato.imprimirTratoAceptado(); + trato.getOfertante().tratosPropuestos.remove(trato); + trato.getReceptor().tratosRecibidos.remove(trato); + } + else + Juego.getConsolaNormal().imprimir("El trato no se puede llevar a cabo ya que los jugadores no disponen de los bienes acordados"); + break; + + case 2: + if(trato.getReceptor().getPropiedades().contains(trato.getPropSolicitada()) && trato.getOfertante().getDinero()>= trato.getDineroOfrecido()) { + trato.getReceptor().removePropiedad(trato.getPropSolicitada()); + trato.getOfertante().addPropiedad(trato.getPropSolicitada()); + trato.getOfertante().pagar(trato.getDineroOfrecido(), trato.getReceptor()); + trato.imprimirTratoAceptado(); + trato.getOfertante().tratosPropuestos.remove(trato); + trato.getReceptor().tratosRecibidos.remove(trato); + } + else + Juego.getConsolaNormal().imprimir("El trato no se puede llevar a cabo ya que los jugadores no disponen de los bienes acordados"); + break; + + case 3: + if(trato.getOfertante().getPropiedades().contains(trato.getPropOfrecida()) && trato.getReceptor().getPropiedades().contains(trato.getPropSolicitada()) && trato.getReceptor().getDinero()>=trato.getDineroSolicitado()) { + trato.getOfertante().removePropiedad(trato.getPropOfrecida()); + trato.getReceptor().addPropiedad(trato.getPropOfrecida()); + trato.getReceptor().removePropiedad(trato.getPropSolicitada()); + trato.getOfertante().addPropiedad(trato.getPropSolicitada()); + trato.getReceptor().pagar(trato.getDineroSolicitado(), trato.getOfertante()); + trato.imprimirTratoAceptado(); + trato.getOfertante().tratosPropuestos.remove(trato); + trato.getReceptor().tratosRecibidos.remove(trato); + } + else + Juego.getConsolaNormal().imprimir("El trato no se puede llevar a cabo ya que los jugadores no disponen de los bienes acordados"); + break; + + case 4: + if(trato.getOfertante().getPropiedades().contains(trato.getPropOfrecida()) && trato.getReceptor().getPropiedades().contains(trato.getPropSolicitada()) && trato.getOfertante().getDinero()>=trato.getDineroOfrecido()) { + trato.getOfertante().removePropiedad(trato.getPropOfrecida()); + trato.getReceptor().addPropiedad(trato.getPropOfrecida()); + trato.getReceptor().removePropiedad(trato.getPropSolicitada()); + trato.getOfertante().addPropiedad(trato.getPropSolicitada()); + trato.getOfertante().pagar(trato.getDineroOfrecido(), trato.getReceptor()); + trato.imprimirTratoAceptado(); + trato.getOfertante().tratosPropuestos.remove(trato); + trato.getReceptor().tratosRecibidos.remove(trato); + } + else + Juego.getConsolaNormal().imprimir("El trato no se puede llevar a cabo ya que los jugadores no disponen de los bienes acordados"); + break; + + case 5: + if(trato.getOfertante().getPropiedades().contains(trato.getPropOfrecida()) && trato.getReceptor().getPropiedades().contains(trato.getPropSolicitada())) { + trato.getOfertante().removePropiedad(trato.getPropOfrecida()); + trato.getReceptor().addPropiedad(trato.getPropOfrecida()); + trato.getReceptor().removePropiedad(trato.getPropSolicitada()); + trato.getOfertante().addPropiedad(trato.getPropSolicitada()); + trato.getOfertante().setCasillaExenta(trato.getPropExenta().getPosicion(), trato.getTurnosExento()); + trato.imprimirTratoAceptado(); + trato.getOfertante().tratosPropuestos.remove(trato); + trato.getReceptor().tratosRecibidos.remove(trato); + } + else + Juego.getConsolaNormal().imprimir("El trato no se puede llevar a cabo ya que los jugadores no disponen de los bienes acordados"); + break; + } + } + + public void eliminarTrato(int numTrato){ + Trato trato=tratosPropuestos.get(numTrato-1); + trato.getReceptor().tratosRecibidos.remove(trato); + trato.getOfertante().tratosPropuestos.remove(trato); + } + + @Override + public String toString() { + ArrayList edificios = new ArrayList<>(); + StringBuilder sHip = new StringBuilder(); + for (Propiedad prop : propiedades) { + if (prop instanceof Solar && ((Solar)prop).getEdificios()!=null) edificios.addAll(((Solar)prop).getEdificios()); + else sHip.append(prop.getNombre()).append(" "); + } + return "{\n" + + "nombre: " + nombre + ",\n" + + "avatar: " + avatar.getIdentificador() + ",\n" + + "fortuna: " + dinero + ",\n" + + "propiedades: "+ propiedades +"\n" + + "hipotecas: [" + sHip + "]\n" + + "edificios: "+edificios+"\n" + + "}"; + } +} + diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Tablero.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Tablero.java index b9c3a3f..76928a5 100644 --- a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Tablero.java +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Tablero.java @@ -7,7 +7,7 @@ import Juego.Juego; import Procesos.Casillas.*; -public class Tablero { +public final class Tablero { static int ccasa = 0; static int chotel = 0; static int cpiscina = 0; @@ -27,9 +27,6 @@ private void inicializarGrupos(){ grupos.add(new Grupo(i)); } } - - - private void inicializarCasillas(int pBase, int pSalida, Jugador banca) { casillasMap = new LinkedHashMap<>(); casillasMap.put("Salida", 0); diff --git a/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Trato.java b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Trato.java new file mode 100644 index 0000000..c799c53 --- /dev/null +++ b/Monopoly2CorregidoYmovAvanzadoLimpio/Monopoly2/src/Procesos/Trato.java @@ -0,0 +1,269 @@ +package Procesos; +import Procesos.Casillas.*; +import Juego.Juego; + +public final class Trato { + + // ATRIBUTOS + + private Jugador ofertante; + private Jugador receptor; + int estado; // (0-2) + // 0: El trato es nuevo. Le aparecerá al jugador receptor al comienzo de su turno. + // 1: El trato no es nuevo y aún no ha sido aceptado + // 2: El trato está eliminado. Es posible que este estado no haga falta, ya que al eliminar un trato podemos borrarlo del array de TratosRecibidos y TratosPropuestos de los jugadores correspondientes, y listo. + private Propiedad propOfrecida; // Propiedad ofrecida por el ofertante + private int dineroOfrecido; // Dinero ofrecido por el ofertante + private Propiedad propSolicitada; // Propiedad que el receptor deberá dar + private int dineroSolicitado; // Dinero que el receptor deberá dar + private Propiedad propExenta; // Propiedad exenta de pago de alquiler por parte del receptor + private int turnosExento; // Turnos que dura la exención del pago del alquiler en propExenta + private int tipoTrato; // Puede que sea omisible, pero creo que puede facilitar mucho la impresión de un trato. + + + // CONSTRUCTORES + + /* Identificamos 6 tipos de tratos: + 0. Cambiar propiedades + 1. Vender propiedad + 2. Comprar propiedad + 3. Cambiar propiedades y recibir dinero + 4. Cambiar propiedades y dar dinero + 5. Cambiar propiedades y alquiler exento + + Aplicaremos sobrecarga de métodos: cada constructor generará un tipo de trato + */ + + // 0. Cambiar propiedades + public Trato(Jugador ofertante, Jugador receptor, Propiedad propOfrecida, Propiedad propSolicitada) { + this.ofertante = ofertante; + this.receptor = receptor; + this.estado = 0; + this.propOfrecida = propOfrecida; + this.dineroOfrecido = 0; + this.propSolicitada = propSolicitada; + this.dineroSolicitado = 0; + this.propExenta = null; + this.turnosExento = 0; + + } + + // 1. Vender propiedad + public Trato(Jugador ofertante, Jugador receptor, Propiedad propOfrecida, int dineroSolicitado) { + this.ofertante = ofertante; + this.receptor = receptor; + this.estado = 0; + this.propOfrecida = propOfrecida; + this.dineroOfrecido = 0; + this.propSolicitada = null; + this.dineroSolicitado = dineroSolicitado; + this.propExenta = null; + this.turnosExento = 0; + this.tipoTrato = 1; + } + + // 2. Comprar propiedad + public Trato(Jugador ofertante, Jugador receptor, int dineroOfrecido, Propiedad propSolicitada) { + this.ofertante = ofertante; + this.receptor = receptor; + this.estado = 0; + this.propOfrecida = null; + this.dineroOfrecido = dineroOfrecido; + this.propSolicitada = propSolicitada; + this.dineroSolicitado = 0; + this.propExenta = null; + this.turnosExento = 0; + this.tipoTrato = 2; + } + + // 3. Cambiar propiedades y recibir dinero + public Trato(Jugador ofertante, Jugador receptor, Propiedad propOfrecida, Propiedad propSolicitada, int dineroSolicitado) { + this.ofertante = ofertante; + this.receptor = receptor; + this.estado = 0; + this.propOfrecida = propOfrecida; + this.dineroOfrecido = 0; + this.propSolicitada = propSolicitada; + this.dineroSolicitado = dineroSolicitado; + this.propExenta = null; + this.turnosExento = 0; + this.tipoTrato = 3; + } + + // 4. Cambiar propiedades y dar dinero + public Trato(Jugador ofertante, Jugador receptor, Propiedad propOfrecida, int dineroOfrecido, Propiedad propSolicitada) { + this.ofertante = ofertante; + this.receptor = receptor; + this.estado = 0; + this.propOfrecida = propOfrecida; + this.dineroOfrecido = dineroOfrecido; + this.propSolicitada = propSolicitada; + this.dineroSolicitado = 0; + this.propExenta = null; + this.turnosExento = 0; + this.tipoTrato = 4; + } + + // 5. Cambiar propiedades y alquiler exento + public Trato(Jugador ofertante, Jugador receptor, Propiedad propOfrecida, Propiedad propSolicitada, Propiedad propExenta, int turnosExento) { + this.ofertante = ofertante; + this.receptor = receptor; + this.estado = 0; // Valor predeterminado para un trato nuevo + this.propOfrecida = propOfrecida; + this.dineroOfrecido = 0; // No se ofrece dinero en este tipo de trato + this.propSolicitada = propSolicitada; + this.dineroSolicitado = 0; // No se solicita dinero en este tipo de trato + this.propExenta = propExenta; + this.turnosExento = turnosExento; + this.tipoTrato = 5; + } + + + + // GETTERS + + public Jugador getOfertante() { + return ofertante; + } + + public Jugador getReceptor() { + return receptor; + } + + public int getEstado() { + return estado; + } + + public Propiedad getPropOfrecida() { + return propOfrecida; + } + + public int getDineroOfrecido() { + return dineroOfrecido; + } + + public Propiedad getPropSolicitada() { + return propSolicitada; + } + + public int getDineroSolicitado() { + return dineroSolicitado; + } + + public Propiedad getPropExenta() { + return propExenta; + } + + public int getTurnosExento() { + return turnosExento; + } + + public int getTipoTrato() {return tipoTrato;} + // SETTERS + + public void setOfertante(Jugador ofertante) { + this.ofertante = ofertante; + } + + public void setReceptor(Jugador receptor) { + this.receptor = receptor; + } + + public void setEstado(int estado) { + this.estado = estado; + } + + public void setPropOfrecida(Propiedad propOfrecida) { + this.propOfrecida = propOfrecida; + } + + public void setDineroOfrecido(int dineroOfrecido) { + this.dineroOfrecido = dineroOfrecido; + } + + public void setPropSolicitada(Propiedad propSolicitada) { + this.propSolicitada = propSolicitada; + } + + public void setDineroSolicitado(int dineroSolicitado) { + this.dineroSolicitado = dineroSolicitado; + } + + public void setPropExenta(Propiedad propExenta) { + this.propExenta = propExenta; + } + + public void setTurnosExento(int turnosExento) { + this.turnosExento = turnosExento; + } + + + // MÉTODOS Y UTILIDADES + public void imprimirTratoParaProponer() { + switch (tipoTrato) { + case 0: + Juego.getConsolaNormal().imprimir(ofertante.getNombre() + ": " + receptor.getNombre() + ", ¿te doy " + + propOfrecida.getNombre() + " y tú me das " + propSolicitada.getNombre() + "?"); + break; + case 1: + Juego.getConsolaNormal().imprimir(ofertante.getNombre() + ": " + receptor.getNombre() + ", ¿me compras " + + propOfrecida.getNombre() + " por " + dineroSolicitado + "?"); + break; + case 2: + Juego.getConsolaNormal().imprimir(ofertante.getNombre() + ": " + receptor.getNombre() + ", ¿me vendes " + + propSolicitada.getNombre() + " por " + dineroOfrecido + "?"); + break; + case 3: + Juego.getConsolaNormal().imprimir(ofertante.getNombre() + ": " + receptor.getNombre() + ", ¿me das " + + propSolicitada.getNombre() + " y " + dineroSolicitado + " a cambio de " + + propOfrecida.getNombre() + "?"); + break; + case 4: + Juego.getConsolaNormal().imprimir(ofertante.getNombre() + ": " + receptor.getNombre() + ", ¿me das " + + propSolicitada.getNombre() + " a cambio de " + propOfrecida.getNombre() + + " y " + dineroOfrecido + "?"); + break; + case 5: + Juego.getConsolaNormal().imprimir(ofertante.getNombre() + ": " + receptor.getNombre() + ", ¿me das " + + propSolicitada.getNombre() + " a cambio de " + propOfrecida.getNombre() + + " y que no pague alquiler en " + propExenta.getNombre() + " durante " + turnosExento + + " turnos?"); + break; + } + } + + public void imprimirTratoAceptado() { + switch (tipoTrato) { + case 0: + Juego.getConsolaNormal().imprimir("Se ha aceptado el siguiente trato con " + ofertante.getNombre() + + ": le das " + propSolicitada.getNombre() + " y él te da " + propOfrecida.getNombre()); + break; + case 1: + Juego.getConsolaNormal().imprimir("Se ha aceptado el siguiente trato con " + ofertante.getNombre() + + ": le compras " + propOfrecida.getNombre() + " por " + dineroSolicitado); + break; + case 2: + Juego.getConsolaNormal().imprimir("Se ha aceptado el siguiente trato con " + ofertante.getNombre() + + ": le vendes " + propSolicitada.getNombre() + " por " + dineroOfrecido); + break; + case 3: + Juego.getConsolaNormal().imprimir("Se ha aceptado el siguiente trato con " + ofertante.getNombre() + + ": le das " + propSolicitada.getNombre() + " y le pagas " + dineroSolicitado + " a cambio de " + + propOfrecida.getNombre()); + break; + case 4: + Juego.getConsolaNormal().imprimir("Se ha aceptado el siguiente trato con " + ofertante.getNombre() + + ": le das " + propSolicitada.getNombre() + " a cambio de " + propOfrecida.getNombre() + + " y él te da " + dineroOfrecido); + break; + case 5: + Juego.getConsolaNormal().imprimir("Se ha aceptado el siguiente trato con " + ofertante.getNombre() + + ": le das " + propSolicitada.getNombre() + " a cambio de " + propOfrecida.getNombre() + + " y él no pagará alquiler en " + propExenta.getNombre() + " durante " + turnosExento + + " turnos"); + break; + } + } + + +} \ No newline at end of file diff --git a/out/production/MonopolyV2.2/Juego/Comando.class b/out/production/MonopolyV2.2/Juego/Comando.class index 4f68d4d..d1be3bb 100644 Binary files a/out/production/MonopolyV2.2/Juego/Comando.class and b/out/production/MonopolyV2.2/Juego/Comando.class differ diff --git a/out/production/MonopolyV2.2/Juego/Consola.class b/out/production/MonopolyV2.2/Juego/Consola.class index a0a0642..69c0715 100644 Binary files a/out/production/MonopolyV2.2/Juego/Consola.class and b/out/production/MonopolyV2.2/Juego/Consola.class differ diff --git a/out/production/MonopolyV2.2/Juego/ConsolaNormal.class b/out/production/MonopolyV2.2/Juego/ConsolaNormal.class index bbf104a..5f0719f 100644 Binary files a/out/production/MonopolyV2.2/Juego/ConsolaNormal.class and b/out/production/MonopolyV2.2/Juego/ConsolaNormal.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/AlquilerDineroInsufException.class b/out/production/MonopolyV2.2/Juego/Exceptions/AlquilerDineroInsufException.class new file mode 100644 index 0000000..0d1936e Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/AlquilerDineroInsufException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/CasillaInexistenteException.class b/out/production/MonopolyV2.2/Juego/Exceptions/CasillaInexistenteException.class new file mode 100644 index 0000000..a4aa46b Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/CasillaInexistenteException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/CasillaInexistenteException.java b/out/production/MonopolyV2.2/Juego/Exceptions/CasillaInexistenteException.java new file mode 100644 index 0000000..1bf5593 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/CasillaInexistenteException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions; + +public class CasillaInexistenteException extends JuegoException { + + public CasillaInexistenteException() { + super("Esta casilla no existe..."); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoBancarrotaException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoBancarrotaException.class new file mode 100644 index 0000000..b49c1e3 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoBancarrotaException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoBancarrotaException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoBancarrotaException.java new file mode 100644 index 0000000..7fd9dde --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoBancarrotaException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Comandos; + +import Juego.Exceptions.JuegoException; + +public class ComandoBancarrotaException extends ComandoException{ + public ComandoBancarrotaException() { + super("No puedes ejecutar esta acción estando en bancarrota, la partida se ha acabado para ti."); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoException.class new file mode 100644 index 0000000..6d89a90 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoException.java new file mode 100644 index 0000000..5791146 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Comandos; + +import Juego.Exceptions.JuegoException; + +public class ComandoException extends JuegoException { + public ComandoException(String mensaje) { + super(mensaje); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.class new file mode 100644 index 0000000..f7adaac Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.java new file mode 100644 index 0000000..91e1abc --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoHaTiradoException.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comandos; + +public class ComandoNoHaTiradoException extends ComandoException { + public ComandoNoHaTiradoException() { + super("Aun no has tirado los dados. Tiralos para poder comprar propiedades"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoMasComprasException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoMasComprasException.class new file mode 100644 index 0000000..762c4a4 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoMasComprasException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoMasComprasException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoMasComprasException.java new file mode 100644 index 0000000..df45da9 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comandos/ComandoNoMasComprasException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Comandos; + +public class ComandoNoMasComprasException extends ComandoException { + + public ComandoNoMasComprasException() { + super("No puedes hacer más compras en este turno..."); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarException.class new file mode 100644 index 0000000..15c0b5c Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarException.java new file mode 100644 index 0000000..d33856b --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarException.java @@ -0,0 +1,11 @@ +package Juego.Exceptions.Comprar; + +import Juego.Exceptions.JuegoException; +import Juego.Juego; + +public class ComprarException extends JuegoException { + public ComprarException(String mensaje) { + super(mensaje); + Juego.getConsolaNormal().imprimir("Error al comprar:"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.class new file mode 100644 index 0000000..c009188 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.java new file mode 100644 index 0000000..66c8063 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaConDueno.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comprar; + +public class ComprarExceptionCasillaConDueno extends ComprarException { + public ComprarExceptionCasillaConDueno() { + super("Esta casilla ya tiene dueño"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.class new file mode 100644 index 0000000..2c2c07f Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.java new file mode 100644 index 0000000..705ae01 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaDistinta.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comprar; + +public class ComprarExceptionCasillaDistinta extends ComprarException { + public ComprarExceptionCasillaDistinta() { + super("No puedes comprar una casilla sobre la que no estás"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.class new file mode 100644 index 0000000..862c4dd Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.java new file mode 100644 index 0000000..a13a195 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionCasillaNoPropiedad.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comprar; + +public class ComprarExceptionCasillaNoPropiedad extends ComprarException { + public ComprarExceptionCasillaNoPropiedad(){ + super("Casilla no comprable"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.class b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.class new file mode 100644 index 0000000..39c019b Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.java b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.java new file mode 100644 index 0000000..36677a3 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Comprar/ComprarExceptionDineroInsuficiente.java @@ -0,0 +1,7 @@ +package Juego.Exceptions.Comprar; + +public class ComprarExceptionDineroInsuficiente extends ComprarException { + public ComprarExceptionDineroInsuficiente() { + super("Dinero insuficiente"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.class new file mode 100644 index 0000000..23ecae4 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.java new file mode 100644 index 0000000..b144c4a --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillaInexistenteException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class HipotecarCasillaInexistenteException extends HipotecarException { + + public HipotecarCasillaInexistenteException() { + super("Esta casilla no existe..."); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.class new file mode 100644 index 0000000..acd4975 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.java new file mode 100644 index 0000000..caa9335 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarCasillanNoHipotecableException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class HipotecarCasillanNoHipotecableException extends HipotecarException { + + public HipotecarCasillanNoHipotecableException() { + super("Esta casilla no es hipotecable."); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarException.class new file mode 100644 index 0000000..f8120d1 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarException.java new file mode 100644 index 0000000..d77247d --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Hipotecar; + +import Juego.Exceptions.JuegoException; + +public class HipotecarException extends JuegoException { + public HipotecarException(String mensaje) { + super(mensaje); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.class b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.class new file mode 100644 index 0000000..2635655 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.java b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.java new file mode 100644 index 0000000..c218b32 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/HipotecarPropiedadDeOtro.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class HipotecarPropiedadDeOtro extends HipotecarException { + + public HipotecarPropiedadDeOtro() { + super("No puedes hipotecar una casilla que no es tuya"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.class b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.class new file mode 100644 index 0000000..7715598 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.java b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.java new file mode 100644 index 0000000..7e50b89 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Hipotecar/desHipotecarPropiedadDeOtro.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Hipotecar; + +public class desHipotecarPropiedadDeOtro extends HipotecarException { + + public desHipotecarPropiedadDeOtro() { + super("No puedes deshipotecar una casilla que no es tuya"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/JuegoException.class b/out/production/MonopolyV2.2/Juego/Exceptions/JuegoException.class new file mode 100644 index 0000000..8daa781 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/JuegoException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/JuegoException.java b/out/production/MonopolyV2.2/Juego/Exceptions/JuegoException.java new file mode 100644 index 0000000..922d17b --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/JuegoException.java @@ -0,0 +1,11 @@ +package Juego.Exceptions; + +import Juego.Exceptions.Hipotecar.HipotecarException; +import Juego.Juego; + +public class JuegoException extends Exception{ + public JuegoException(String mensaje) { + super("\u001B[31m"+mensaje+"\u001B[0m"); + Juego.getConsolaNormal().imprimirError("\u001B[31m" + mensaje + "\u001B[0m"); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerException.class new file mode 100644 index 0000000..c85310c Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerException.java new file mode 100644 index 0000000..afb2284 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerException.java @@ -0,0 +1,11 @@ +package Juego.Exceptions.Lectura; + +import Juego.Exceptions.JuegoException; +import Juego.Juego; + +public class LeerException extends JuegoException { + public LeerException(String mensaje) { + super(mensaje); + } +} + diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIncorrectoException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIncorrectoException.class new file mode 100644 index 0000000..87e96a7 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIncorrectoException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIncorrectoException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIncorrectoException.java new file mode 100644 index 0000000..4f4b2de --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIncorrectoException.java @@ -0,0 +1,8 @@ +package Juego.Exceptions.Lectura; + +public class LeerIncorrectoException extends LeerException { + + public LeerIncorrectoException() { + super("No se reconoce la acción... Introduce 'ayuda' para ver tus opciones."); + } +} diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIntException.class b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIntException.class new file mode 100644 index 0000000..5ae0222 Binary files /dev/null and b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIntException.class differ diff --git a/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIntException.java b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIntException.java new file mode 100644 index 0000000..4d40072 --- /dev/null +++ b/out/production/MonopolyV2.2/Juego/Exceptions/Lectura/LeerIntException.java @@ -0,0 +1,9 @@ +package Juego.Exceptions.Lectura; + +public class LeerIntException extends LeerException { + + public LeerIntException() { + super("Debes introducir un número entero..."); + } + +} \ No newline at end of file diff --git a/out/production/MonopolyV2.2/Juego/Juego.class b/out/production/MonopolyV2.2/Juego/Juego.class index 116d7bf..dc2ea02 100644 Binary files a/out/production/MonopolyV2.2/Juego/Juego.class and b/out/production/MonopolyV2.2/Juego/Juego.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Avatares/Avatar.class b/out/production/MonopolyV2.2/Procesos/Avatares/Avatar.class index 956ec55..3e249c9 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Avatares/Avatar.class and b/out/production/MonopolyV2.2/Procesos/Avatares/Avatar.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Avatares/Pelota.class b/out/production/MonopolyV2.2/Procesos/Avatares/Pelota.class index e5e4adf..521c95e 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Avatares/Pelota.class and b/out/production/MonopolyV2.2/Procesos/Avatares/Pelota.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Carta.class b/out/production/MonopolyV2.2/Procesos/Carta.class index 30e4ce6..ebef414 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Carta.class and b/out/production/MonopolyV2.2/Procesos/Carta.class differ diff --git a/out/production/MonopolyV2.2/Procesos/CartaCajaC.class b/out/production/MonopolyV2.2/Procesos/CartaCajaC.class new file mode 100644 index 0000000..4b2f155 Binary files /dev/null and b/out/production/MonopolyV2.2/Procesos/CartaCajaC.class differ diff --git a/out/production/MonopolyV2.2/Procesos/CartaSuerte.class b/out/production/MonopolyV2.2/Procesos/CartaSuerte.class new file mode 100644 index 0000000..8541006 Binary files /dev/null and b/out/production/MonopolyV2.2/Procesos/CartaSuerte.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Casilla.class b/out/production/MonopolyV2.2/Procesos/Casillas/Casilla.class index ea355de..53b4676 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Casilla.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Casilla.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Hotel.class b/out/production/MonopolyV2.2/Procesos/Casillas/Hotel.class index 2ff42fc..d146dc7 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Hotel.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Hotel.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Impuesto.class b/out/production/MonopolyV2.2/Procesos/Casillas/Impuesto.class index 9690dd0..20c7150 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Impuesto.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Impuesto.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Piscina.class b/out/production/MonopolyV2.2/Procesos/Casillas/Piscina.class index c51ba69..08f8bdc 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Piscina.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Piscina.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Pista.class b/out/production/MonopolyV2.2/Procesos/Casillas/Pista.class index 74ff5a9..2dd5671 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Pista.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Pista.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Propiedad.class b/out/production/MonopolyV2.2/Procesos/Casillas/Propiedad.class index b18e814..8330f7e 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Propiedad.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Propiedad.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Servicios.class b/out/production/MonopolyV2.2/Procesos/Casillas/Servicios.class index 7bf989b..70055e2 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Servicios.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Servicios.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Solar.class b/out/production/MonopolyV2.2/Procesos/Casillas/Solar.class index 90e24ca..afbcf4f 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Solar.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Solar.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Casillas/Transporte.class b/out/production/MonopolyV2.2/Procesos/Casillas/Transporte.class index e688ce4..00e5946 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Casillas/Transporte.class and b/out/production/MonopolyV2.2/Procesos/Casillas/Transporte.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Dado.class b/out/production/MonopolyV2.2/Procesos/Dado.class index 4a8b81d..0c4e424 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Dado.class and b/out/production/MonopolyV2.2/Procesos/Dado.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Jugador.class b/out/production/MonopolyV2.2/Procesos/Jugador.class index da0f1f2..fdf8855 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Jugador.class and b/out/production/MonopolyV2.2/Procesos/Jugador.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Tablero.class b/out/production/MonopolyV2.2/Procesos/Tablero.class index af2954c..f19ae4f 100644 Binary files a/out/production/MonopolyV2.2/Procesos/Tablero.class and b/out/production/MonopolyV2.2/Procesos/Tablero.class differ diff --git a/out/production/MonopolyV2.2/Procesos/Trato.class b/out/production/MonopolyV2.2/Procesos/Trato.class new file mode 100644 index 0000000..0f510e6 Binary files /dev/null and b/out/production/MonopolyV2.2/Procesos/Trato.class differ