当前位置:   article > 正文

三子棋c语言代码实现_完成三子棋游戏代码

完成三子棋游戏代码

重拾小时候的美好回忆,用C语言代码完成简单三子棋游戏

一.游戏规则

在一个棋盘上,两方选手对弈,先将三个棋连成一条线的一方获胜(包括斜线)。

二.设计思路

1. 代码布局:分别创立两个源文件和一个头文件 text.c (用于代码测试) game.c(封装该游戏相关函数) game.h(对相关函数的申明),之所以这样是为了增加代码的可读性和逻辑性。

2.封装一个菜单menu()函数,让用户自己选择开始游戏还是退出游戏。

3.封装一个棋盘board()函数,并且能让自定义大小(可通过宏定义简易实现)。

4.封装2个函数分别能让玩家和电脑下棋。(有空位的地方才能下棋,否则出现提示)。

5.封装函数判断谁获胜

6.在text.c中循环和switch语句将game.c中的文件联系起来测试游戏

7.当玩家还想玩时,但棋盘上已经有数据啦,这时候需要一个初始化函数init

三.game.c中各功能代码实现

  1. void player(char arr[row][col], int ROW, int COL)//玩家下棋
  2. {
  3. int i, j;
  4. while (1)
  5. {
  6. printf("玩家下:请输入下棋指标:\n");
  7. scanf("%d,%d",&i,&j);
  8. if (0 < i && i< ROW + 1 && 0 < j && j<COL + 1)//用正常人的思维下棋,而不是用程序员的,不是从0开始
  9. {
  10. if (arr[i - 1][j - 1] == ' ') { arr[i-1][j-1] = '*'; break; }
  11. else printf("位置已经被占用请重新输入");
  12. }
  13. else printf("输入值不在指定范围类,请重新输入");
  14. }board(arr, row, col);//玩家下完棋后再次打印棋盘,能更好的看到下棋·位置
  15. }
  1. void menu()//菜单
  2. {
  3. printf("**********************************\n");
  4. printf("******1.开始游戏 0.退出游戏******\n");
  5. printf("**********************************\n");
  6. printf("请输入你的选择\n");
  7. }
  1. void board(char arr[row][col], int ROW, int COL)//棋盘,row,col为宏定义的值,
  2. {
  3. int a = 0;
  4. for (a; a < ROW; a++)
  5. {
  6. int i = 0;
  7. for (i; i < COL;i++)//通过循环实现棋盘的打印
  8. {
  9. printf(" %c ", arr[a][i]);
  10. if (i < COL - 1)
  11. printf("|");
  12. }
  13. printf("\n");
  14. int b = 0;
  15. if (a < ROW - 1)
  16. {
  17. for (b; b < COL;b++)
  18. {
  19. printf("---");
  20. if(b < COL-1)
  21. printf("|");
  22. }
  23. }printf("\n");
  24. }
  25. }
  1. void windos(char arr[row][col], int ROW, int COL)//电脑下棋
  2. {
  3. int i,j;
  4. srand((unsigned int)time(NULL));//运用时间戳随机下棋
  5. printf("电脑下\n");
  6. while (1)
  7. {
  8. i = rand() % 3;//限定随机数范围
  9. j = rand() % 3;
  10. if (arr[i][j] == ' ') { arr[i][j] = '#'; break; }
  11. }board(arr, row, col);//下完后打印棋盘
  12. }
  1. char judge(char arr[row][col], int ROW, int COL)//通过返回值判断游戏是否结束(三子连一线或无处可下棋)
  2. {
  3. int i,j;
  4. for (i = 0; i < ROW; i++)//计算机不能连续判断
  5. {
  6. if (arr[i][0] == arr[i][1]&& arr[i][1] == arr[i][2] && arr[i][0] != ' ')return arr[i][0];
  7. if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' ')return arr[0][i];
  8. if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')return arr[0][0];
  9. if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')return arr[0][2];
  10. }//游戏结束
  11. for (i = 0; i < ROW; i++)
  12. {
  13. for (j = 0; j < COL; j++)
  14. {
  15. if (arr[i][j] == ' ')return 'c';//说明还没结束,还有位置
  16. }
  17. }return 'd';//平局
  18. }
  1. int vocity(char ret)//对判断函数的返回值判断游戏结果
  2. {
  3. if (ret == '*') { printf("玩家赢\n"); return 0; }
  4. if (ret == '#') { printf("电脑赢\n"); return 0; }
  5. if (ret == 'c') { return 1; }
  6. if (ret == 'd') { printf("平局\n"); return 1; }
  7. }
  1. void init(char arr[row][col], int ROW, int COL)//初始化函数
  2. {
  3. int q,b;
  4. for (q=0; q <ROW; q++)
  5. {
  6. for (b=0; b < COL; b++)
  7. {
  8. arr[q][b]=' ';
  9. }//遍历数组
  10. }
  11. }

四.text.c中基本结构代码实现

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "game.h"
  3. int main()
  4. {
  5. char arr[row][col] = {0};
  6. char ret;
  7. int a,b=1;//定义变量
  8. while (1)//利用循环实现重复选择菜单
  9. {
  10. mean();//调用菜单函数
  11. scanf("%d",&a);//输入选择
  12. if (a == 1)
  13. {
  14. printf("开始游戏\n");
  15. init(arr, row, col);//棋盘初始化
  16. board(arr, row, col);//打印棋盘
  17. while (b)
  18. {
  19. player(arr, row, col);//玩家下
  20. ret =judge(arr, row, col);//判断
  21. b=vocity(ret);//判断赢家,并通过返回值确定游戏是否结束
  22. windos(arr, row, col);
  23. ret = judge(arr, row, col);
  24. b=vocity(ret);
  25. }
  26. }
  27. else if (a == 0)
  28. {
  29. printf("退出游戏");
  30. break;
  31. }
  32. else { printf("请输入正确的选择\n"); }
  33. }
  34. return 0;
  35. }

五.game.h中函数申明 

  1. #pragma once
  2. #define col 3//定义棋盘列大小
  3. #define row 3//定义棋盘行大小
  4. #include <stdio.h>
  5. #include <time.h>
  6. #include <stdlib.h>
  7. void mean();
  8. void init(char arr[row][col], int ROW, int COL );
  9. void board(char arr[row][col], int ROW, int COL);
  10. void player(char arr[row][col], int ROW, int COL);
  11. void windos(char arr[row][col], int ROW,int COL);
  12. char judge(char arr[row][col], int ROW, int COL);
  13. int vocity(char ret);

六.结果展示

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/135253
推荐阅读
相关标签
  

闽ICP备14008679号