有沒有一種方法可以在不使用嵌套 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
}
有沒有更簡單的方法來做到這一點?如果是,還請解釋如何以及為什么,我想知道我的代碼中發生了什么:)
uj5u.com熱心網友回復:
如果 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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478401.html
