资讯专栏INFORMATION COLUMN

C语言小游戏,三子棋游戏(适合初学者练习)

lwx12525 / 3331人阅读

摘要:三子棋代码耗时三天,本人很菜,疯狂不细心写代码真的很累本代码使用编译所以使用了懂得都懂如果使用别的编译器请注意将起改为宏定义行数为为行,为列不会列的英文宏定义列数为也可以改为大棋盘,但要更改游戏机制初始

三子棋代码


耗时三天,本人很菜,疯狂debug
不细心写代码真的很累

**本代码使用vs2019编译
所以使用了scanf_s(懂得都懂)
如果使用别的编译器请注意将起改为scanf

</>复制代码

  1. #include#include#include#define ROW 3//宏定义行数为3 ROW为行,LIE为列(不会列的英文)#define LIE 3//宏定义列数为3,也可以改为大棋盘,但要更改游戏机制void aBoard(char board[ROW][LIE], int row, int lie);//初始化棋子void printBoard(char board[ROW][LIE], int row, int lie);// 打印棋盘void Playergo(char board[ROW][LIE], int row, int lie); //人走void Computergo(char board[ROW][LIE], int row, int lie);//电脑走char ifWin(char board[ROW][LIE], int row, int lie);//判断输赢void menu(void);//菜单void test(void);//void game(void);//核心int main(void){
  2. test();
  3. return 0;}void game(void){
  4. char p = 0;
  5. char board[ROW][LIE] = { 0 };//我也不知道为什么不能用‘ ’;
  6. //初始化棋子为空格
  7. aBoard(board, ROW, LIE);
  8. //打印棋盘
  9. printBoard(board, ROW, LIE);
  10. while (2)//非0的数字就可以
  11. {
  12. //玩家下棋
  13. Playergo(board, ROW, LIE);
  14. printBoard(board, ROW, LIE);
  15. //判断玩家是否胜利
  16. p = ifWin(board, ROW, LIE);
  17. if (p != "C")
  18. {
  19. break;
  20. }
  21. //电脑下棋
  22. Computergo(board, ROW, LIE);
  23. printBoard(board, ROW, LIE);
  24. //判断电脑是否胜利
  25. p = ifWin(board, ROW, LIE);
  26. if (p != "C")
  27. {
  28. break;
  29. }
  30. }
  31. if (p == "*")
  32. {
  33. printf("YOU WIN/n");
  34. printf("/n");
  35. }
  36. else if (p == "#")
  37. {
  38. printf("COMPUTER WIN!/n");
  39. printf("/n");
  40. }}//游戏菜单void menu(void){
  41. printf("-----------------------------------------------/n");
  42. printf("-----------------------------------------------/n");
  43. printf("*****输入1.开始游戏 输入0.退出游戏*****/n");
  44. printf("-----------------------------------------------/n");
  45. printf("-----------------------------------------------/n");}//初始化棋盘void aBoard(char board[ROW][LIE], int row, int lie){
  46. for (int i = 0; i < row; i++)
  47. {
  48. for (int j = 0; j < lie; j++)
  49. {
  50. board[i][j] = " ";
  51. }
  52. }}//打印棋盘void printBoard(char board[ROW][LIE], int row, int lie){
  53. for (int i = 0; i < row; i++)
  54. {
  55. for (int j = 0; j < lie; j++)
  56. {
  57. if (j < lie - 1)
  58. {
  59. printf(" %c |", board[i][j]);
  60. }
  61. else
  62. printf(" %c ", board[i][j]);
  63. }
  64. printf("/n");
  65. if (i < row - 1)
  66. {
  67. for (int k = 0; k < lie; k++)
  68. {
  69. if (k < lie - 1)
  70. {
  71. printf("---|");
  72. }
  73. else
  74. {
  75. printf("---");
  76. }
  77. }
  78. }
  79. printf("/n");
  80. }}//玩家输入void Playergo(char board[ROW][LIE], int row, int lie){
  81. int x = 0;
  82. int y = 0;
  83. while (1)//同上
  84. {
  85. printf("系统提示:请输入您要下的坐标");
  86. printf("坐标之间用空格隔开");
  87. scanf_s("%d%d", &x, &y);
  88. printf("/n");
  89. //判断xy是否合法,一个是是否超出,一个是是否被占用
  90. if (x > 0 && x < row + 1 && y>0 && y < lie + 1)
  91. {
  92. if (board[x - 1][y - 1] == " ")
  93. {
  94. board[x - 1][y - 1] = "*";
  95. break;
  96. }
  97. else
  98. {
  99. printf("坐标被占用,请重新输入/n");
  100. printf("/n");
  101. }
  102. }
  103. else
  104. {
  105. printf("超出坐标范围,输入的横纵都坐标为1到3;/n/n");
  106. }
  107. }}void Computergo(char board[ROW][LIE], int row, int lie){
  108. int x = 0;
  109. int y = 0;
  110. printf("本电脑走的飞快/n/n");
  111. while (1)
  112. {
  113. x = rand() % row;
  114. y = rand() % lie;
  115. if (board[x][y] == " ")
  116. {
  117. board[x][y] = "#";
  118. break;
  119. }
  120. }}//判断胜负char ifWin(char board[ROW][LIE], int row, int lie){
  121. int i = 0;
  122. //判断行
  123. for (i = 0; i < row; i++)
  124. {
  125. if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != " ")
  126. {
  127. return board[i][1];
  128. }
  129. }
  130. //判断列
  131. for (i = 0; i < lie; i++)
  132. {
  133. if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != " ")
  134. {
  135. return board[1][i];
  136. }
  137. }
  138. //判断对角线
  139. if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != " ")
  140. {
  141. return board[1][1];
  142. }
  143. if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != " ")
  144. {
  145. return board[1][1];
  146. }
  147. return "C";}void test(void){
  148. srand((unsigned int)time(NULL));
  149. int input = 0;
  150. do
  151. {
  152. menu();
  153. printf("/n");
  154. printf("系统提示:请选择:>>>");
  155. scanf_s("%d", &input);
  156. printf("/n");
  157. switch (input)
  158. {
  159. case 1:
  160. game();
  161. break;
  162. case 0:
  163. printf("游戏结束/n");
  164. break;
  165. default:
  166. printf("非法输入,请重新输入/n");
  167. break;
  168. }
  169. } while (input);}

**以下就是游戏进行的过程
本人实力有限,游戏体验可能不太好
**


各位有什么优化游戏的建议可以指出

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122564.html

相关文章

  • 三子(井字)】如何用C语言实现

    摘要:三子棋目录一问题介绍三子棋,在民间又叫井字棋。因为人们在游玩时常常不画棋盘的边框,正如汉字中的井字,多称为井字棋。 三子棋 目录 一、问题介绍         三子棋,在民间又叫井字棋。因为人们在游玩时常常不画棋盘的边框,正如汉字中的井字,多称为井字棋。 三子棋的游戏规则十分的简单: ...

    jsbintask 评论0 收藏0
  • C语言实现三子

    摘要:文章目录三子棋的设置的内容设置的设置棋盘的内容棋盘以及棋盘的初始化打印棋盘下棋步骤玩家下棋电脑下棋判断是否胜利三子棋三子棋的规则是在的棋盘里,双方轮流下子以和表示,先将个子连成一条线横竖斜都可以的一方获胜下面是三子棋语 ...

    vspiders 评论0 收藏0
  • C语言实现入门级游戏——三子(万字长篇)

    摘要:今天博主将为大家带来语言入门级小游戏三子棋井字棋的详细介绍,希望这篇文章对大家能有帮助。在这里,我们使用函数来实现这一功能。        今天博主将为大家带来C语言入门级小游戏——三子棋(井字棋)的详细介绍,希望这篇文章对大家能有帮助 。       在编程的学习过程中,编写一些中这样...

    meteor199 评论0 收藏0
  • C语言入门》三子C语言实现(详细版)

    摘要:简单介绍了三子棋原理后接下来为大家讲解分步目标及代码如何实现。电脑下棋我们实现了玩家和电脑的下棋后,我们需要编写一个函数来判断双方的输赢。我们使用函数来实现这一目标。 目录 1.三子棋原理 2.分块代码实现 3.总结 1.首先向大家介绍一下三子棋的原理 首先我们需要有一个棋盘,初始时棋...

    妤锋シ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<