private void MoverPieza(int x, int y){ //Si ya se han colocado las piezas if(piezaSeleccionada.jugando){ //Si pulsas otra pieza de tu equipo la selecciona automaticamente if (Piezas[x,y] != null && Piezas [x, y].esAzul != turnoRojo) { BoardHighlight.Instance.Hidehighlights (); SeleccionarPieza (x, y); return; } //Si puedes moverte a donde has pinchado if (movimientosPermitidos [x, y]) { Pieza piezaEnemiga = Piezas [x, y]; //Borra highlights BoardHighlight.Instance.Hidehighlights (); //Muestra las dos casillas que se ha movido este turno BoardHighlight.Instance.encenderCasilla (piezaSeleccionada.CurrentX, piezaSeleccionada.CurrentY); BoardHighlight.Instance.encenderCasilla (x, y); //Si atacas a un enemigo if (piezaEnemiga != null && piezaEnemiga.esAzul == turnoRojo) { //Mostramos textos if (turnoRojo) { mostrarTexto (piezaSeleccionada, textoValorAtaque, Color.red); mostrarTexto (piezaEnemiga, textoValorDefensa, Color.blue); } else { mostrarTexto (piezaSeleccionada, textoValorAtaque, Color.blue); mostrarTexto (piezaEnemiga, textoValorDefensa, Color.red); } //Calcula resultado del combate int combate = Combate (piezaSeleccionada, piezaEnemiga); //Si gana atacante if (combate == 1) { //Elimina de lista figurasActivas.Remove (piezaEnemiga.gameObject); //Destruye objeto del tablero Destroy (piezaEnemiga.gameObject); //Calcula si quedan piezas movibles if (comprobarEmpateOrMovible ()) return; } //Si gana defensa if (combate == -1) { //Elimina pieza figurasActivas.Remove (piezaSeleccionada.gameObject); Destroy (piezaSeleccionada.gameObject); Piezas [piezaSeleccionada.CurrentX, piezaSeleccionada.CurrentY] = null; //Elimina figura de posicion anterior piezaSeleccionada = null; //deselecciona pieza //Calcula si quedan piezas movibles if (comprobarEmpateOrMovible ()) return; //Cambio de turno turnoRojo = !turnoRojo; if (turnoRojo) { cambioTurnoRojo (); } else { cambioTurnoAzul (); } return; } //Si las dos tienen el mismo valor if (combate == 0) { //Elimina piezas figurasActivas.Remove (piezaSeleccionada.gameObject); figurasActivas.Remove (piezaEnemiga.gameObject); Destroy (piezaSeleccionada.gameObject); Destroy (piezaEnemiga.gameObject); Piezas [piezaSeleccionada.CurrentX, piezaSeleccionada.CurrentY] = null; Piezas [piezaEnemiga.CurrentX, piezaEnemiga.CurrentY] = null; piezaSeleccionada = null; //Calcula si quedan piezas movibles if (comprobarEmpateOrMovible ()) return; //Cambio de turno turnoRojo = !turnoRojo; if (turnoRojo) { cambioTurnoRojo (); } else { cambioTurnoAzul (); } return; } //Si se captura la bandera if (combate == 2) { if (turnoRojo) FinDelJuego (1); else FinDelJuego (-1); return; } } //Mueve la pieza Piezas [piezaSeleccionada.CurrentX, piezaSeleccionada.CurrentY] = null; piezaSeleccionada.transform.position = GetTileCenter (x, y); piezaSeleccionada.setPosition (x, y); //Guardamos nueva posicion iTween.MoveTo(piezaSeleccionada.gameObject,new Vector3(x + 0.5f,0,y + 0.5f),4); Piezas [x, y] = piezaSeleccionada; //Cambia de turno turnoRojo = !turnoRojo; if (turnoRojo) { cambioTurnoRojo(); } else { cambioTurnoAzul(); } } } else { //Si estamos colocando las piezas en el tablero if (movimientosPermitidos [x, y]) { Pieza posicionDeseada = Piezas [x, y]; if (posicionDeseada == null) { //No hay pieza en el sitio Piezas [piezaSeleccionada.CurrentX, piezaSeleccionada.CurrentY] = null; //Borrar de anterior coordenada iTween.MoveTo (piezaSeleccionada.gameObject, new Vector3 (x + 0.5f, 0, y + 0.5f), 4); piezaSeleccionada.setPosition (x, y); //Guardamos nueva posicion Piezas [x, y] = piezaSeleccionada; //Añadimos a matriz } else { //Ya había una pieza en el sitio Piezas [piezaSeleccionada.CurrentX, piezaSeleccionada.CurrentY] = null; //Borrar de anterior coordenada iTween.MoveTo (piezaSeleccionada.gameObject, new Vector3 (x + 0.5f, 0, y + 0.5f), 4); piezaSeleccionada.setPosition (x, y); //Guardamos nueva posicion piezaSeleccionada2 = Piezas [x, y]; //Guardamos pieza que vamos a devolver a la caja Piezas [x, y] = piezaSeleccionada; //Añadimos a matriz la pieza movida bool fin = false; //Encontrada posicion en la caja = false //Distintas coordenadas dependiendo del color if (piezaSeleccionada2.esAzul) { //Comprobamos uno a uno si hay algun hueco libre en la caja for (int j = 17; j >= 14; j--) { for (int i = 9; i >= 0; i--) { if (Piezas [i, j] == null) { iTween.MoveTo (piezaSeleccionada2.gameObject, new Vector3 (i + 0.5f, 0, j + 0.5f), 4); piezaSeleccionada2.setPosition (i, j); //Guardamos nueva posicion Piezas [i, j] = piezaSeleccionada2; fin = !fin; break; } } if (fin) break; } } else { for (int j = 0; j < 4; j++) { for (int i = 0; i < 9; i++) { if (Piezas [i, j] == null) { iTween.MoveTo (piezaSeleccionada2.gameObject, new Vector3 (i + 0.5f, 0, j + 0.5f), 4); piezaSeleccionada2.setPosition (i, j); //Guardamos nueva posicion Piezas [i, j] = piezaSeleccionada2; fin = !fin; break; } } if (fin) break; } } piezaSeleccionada2 = null; } // Durante la colocacion de piezas no se cambia turno hasta el final if (RojasColocadas () && turnoRojo) { turnoRojo = false; //Cambio de turno al colocar todas las rojas cambioTurnoAzul(); planeValor.SetActive (false); planeValor.transform.position = new Vector3(5,5,0); } if (AzulesColocadas ()) { turnoRojo = true; cambioTurnoRojo(); textoValorAtaque.transform.position = new Vector3 (360,60,0); } } else if (Piezas[x,y] != null && Piezas [x, y].esAzul != turnoRojo) { SeleccionarPieza (x, y); return; } BoardHighlight.Instance.Hidehighlights (); } piezaSeleccionada = null; }