怎样用C语言实现一个三子棋的游戏? ╰半夏微凉° 2022-11-21 11:28 136阅读 0赞 ![在这里插入图片描述][20210317162002536.png] # 三子棋游戏 # 像这种游戏,我们如果要写一个,最开始,我们就是应该把我们的思路理顺,写出一个最基本的步骤来,以便于让我们一步一步将这个代码进行编写. **思路:** 1.首先我们应该创建一个棋盘并对其进行初始化(运用二维数组) 2.我们把棋盘打印出来,让玩家能够看见 3.玩家先落子(这里我们让玩家输入二维数组的坐标进行填充) 4.判断胜负(因为当玩家如果连成一条线了,棋盘还没有满,我们就应该马上让系统结束游戏) 5.电脑落子(让电脑运用随机函数在棋盘内随机找个位置下棋) 6.判断胜负(最终结束游戏,并判断胜负) 如下面例题: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> //定义随机函数 #define MAX_ROW 3 //定义两个宏,方便后面修改数据 #define MAX_COL 3 //将棋盘进行初始化 void init(char chessBoard[MAX_ROW][MAX_COL]){ //初始化用两个for语句嵌套 for (int row = 0; row < MAX_ROW; row++){ for (int col = 0; col < MAX_COL; col++){ chessBoard[row][col] = ' '; //将里面的值全部转换为空格 } } } //将棋盘打印出来 void printChessBoard(char chessBoard[MAX_ROW][MAX_COL]){ //打印出棋盘 for (int row = 0; row < MAX_ROW; row++){ for (int col = 0; col < MAX_COL; col++){ printf("%c", chessBoard[row][col]); //注意这里是字符型 } printf("\n"); } printf("--------------\n"); //这里是创建一个棋盘的边界,在玩家面前能显示出来,不然就是一些空格,什么都看不到 for (int row = 0; row < MAX_ROW; row++){ printf("| %c | %c | %c |\n ", chessBoard[row][0], chessBoard[row][1], chessBoard[row][2]); printf("--------------\n"); } } //玩家下棋进行移动 void playerMove(char chessBoard[MAX_ROW][MAX_COL]){ //玩家下棋 while (1){ printf("请玩家输入一个坐标(row col):"); int row = 0; int col = 0; scanf("%d %d", &row, &col); //定义加赋予地址 if (row < 0 || row >= MAX_ROW //判断是否在合法区域 || col < 0 || col >= MAX_COL){ printf("您输入的坐标不再合法范围[0,2]内"); continue; } if (chessBoard[row][col] != ' '){ //判断是否所在地已经被占据 printf("您输入的位置已经有子了!\n"); continue; } chessBoard[row][col] = 'x'; //如果没有上述情况,则正确下棋 break; } } //电脑下棋进行移动 void computerMove(char chessBoard[MAX_ROW][MAX_COL]){ //电脑下棋 while (1){ int row = rand() % MAX_ROW; //将电脑输入随机值的区域明确化 int col = rand() % MAX_COL; if (chessBoard[row][col] != ' '){ continue; } chessBoard[row][col] = 'o'; break; } } //查看棋子是否充满整个棋盘 int isFull(char chessBoard[MAX_ROW][MAX_COL]){ //检查棋盘是否已经满了 for (int row = 0; row < MAX_ROW; row++){ //;两层for循环进行嵌套 for (int col = 0; col < MAX_COL; col++){ if (chessBoard[row][col] == ' '){ return 0; } } } return 1; } //检查是否胜利 char isWin(char chessBoard[MAX_ROW][MAX_COL]) { //这是一个判断函数判断输赢 for (int row = 0; row < MAX_ROW; row++) { //判断行是否一致 if (chessBoard[row][0] != ' ' && chessBoard[row][0] == chessBoard[row][1] && chessBoard[row][0] == chessBoard[row][2]) { return chessBoard[row][0]; } } for (int col = 0; col < MAX_COL; col++) { //判断列是否一致 if (chessBoard[0][col] != ' ' && chessBoard[0][col] == chessBoard[1][col] && chessBoard[0][col] == chessBoard[2][col]) { return chessBoard[0][col]; } } if (chessBoard[0][0] != ' ' //这两个if语句用来判断对角线是否一致 && chessBoard[0][0] == chessBoard[1][1] && chessBoard[0][0] == chessBoard[2][2]) { return chessBoard[0][0]; } if (chessBoard[2][0] != ' ' && chessBoard[2][0] == chessBoard[1][1] && chessBoard[2][0] == chessBoard[0][2]) { return chessBoard[2][0]; } if (isFull(chessBoard)) { //这里是调用函数isFull看棋盘是否已经满了 return 'q'; } return ' '; } // 一局游戏的基本流程 // 1. 创建棋盘并初始化 // 2. 打印棋盘 // 3. 玩家落子(玩家输入行列坐标的方式来落子) // 4. 判定胜负关系 // 5. 电脑落子(随机位置落子) // 6. 判定胜负关系 void game(){ //这里是定义的game()函数 char chessBoard[MAX_ROW][MAX_COL] = { 0 }; //创建一个二维的字符型数组 init(chessBoard); //对数组进行初始化 char winner = ' '; while (1){ //所有的语句都在一个while循环里面,可以一直循环,直到出现结果 printChessBoard(chessBoard); //1.打印棋盘 playerMove(chessBoard); //2.玩家先下棋 winner = isWin(chessBoard); //3.判断胜负 if (winner != ' '){ break; } computerMove(chessBoard); //4.电脑下棋 winner = isWin(chessBoard); //5.判断胜负 if (winner != ' '){ break; } } //跳出循环 printChessBoard(chessBoard); //调用了一个检查函数看是哪个连成了一条线 if (winner == 'x'){ printf("恭喜您赢了!\n"); } else if (winner == 'o'){ printf("很遗憾,您连机器人都下不过!\n"); } else{ printf("很遗憾,平局!\n"); } } int menu(){ //一个简单的菜单,用来让玩家看到 printf("=========================\n"); printf("1.开始游戏\n"); printf("0.结束游戏\n"); printf("=========================\n"); printf("请输入你的选择:"); int choice = 0; scanf("%d", &choice); return choice; } int main(){ //主函数 srand((unsigned int)time(0)); //这里是种子函数,是对前面那个调用随机函数使它产生一个随机函数,用来以假乱真 while (1){ int choice = menu(); //创建一个交互式菜单 if (choice == 1){ game(); //这里是创建一个game()函数,是核心 } else if (choice == 0){ printf("see you !\n"); break; } } system("pause"); return 0; } 写完这个题目,我发现还是首先要建立起一个明确的框架来,然后再根据这个框架进行一个代码的编写,像这种题目看起来一堆,很难,但是只要你仔细的分析,一步一步的来,就会很简单,主要还是要多敲代码,构架出一个思维来. 我们在这里主要是要学会构建一个先游戏的思路,最重要的就是建立框架,首先想清楚有几个接口,然后再分步骤进行实现!加油! [20210317162002536.png]: /images/20221120/e526888ae3b74be6a2b381bafe121f2e.png
还没有评论,来说两句吧...