Forma compacta para generar el patrón de tablero de ajedrez

Necesito para generar un patrón de tablero de ajedrez para un juego que estoy creando. He llegado a la siguiente (pseudo)código, pero cree que no debe ser una forma más compacta para ello. Todas las sugerencias son bienvenidas!

for (int i = 1; i < 9; i++){
    for (int j = 1; j < 9; j++){
        if (i % 2 == 1){
            if (j % 2 ==1){
                color = white
            }
            if (j % 2 ==0){
                color = black
            }
        }

        if (i % 2 == 0){
            if (j % 2 ==1){ 
                color = black
            }
            if (j % 2 ==0){
                color = white
            }
        }
        id = (i-1)*8+j
    }//end inner for
}//end outer for

Gracias.

InformationsquelleAutor vaniaspeedy | 2013-06-24

6 Kommentare

  1. 7
    for (int i = 1; i < 9; i++){
        for (int j = 1; j < 9; j++){
            if ( i+j % 2 == 0 ) {
                color = white;
            } else {
                color = black;
            }
        }
    }
    • Gracias, esto era lo que estaba buscando. Yo sospechaba una prueba para la nivelación ayudaría! Gracias.
    • Me pone una corriente alterna de la cuadrícula de color para cualquier x/y coord en una cuadrícula. Impresionante!
  2. 0

    Creo que si puedes cambiar los colores cada vez que se dibuja algo, que debe cumplir con este.
    por ejemplo.

    Start with black
    Outer loop i
       Inner loop j
          Print colour square at position i,j
          Swap colours

    Debe ir para un impares de la junta de
    por ejemplo.
    3×3

    bwb
    wbw
    bwb
    • Que esto todavía trabajo para un par de anuncios? Si puedo intercambiar el color en el interior del bucle, a continuación, para un 4×4 de la junta que me gustaría conseguir: wbwb wbwb wbwb wbwb . Parece que el uso de esta metodología tendría que agregar un cheque a no intercambiar el color si el bucle interno se ha llegado al final.
    • Tienes razón… no va a funcionar para numeradas juntas. Teepeemm tiene la solución superior 🙂
  3. 0

    Me gustaría utilizar un enum con un sucesor método. A continuación, puede iniciar de la siguiente manera:

    • El color de la posición(col = 0, fila = 0) es el Color.Negro o en Color.Blanco, dependiendo de donde usted definir su origen.
    • El color de la posición(col = 0, fila = n) es el sucesor de la posición(col = 0, fila = n-1).
    • En cada fila el color de la posición(col = m, fila = n) es el sucesor de la posición(col = m-1, fila = n).

    Aquí es el Color de la enumeración:

    public enum Colour {
        BLACK, WHITE;
        public Colour successor() {
            //Bulky general implementation.
            //return values()[(ordinal() + 1) % values().length];
    
            //Simpler version for our binary case.
            return equals( BLACK ) ? WHITE : BLACK;
        } 
    }
  4. 0

    Una solución genérica donde usted puede elegir el número de píxeles de un cuadrado de lado, y el número total de cuadrados en el tablero de ajedrez lados.

    int dimSq = 10;         //in pixels
    int dimBoard = 8;       //in squares
    int pixels = dimSq * dimBoard;
    for (int x = 0; x < pixels; x++)
        for (int y = 0; y < pixels; y++)
            boolean black = (x / dimSq) + (y / dimSq) % 2 == 0;
  5. -1

    one-liner

    int dim = 10;
    for (int i = 0; i < dim * dim; i++) System.out.print((i % dim == 0 ? "\n" : "") + ((i / dim) % 2 == 0 ? i % 2 == 0 ? 'B' : 'W' : i % 2 == 0 ? 'W' : 'B') + " ");

    salida

    B W B W B W B W B W 
    W B W B W B W B W B 
    B W B W B W B W B W 
    W B W B W B W B W B 
    B W B W B W B W B W 
    W B W B W B W B W B 
    B W B W B W B W B W 
    W B W B W B W B W B 
    B W B W B W B W B W 
    W B W B W B W B W B
    • Que dos líneas. Tres, si poner la letra en la línea siguiente después de la instrucción for. 😛
    • No envolver sus líneas no optimizar; es todavía tengo algunas ineficiencias
    • A la pregunta original, se trata de encontrar una forma más compacta para hacer esto, no la manera más óptima. Cadena{Buffer|Constructor} son mucho mejor que este.
  6. -1
    for (int i = 1; i < 9; i++){
        for (int j = 1; j < 9; j++){
            if (i % 2 == j % 2){
                color = white
            } else {
                color = black
            }
            id = (i-1)*8+j
        }//end inner for
    }//end outer for

    Ir a través de todos los azulejos, y si son o incluso a un extraño (es decir, (1,1), (1,3)… y (2,2) (2,4) (2,6)… y (3,1) (3,3) (3,5) … etc), a continuación, hacer que sea un color, de lo contrario usar otro color

    Ejemplo:

    B W B W B W
    W B W B W B
    B W B W B W
    W B W B W B
    B W B W B W
    W B W B W B

    Usted echa un vistazo a los índices donde todos los colores son negro aquí y verás que en todos ellos, el X y y son ambos pares o ambos inclusive.

    También, no estoy seguro exactamente su id = (i-1)*8+j línea se supone debe hacer

    • Este tiene 3 B para cada W.
    • Sí, solucionado, he cambiado el código de la prueba en eclipse y refleja que en mi explicación, pero nunca me fijo en el código de aquí antes de postear 😛 Debe ser buena ahora
    • El ID es la numeración de los azulejos de 1 a 64.
    • En realidad creo que se supone que debe ser 1-8 para x,y (lo que combinado es, efectivamente, 1-64)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein