井字棋
代码部分:
#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语言程序。
#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语言程序。
全部评论
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
点赞 评论 收藏
分享