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

C语言实现简单三子棋小游戏

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

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

三子棋介绍

三子棋,民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。如果两个人都掌握了技巧,那么一般来说就是平棋。一般来说,下在中间最有利,下在角上次之,下在边上再次之。最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了。

描述

使用C语言来编写一个简单的三子棋游戏

基本流程

1、显示菜单

 void Menu() { printf("*******************************\n"); printf("**********0、exit**************\n"); printf("**********1、play**************\n"); printf("*******************************\n"); }

输入“0”退出游戏,输入“1”开始游戏。在这里我们先简单定义一下Game()函数(后面会进行详细的定义与声明),在调用Menu()函数时,我们需要用到do……(while)循环以及switch循环,代码如下:

 int main() { int input = 0; do { Menu(); printf("输入你的选择:\n"); scanf("%d", &input); switch (input) { case 1: Game(); break; case 0: printf("退出游戏\n"); break; default: break; } } while (input != 0); return 0; }

2、棋盘初始化

三子棋棋盘分三行三列,我们首先需要定义两个变量来确定我们的行和列,使用#define来固定我们的行和列有一个好处,如果之后我们需要进行五子棋或其他游戏的表格打印时,我们可以直接在此修改,比较方便。

 #define ROW 3 #define COL 3 char board[ROW][COL]={0};//定义数组

我们需要将棋盘所在位置所有元素改为空格,方便我们打印棋盘。有以下两种方式:

(1)使用for循环进行遍历

 void Initboard(char board[ROW][COL], int row, int col) { for (int i = 0; i <row; i++) { for (int j = 0; j <col; j++) { board[i][j] = ' '; } } }

(2)使用memeset()(需要引用头文件)

 void Initboard(char board[ROW][COL], int row, int col) { memset(board, ' ', row*col*sizeof(char)); }

3、打印棋盘

