• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

用C语言实现三子棋

c语言 搞代码 4年前 (2022-01-06) 18次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了用C语言实现三子棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了用C语言实现三子棋的具体代码,供大家参考,具体内容如下

三子棋含义:

三子棋是黑白棋的一种。三子棋又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。图例如下:

基本思路:

1.创建用户交互菜单界面

2.初始化棋盘

3.显示棋盘面板(为了不重复显示棋盘,使用清屏操作)

4.用户落子

5.判断胜负

6.电脑随机正确落子

7.判断胜负

(在每次写程序之前,可以向如下图所示,写出思路或伪代码

创建多文件项目:

写代码之前,首先建立三个文件,以方便后序代码更加完整清晰地呈现。

1.创建用户交互菜单界面

 void Meau(){ printf("+------ meau ----------+\n"); printf("|----  1.play  --------|\n"); printf("|----  0.quit  --------|\n"); printf("+----------------------+\n"); }

2.初始化棋盘

使用宏定义,将棋盘中的内容初始化为空。

 static void InitBoard(char board[][COL], int row, int col){ for (int i = 0; i <row; i++){ for (int j = 0; j <col; j++){ board[i][j] = INIT; } } }

3.显示棋盘面板

为了不重复显示棋盘,使用清屏操作,使得每次现实的棋盘只有一张。

通过不断调试,使得最终界面,与预期所需界面一致。

 static void ShowBoard(char board[][COL],int row,int col){ system("cls");//清屏操作 printf("  "); for (int i = 0; i <col; i++){ printf(" %3d", i + 1); } printf("\n----------------\n"); for (int i = 0; i <row; i++){ printf("%-2d", i + 1); for (int j = 0; j <col; j++){ printf("| %c ", board[i][j]); } printf("\n----------------\n"); } }

4.用户落子

落子只能落在为空的位置上,所以在落子前需要判空,若为空,则落子,否则提示重新落子。

 static void PlayerMove(char board[][COL], int row, int col){ int x = 0; int y = 0; while (1){ printf("please enter your postion: "); scanf("%d %d", &x, &y); if (x3 || y3){ printf("Postion Error!"); continue; } if (board[x - 1][y - 1] == INIT){ board[x - 1][y - 1] = WHITE; break; } else{ printf("Postion Is Not Empty!\n"); } } }

5.电脑随机正确落子

使用随机数,在正确位置落子。

 static void ComputerMove(char board[][COL], int row, int col){ while (1){ int x = rand() % row; int y = rand() % col; if (board[x][y] == INIT){ board[x][y] = BLACK; break; } } }

6.判断胜负

 static char IsEnd(char board[][COL], int row, int col){ for (int i = 0; i <row; i++){ if (board[i][0] == board[i][1] && \ board[i][1] == board[i][2] && \ board[i][0] != INIT){ return board[i][0]; } } for (int j = 0; j <col; j++){ if (board[0][j] == board[1][j] && \ board[1][j] == board[2][j] && \ board[0][j] != INIT){ return board[0][j]; } } if (board[0][0] == board[1][1] && \ board[1][1] == board[2][2] && \ board[0][0] != INIT){ return board[0][0]; } if(board[0][2] == board[1][1] && \ board[1][1] == board[2][0] && \ board[1][1] != INIT){ return board[1][1]; } for (int i = 0; i <row; i++){ for (int j = 0; j <col; j++){ if (board[i][j] == INIT); return NEXT; } } return DRAW; }

7.创建Game界面

 void Game() { char board[ROW][COL]; InitBoard(board, ROW, COL); srand((unsigned long)time(NULL)); char result = 0; while (1){ ShowBoard(board, ROW, COL); PlayerMove(board, ROW, COL); result = IsEnd(board, ROW, COL); if (result != NEXT){ break; } ShowBoard(board, ROW, COL); ComputerMove(board, ROW, COL); result = IsEnd(board, ROW, COL); if (result != NEXT){ break; } } ShowBoard(board, ROW, COL); switch (result){ case WHITE: printf("You win!\n"); break; case BLACK: printf("you lose!\n"); break; case DRAW: printf("it ends in a draw\n"); break; defult: printf("bug\n"); break; } }

完整代码

 //main.c文件 #include"game.h" void Meau(){ printf("+------ meau ----------+\n"); printf("|----  1.play  --------|\n"); printf("|----  0.quit  --------|\n"); printf("+----------------------+\n"); } int main(){ int select = 0; int quit = 0; while (!quit) { Meau(); printf("please enter your choose: "); scanf("%d", &select); switch (select) { case 1: Game(); break; case 0: quit = 1; break; defult: printf("Select error!Try again!\n"); break; } } printf("byebye!\n"); system("pause"); return 0; } //game.c 文件 #include"game.h" static void InitBoard(char board[][COL], int row, int col){ for (int i = 0; i <row; i++){ for (int j = 0; j <col; j++){ board[i][j] = INIT; } } } static void ShowBoard(char board[][<p style="color:transparent">来源gao!daima.com搞$代!码网</p>COL],int row,int col){ system("cls"); printf("  "); for (int i = 0; i <col; i++){ printf(" %3d", i + 1); } printf("\n----------------\n"); for (int i = 0; i <row; i++){ printf("%-2d", i + 1); for (int j = 0; j <col; j++){ printf("| %c ", board[i][j]); } printf("\n----------------\n"); } } static char IsEnd(char board[][COL], int row, int col){ for (int i = 0; i <row; i++){ if (board[i][0] == board[i][1] && \ board[i][1] == board[i][2] && \ board[i][0] != INIT){ return board[i][0]; } } for (int j = 0; j <col; j++){ if (board[0][j] == board[1][j] && \ board[1][j] == board[2][j] && \ board[0][j] != INIT){ return board[0][j]; } } if (board[0][0] == board[1][1] && \ board[1][1] == board[2][2] && \ board[0][0] != INIT){ return board[0][0]; } if(board[0][2] == board[1][1] && \ board[1][1] == board[2][0] && \ board[1][1] != INIT){ return board[1][1]; } for (int i = 0; i <row; i++){ for (int j = 0; j <col; j++){ if (board[i][j] == INIT); return NEXT; } } return DRAW; } static void PlayerMove(char board[][COL], int row, int col){ int x = 0; int y = 0; while (1){ printf("please enter your postion: "); scanf("%d %d", &x, &y); if (x3 || y3){ printf("Postion Error!"); continue; } if (board[x - 1][y - 1] == INIT){ board[x - 1][y - 1] = WHITE; break; } else{ printf("Postion Is Not Empty!\n"); } } } static void ComputerMove(char board[][COL], int row, int col){ while (1){ int x = rand() % row; int y = rand() % col; if (board[x][y] == INIT){ board[x][y] = BLACK; break; } } } void Game() { char board[ROW][COL]; InitBoard(board, ROW, COL); srand((unsigned long)time(NULL)); char result = 0; while (1){ ShowBoard(board, ROW, COL); PlayerMove(board, ROW, COL); result = IsEnd(board, ROW, COL); if (result != NEXT){ break; } ShowBoard(board, ROW, COL); ComputerMove(board, ROW, COL); result = IsEnd(board, ROW, COL); if (result != NEXT){ break; } } ShowBoard(board, ROW, COL); switch (result){ case WHITE: printf("You win!\n"); break; case BLACK: printf("you lose!\n"); break; case DRAW: printf("it ends in a draw\n"); break; defult: printf("bug\n"); break; } } //game.h文件 #ifndef __GAME_H__ #define __GAME_H__ #include #include  #include  #include #pragma warning(disable:4996) #define ROW 3 #define COL 3 #define INIT ' ' #define WHITE 'X'//player #define BLACK 'O'//computer #define DRAW 'D' #define NEXT 'N' extern void Game(); #endif

代码结果显示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是用C语言实现三子棋的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:用C语言实现三子棋

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址