利用C语言编写一个简单三子棋游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
用C语言实现简单的控制台三子棋游戏
首先,确定一局游戏的基本流程:
1,创建棋盘并初始化。(将棋盘看作一个二维数组)
2,打印显示出棋盘。
3,玩家落子(玩家通过输入行列坐标的方式来落子)。
4,判定胜负关系。(如果玩家胜出,则退出游戏)。
5,电脑落子(随机位置落子)。
6,判定胜负关系(如果电脑胜出,退出游戏。否,则回到步骤2继续执行)。
<强>第一步>强,此处通过构造菜单()函数搭建一个简单的交互菜单和玩家交互,用来判断是否开始进行一局游戏。
#定义_CRT_SECURE_NO_WARNINGS # include# include int菜单(){ printf (“====================\ n"); printf(“1。开始游戏\ n"); printf(“0。结束游戏\ n"); printf (“====================\ n"); printf (“请输入您的选择:“); int选择=0; scanf (“% d",,选择); 返回选择; } int main () { 而(1){ int=选择菜单(); 如果选择==1){//游戏();//此处调用了一个游戏函数。 } else if(选择==0){ printf(“再见! \ n"); 打破; } } 系统(“pause"); 返回0; }
<强>第二步>强,对第一步中调用的游戏()函数进行构造.game()函数为核心功能函数,其主要任务是完成基本流程。
1。构建初始化init()函数。初始化一个3 * 3的二维数组,将它当做棋盘,并将数组元素全部初始化为0。
空白init (char棋盘[MAX_ROW] [MAX_COL]) {//把数组中的每个元素都设=初始化为“空格”。 for (int行=0;行& lt;MAX_ROW;行+ +){ for (int坳=0;坳& lt;MAX_COL;坳+ +){ 棋盘(行)(col)=& # 39;& # 39;; } } }
2。构建棋盘打印printChessBoard()函数。运用的循环打印出3 * 3的棋盘。
空白printChessBoard (char棋盘[MAX_ROW] [MAX_COL]) {//把棋盘打印出来。 printf (“+ - - - + - - - + - - - + \ n"); for (int行=0;行& lt;MAX_ROW;行+ +){ printf (“| % c | % c | % c | \ n",棋盘(行)[0], 棋盘(行)[1],棋盘(行)[2]); printf (“+ - - - + - - - + - - - + \ n"); } }
3。构建玩家落子playerMove()函数,玩家通过输入行列坐标的方式来落子。此过程中需要判断:1。玩家输入的行列坐标是否在棋盘的合理位置。2。玩家输入的行列坐标位置是否已经有棋子。
空白playerMove (char棋盘[MAX_ROW] [MAX_COL]) {//让玩家落子。通过控制台输入行列坐标的方式来实现。 而(1){ printf (“请玩家输入坐标(行坳):“); int行=0; int坳=0; scanf (“% d % d",,行,和坳);//校验玩家输入的坐标是否合法(是否在棋盘合理范围内)。 如果行& lt;0 | |行祝辞=MAX_ROW | |坳& lt;0 | |坳祝辞=MAX_COL) {//若出现非法情况,此时应该让玩家重新输入。 printf(“您的坐标不在合法范围(0,2)内\ n"); 继续; }//校验玩家落子位置是否已经有子了。 如果(棋盘(行)(col) !=& # 39;& # 39;){ printf(“您的坐标位置已经有子了! \ n"); 继续; }//真正落子。用“X”表示玩家落子。 棋盘(行)(col)=& # 39; x # 39;; 打破; } }
4。构建一个computerMove()函数来控制电脑落子。通过电脑产生一系列随机数来控制棋子落在棋盘坐标范围内。
空白computerMove (char棋盘[MAX_ROW] [MAX_COL]) {//电脑落子,让电脑随机产生一组行列坐标。 而(1){ int行=rand () % MAX_ROW; int坳=rand () % MAX_COL; 如果(棋盘(行)(col) !=& # 39;& # 39;){//需要保证随机数不能是已经有棋子的位置。 继续; } 棋盘(行)(col)=& # 39; o # 39;; 打破; } }
在该函数模块中,电脑落子随机位置的生成通过rand()函数控制,需要注意的是,我们需要通过设置随机种子来避免“伪随机”的出现。
将srand ((unsigned int)时间(0));//以当前时间戳作为随机种子。
5。构建isWin()函数判断是否胜利。此处人为约定该函数的返回结果的含义:“x # 39;表示玩家获胜。”o # 39;表示电脑获胜。& # 39;& # 39;表示胜负未分。提问# 39;表示和棋。
char isWin (char棋盘[MAX_ROW] [MAX_COL]) {//判定所有的行。 for (int行=0;行& lt;MAX_ROW;行+ +){ 如果(棋盘(行)[0]!=& # 39;& # 39; ,,棋盘(行)[0]==棋盘(行)[1] ,,棋盘(行)[0]==棋盘(行)[2]){ 返回棋盘(行)[0]; } }//判定所有的列。 for (int坳=0;坳& lt;MAX_COL;坳+ +){ 如果(棋盘[0](col) !=& # 39;& # 39; ,,棋盘[0](col)==棋盘[1](col) ,,棋盘[0](col)==棋盘[2](col)) { 返回棋盘[0](col); } }//判定两个对角线。 如果(棋盘[0][0]!=& # 39;& # 39; ,,棋盘[0][0]==棋盘[1][1] ,,棋盘[0][0]==棋盘[2][2]){ 返回棋盘[0][0]; } 如果(棋盘[2][0]!=& # 39;& # 39; ,,棋盘[2][0]==棋盘[1][1] ,,棋盘[2][0]==棋盘[0][2]){ 返回棋盘[2][0]; }//判定是否和棋。看棋盘中是否有剩余空间。//调用了isFull函数。 如果(isFull(棋盘)){ 返回& # 39;提问# 39;; } 返回& # 39;& # 39;; }利用C语言编写一个简单三子棋游戏