import java.util.ArrayList; 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.56DFB240-0E69-04F4-1AAC-CFB205228FD0]
// </editor-fold> 
public class Risk {

    private int turno;
    private int sigturno;
    private int numJugadores;
    private int valorDado;

    int nejercitosJug1 = 5;
    int nejercitosJug2 = 5;
    
    private ArrayList<Dado> dados; //eliminar cuando se usen los otros dados
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.D63CD9DE-0CAE-B078-5759-954AE8ED2994]
    // </editor-fold> 
    private ArrayList<Dado> mDadoDef;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.458CF647-942F-97DD-7CD7-F334B284F315]
    // </editor-fold> 
    private ArrayList<Dado> mDadoAtq;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B4EBC72D-C3BE-2909-FC40-79F309383001]
    // </editor-fold> 
    private Carta mCarta;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.4CCFBBFA-58A9-1042-5189-F07882197C2A]
    // </editor-fold> 
    private Partida mPartida;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.64A3697D-ABAF-BD50-B504-58CD719DE2A0]
    // </editor-fold> 
    private Tablero mTablero;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.E5801465-B2E0-A2F3-CAE5-B8C16D175F01]
    // </editor-fold> 
    public Risk () { //modificar cuando se usen mas dados
        // creamos los dados        
        dados = new ArrayList(); 
        dados.add(new Dado());
        
        setNumJugadores(2);
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.86EB8EA5-42F4-AB76-3ADD-33649FE8776E]
    // </editor-fold> 
    public Carta getCarta () {
        return mCarta;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.0690E2D8-873A-6440-AFFA-430500A931B3]
    // </editor-fold> 
    /*public void setCarta (ArrayList<Carta> val) {
        this.mCarta = val;
    }
    */
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.2F58ADF7-B8AB-D4C8-8C27-BC3CBC471D1E]
    // </editor-fold> 
    public ArrayList<Dado> getDadoAtq () {
        return mDadoAtq;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.5BB584B0-6967-BFD9-027D-E68740FB66ED]
    // </editor-fold> 
    public void setDadoAtq (ArrayList<Dado> val) {
        this.mDadoAtq = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.0C71D5BF-C010-BF5C-5907-D5C1CB158BD2]
    // </editor-fold> 
    public ArrayList<Dado> getDadoDef () {
        return mDadoDef;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.788AD50F-46E8-E525-83E6-DA7D298CBD67]
    // </editor-fold> 
    public void setDadoDef (ArrayList<Dado> val) {
        this.mDadoDef = val;
    }

    public int getValorDado() {
        return valorDado;
    }

    public void setValorDado(int val) {
        this.valorDado = val;
    }
    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.5CA447B5-3FBE-2D70-CCD8-7277CEF8E296]
    // </editor-fold> 
    public Partida getPartida () {
        return mPartida;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.A3DE339B-F1F9-752B-5530-56D7AB2E922A]
    // </editor-fold> 
    /*public void setPartida (Partida val) {
        return mPartida;
    }
    */
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.EBFFAE04-E90B-3D3D-5344-004A6BC0AE1B]
    // </editor-fold> 
    public Tablero getTablero () {
        return mTablero;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.D40B70B7-4414-6FFB-DE81-08CD6A5667BC]
    // </editor-fold> 
    public void setTablero (Tablero val) {
        this.mTablero = val;
    }
    
    public int getNumJugadores() {
        return numJugadores;
    }

    public void setNumJugadores(int val) {
        this.numJugadores = val;
    }
    
    public void cambiarTurno() {
        turno = (turno + 1) % numJugadores;
        System.out.println("CAMBIO DE TURNO: Va el jugador " + (turno+1));
        
        sigturno = (turno + 1) % numJugadores;
    }
    
    public void tirarDados() {
        dados.get(0).lanzarDado();
        valorDado = dados.get(0).getValorCara();
    }
    
    public void jugar() {
            // tirar dados
        
            int valor = 0;
            int ataque[];
            int defensa[];
            
            int num = 0;
            int num2 = 0;
            
            ataque = new int[3];
            defensa = new int[2];
            
            //System.out.println("Es el turno del Jugador " + (turno+1) + ".");
            
            //tirarDados();
            System.out.println("   Jugador " + (turno+1) + " ataca a Jugador 2");
            System.out.println("   Jugador " + (turno+1) + " dispone de " + nejercitosJug1 + " ejercitos");
            
            if ((turno+1) == 1) {
                if (nejercitosJug1 > 0) {
                    
                    if (nejercitosJug1 > 3){
                        BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
                        try {
                           System.out.print("       ¿Cuantos dados desea lanzar?: (1, 2 ó 3 dados): ");
                           num = Integer.parseInt(teclado.readLine());
                        }
                        catch (IOException ex) {}
                    }
                    else if (nejercitosJug1 > 2){
                        BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
                        try {
                           System.out.print("       ¿Cuantos dados desea lanzar?: (1 ó 2 dados): ");
                           num = Integer.parseInt(teclado.readLine());
                        }
                        catch (IOException ex) {}
                    }
                    else if (nejercitosJug1 > 0){
                        num = 1;
                    }
                    if (num == 1) {
                        tirarDados();
                        ataque[0] = valorDado;
                        System.out.println("        Atacante: Tira dado y saca un: " + ataque[0]);
                    }
                    else if (num == 2) {
                        tirarDados();
                        ataque[0] = valorDado;
                        tirarDados();
                        if (ataque[0] > valorDado){
                            ataque[1] = valorDado;
                        }
                        else{
                            valor = valorDado;
                            ataque[1] = ataque[0];
                            ataque[0] = valor;
                        }
                        System.out.println("        Atacante: Tira dados y saca: " + ataque[0] + " y " + ataque[1]);
                    }
                    else if (num == 3) {
                        tirarDados();
                        ataque[0] = valorDado;
                        tirarDados();
                        valor = valorDado;
                        if (ataque[0] >= valorDado){
                            ataque[1] = valorDado;
                        }
                        else{
                            ataque[1] = ataque[0];
                            ataque[0] = valorDado;
                        }
                        tirarDados();
                        valor = valorDado;
                        if (ataque[0] <= valorDado) {
                            ataque[2] = ataque[1];
                            ataque[1] = ataque[0];
                            ataque[0] = valorDado;
                        }
                        else if (ataque[1] < valorDado){
                            ataque[2] = ataque[1];
                            ataque[1] = valorDado;
                        }
                        else if (ataque[1] >= valorDado){
                            ataque[2] = valorDado;
                        }
                        System.out.println("        Atacante: Tira dados y saca: " + ataque[0] + " y " + ataque[1] + " y " + ataque[2]);
                    }
                    
                    if (nejercitosJug2 > 2) {
                        num2 = 2;
                        tirarDados();
                        defensa[0] = valorDado;
                        tirarDados();
                        if (defensa[0] > valorDado){
                            defensa[1] = valorDado;
                        }
                        else{
                            defensa[1] = defensa[0];
                            defensa[0] = valorDado;
                        }
                        System.out.println("        Defensor: Tira dados y saca: " + defensa[0] + " y " + defensa[1]);
                    }
                    else {
                        tirarDados();
                        defensa[0] = valorDado;
                        System.out.println("        Defensor: Tira dado y saca: " + defensa[0]);
                    }
                    
                    if (nejercitosJug2 == 1) {
                        num2 = 1;
                        tirarDados();
                        defensa[0] = valorDado;
                        System.out.println("        Defensor: Tira dado y saca: " + defensa[0]);
                    }
                    
                    if (num == 1) {
                        if (ataque[0] > defensa[0]){
                                nejercitosJug2--;
                        }
                        else{
                                nejercitosJug1--;
                        }
                    }
                    else if (num2 == 1) {
                        if (ataque[0] > defensa[0]){
                                nejercitosJug2--;
                        }
                        else{
                                nejercitosJug1--;
                        }
                    }
                    else{
                        for (int i=0;i<2;i++) {
                            if (ataque[i] > defensa[i]){
                                    nejercitosJug2--;
                            }
                            else{
                                    nejercitosJug1--;
                            }
                        }
                    }
                    System.out.println("        Atacante: " + nejercitosJug1 + " ejercitos  |  Defensor: " + nejercitosJug2 + " ejercitos");
                }
            }

            System.out.println("         Pulsa ENTER para terminar ataque...");
            BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
            try {
                int ch = stdin.read();
            } catch (IOException ex) { }
            
            //cambiarTurno();
    }
        
    public static void main(String[] args) {
        Risk juego = new Risk();
        //int i = 0;
        int num = 1;
        
        System.out.println("Partida de 1 ataque\n");
        juego.jugar();
        while (num == 1){
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
                try {
                    System.out.print("¿Desea seguir atacando? (1: SI | 2: NO): ");
                    num = Integer.parseInt(teclado.readLine());
                }
                catch (IOException ex) {}
            if (num == 1){
                juego.jugar();
            }
            if (juego.nejercitosJug1 == 0) {
                num = 2;
                System.out.println("Jugador 1 pierde el ataque");
            }
            if (juego.nejercitosJug2 == 0) {
                num = 2;
                System.out.println("Jugador 2 pierde el ataque");
            }
        }
        System.out.println("Fin del juego");
    }
}

