6. 完整代码
这里我们的代码已经写完了,这是完整版的参考代码:
函数声明和头文件包括自定义常量标识符:
//game.h #define ROW 3 #define COL 3 #include <stdio.h> #include <time.h> #include <stdlib.h> void chessboard(char arr[ROW][COL], int row, int col);//初始化棋盘 void print_chessboard(char arr[ROW][COL], int row, int col);//打印棋盘 void player(char arr[ROW][COL], int row, int col);//玩家走 void computer(char arr[ROW][COL], int row, int col);//电脑走 char verdict(char arr[ROW][COL], int row, int col);//判断输赢
main主体加游戏菜单:
//test.c文件 #include "game.h" void menu() { printf("************************\n"); printf("******1.三子棋游戏******\n"); printf("******0.游戏结束 ******\n"); printf("************************\n"); } void game() { char arr[ROW][COL];//棋盘 char c; chessboard(arr,ROW, COL);//初始化棋盘 print_chessboard(arr, ROW, COL);//打印棋盘 while (1) { player(arr, ROW, COL);//玩家走 print_chessboard(arr, ROW, COL);//打印棋盘 c = verdict(arr, ROW, COL);//判断玩家输赢 if (c == '*') { printf("玩家赢了\n"); break; } if (c == 'C') { printf("平局\n"); break; } computer(arr, ROW, COL);//电脑走 print_chessboard(arr, ROW, COL);//打印棋盘 c = verdict(arr, ROW, COL);//判断电脑输赢 if (c == '#') { printf("电脑赢了\n"); break; } if (c == 'C') { printf("平局\n"); break; } } } int main() { int option = 0; srand((unsigned int)time(NULL));//随机数的起点 do { menu(); scanf("%d", &option); if (option == 1) { printf("游戏开始\n"); game(); } else if (option == 0) { printf("游戏结束\n"); break; } else { printf("选择错误,请重新选择\n"); } } while (1); return 0; }
游戏实现的主要部分:
//game.c文件 #include "game.h" int dogfall(char arr[ROW][COL], int row, int col)//判断是否平局的函数 { int i, j; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (arr[i][j] == ' ')//判断棋盘是否还有空位 return 0;//如果有返回0 } } return 1;//没有返回1 } void chessboard(char arr[ROW][COL], int row, int col) { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { arr[i][j] = ' ';//棋盘初始化 } } } void print_chessboard(char arr[ROW][COL], int row, int col) { int i = 0; int j = 0; int a = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { printf(" %c ", arr[i][j]);//打印空白字符 if (j < col - 1) printf("|");//打印分割线,列 } printf("\n");//换行 if (i < row - 1) { for (a = 0; a < col; a++) { printf("---");//打印分割线,行 if (a < col - 1) printf("|");//打印分割线,列 } } printf("\n");//换行 } } void player(char arr[ROW][COL], int row, int col) { int i, j; printf("玩家下棋\n"); while (1) { printf("请输入坐标>"); scanf("%d %d", &i, &j); if (i >= 1 && i <= row && j >= 1 && j <= col)//判断是否坐标合法 { if (arr[i - 1][j - 1] == ' ')//判断位置是否有棋子 { arr[i - 1][j - 1] = '*';//玩家落子 break; } else { printf("坐标已被占用,请重新输入\n"); } } else { printf("坐标非法请重新输入\n"); } } } void computer(char arr[ROW][COL], int row, int col) { printf("电脑下棋\n"); while (1) { int x = rand() % row;//随机生成1到3的数 int y = rand() % col; if (arr[x][y] == ' ')//判断位置是否有棋子 { arr[x][y] = '#';//电脑落子 break; } } } char verdict(char arr[ROW][COL], int row, int col) { int i; for (i = 0; i < row; i++) { if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ')//判断一行是否有三个棋子相等 { return arr[i][1];//返回arr[i][1]这个元素 } } for (i = 0; i < col; i++) { if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' ')//判断一列是否有三个棋子相等 { return arr[1][i];//返回arr[1][i]这个元素 } } if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')//判断X这种位置是否有三个棋子相同 { return arr[1][1];//这里返回的是arr[1][1]这个元素 } if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')//同上 { return arr[1][1]; } int b = dogfall(arr, row, col); if (b == 1)//判断是否相等 return 'C'; }
我们来运行一下代码。
这是代码运行结果:
代码运行没问题。
到这里我们C语言实现的三子棋就完成了。
结束语
这些代码是我自己一点一点写出来的,一边写代码一边写博客,这样能写出来更多的细节,麻烦家人们三连,请大佬们纠正错误和指点不足。
谢谢!!!