创建动态棋盘,偶数会导致问题

时间:2017-03-26 20:56:45

标签: java javafx

我的作业挑战是根据用户从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);
        }
    }

奇数

enter image description here

偶数

enter image description here

2 个答案:

答案 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;