打印的棋盘为三行三列,两条横线,两条竖线,九个空格。代码如下:

 void Showboard(char board[ROW][COL], int row, int col) { printf("======================\n");//上分割线 for (int i = 0; i <row; i++) { for (int j = 0; j <col; j++) { printf(" %c ", board[i][j]);//三个空格 if (j <col></div><p><strong>4、玩家落子</strong></p><p>在玩家输入坐标后,我们需要先判断输入的坐标是否合法,其次该位置是否为空。</p><div class="gaodaimacode"><pre class="prettyprint linenums"> void Playermove(char board[ROW][COL], int row, int col) { while (1) { printf("请输入坐标:\n"); int x = 0; int y = 0; scanf("%d%d", &x, &y); if (x >= 1 && x = 1 && y <= 3) { if (board[x - 1][y - 1] = ' ') { board[x - 1][y - 1] = 'X'; break; } else printf("该位置已有棋子\n"); } else { printf("坐标错误\n"); } } }

5、电脑落子

电脑落子需要产生随机坐标,可使用rand函数,在使用rand函数时,需要调用头文件,同时为了保证坐标的随机性,需要引用以下语句:srand((unsigned)time(NULL))

 void Computermove(char board[ROW][COL], int row, int col) { while (1) { int x = rand() % row;//[0,1,2] int y = rand() % col; if (board[x][y] == ' ') { board[x][y] = 'O'; break; } } }

6、判断是否和棋

判断和棋可以直接写为静态函数(static),因为当前函数只为判断胜负的函数(Iswin)提供帮助。

 static int Isfull(char board[ROW][COL], int row, int col) { for (int i = 0; i <row; i++) { for (int j = 0; j <col; j++) { if (board[i][j] == ' ') return -1;//没有放满 } } return 1;//平局 }

7、判断胜负关系

在该函数中,我们需要调用判断平局的函数(Isfull)如下,胜负关系可以通过返回值来判断,返回’X’时,玩家赢;返回‘O’时,电脑赢;返回‘Q’时,平局。

 char Iswin(char board[ROW][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] != ' ') { return board[i][1]; } } for (int j = 0; j <col; j++) { if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ') { return board[0][j]; } } if (board[1][1] == board[2][2] && board[0][0] == board[1][1] && board[0][0] != ' ') { return board[0][0]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') { return board[1][1]; } if (Isfull(board, row, col) == 1) { return 'Q'; } return ' '; }

8、Game()函数

 void Game() { printf("游戏开始:\n"); char board[ROW][COL] = { 0 }; Initboard(board, ROW, COL); Showboard(board, ROW, COL); char ret; while (1) { Playermove(board, ROW, COL); ret = Iswin(board, ROW, COL); if (ret != ' ') { break; } Showboard(board, ROW, COL); Computermove(board, ROW, COL); ret = Iswin(board, ROW, COL); if (ret != ' ') { break; } Showboard(board, ROW, COL); } if (ret == 'O') printf("电脑赢\n"); else if (ret == 'X') printf("玩家赢\n"); else if (ret == 'Q') printf("平局\n"); }

Game()函数中,我们需要先初始化棋盘,再循环调用玩家落子(Playermove)、电脑落子(Computermove)、打印棋盘(Showboard)函数来确保游戏能够正常进行下去。

9、主函数

 int main() { srand((unsigned)time(NULL)); int input = 0; do { Menu(); printf("输入你的选择:\n"); scanf("%d", &input); switch (input) { case 1: Game(); break; case 0: printf("退出游戏\n"); break; default: break; } } while (input != 0); return 0; }

总代码如下:

 #define _CRT_SECURE_NO_WARNINGS 1 #define ROW 3 #define COL 3 #include #include void Menu() { printf("*******************************\n"); printf("**********0、exit**************\n"); printf("**********1、play**************\n"); printf("*******************************\n"); } void Initboard(char board[ROW][COL], int row, int col) { for (int i = 0; i <row; i++) { for (int j = 0; j <col; j++) { board[i][j] = ' '; } } } void Showboard(char board[ROW][COL], int row, int col) { printf("======================\n"); for (int i = 0; i <row; i++) { for (int j = 0; j <col; j++) { printf(" %c ", board[i][j]);//三个空格 if (j <col>= 1 && x = 1 && y <= 3) { if (board[x - 1][y - 1] = ' ') { board[x - 1][y - 1] = 'X'; break; } else printf("该位置已有棋子\n"); } else { printf("坐标错误\n"); } } } void Computermove(char board[ROW][COL], int row, int col) { while (1) { int x = rand() % row;//[0,1,2] int y = rand() % col; if (board[x][y] == ' ') { board[x][y] = 'O'; break; } } } static int Isfull(char board[ROW][COL], int row, int col) { for (int i = 0; i <row; i++) { for (int j = 0; j <col; j++) { if (board[i][j] == ' ') return -1;//没有放满 } } return 1;//平局 } char Iswin(char board[ROW][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] != ' ') { return board[i][1]; } } for (int j = 0; j <col; j++) { if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ') { return board[0][j]; } } if (board[1][1] == board[2][2] && board[0][0] == board[1][1] && board[0][0] != ' ') { return board[0][0]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') { return board[1][1]; } if (Isfull(board, row, col) == 1) { return 'Q'; } return ' '; } void Game() { printf("游戏开始:\n"); char board[ROW][COL] = { 0 }; Initboard(board, ROW, COL); Showboard(board, ROW, COL); char ret; while (1) { Playermove(board, ROW, COL); ret = Iswin(board, ROW, COL); if (ret != ' ') { break; } Showboard(board, ROW, COL); Computermove(board, ROW, COL); ret = Iswin(board, ROW, COL); if (ret != ' ') { break; } Showboard(board, ROW, COL); } if (ret == 'O') print<strong style="color:transparent">来源gaodai#ma#com搞@@代~&码*网</strong>f("电脑赢\n"); else if (ret == 'X') printf("玩家赢\n"); else if (ret == 'Q') printf("平局\n"); } int main() { srand((unsigned)time(NULL)); int input = 0; do { Menu(); printf("输入你的选择:\n"); scanf("%d", &input); switch (input) { case 1: Game(); break; case 0: printf("退出游戏\n"); break; default: break; } } while (input != 0); return 0; }

文章到此就结束了,希望本篇文章能够对大家有所帮助。若发现不足及错误的地方,欢迎大家批评指正!

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


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

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

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

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

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