是否有一种方法来生成棋盘图案,而不使用嵌套的for循环和不使用x和y?
我确信这已经做过了,但我找了15分钟就找不到。
目前我有这个函数,它首先提取x和y生成模式:
fn get_bg_color_of(idx: usize) -> &'static str {
const BG_BLACK: &str = "u{001b}[48;5;126m";
const BG_WHITE: &str = "u{001b}[48;5;145m";
let x = idx % Board::WIDTH;
let y = idx / Board::WIDTH;
let is_even_row = y % 2 == 0;
let is_even_column = x % 2 == 0;
if is_even_row && is_even_column || !is_even_row && !is_even_column {
return BG_WHITE;
}
BG_BLACK
}
有更简单的方法吗?如果是,也请解释如何和为什么,我想知道发生了什么在我的代码:)
如果WIDTH为偶数,则需要分隔x和y,但可以将其写得更短:
fn get_bg_color_of(idx: usize) -> &'static str {
const BG_BLACK: &str = "u{001b}[48;5;126m";
const BG_WHITE: &str = "u{001b}[48;5;145m";
if ( (idx + (idx/Board::WIDTH)) % 2 == 0 ) {
return BG_WHITE;
}
return BG_BLACK;
}
注意,如果WIDTH是奇数,这不起作用。在这种情况下,您只需执行:
if ( idx % 2 == 0 ) {
return BG_WHITE;
}
}
如果您需要处理这两种情况,则:
if ( ((idx%Board::WIDTH) + (idx/Board::WIDTH)) % 2 == 0 ) {
return BG_WHITE;
}