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