package modelo;
import tablero.Square;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import cards.Card;
import cards.Features;
import cards.Monje;
public class Player implements Comparable<Player>{
public enum Colors{
ROJO,VERDE,AZUL,
AMARILLO,BLANCO,NEGRO
}
private static int playerNum=0; //variable estatica para ir asignando numeros unicos a cada jugador
private int number; //numero del jugador
private Colors color;
private String playerName;
private Square ubication=null;
private boolean hasMoved=false;
private boolean votoSilencio=false;
//private Set<Monje> cartasMonje=null;
//Modificacion de Cartas de Jugador para recibir todo tipo de carta
private Set<Card> cartasMonje=null;
private Set<Sospechoso> hojaSospechosos=null;
/**
* Constructor for player object.
* <p>
* @param name the player's name
* @param color a color for the player, it's an enum type
*/
public Player(String name,Colors color){
playerName=name;
this.color=color;
number=++playerNum;
}
/**
* returns true if the player has moved, else it returns false
* <p>
* @return boolean
*/
public boolean hasMoved(){
return hasMoved;
}
public boolean votoSilencio(){
return votoSilencio;
}
/**
* set the hasMoved boolean to false
* <p>
* @return void
*/
public void reset(){
hasMoved=false;
votoSilencio=false;
}
/**
*
* @param hand
* @param features
* @return
*/
public int answer(int hand,List<Features> features){ // 1 o dos caracteristicas en cartas monje // true si va a la mano false si va ala hoja de sospechosos
Card pibot = new Monje();
int cont = 0;
if(hand==1){
for(Card monje:cartasMonje){
if(monje.getClass().equals(pibot.getClass()))
if(((Monje) monje).is(features))cont++;
}
}
else if(hand==2){
for(Sospechoso sospechoso:hojaSospechosos){
if(sospechoso.getMonje().is(features)&& sospechoso.isMarcado()) cont++;
}
}
return cont;
}
public void setNewCardToPlayersCardDeck(Monje card){
cartasMonje.add(card);
}
public boolean answer(int hand,String nombre){
boolean check=false;
Card pibot = new Monje();
if(hand==1){
for(Card monje:cartasMonje){
if(monje.getClass().equals(pibot.getClass()))
if(nombre.equals(((Monje) monje).getName()))check = true;
}
}
else if(hand==2){
for(Sospechoso sospechoso:hojaSospechosos){
if(sospechoso.getMonje().getName().equals(nombre) && sospechoso.isMarcado()) check=true;
}
}
return check;
}
public Monje getMonkCardX(int position) throws NullPointerException{
int cont = 0;
Card pibot = new Monje();
Monje temp=null;
for (Card n : cartasMonje ){
if (cont == position)
if(n.getClass().equals(pibot.getClass()))
temp= (Monje) n;
cont++;
}
cartasMonje.remove(temp);
return temp;
}
public void setHojaDeSospechosos(Set<Sospechoso> set){
if(hojaSospechosos==null) hojaSospechosos= set;
}
public Square getUbication() {
return ubication;
}
public void setUbicacion(Square ubicacion) {
this.ubication = ubicacion;
}
public void move(Square ubication){
this.ubication = ubication;
hasMoved=true;
}
public void setCartasMonje(Set<Monje> cartasMonjeJugador){
this.cartasMonje=new TreeSet<Card>(cartasMonjeJugador);
}
public Monje getLastMonkCardInPlayersCardDeck(){
Monje aDevolver=null;
Card pibot = new Monje();
for (Card p:cartasMonje)
if(p.getClass().equals(pibot.getClass()))
aDevolver=(Monje) p;
cartasMonje.remove(aDevolver);
//if (aDevolver!=null)
return aDevolver;
}
public Set<Card> getCartasMonje(){
return cartasMonje;
}
public Set<Sospechoso> getHojaSospechosos(){
return hojaSospechosos;
}
public void marcarSospechosos(){
for(Sospechoso s:hojaSospechosos){
Monje m = s.getMonje();
if(cartasMonje.contains(m)) s.setMarcado();
}
}
public void marcarSospechoso(String name){
for(Sospechoso s:hojaSospechosos){
Monje m = s.getMonje();
if(m.getName().equals(name)) s.setMarcado();
}
}
@Override
public String toString() {
String casilla;
if(ubication!=null) casilla = ubication.getSquareName();
else casilla="no ubicado";
return "nombre : " + playerName + ", color : " + color
+ ", numero : " + number +", ubicacion : "+ casilla +"]";
}
public int getNumero() {
return number;
}
public Colors getColor() {
return color;
}
public String getNombreJugador() {
return playerName;
}
@Override
public int compareTo(Player o) {
// TODO Auto-generated method stub
return (this.number-o.number);
}
}