Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/05/2014, 12:07
carbonflax
 
Fecha de Ingreso: mayo-2014
Ubicación: Albacete
Mensajes: 4
Antigüedad: 10 años
Puntos: 0
Buscando alternativas...

Hola buenas, acabo de realizar un pequeño código que procesa una serie de partidas en un juego y la verdad es que cumple su cometido peeeeero lo veo (en mi opinión) demasiado complejo. Por esto mismo, me preguntaba si existe alguna forma de simplificar o acortar el código que os dejo a continuación sin que esta misma modifique la salida del programa en cuestión.

Código Java:
Ver original
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.Arrays;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7.  
  8. public class Codigo2t {
  9.     public static void main(String[] args) throws IOException
  10.     {
  11.         //Leer los datos de entrada (lista de lista) = ListaDepartidas que llama al metodo leerentrada desde teclado.
  12.         ArrayList<ArrayList<String>> listaDePartidas = leerEntradaDesdeTeclado();
  13.        
  14.         //Procesar todas las partidas
  15.         for (ArrayList<String> datosDePartida: listaDePartidas)
  16.         {
  17.             ProcesarPartida(datosDePartida);
  18.             }
  19.     }
  20.    
  21.     //Leer la entrada desde teclado. Devuelve una lista con el contenido de las partidas
  22.  
  23.     public static ArrayList<ArrayList<String>> leerEntradaDesdeTeclado() throws IOException
  24.     {
  25.         ArrayList<ArrayList<String>> listaDePartidas = new ArrayList<ArrayList<String>>();
  26.         ArrayList<String> datosDePartida = new ArrayList<String>();
  27.  
  28.        
  29.             //Definimos un flujo de caracteres de entrada: leerEntrada
  30.             BufferedReader leerEntrada = new BufferedReader(new InputStreamReader(System.in));
  31.  
  32.             //Leemos la entrada, finaliza al introducir un cero
  33.             while(true)
  34.             {
  35.                 String linea = leerEntrada.readLine();
  36.  
  37.                 if(linea.equalsIgnoreCase("0"))
  38.                 {
  39.                     if(datosDePartida.size() > 0)
  40.                     {
  41.                         listaDePartidas.add(datosDePartida);
  42.                     }
  43.                     break;
  44.                 }
  45.                 else
  46.                 {
  47.                     if(linea.length() == 1 || linea.length() == 2) //Comienzo del juego
  48.                     { //Tamaño del tablero entre 2 y 50
  49.                         if(datosDePartida.size() > 0)
  50.                         {
  51.                             listaDePartidas.add((ArrayList<String>)datosDePartida.clone()); //Lo copio
  52.                             datosDePartida.clear(); //Lo limpio para que me quede vacio y despues meter otros datos nuevos
  53.                         }
  54.                        
  55.                         datosDePartida.add(linea); //Lo añado
  56.                     }
  57.                     else //Informacion de una casilla del tablero
  58.                     {
  59.                         datosDePartida.add(linea);
  60.                     }  
  61.                 }
  62.             }
  63.          
  64.        
  65.  
  66.         return listaDePartidas; //Devuelve la informacion intrpducida por teclado
  67.         //Cuando acaba de leer me devuelve una lista con todas las partidas
  68.     }
  69.    
  70.     //Procesar la partida para proportcionar el resultado
  71.     public static void ProcesarPartida(ArrayList<String> datosDePartida)
  72.     {
  73.         String tablero[][] = null;
  74.         ArrayList<String[][]> listaTableros = new ArrayList<String[][]> ();
  75.         int numeroDeMovimiento = 1;
  76.         int tamañoTablero = 0;
  77.  
  78.         for (String datos: datosDePartida)
  79.         {
  80.             if(datos.length() == 1 || datos.length() == 2 ) //Tamaño del tablero // longitud (2....50)
  81.             {
  82.                 tamañoTablero = Integer.valueOf(datos); //Pasamos un String a un Entero
  83.                 //SI el tamaño del tablero es > 50
  84.                 if (tamañoTablero>50||tamañoTablero<2){
  85.                     //System.out.println("tamaño del tablero erroneo, el tablero tiene que se > que 1 y < de 51");
  86.                     System.exit(0);}
  87.                 else
  88.                 tablero = new String [tamañoTablero][tamañoTablero];
  89.                
  90.                 //Añadir el tablero inicial a la lista de tableros
  91.                 String[][] tableroClone = ClonarTablero(tablero);
  92.                 listaTableros.add(tableroClone);
  93.             }
  94.             else //Estamos dentro de una partida (es un movimiento) 1 1 +
  95.             {
  96.                 String[] arrayDatos = datos.split(" ");
  97.                
  98.                 int fila = Integer.valueOf(arrayDatos[0]); //valueOf pasarlo a entero
  99.                 int columna = Integer.valueOf(arrayDatos[1]);
  100.                
  101.                 if(arrayDatos[2].equalsIgnoreCase("-")) //Si el tercer elemento es - que ponga nulo
  102.                 {
  103.                     tablero[fila - 1][columna - 1] = null; //El movimiento que el hace es uno mas porque las matrices empiezan en 0,0
  104.                 }
  105.                 else // Si es + que me ponga un +
  106.                 {
  107.                     tablero[fila - 1][columna - 1] = arrayDatos[2];
  108.                 }
  109.            
  110.                 //Para imprimir el tablero
  111.                 //System.out.println("\nActual tablero introducido por el jugador:");
  112.                 //imprimir(tablero);
  113.                
  114.                 boolean patronRepetido = tableroExistente(tablero, listaTableros); //Este metodo lo que hace es decirme si este tablero existe o no
  115.                 if (patronRepetido == true) //Si ese tablero ya existe, ya ha ganado un jugador
  116.                 {
  117.                     //Obtener el numero del jugador que ha ganado
  118.                     int numeroJugadorPerdedor;
  119.                     int numeroDeJugadorGanador;
  120.  
  121.                     if (numeroDeMovimiento % 2 == 0) //Se puede modificar siendo en vez de par, impar
  122.                     {
  123.                         numeroJugadorPerdedor = 2;
  124.                         numeroDeJugadorGanador = 1;
  125.                     }
  126.                     else
  127.                     {
  128.                         numeroJugadorPerdedor = 1;
  129.                         numeroDeJugadorGanador = 2;
  130.                     }
  131.                    
  132.                     System.out.println("El jugador " + numeroDeJugadorGanador + " ganaría en el movimiento " + numeroDeMovimiento);
  133.                     return;
  134.                 }
  135.                 else //Si no existe añado ese tablero a la lista de tableros para volver a compararlo mas tarde
  136.                 {
  137.                     String[][] tableroClone = ClonarTablero(tablero);
  138.                    
  139.                     listaTableros.add(tableroClone);
  140.                    
  141.                     numeroDeMovimiento++; //Aqui hay un movimiento de mas porque lo hemos inicializado a uno
  142.                 }
  143.             }
  144.         }
  145.        
  146.         if(2 * tamañoTablero == numeroDeMovimiento - 1) //Y aqui hay que quitar ese uno
  147.         {
  148.             System.out.println("Empate");
  149.         }
  150.         else
  151.         {
  152.             System.out.println("Error");
  153.         }
  154.     }