C语言如何开发实现井字棋
C语言如何开发实现井字棋
这篇文章主要为大家展示了“C语言如何开发实现井字棋”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言如何开发实现井字棋”这篇文章吧。
总体思路
井字棋棋盘我们总体可以当成一个二维数组来操作,我们分别需要实现初始化二维数组,打印棋盘,玩家下棋,电脑下棋,判断输赢等代码
项目的创建
我们创建了头文件用于放函数的声明,game.c文件放置函数的实现,test.c文件用于测试。
测试结果
电脑获胜:
玩家获胜:
平局:
各函数代码的实现
我们在game.c文件中实现函数功能的代码
初始化二维数组
voidInitBoard(charBoard[ROW][COL],introw,intcol){for(inti=0;i voidDisplayBoard(charBoard[ROW][COL],introw,intcol){for(inti=0;i 这里的棋盘我们只打印了井字的形状,如果为了美观,还可以进行封边,这里就留给朋友们自行实现啦。 voidPlayMove(charBoard[ROW][COL],introw,intcol){while(1){intx=0,y=0;printf("请输入坐标:\n");scanf("%d%d",&x,&y);if(x>=1&&x<=row&&y>=1&&y<=col){if(Board[x-1][y-1]==''){Board[x-1][y-1]='#';break;}elseprintf("该位置已被占,请重新输入:\n");}else{printf("输入错误,请重新输入:\n");}}} 在电脑落子之前,先检测有没有下一步可以直接赢的,若有,则落子在此处,电脑获胜,若没有,再检测玩家下一步是否有机会获胜,若玩家下一步可以直接获胜,那么电脑将抢占这一步。 如果上述两种情况均不存在,当发现(1,1)位置是空时,电脑先下这一步。 其他情况均随意落子。 voidComputerMove(charBoard[ROW][COL],introw,intcol){intx=0,y=0;while(1){if(JudgeComputer(Board,ROW,COL)){for(inti=0;i staticintJudgeComputer(charBoard[ROW][COL],introw,intcol){for(inti=0;i staticintJudgePlayer(charBoard[ROW][COL],introw,intcol){for(inti=0;i charIsWin(charBoard[ROW][COL],introw,intcol)for(inti=0;i staticintIsFull(charBoard[ROW][COL],introw,intcol){for(inti=0;i 我们在game.h头文件中进行函数的声明。 voidmeun();#defineROW3#defineCOL3//游戏主函数voidgame();//初始化二维数组voidInitBoard(charBoard[ROW][COL],introw,intcol);//打印棋盘voidDisplayBoard(charBoard[ROW][COL],introw,intcol);//玩家下棋voidPlayMove(charBoard[ROW][COL],introw,intcol);//电脑下棋voidComputerMove(charBoard[ROW][COL],introw,intcol);//判断赢否charIsWin(charBoard[ROW][COL],introw,intcol);//判断棋盘满了吗//intIsFull(charBoard[ROW][COL],introw,intcol);//判断电脑下一部是否可以直接赢//intJudgeComputer(charBoard[ROW][COL],introw,intcol);//判断玩家下一步是否会赢//intJudgePlayer(charBoard[ROW][COL],introw,intcol); 我们在test.c文件中测试该游戏。 #include"game.h"voidgame(){charret=0;charBoard[ROW][COL]={0};//初始化数组InitBoard(Board,ROW,COL);//打印棋盘printf("棋盘如下:\n");DisplayBoard(Board,ROW,COL);while(1){//玩家下棋printf("玩家落子:\n");PlayMove(Board,ROW,COL);//每下一步打印一次棋盘DisplayBoard(Board,ROW,COL);//每下一步判断一次胜负ret=IsWin(Board,ROW,COL);if(ret!='C'){break;}//电脑下棋printf("电脑落子:\n");ComputerMove(Board,ROW,COL);//每下一步打印一次棋盘DisplayBoard(Board,ROW,COL);ret=IsWin(Board,ROW,COL);if(ret!='C'){break;}}if(ret=='#')printf("玩家获胜\n");elseif(ret=='*')printf("电脑获胜\n");elseif(ret=='o')printf("卧龙凤雏\n");}voidtest(){intinput=0;srand((size_t)time(NULL));do{meun();printf("请选择:>");scanf("%d",&input);switch(input){case1:game();break;case0:printf("游戏结束\n");break;default:printf("输入错误,请重新输入:\n");break;}}while(input);}intmain(){test();return0;} 以上是“C语言如何开发实现井字棋”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!打印棋盘
玩家下棋
电脑下棋
判断电脑是否有位置可以获胜
判断玩家是否有位置获胜
判断输赢
判断和棋
声明代码
测试代码
推荐阅读
-
windows安装touble c
近期有些网友想要了解windows?安装touble的相关情况,小编通过整理给您分享一下。为什么现在还需要TurboC?在当今V...
-
C/C++如何获取CAN信号
C/C++如何获取CAN信号本篇内容主要讲解“C/C++如何获取C...
-
C语言怎么通过二分查找实现猜数字游戏
C语言怎么通过二分查找实现猜数字游戏本文小编为大家详细介绍“C语言...
-
C语言数据结构中的线性表怎么使用
C语言数据结构中的线性表怎么使用这篇文章主要介绍“C语言数据结构中...
-
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
-
C语言与C++中内存管理的方法
C语言与C++中内存管理的方法这篇文章主要介绍了C语言与C++中内...
-
C语言链式队列与循环队列怎么实现
C语言链式队列与循环队列怎么实现这篇文章主要介绍了C语言链式队列与...
-
C语言冒泡排序怎么实现
C语言冒泡排序怎么实现这篇文章主要介绍了C语言冒泡排序怎么实现的相...
-
C语言如何实现斐波那契数列
C语言如何实现斐波那契数列这篇文章主要介绍了C语言如何实现斐波那契...
-
C语言如何实现无符号数和有符号数间的运算
C语言如何实现无符号数和有符号数间的运算本篇内容主要讲解“C语言如...