package com.rzg.zombieland.comunes.comunicacion.pojo;
import java.util.ArrayList;
import java.util.List;
import com.rzg.zombieland.comunes.misc.ParametrosNoValidosException;
/**
* Engloba los datos necesarios para crear una partida.
* @author nicolas
*
*/
public class POJOCreacionPartida {
/**
* No puede haber, estrictamente, menos rondas que este n�mero.
*/
public static final int CANTIDAD_MINIMA_RONDAS = 4;
/**
* No puede haber, estrictamente, m�s rondas que este n�mero.
*/
public static final int CANTIDAD_MAXIMA_RONDAS = 20;
/**
* No puede haber, estrictamente, menos jugadores que este n�mero.
*/
public static final int CANTIDAD_MINIMA_JUGADORES = 3;
/**
* No puede haber, estrictamente, m�s jugadores que este n�mero.
*/
public static final int CANTIDAD_MAXIMA_JUGADORES = 10;
// Par�metros de la partida.
private int cantidadRondas;
private int cantidadMaximaJugadores;
private String nombre;
/**
* Crea un POJO de creaci�n de partida.
* @param cantidadRondas - la cantidad de rondas a la que se juega la partida.
* @param cantidadMaximaJugadores - la cantidad m�xima de jugadores para la partida.
* @param nombre el nombre de la partida.
* @throws ParametrosNoValidosException si
* <ul>
* <li>La cantidad de rondas no est� entre
* CANTIDAD_MINIMA_RONDAS y CANTIDAD_MAXIMA_RONDAS </li>
* <li>La cantidad de jugadores no est� entre
* CANTIDAD_MINIMA_JUGADORES y CANTIDAD_MAXIMA_JUGADORES</li>
* <li>La cantidad m�xima de jugadores no es un m�ltiplo de la cantidad de rondas</li>
* <li>El nombre es null o vac�o</li>
* </ul>
*/
public POJOCreacionPartida(int cantidadRondas, int cantidadMaximaJugadores, String nombre)
throws ParametrosNoValidosException {
List<String> errores = new ArrayList<String>();
if (cantidadRondas < CANTIDAD_MINIMA_RONDAS) {
errores.add("La cantidad de rondas, " + cantidadRondas + ", es inferior a la m�nima "
+ "(" + CANTIDAD_MINIMA_RONDAS + ")");
}
if (cantidadRondas > CANTIDAD_MAXIMA_RONDAS) {
errores.add("La cantidad de rondas, " + cantidadRondas + ", es superior a la m�xima "
+ "(" + CANTIDAD_MAXIMA_RONDAS + ")");
}
if (cantidadMaximaJugadores < CANTIDAD_MINIMA_JUGADORES) {
errores.add("La cantidad de jugadores, " + cantidadMaximaJugadores + ", es inferior a la m�nima "
+ "(" + CANTIDAD_MINIMA_JUGADORES + ")");
}
if (cantidadMaximaJugadores > CANTIDAD_MAXIMA_JUGADORES) {
errores.add("La cantidad de jugadores, " + cantidadMaximaJugadores + ", es superior a la m�xima "
+ "(" + CANTIDAD_MAXIMA_JUGADORES + ")");
}
if (nombre == null || nombre.isEmpty())
errores.add("El nombre no puede estar vac�o");
if (cantidadRondas == 0 || cantidadRondas % cantidadMaximaJugadores != 0)
errores.add("La cantidad de jugadores no es m�ltiplo de la cantidad de rondas");
if (errores.size() > 0)
throw new ParametrosNoValidosException("Creaci�n de partida", errores);
this.cantidadRondas = cantidadRondas;
this.cantidadMaximaJugadores = cantidadMaximaJugadores;
this.nombre = nombre;
}
/**
* @return la cantidad de rondas para los que la partida se juega.
*/
public int getCantidadRondas() {
return cantidadRondas;
}
/**
* @return la cantidad m�xima de jugadores definida por el usuario.
*/
public int getCantidadMaximaJugadores() {
return cantidadMaximaJugadores;
}
/**
* @return el nombre de la partida.
*/
public String getNombre() {
return nombre;
}
}