package leccion7;

import java.util.Random;
import java.util.Scanner;

public class leccion7 {
	static Random rd = new Random();

	static String mensajeMovimiento = "Elige una de las siguiente direcciones: \nd=derecha\na=izquierda\nw=arriba\ns=abajo\nq=arriba izquierda"
			+ "\nr=arriba derecha\ne=abajo izquierda\nb=abajo derecha";

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		char[][] tablero1 = new char[10][10];
		char[][] tablero2 = new char[10][10];
		tablero1[9][9] = 'F';
		tablero2[9][9] = 'F';
		int id = 1;
		int numeroEnemigos = 5;
		char[] usuarios = new char[] { 'Y', 'V' };
		char[] enemigos = new char[] { 'D', 'R' };
		int[] vidas = new int[]{0,0};
		posicionAleatoria(tablero1, usuarios[0]);
		posicionAleatoria(tablero2, usuarios[1]);
		posicionAleatoriaEnemigo(tablero1, enemigos[0], numeroEnemigos);
		posicionAleatoriaEnemigo(tablero2, enemigos[1], numeroEnemigos);
		posicionAleatoriaEnemigo(tablero1, 'M', numeroEnemigos);
		posicionAleatoriaEnemigo(tablero2, 'M', numeroEnemigos);
		rellenarVacios(tablero1, 'L');
		rellenarVacios(tablero2, 'L');
		visualizarTablero(tablero1);

		while(vidas[0]>0 && vidas[1]>0) {
		System.out.println(mensajeMovimiento);
		sc.nextLine();
		char movimiento = sc.nextLine().charAt(0);
		int numero = validacionInt(4);
		
		

		RealizarMovimiento(tablero1, usuarios[0], CalcularMovimiento(movimiento,numero), id, enemigos, vidas);

		visualizarTablero(tablero1);
		}
		//despues del bucle
	}
	public static int validacionInt(int limiteMaximo) {
		System.out.println("Introduce las posiciones que quieres que se muevan las fichas");
		int numero= limiteMaximo;
		while (numero>=limiteMaximo) {
			numero = sc.nextInt();
		}
		return numero;
	}

	/*
	 * Cada una de ellas le proporcionará un movimiento: derecha, izquierda, arriba,
	 * abajo, diagonal y diagonal inversa (‘D’, ‘A’,’W’, ‘S’, ‘Q’, ‘R’, ‘E’, ‘B’)
	 */
	public static int[] CalcularMovimiento(char movimiento, int multiplicar) {
		switch (movimiento) {
		case 'd':
			return new int[] { 0, 1*multiplicar };
		case 'a':
			return new int[] { 0, -1*multiplicar };
		case 'w':
			return new int[] { -1*multiplicar, 0 };
		case 's':
			return new int[] { 1*multiplicar, 0 };
		case 'q':
			return new int[] { -1*multiplicar, -1*multiplicar };
		case 'r':
			return new int[] { -1*multiplicar, 1*multiplicar };
		case 'e':
			return new int[] { 1*multiplicar, -1*multiplicar };
		case 'b':
			return new int[] { 1*multiplicar, 1*multiplicar };
		default:
			return new int[] { 0, 0 };

		}
	}

	public static void RealizarMovimiento(char tablero[][], char personaje, int[] traslacion, int id, char enemigos[], int vidas[]) {
		int[] coordenadasIniciales = new int[2];
		for (int i = 0; i < tablero.length; i++) {
			for (int j = 0; j < tablero[i].length; j++) {
				if (tablero[i][j] == personaje) {
					// Está en estas coordenadas.
					coordenadasIniciales = new int[] { i, j };
				}
			}
		}
		int[] nuevasCoordenadas = new int[2];
		nuevasCoordenadas[0] = coordenadasIniciales[0] + traslacion[0];
		nuevasCoordenadas[1] = coordenadasIniciales[1] + traslacion[1];
		
		if (nuevasCoordenadas[0] >= tablero.length) { // EJE X
			nuevasCoordenadas[0]-=10;
			//nuevasCoordenadas[0]= nuevasCoordenadas[0]-10;
		}
		if (nuevasCoordenadas[0] < 0) { // EJE X
			nuevasCoordenadas[0]+=10;
			//nuevasCoordenadas[0]= nuevasCoordenadas[0]+10;
		}
		///----
		if (nuevasCoordenadas[1] >= tablero[0].length) { // EJE X

			nuevasCoordenadas[1]-=10;
			//nuevasCoordenadas[1]= nuevasCoordenadas[1]-10;
		}
		if (nuevasCoordenadas[1] < 0) { // EJE X

			nuevasCoordenadas[1]+=10;
			//nuevasCoordenadas[1]= nuevasCoordenadas[1]+10;
		}
		System.out.println("Coordenada 1: "+nuevasCoordenadas[0]);
		System.out.println("Coordenada 2: "+nuevasCoordenadas[1]);
		
		
		
		//Ya tengo las nuevas coordenadas en la calculadas.
		
		//COMPRUEBO SI ESTÁ LIBRE
		
		//SI NO
		
		//Vuelvo a la posición anterior.
		if(tablero[nuevasCoordenadas[0]][nuevasCoordenadas[1]]==enemigos[id]) {
			vidas[id]-=1;
		}
		
		if(tablero[nuevasCoordenadas[0]][nuevasCoordenadas[1]]!='M') {
			tablero[nuevasCoordenadas[0]][nuevasCoordenadas[1]] = personaje;
			
			tablero[coordenadasIniciales[0]][coordenadasIniciales[1]] = 'L';
		}
		

	}

	public static boolean esVacio(char[][] tablero, int x, int y) {
		return tablero[x][y] == '\u0000';

	}

	public static void posicionAleatoria(char[][] tablero, char usuario) {
		int x = rd.nextInt(10);
		int y = rd.nextInt(10);
		tablero[x][y] = usuario;

	}

	public static void posicionAleatoriaEnemigo(char[][] tablero, char caracter, int numero) {
		for (int i = 0; i < numero; i++) {

			int x = rd.nextInt(10);
			int y = rd.nextInt(10);
			if (esVacio(tablero, x, y)) {
				tablero[x][y] = caracter;

			} else {
				i--;
			}

		}
	}

	public static void rellenarVacios(char[][] tablero, char caracter) {

		for (int i = 0; i < tablero.length; i++) {
			for (int j = 0; j < tablero[i].length; j++) {
				if (esVacio(tablero, i, j)) {
					tablero[i][j] = caracter;
				}
			}
		}
	}

	public static void visualizarTablero(char[][] tablero) {

		for (int i = 0; i < tablero.length; i++) {
			for (int j = 0; j < tablero[i].length; j++) {
				if (tablero[i][j] == 'Y') {
					System.out.print("\033[31m" + tablero[i][j] + "\033[0;30m ");
				} else {
					System.out.print(tablero[i][j] + " ");

				}
			}
			System.out.println("");
		}

	}
}
