经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言简易三子棋
来源:cnblogs  作者:Duikerdd  时间:2018/10/19 9:17:53  对本文有异议

   这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点

  1. 1 #define _CRT_SECURE_NO_WARNINGS
  2. 2 #include<stdio.h>
  3. 3 #include<stdlib.h>
  4. 4 #define ROW 3
  5. 5 #define COL 3
  6. 6 char chess_board[ROW][COL];
  7. 7 int PlayGame(int choice){
  8. 8 printf("************************\n");
  9. 9 printf("* 欢迎来到三子棋游戏 *\n");
  10. 10 printf("* 请您选择 *\n");
  11. 11 printf("* 1.开始游戏 *\n");
  12. 12 printf("* 2.离开游戏 *\n");
  13. 13 printf("************************\n");
  14. 14 while (1){
  15. 15 scanf("%d", &choice);
  16. 16 if (choice == 1)
  17. 17 {
  18. 18 return 1;
  19. 19 break;
  20. 20 }
  21. 21 else if (choice == 2)
  22. 22 {
  23. 23 return 0;
  24. 24 break;
  25. 25 }
  26. 26 else
  27. 27 {
  28. 28 printf("输入非法,请重新输入!");
  29. 29 continue;
  30. 30 }
  31. 31 }
  32. 32 }
  33. 33 int Init(char a[ROW][COL]){
  34. 34 for (int row = 0; row <ROW; row++){
  35. 35 for (int col = 0; col < COL; col++)
  36. 36 {
  37. 37 a[row][col] = ' ';
  38. 38 }
  39. 39 }
  40. 40 return 0;
  41. 41 }
  42. 42 void Print(char a[ROW][COL]){
  43. 43 printf(" \n");
  44. 44 for (int i = 0; i < ROW; i++){
  45. 45 printf(" %c | %c | %c \n", a[i][0], a[i][1], a[i][2]);
  46. 46 if (i != 3){
  47. 47 printf("----|----|----\n");
  48. 48 }
  49. 49 }
  50. 50 }
  51. 51 void PlayerMove(char a[ROW][COL]){
  52. 52 int row = -1;
  53. 53 int col = -1;
  54. 54 while (1){
  55. 55 printf("请您选择落子点坐标:");
  56. 56 scanf("%d %d", &row, &col);
  57. 57 if (row<0 || row>2 || col<0 || col>2){
  58. 58 printf("输入非法,请重新输入!");
  59. 59 continue;
  60. 60 }
  61. 61 else if (a[row][col] == 'x' || a[row][col] == 'o')
  62. 62 {
  63. 63 printf("已有棋子,请重新选择坐标!");
  64. 64 continue;
  65. 65 }
  66. 66 else
  67. 67 {
  68. 68 a[row][col] = 'o';
  69. 69 break;
  70. 70 }
  71. 71
  72. 72 }
  73. 73 }
  74. 74 int IsFull(char a[ROW][COL]){
  75. 75 int sum = 0;
  76. 76 for (int row = 0; row < ROW; row++)
  77. 77 {
  78. 78 for (int col = 0; col < COL; col++)
  79. 79 {
  80. 80 if (a[row][col] != ' ')
  81. 81 {
  82. 82
  83. 83 sum++;
  84. 84 }
  85. 85 }
  86. 86 }
  87. 87 if (sum == 9){
  88. 88 return 1;
  89. 89 }
  90. 90 }
  91. 91 char Checkwinner(char a[ROW][COL]){
  92. 92 //1.判断三子 横 竖 斜
  93. 93 for (int row = 0; row < ROW; row++){
  94. 94 if (a[row][0] == a[row][1] && a[row][0] == a[row][2] && a[row][0] != ' ')
  95. 95 {
  96. 96 return 'p';
  97. 97 }
  98. 98 }
  99. 99 for (int col = 0; col < COL; col++){
  100. 100 if (a[0][col] == a[1][col] && a[0][col] == a[2][col] && a[0][col] != ' ')
  101. 101 {
  102. 102 return 'p';
  103. 103 }
  104. 104 }
  105. 105 if (a[0][0] == a[1][1] && a[0][0] == a[2][2] && a[0][0] != ' ')
  106. 106 {
  107. 107 return 'p';
  108. 108 }
  109. 109 if (a[0][2] == a[1][1] && a[0][2] == a[2][0] && a[0][2] != ' '){
  110. 110 return 'p';
  111. 111 }
  112. 112 }
  113. 113
  114. 114
  115. 115
  116. 116
  117. 117 void ComputeMove(char a[ROW][COL]){
  118. 118 printf("请电脑落子!\n");
  119. 119 while (1){
  120. 120 int col = rand() % 3;
  121. 121 int row = rand() % 3;
  122. 122 if (a[row][col] == ' ')
  123. 123 {
  124. 124 a[row][col] = 'x';
  125. 125 break;
  126. 126 }
  127. 127 else continue;
  128. 128 }
  129. 129 }
  130. 130 void Game(){
  131. 131 Init(chess_board);//2.棋盘初始化
  132. 132 Print(chess_board);//3.打印棋盘
  133. 133 while (1){
  134. 134
  135. 135 PlayerMove(chess_board);//4.用户落子
  136. 136 Print(chess_board);
  137. 137 if (Checkwinner(chess_board) == 'p')
  138. 138 {
  139. 139 printf("玩家获胜!\n");
  140. 140 break;
  141. 141 }
  142. 142 if (IsFull(chess_board) == 1)//2.判断是否和棋
  143. 143 {
  144. 144 printf("平局!");
  145. 145 break;
  146. 146 }
  147. 147 ComputeMove(chess_board);//6.电脑随机落子
  148. 148 Print(chess_board);//3.打印棋盘
  149. 149 if (Checkwinner(chess_board) == 'p')
  150. 150 {
  151. 151 printf("电脑获胜!\n");
  152. 152 break;
  153. 153 }
  154. 154
  155. 155 if (IsFull(chess_board) == 1)//2.判断是否和棋
  156. 156 {
  157. 157 printf("平局!\n");
  158. 158 break;
  159. 159 }
  160. 160 }
  161. 161 }
  162. 162
  163. 163
  164. 164 int main(){
  165. 165 int choice = 0;
  166. 166 if (PlayGame(choice) == 1) { //1.选择是否开始游戏 a)开始 b)离开
  167. 167 Game();
  168. 168
  169. 169 }
  170. 170 system("pause");
  171. 171 }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号