紧凑的方式来生成棋盘图案

时间:2013-06-24 23:27:20

标签: java optimization design-patterns performance

我需要为我正在创建的游戏生成棋盘图案。我已经提出了以下(伪)代码,但觉得必须有一个更紧凑的方法来做到这一点。欢迎所有建议!

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

感谢。

6 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:0)

我想如果你在每次画画之后交换颜色,那就应该做到这一点。 例如

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

然后应该去,对于奇数编号的板 例如。 3×3

bwb
wbw
bwb

答案 2 :(得分:0)

我会使用带有后继方法的枚举。然后你可以按如下方式初始化:

  • 位置的颜色(col = 0,row = 0)是Colour.Black或Colour.White,具体取决于您定义原点的位置。
  • 位置的颜色(col = 0,row = n)是位置的后继(col = 0,row = n-1)。
  • 在每一行中,位置的颜色(col = m,row = n)是位置的后继(col = m-1,row = n)。

这是Color enum:

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;
    } 
}

答案 3 :(得分:0)

一种通用的解决方案,您可以选择方形边的像素数,以及棋盘两侧的方格总数。

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;

答案 4 :(得分:-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

遍历所有的瓷砖,如果它们都是偶数或两者都是奇数(即(1,1),(1,3)......和(2,2)(2,4)(2, 6)......和(3,1)(3,3)(3,5)......等)然后使它成为一种颜色,否则使用其他颜色

示例:

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

你看看这里颜色全黑的指数,你会发现在所有这些指数中,X和Y都是奇数或两者都是偶数。

另外,不确定你的id = (i-1)*8+j行究竟应该做什么

答案 5 :(得分:-1)

单行

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') + " ");

输出

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