Aunque este enfoque no es realmente necesario para algo tan simple como un tablero de ajedrez, cuando pienso en una forma elegante de representar algo relacionado con la vista, quiero que sea lo más fácil posible cambiar la vista renderizada como sea posible. Por ejemplo, supongamos que decidió alternar blanco y negro en cada fila, pero no en cada columna. Las frases utilizadas en las respuestas hasta ahora tendrían que reescribirse.
Si tuviera que ir tan lejos como pudiera con esto y hacer que sea tan fácil rediseñar el patrón en el tablero de Ajedrez como sea posible, esto es lo que haría:
1) Haría un archivo que indica de qué color es cada cuadrado en el tablero de ajedrez.
Por ejemplo, podría hacer un archivo chess_board_pattern.config
que se vea así:
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
2) Escribiría una clase / componente / lo que sea que pueda leer este archivo y crear algún tipo de objeto que represente el patrón del tablero:
public class BoardPattern {
private Color[][] pattern;
public BoardPattern(File patternFile)
{
pattern = new Color[8][8];
//Parse the file and fill in the values of pattern
}
public Color[][] getPattern {
return pattern;
}
}
3) Entonces usaría esa clase en la función que realmente dibuja el tablero.
File patternFile = new File("chess_board_pattern.ini");
Color[][] pattern = new BoardPattern(patternFile).getPattern();
ChessBoardDrawable chessBoard = new ChessBoardDrawable();
for(int row = 0; row < 8; row++) {
for(int column; column < 8; column++) {
chessBoard.drawSquare(row, column, Color[row][column]);
}
}
De nuevo, esto es mucho más difícil de lo necesario para un tablero de ajedrez. Sin embargo, creo que, en general, cuando se trabaja en proyectos más complicados, es mejor encontrar soluciones generalizadas como esta en lugar de escribir código que es difícil de cambiar más adelante.