import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class Codigo2t {
{
//Leer los datos de entrada (lista de lista) = ListaDepartidas que llama al metodo leerentrada desde teclado.
ArrayList<ArrayList<String>> listaDePartidas = leerEntradaDesdeTeclado();
//Procesar todas las partidas
for (ArrayList<String> datosDePartida: listaDePartidas)
{
ProcesarPartida(datosDePartida);
}
}
//Leer la entrada desde teclado. Devuelve una lista con el contenido de las partidas
public static ArrayList
<ArrayList
<String
>> leerEntradaDesdeTeclado
() throws IOException {
ArrayList<ArrayList<String>> listaDePartidas = new ArrayList<ArrayList<String>>();
ArrayList<String> datosDePartida = new ArrayList<String>();
//Definimos un flujo de caracteres de entrada: leerEntrada
//Leemos la entrada, finaliza al introducir un cero
while(true)
{
String linea
= leerEntrada.
readLine();
if(linea.equalsIgnoreCase("0"))
{
if(datosDePartida.size() > 0)
{
listaDePartidas.add(datosDePartida);
}
break;
}
else
{
if(linea.length() == 1 || linea.length() == 2) //Comienzo del juego
{ //Tamaño del tablero entre 2 y 50
if(datosDePartida.size() > 0)
{
listaDePartidas.add((ArrayList<String>)datosDePartida.clone()); //Lo copio
datosDePartida.clear(); //Lo limpio para que me quede vacio y despues meter otros datos nuevos
}
datosDePartida.add(linea); //Lo añado
}
else //Informacion de una casilla del tablero
{
datosDePartida.add(linea);
}
}
}
return listaDePartidas; //Devuelve la informacion intrpducida por teclado
//Cuando acaba de leer me devuelve una lista con todas las partidas
}
//Procesar la partida para proportcionar el resultado
public static void ProcesarPartida(ArrayList<String> datosDePartida)
{
ArrayList
<String[][]> listaTableros
= new ArrayList
<String[][]> (); int numeroDeMovimiento = 1;
int tamañoTablero = 0;
for (String datos
: datosDePartida
) {
if(datos.length() == 1 || datos.length() == 2 ) //Tamaño del tablero // longitud (2....50)
{
tamañoTablero
= Integer.
valueOf(datos
); //Pasamos un String a un Entero //SI el tamaño del tablero es > 50
if (tamañoTablero>50||tamañoTablero<2){
//System.out.println("tamaño del tablero erroneo, el tablero tiene que se > que 1 y < de 51");
else
tablero
= new String [tamañoTablero
][tamañoTablero
];
//Añadir el tablero inicial a la lista de tableros
String[][] tableroClone
= ClonarTablero
(tablero
); listaTableros.add(tableroClone);
}
else //Estamos dentro de una partida (es un movimiento) 1 1 +
{
String[] arrayDatos
= datos.
split(" ");
int fila
= Integer.
valueOf(arrayDatos
[0]); //valueOf pasarlo a entero int columna
= Integer.
valueOf(arrayDatos
[1]);
if(arrayDatos[2].equalsIgnoreCase("-")) //Si el tercer elemento es - que ponga nulo
{
tablero[fila - 1][columna - 1] = null; //El movimiento que el hace es uno mas porque las matrices empiezan en 0,0
}
else // Si es + que me ponga un +
{
tablero[fila - 1][columna - 1] = arrayDatos[2];
}
//Para imprimir el tablero
//System.out.println("\nActual tablero introducido por el jugador:");
//imprimir(tablero);
boolean patronRepetido = tableroExistente(tablero, listaTableros); //Este metodo lo que hace es decirme si este tablero existe o no
if (patronRepetido == true) //Si ese tablero ya existe, ya ha ganado un jugador
{
//Obtener el numero del jugador que ha ganado
int numeroJugadorPerdedor;
int numeroDeJugadorGanador;
if (numeroDeMovimiento % 2 == 0) //Se puede modificar siendo en vez de par, impar
{
numeroJugadorPerdedor = 2;
numeroDeJugadorGanador = 1;
}
else
{
numeroJugadorPerdedor = 1;
numeroDeJugadorGanador = 2;
}
System.
out.
println("El jugador " + numeroDeJugadorGanador
+ " ganaría en el movimiento " + numeroDeMovimiento
); return;
}
else //Si no existe añado ese tablero a la lista de tableros para volver a compararlo mas tarde
{
String[][] tableroClone
= ClonarTablero
(tablero
);
listaTableros.add(tableroClone);
numeroDeMovimiento++; //Aqui hay un movimiento de mas porque lo hemos inicializado a uno
}
}
}
if(2 * tamañoTablero == numeroDeMovimiento - 1) //Y aqui hay que quitar ese uno
{
}
else
{
}
}