Mặc dù cách tiếp cận này không thực sự cần thiết cho một thứ đơn giản như bàn cờ vua, nhưng khi tôi nghĩ ra một cách thanh lịch để thể hiện một cái gì đó liên quan đến chế độ xem, tôi muốn làm cho nó dễ dàng nhất có thể để thay đổi chế độ xem được hiển thị nhất có thể. Ví dụ: giả sử bạn quyết định bạn muốn xen kẽ đen trắng trên mỗi hàng, nhưng không phải mỗi cột. Các lớp lót được sử dụng trong các câu trả lời cho đến nay sẽ phải được viết lại.
Nếu tôi đã đi xa hết mức có thể với điều này và làm cho nó dễ dàng thiết kế lại mẫu trên bàn cờ càng tốt, đây là những gì tôi sẽ làm:
1) Tôi sẽ tạo một tập tin cho biết mỗi ô vuông màu gì trong bàn cờ.
Ví dụ: tôi có thể tạo một tệp chess_board_pattern.config
trông giống như thế này:
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
2) Tôi sẽ viết một lớp / thành phần / bất cứ thứ gì có thể đọc tệp này và tạo một số loại đối tượng đại diện cho mẫu bảng:
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) Sau đó tôi sẽ sử dụng lớp đó trong hàm thực sự vẽ bảng.
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]);
}
}
Một lần nữa, điều này khó hơn rất nhiều so với cần thiết cho một bàn cờ. Tuy nhiên, tôi nghĩ rằng nói chung, khi làm việc với các dự án phức tạp hơn, tốt nhất là đưa ra các giải pháp tổng quát như thế này thay vì viết mã khó thay đổi sau này.