我的作业挑战是根据用户从JOptionPane输入的大小,使用JavaFX制作棋盘。我已经完成了这项工作并且只能使用奇数编号,我该如何解决这个问题,以便正确地适用于奇数和偶数?
我认为这是我如何轮询使用颜色的问题,因为每行的偶数都是相同的。
Color[] colors = {Color.BLACK, Color.WHITE};
int nextColor = 0;
for (int row = 0; row < size; row++) {
for (int col = 0; col < size; col++) {
nextColor = (nextColor == 0) ? 1 : 0;
Rectangle rec = new Rectangle();
rec.setWidth(50);
rec.setHeight(50);
rec.setFill(colors[nextColor]);
GridPane.setRowIndex(rec, row);
GridPane.setColumnIndex(rec, col);
grid.getChildren().addAll(rec);
}
}
奇数
偶数
答案 0 :(得分:0)
如果您通过电路板填充交替颜色的字段,偶数列会导致最后一个字段的颜色与行中第一个字段的颜色不同,因此第一个字段位于下一行的颜色与上面的字段颜色相同。
要解决此问题,您只需添加列号和行号,然后将除法的余数除以2即可确定颜色:
Color[] colors = {Color.WHITE, Color.BLACK};
for (int row = 0; row < size; row++) {
for (int col = 0; col < size; col++) {
int nextColor = (row + col) % 2;
Rectangle rec = new Rectangle();
rec.setWidth(50);
rec.setHeight(50);
rec.setFill(colors[nextColor]);
GridPane.setRowIndex(rec, row);
GridPane.setColumnIndex(rec, col);
grid.getChildren().addAll(rec);
}
}
答案 1 :(得分:0)
除了muzzlator提出的另一种变体是仅通过位置设置颜色,而不存储一些当前的替代颜色。如您所见,这很容易出错。
只需使用int color = (row + col) % 2;
。