井字棋

代码部分:
#include
#include
#define MAX_SIZE 3
#define TOTAL_CELLS (MAX_SIZE * MAX_SIZE)
int main() {
    // 定义棋盘和计数数组
    char p[MAX_SIZE][MAX_SIZE];
    int k[8] = {0}; // K的计数
    int m[8] = {0}; // B的计数
    int a = 0, b = 0; // 用于记录获胜情况
    // 读取棋盘状态
    for (int i = 0; i < MAX_SIZE; i++) {
        for (int j = 0; j < MAX_SIZE; j++) {
            scanf(" %c", &p[i][j]); // 注意添加空格以跳过空白字符
        }
    }
    // 计算K和B的连线数量
    for (int i = 0; i < MAX_SIZE; i++) {
        for (int j = 0; j < MAX_SIZE; j++) {
            if (p[i][j] == 'K') {
                k[i]++;
                k[j + 3]++;
            }
            if (i == j && p[i][j] == 'K') {
                k[6]++;
            }
            if (i + j == 2 && p[i][j] == 'K') {
                k[7]++;
            }
            if (p[i][j] == 'B') {
                m[i]++;
                m[j + 3]++;
            }
            if (i == j && p[i][j] == 'B') {
                m[6]++;
            }
            if (i + j == 2 && p[i][j] == 'B') {
                m[7]++;
            }
        }
    }

    // 检查是否有获胜者
    for (int i = 0; i < 8; i++) {
        if (k[i] == 3) {
            a++;
        }
        if (m[i] == 3) {
            b++;
        }
    }

    // 输出结果
if (a > 0) {
        printf("KiKi wins!\n");
} else if (b > 0) {
        printf("BoBo wins!\n");
    } else {
        printf("No winner!\n");
    }

    return 0;
}
知识点:
1. **宏定义**:使用 `#define` 来定义常量,例如棋盘的最大尺寸和总单元格数。
2. **数组操作**:使用二维数组来表示棋盘,并使用一维数组来计数。
3. **输入输出**:使用 `scanf` 和 `printf` 函数进行输入输出操作。
4. **循环控制**:使用 `for` 循环来遍历棋盘和计数数组。
5. **条件判断**:使用 `if` 语句来判断棋盘上的字符和计数条件。
难点:
1. **棋盘状态读取**:正确读取棋盘状态,注意 `scanf` 中的空格以跳过空白字符。
2. **连线计数**:正确计算每种连线(横、竖、斜)的数量。
3. **获胜条件判断**:根据连线计数判断是否有获胜者,并正确输出结果。
4. **代码调试**:如果程序输出不正确,需要能够调试并找到逻辑错误。

通过理解和掌握这些知识点和难点,可以更好地编写和理解涉及棋盘游戏逻辑的C语言程序。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务