package clases;

import java.util.Random;
import java.util.Scanner;

public class PiedraPapelTijera_II {
	// Declaración de constantes
	final static String TIJERA = "Tijera ✂️";
	final static String PAPEL = "Papel 🧻";
	final static String PIEDRA = "Piedra 🗿";

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Random random = new Random();
		// El juego tiene 2 jugadores.
		// 1 jugador (nombre a introducir)
		// 2 jugador (CPU)
		// Se termina el juego cuando uno de los dos tenga 3 victorias.
		// Se debe mostrar el número de rondas totales que se han jugado.
		/*
		 * [TIJERA] GANA A [PAPEL] [PAPEL] GANA A [PIEDRA] [PIEDRA] GANA A [TIJERA]
		 */

		// Cambios solicitados: (Mayor complejidad algorítmica)
		// 2 Variables de Jugador => 1 Array de Jugadores.
		// 2 Variables de Victorias de Jugador => 1 Array de VictoriasJugadores.

		// Declaración de Array de Jugadores. [1 Dimensión]
		//jugadores[0] => Jugador 1.
		//jugadores[1] => Jugador 2.
		String[] jugadores = new String[2];

		int[] victoriasJugador = new int[2];

		System.out.println("Bienvenido a Piedra, Papel Y Tijera");
		System.out.println("Introduce tú nombre.");
		
		//Se asignan a los diferentes usuarios el nombre que le corresponde.
		jugadores[0] = sc.nextLine();
		jugadores[1] = "CPU";

		victoriasJugador[0] = 0;
		victoriasJugador[1] = 0;
		// String jugador1 = sc.nextLine();
		// String jugador2 = "CPU";

		// int victoriasJugador1 = 0;
		// int victoriasJugador2 = 0;
		int contadorRondas = 0;

		// While condición = En caso de que se cumpla se repite.
		// Condición ()
		// Bloque de código de cada repetición
		// Mientras que las victorias del jugador 1 y las del jugador 2, sean menores
		// que 3, la partida continua.
		while (continuaLaPartida(victoriasJugador)) {
			// while (victoriasJugador[0] < 3 && victoriasJugador[1] < 3) {
			contadorRondas++;
			System.out.println("\n---Comienzo de Ronda Número: " + contadorRondas + "---\n");

			// Opción Jugador1 (Persona)

			System.out.println("Menú de opciones para elegir:\n");
			System.out.println("1.\tTijera\t✂️");
			System.out.println("2.\tPapel\t🧻");
			System.out.println("3.\tPiedra\t🗿");

			int opcionElegida1 = sc.nextInt();
			//Implementación del método.
			String opcionTraducida1 = convertirOpcion(opcionElegida1);

			System.out.println(jugadores[0] + " ha elegido = " + opcionTraducida1);

			// Opción Jugador2 (CPU)
			int opcionElegida2 = random.nextInt(3) + 1;
			// System.out.println("Número introducido por CPU: "+opcionElegida2);

			String opcionTraducida2 = convertirOpcion(opcionElegida2);

			System.out.println(jugadores[1] + " ha elegido = " + opcionTraducida2);

			System.out.println("\n");

			// [Jugador1] Tijera ✂️ VS [Jugador2] Papel 2
			System.out.println("[" + jugadores[0] + "] " + opcionTraducida1 + " VS " + "[" + jugadores[1] + "] "
					+ opcionTraducida2);

			// VICTORIAS JUGADOR 1
			if (opcionTraducida1.equals(TIJERA) && opcionTraducida2.equals(PAPEL)) {
				victoriasJugador[0]++;
				// victoriasJugador[0]=victoriasJugador[0]+1;
				System.out.println(jugadores[0] + " ha ganado usando " + opcionTraducida1);
			} else if (opcionTraducida1.equals(PAPEL) && opcionTraducida2.equals(PIEDRA)) {
				// victoriasJugador1++;
				victoriasJugador[0]++;
				System.out.println(jugadores[0] + " ha ganado usando " + opcionTraducida1);
			} else if (opcionTraducida1.equals(PIEDRA) && opcionTraducida2.equals(TIJERA)) {
				// victoriasJugador1++;
				victoriasJugador[0]++;
				System.out.println(jugadores[0] + " ha ganado usando " + opcionTraducida1);
			}

			// VICTORIAS JUGADOR 2
			else if (opcionTraducida2.equals(TIJERA) && opcionTraducida1.equals(PAPEL)) {
				victoriasJugador[1]++;
				System.out.println(jugadores[1] + " ha ganado usando " + opcionTraducida2);
			} else if (opcionTraducida2.equals(PAPEL) && opcionTraducida1.equals(PIEDRA)) {
				// victoriasJugador2++;
				victoriasJugador[1]++;
				System.out.println(jugadores[1] + " ha ganado usando " + opcionTraducida2);
			} else if (opcionTraducida2.equals(PIEDRA) && opcionTraducida1.equals(TIJERA)) {
				victoriasJugador[1]++;
				System.out.println(jugadores[1] + " ha ganado usando " + opcionTraducida2);
			}
			// EMPATE
			else {
				System.out.println("Empate técnico entre " + jugadores[0] + " y " + jugadores[1]);

			}
		}
		if (victoriasJugador[0] == 3) {
			System.out.println("Enhorabuena " + jugadores[0] + " has ganado la partida.");
		} else {
			System.out.println("Enhorabuena " + jugadores[1] + " has ganado la partida.");
		}

		// Rondas ganadas Jugador1
		// Rondas ganadas Jugador2
		// Rondas totales
		System.out.println("\n-- ESTADÍSTICAS GENERALES DE LA PARTIDA--\n");
		System.out.println("Rondas ganadas" + " (" + jugadores[0] + ") " + " : " + victoriasJugador[0]);
		System.out.println("Rondas ganadas" + " (" + jugadores[1] + ") " + " : " + victoriasJugador[1]);

		System.out.println("Las rondas totales son: " + contadorRondas);

	}
	//Declaración del método
	public static String convertirOpcion(int opcion) {
		if (opcion == 1) {
			return TIJERA;

		} else if (opcion == 2) {
			return PAPEL;

		} else if (opcion == 3) {
			return PIEDRA;
		}
		// En caso de que no sea ninguno de los anteriores, por defecto, se devolverá
		// PAPEL.
		else {
			return PAPEL;
		}
	}
	/*
	 * devolver: boolean argumento: int [] array operacion a realizar: devolver true
	 * si las posiciones del array [0] y [1] son menores que 3 las 2.
	 */

	//public static [tipo de variable que devuelve] [nombre de Método] ([argumentos...])
	public static boolean continuaLaPartida (int[] array) {
		//Se puede hacer sin condicionales
		if (array[0] < 3 && array[1] <3) {
			return true;
		}	else {
			return false;
		}
	}

}
