目录
🌞哈喽,大家好丫,你们的小郭子又来啦 ~
话不多说,直接上干货,嘻嘻嘻 ~



-
- #define _CRT_SECURE_NO_WARNINGS
- #include "game.h"
- void play_game()
- {
- char arr[ROW][COL];
- init_board(arr, ROW, COL, ' ');
- display_board(arr, ROW, COL);
- printf("******游戏开始*******\n\n\n");
- while (1)
- {
- int n = 0;
- printf("电脑下棋: \n");
- set_window(arr, ROW, COL);
- display_board(arr, ROW, COL);
- n = judge(arr, ROW, COL);
- if (n == 0)
- {
- printf("电脑获胜\n");
- break;
- }
- else if (n == 1)
- {
- printf("玩家获胜\n");
- break;
- }
- else if (n == 2)
- {
- printf("平局\n");
- break;
- }
- printf("玩家下棋: ");
- set_player(arr, ROW, COL);
- display_board(arr, ROW, COL);
- n = judge(arr, ROW, COL);
- if (n == 0)
- {
- printf("电脑获胜\n");
- break;
- }
- else if (n == 1)
- {
- printf("玩家获胜\n");
- break;
- }
- else if (n == 2)
- {
- printf("平局\n");
- break;
- }
- printf("\n");
- }
- display_board(arr, ROW, COL);
- }
- void menu()
- {
- printf("*************************\n");
- printf("****1 start,0 exit*****\n");
- printf("*************************\n");
- }
- void test()
- {
- srand((unsigned int)time(NULL));
- int input = 0;
- do
- {
- menu();
- printf("请输入:> ");
- scanf("%d", &input);
- switch (input)
- {
- case 0:
- printf("退出游戏\n");
- break;
- case 1:
- //游戏入口
- play_game();
- break;
- default:
- printf("输入错误,请重新输入:>");
- }
- } while (input);
- }
- int main()
- {
- //程序测试入口
- test();
- return 0;
- }
- #define _CRT_SECURE_NO_WARNINGS
- #include "game.h"
-
- //初始化棋盘
- void init_board(char arr[ROW][COL], int row, int col, char set)
- {
- int i = 0;
- int j = 0;
- for (i = 0; i < row; i++)
- {
- for (j = 0; j < col; j++)
- {
- arr[i][j] = set;
- }
- }
- }
- //打印棋盘
- void display_board(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++)
- {
- if (i < col - 1 && j < col - 1)
- {
- printf(" %c |", arr[i][j]);
- }
- else if (i < col - 1 && j == col - 1)
- {
- printf(" %c ", arr[i][j]);
- }
- else if (i == col - 1 && j < col - 1)
- {
- printf(" %c |", arr[i][j]);
- }
- else
- printf(" %c ", arr[i][j]);
- }
- printf("\n");
- if (i
-1)
- printf("-----------\n");
- }
- }
- //判断棋盘是否已满
- int full_judge(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++)
- {
- if (arr[i][j] == ' ')
- return 1;
- }
- }
- return 0;
- }
- void set_window(char arr[ROW][COL], int row, int col)
- {
- //这里用循环的话,循环条件该怎么设置。
- while (1)
- {
- int x = rand() % row;
- int y = rand() % col;
- if (arr[x][y] == ' ')
- {
- arr[x][y] = '*';
- break;
- }
- }
- }
- void set_player(char arr[ROW][COL], int row, int col)
- {
- while (1)
- {
- int m = 0;
- int n = 0;
- printf("请输入落子坐标:>\n");
- scanf("%d %d", &m, &n);
- if ((0 <= m && m < row) && (0 <= n && n < col))
- {
- if (arr[m][n] == ' ')
- {
- arr[m][n] = '#';
- break;
- }
- else
- {
- printf("输入坐标已有棋子,请重新输入\n");
- }
- }
- else
- printf("非法输入,请重新输入\n");
- }
- }
- int judge(char arr[ROW][COL], int row, int col)
- {
- int i = 0;
- //判断行是否存在输赢
- for (i = 0; i < row; i++)
- {
- if ((arr[i][0]=='*') && (arr[i][1] =='*')&& (arr[i][2] == '*'))
- {
- return 0;//电脑获胜
- }
- else if ((arr[i][0] == '#') && (arr[i][1] == '#') && (arr[i][2] == '#'))
- {
- return 1;//玩家获胜
- }
-
- }
- //判断列是否存在输赢
- for (i = 0; i < col; i++)
- {
- if ((arr[0][i] == '*') && (arr[1][i] == '*') && (arr[2][i] == '*'))
- {
- return 0;
- }
- else if ((arr[0][i] == '#') && (arr[1][i] == '#') && (arr[2][i] == '#'))
- {
- return 1;
- }
- }
- //判断对角线是否存在输赢
- if (((arr[0][0]=='*') && (arr[1][1]=='*') && (arr[2][2] == '*') )
- || ((arr[0][2]=='*') && (arr[1][1]=='*') && (arr[2][0] == '*')))
- return 0;
- else if (((arr[0][0] == '#') && (arr[1][1] == '#') && (arr[2][2] == '#'))
- || ((arr[0][2] == '#') && (arr[1][1] == '#') && (arr[2][0] == '#')))
- return 1;
- else
- {
- int start = 0;
- start = full_judge(arr, row, col);
- if (start == 0)
- {
- return 2;//表示棋盘已满(平局)
- }
- else
- return 3;//还未分出胜负继续下旗
- }
- }
- #include
- #include
- #include
-
- //棋盘大小
- #define ROW 3
- #define COL 3
-
-
- //函数声明
- //初始化棋盘
- void init_board(char arr[ROW][COL], int row, int col, char set);
- //打印棋盘
- void display_board(char arr[ROW][COL], int row, int col);
- //电脑下棋
- void set_window(char arr[ROW][COL], int row, int col);
- //玩家下棋
- void set_player(char arr[ROW][COL], int row, int col);
- //判断输赢
- int judge(char arr[ROW][COL], int row, int col);
- //判断棋盘是否已满
- int full_judge(char arr[ROW][COL], int row, int col);

主函数的作用是实现进行游戏和退出游戏的功能,可以创建一个无限循环,把判断条件给玩家输入,当判断条件为1时进行游戏,为0时退出程序,当游戏结束时可以再次弹出菜单进行选择实现循环。

利用双重循环直接初始化棋盘


实际上棋盘就是个3*3的数组,我们可以根据二维数组的下标进行落子。玩家需要手动输入坐标,电脑则利用生成随机数的模输入坐标实现落子。还需判断落子点的棋盘是否为空,可以用if来实现判断功能。

既棋盘下满又无人胜利的时候为平局,用if判断棋盘是否存在空来定是否下满棋盘。

赢的情况分三种,对角线、行、列三者之一有三个相同的棋子。

利用函数的返回值来判断输赢(可以使用胜利棋子的样式做为返回值,这样子就不需要重新判断输赢对

好啦,今天的分享到这里就结束啦 ~🌞🌞
觉得我分享的文章不错的话,可以关注一下哦,嘻嘻嘻🌞🌞


