Gitrot

Intento 1 imitación de deepToString

        for (int i = 0; i < tabla.length; i++) {
            System.out.print("[");
            for (int j = 0; j < tabla[i].length; j++) {
                if (j != tabla[i].length - 1) {
                    System.out.print(tabla[i][j] + ", ");
                } else {
                    System.out.println(tabla[i][j] + "]");
                }

            }
        }

Matriz a String

public class MatrizToString {
    static String stringMatriz(int[][] t){
        String Str = "";
        if (t.length == 0) {
            Str = "[]";
            return Str;
        }
        for (int i = 0; i < t.length; i++) {
            if (t[i] == null || t[i].length == 0) {
                if(i==0){ Str += "[]";
                } else { Str += String.format("%n%s", "[]");}
                
            }else{
                Str += String.format("%n%s",  "[ ");
                for (int j = 0; j < t[i].length; j++) {
                    if (j != t[i].length - 1) {
                        Str += t[i][j] + " | ";
                    } else {
                        Str += t[i][j] + " ]";
                    }
                }
            }
        }
        return Str;
    }
    public static void main(String[] args) {
        int[][] tabla = new int[5][5];
        System.out.println(stringMatriz(tabla));
    }
}

Array a String

public class ArrayToString {
    static String stringArray(int[] array) {
        String arrayStr = "";
        if (array.length == 0) {
            arrayStr += "[]";
            return arrayStr;
        }
        for (int i = 0; i < array.length; i++) {
            arrayStr = "[ ";
            if (i > 0 && i < array.length) {
                arrayStr += " | ";
            }
            arrayStr += array[i];
            if (i == array.length - 1) {
                arrayStr += " ]";
            }
        }
        return arrayStr;
    }
    public static void main(String[] args) {
        int[] array = new int[5];
        System.out.println(stringArray(array));
    }
}

S⏫el Arrays.toString no lo optimiza suficiente???

I->S Sí, pero con esta función modifico que separadores utiliza.

Tablero Ajedrez

No me gusta como quedó personalmente

sketch.png

Movimiento peon de ajedrez

static boolean movimientoPeon(int[] movConFormato, char[][] tablero, boolean turnoBlancas, int[][] historial){
        boolean movEsValido = false;
        int columnaInicioMovAnterior = historial[historial.length-1][1];
        int columnaFinalMovAnterior = historial[historial.length-1][3];
        int filaMovAnterior = historial[historial.length-1][4];
        int columnaOrigen = movConFormato[0];
        int filaOrigen = movConFormato[1];
        int columnaDestino = movConFormato[2];
        int filaDestino = movConFormato[3];
        if (turnoBlancas){
            if (filaDestino == filaOrigen - 1 && tablero[filaDestino][columnaDestino] == '-') { //avanzar si no hay piezas delante
                movEsValido = true;
            } else if (filaDestino == filaOrigen - 1 && (columnaDestino == columnaOrigen + 1 || columnaDestino == columnaOrigen - 1) && (tablero[filaDestino][columnaDestino] != '-' || (tablero[filaDestino][columnaDestino] == '-' && (tablero[filaOrigen][columnaDestino-1] == 'p' || tablero[filaOrigen][columnaDestino+1] == 'p') && (columnaInicioMovAnterior == columnaDestino && columnaFinalMovAnterior == columnaDestino && filaMovAnterior == filaDestino - 1)))){ //Capturar en diagonal y Anpasant
            //Captura diagonal
            //Si el peon avanza en diagonal filaDestino == filaOrigen - 1 && (columnaDestino == columnaOrigen + 1 || columnaDestino == columnaOrigen - 1)
            //Sí si hay una ficha que capturar tablero[filaDestino][columnaDestino] != '-'
            //Anpasant
            //O si hay un peon al lado (tablero[filaDestino][columnaDestino] == '-' && (tablero[filaOrigen][columnaDestino-1] == 'p' || tablero[filaOrigen][columnaDestino+1] == 'p')
            //Y el movimiento del rival fue avanzar recto el peon de en frente a al lado (columnaInicioMovAnterior == columnaDestino && columnaMovAnterior == columnaDestino && filaMovAnterior == filaDestino + 1)
                movEsValido = true;
            } else if (filaOrigen==tablero.length-2 && filaDestino == filaOrigen - 2 && tablero[filaDestino][columnaDestino] == '-'){ //Doble avance inicial
                movEsValido = true;
            }
        }else{
            if (filaDestino == filaOrigen + 1 && tablero[filaDestino][columnaDestino] == '-') { //avanzar si no hay piezas delante
                movEsValido = true;
            } else if (filaDestino == filaOrigen + 1 && (columnaDestino == columnaOrigen + 1 || columnaDestino == columnaOrigen - 1) && (tablero[filaDestino][columnaDestino] != '-' || (tablero[filaDestino][columnaDestino] == '-' && (tablero[filaOrigen][columnaDestino-1] == 'p' || tablero[filaOrigen][columnaDestino+1] == 'p') && (columnaInicioMovAnterior == columnaDestino && columnaFinalMovAnterior == columnaDestino && filaMovAnterior == filaDestino + 1)))){ //Capturar en diagonal y Anpasant
                movEsValido = true;
            } else if (filaOrigen==tablero.length-2 && filaDestino == filaOrigen + 2 && tablero[filaDestino][columnaDestino] == '-'){ //Doble avance inicial
                movEsValido = true;
            }
        }
        
        return movEsValido;
    }

S⏫ explica como funciona el sub array de historial porque me pierdo

I->S Es un array que guarda los array de los movimientos anteriores, lo utilizo para saber que movimiento hizo el jugador rival en su turno previo para verificar las condiciones del Ampasant.

S->I Pero solo sirve para guardar el movimiento inmediatamente anterior, no???

I->S No, en el main está implementado que vaya añadiendo cada nuevo movimiento valido

S->I Para que necesitas que guarde cada movimiento válido? Quieres hacer una grabación de toda la partida?

S->I Además que llamas a posiciones fijas del array, esto no hace que siempre esté viendo el mismo historial???

I->S No, la posición fija es dentro del ultimo array guardado, hace referencia a la posición del movimiento (a1 b2) le estoy diciendo que coja el "b2" por ejemplo, que es siempre el 3 y 4 del ultimo array guardado

Conseguí hacer el de siguiente matricula con los char =)

    static String siguienteMatricula(String matricula) {
        if (matricula == null || matricula.length() != 7) {
            return null;
        }

        String siguiente = "";
        boolean continuar = true;
        String numeros = matricula.substring(0, 4);
        String letras = matricula.substring(4);
        int cifra = Integer.parseInt(numeros);
        cifra++;
        if (cifra > 9999) {
            numeros = "0000";
            letras.toUpperCase();
            char[] letra = letras.toCharArray();

            for (int i = letra.length - 1; i >= 0 && continuar == true; i--) {
                int letraUni = letra[i];
                letraUni++;
                if (letraUni > 90) {
                    letra[i] = 'B';
                } else {
                    if (letraUni == 69 || letraUni == 73 || letraUni == 79 || letraUni == 85) {
                        letraUni++;
                    }
                    letra[i] = (char) letraUni;
                    continuar = false;
                }
            }

            letras = Arrays.toString(letra);
            letras = letras.replace("[", "");
            letras = letras.replace("]", "");
            letras = letras.replace(",", "");
            letras = letras.replace(" ", "");

        } else {
            numeros = Integer.toString(cifra);
        }
        siguiente = numeros + letras;
        return siguiente;
    }
Etiquetas relacionadas:
Ningún resultado para «Gitrot»