Código Java:
Ver original
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 { 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) { 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) { int numeroDeMovimiento = 1; int tamañoTablero = 0; { if(datos.length() == 1 || datos.length() == 2 ) //Tamaño del tablero // longitud (2....50) { //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 //Añadir el tablero inicial a la lista de tableros listaTableros.add(tableroClone); } else //Estamos dentro de una partida (es un movimiento) 1 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 { 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 { } }