[英]Chess board in c
我想知道如何制作僅在棋盤上打印黑色位置的 ac 程序,例如:
- =(空白);
-| A8 - C8 - E8 - G8 -
-| - B7 - D7 - F7 - H7
-| A6 - C6 - E6 - G6 -
-| - B5 - D5 - F5 - H5
-| A4 - C4 - E4 - G4 -
-| - B3 - D3 - F3 - H3
-| A2 - C2 - E2 - G2 -
-| - B1 - D1 - F1 - H1
#include <stdio.h>
int main()
{
int n = 8;
int i,j;
char a[100][100] = {
"A8"," ","C8"," ","E8"," ","G8",
" ","B7"," ","D7"," ","F8"," ","H7",
"A6"," ","C6"," ","E6"," ","G6",
" ","B5"," ","D5"," ","F5"," ","H5",
"A4"," ","C4"," ","E4"," ","G4",
" ","B3"," ","D3"," ","F3"," ","H3",
"A2"," ","C2"," ","E2"," ","G2",
" ","B1"," ","D1"," ","F1"," ","H1",
};
for(i = 0;i < n;i++){
for(j = 0;j < n;j++){
printf("%c ",a[i][j]);
}
printf("\n");
}
return 0;
}
絕對沒有理由在這里使用二維數組。 屏幕上的表示和數據結構的內存布局不需要匹配。 舉個例子:
#include <stdio.h>
int main(void)
{
unsigned int i;
for (i = 0; i < 64; i++) {
if ((((i % 8) + (i / 8)) & 1) == 0) {
printf("%c%u ", 'A' + (i % 8), 8 - (i / 8));
} else {
printf(" ");
}
if ((i % 8) == 7) {
printf("\n");
}
}
return 0;
}
這段代碼並不漂亮,但它有效。 它甚至不使用數組。 你所需要的只是一些操作,比如除法和模數來確定行和列。 然后您需要注意,如果 X+Y 是偶數,則坐標為 (X,Y) 的正方形共享相同的顏色。
代碼並不漂亮,但它使用了非常簡單的邏輯。 作為練習,在for
循環中,嘗試將坐標 X 和 Y 放入單獨的變量中。 那么可能更容易理解。
請閱讀標有// CHANGE HERE
的注釋。
char a[100][100]
創建 100 個字符串,每個字符串的最大長度為 99(空終止符'\\0'
為 1 個字符(假設 100 行有 99 列)
#include <stdio.h>
int main()
{
//int n = 8; // CHANGE HERE - unused
int i;
// CHANGE HERE
// 1. Replaced ' ' with ' ' (two spaces)
// 2. Added ' ' after G for white H column cells
char a[100][100] = {
"A8"," ","C8"," ","E8"," ","G8"," ",
" ","B7"," ","D7"," ","F8"," ","H7",
"A6"," ","C6"," ","E6"," ","G6"," ",
" ","B5"," ","D5"," ","F5"," ","H5",
"A4"," ","C4"," ","E4"," ","G4"," ",
" ","B3"," ","D3"," ","F3"," ","H3",
"A2"," ","C2"," ","E2"," ","G2"," ",
" ","B1"," ","D1"," ","F1"," ","H1",
};
// CHANGE HERE - chess board has 64 cells
for (i = 0; i < 64; i++) {
// CHANGE HERE - print a new line after every 8 entries
if (i != 0 && i % 8 == 0)
{
printf("\n");
}
printf("%s", a[i]);
}
printf("\n");
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.