簡體   English   中英

棋盤在 c

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM