项目的创建:
test.c:用于代码的测试;
game.h:用于宏定义,头文件,和函数声明;
game.c:用于函数功能的实现;
(1)菜单的实现:
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() { printf("***************************************\n"); printf("*********1.PLAY 0.EXIT *********\n"); printf("***************************************\n"); printf("***************************************\n"); } int main() { int input = 0; do { menu(); srand((unsigned int)time(NULL)); printf("请选择:>"); scanf_s("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏退出!"); break; default: printf("输入错误,请重新输入!"); break; } } while (input); return 0; }
使用do - while 和 switch语句实现一个简单的菜单显示;
效果如下:
(2)game函数的实现:
1.棋盘的打印:
代码:
//打印棋盘 void display(char arr[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf(" %c ", arr[i][j]); if (j < col - 1) printf("|"); } printf("\n"); if (i < row - 1) { for (int j = 0; j < col; j++) { printf("---"); if (j < col - 1) printf("|"); } printf("\n"); } } }
运行效果:
2.玩家下棋:
代码:
首先判定x y的合法性,和坐标是否有被落子,如果均符合要求 ,玩家就落子,否则重新输入坐标。
//玩家下棋 void player(char arr[ROW][COL]) { int x = 0, y = 0; while (1) { printf("输入坐标:>"); scanf_s("%d %d", &x, &y); if (x <= ROW && y <= COL && x > 0 && y > 0 && arr[x - 1][y - 1] == ' ') { arr[x - 1][y - 1] = '*'; break; } else { printf("输入错误,请重新输入:\n"); } } }
运行效果:
3.电脑下棋
代码:
使用随机数生成函数生成电脑的即将要落子的坐标;
//电脑下棋 void computer(char arr[ROW][COL]) { while (1) { int x = rand() % 3; int y = rand() % 3; if (arr[x][y] == ' ' && arr[x][y] != '*') { arr[x][y] = '#'; break; } } }
运行效果:
4.判断胜负:
代码:
其中要对每一行,每一列,斜线进行判断,是玩家赢还是电脑赢,如果棋子落满都没有分出胜负就判断为平局;
//判断输赢 int dgame(char arr[ROW][COL])//和局 { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { if (arr[i][j] == ' ') return 0; } } return 1; } int judge(char arr[ROW][COL]) { //判断行 for (int i = 0; i < ROW; i++) { if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '*') { printf("玩家赢!\n"); return 1; break; } if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '#') { printf("电脑赢!\n"); return 1; break; } } //判断列 for (int i = 0; i < COL; i++) { if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '*') { printf("玩家赢!\n"); return 1; break; } if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '#') { printf("电脑赢!\n"); return 1; break; } } //判断斜线 if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) { if (arr[1][1] == '#') { printf("电脑赢!\n"); return 1; } else if (arr[1][1] == '*') { printf("玩家赢!\n"); return 1; } } else if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]) { if (arr[1][1] == '#') { printf("电脑赢!\n"); return 1; } else if (arr[1][1] == '*') { printf("玩家赢!\n"); return 1; } } else if (1 == dgame(arr)) { printf("和局 \n"); return 1; } return 0; }
运行效果:
电脑赢:
玩家赢:
以上就是三子棋的基本实现了,如果帮到你请你带那个赞吧👍