我需要为我正在创建的游戏生成棋盘图案。我已经提出了以下(伪)代码,但觉得必须有一个更紧凑的方法来做到这一点。欢迎所有建议!
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
感谢。
答案 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)
我会使用带有后继方法的枚举。然后你可以按如下方式初始化:
这是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