三子棋

  1. #ifndef __GAME_H__  
  2. #define __GAME_H__  
  3.   
  4.   
  5. #define ROWS 3   //行  
  6. #define COLS 3   //列  
  7.   
  8.   
  9. void init_board(char board[ROWS][COLS],int rows,int cols);  
  10. void display_board(char board[ROWS][COLS],int rows,int cols);  
  11. void computer_move(char board[ROWS][COLS],int rows,int cols);  
  12. void player_move(char board[ROWS][COLS],int rows,int cols);  
  13. int check_win(char board[ROWS][COLS],int rows,int cols);  
  14.   
  15.   
  16. #endif//__GAME_H__  
  17.   
  18. game.c  
  19. #define _CRT_SECURE_NO_WARNINGS   
  20.   
  21.   
  22. #include"game.h"  
  23. #include<stdio.h>  
  24. #include<stdlib.h>  
  25. #include<time.h>  
  26.   
  27.   
  28. void init_board(char board[ROWS][COLS],int rows,int cols)  
  29. {  
  30. int i = 0;  
  31. int j = 0;  
  32. for(i = 0;i < rows;i++)  
  33. {  
  34. for(j = 0;j < cols;j++)  
  35. {  
  36. board[i][j] = ' ';  
  37. }  
  38. }  
  39. }  
  40. void display_board(char board[ROWS][COLS],int rows,int cols)                    //显示棋盘  
  41. {  
  42. int i = 0;  
  43. for(i = 0;i < rows;i++)  
  44. {  
  45. printf("|  %c |  %c |  %c |\n",board[i][0],board[i][1],board[i][2]);  
  46. if(i <= rows-1)  
  47. {  
  48. printf("|----|----|----|\n");  
  49. }  
  50. }  
  51. }  
  52.   
  53. void computer_move(char board[ROWS][COLS],int rows,int cols)           //电脑走  
  54. {  
  55. while(1)  
  56. {  
  57. int x = rand()%3;  
  58. int y = rand()%3;  
  59. if(board[x][y] != '*' && board[x][y] != 'x')  
  60. {  
  61. board[x][y] = 'x';  
  62. return;  
  63. }  
  64.   
  65. }  
  66. }  
  67.   
  68. void player_move(char board[ROWS][COLS],int rows,int cols)          //玩家走  
  69. {  
  70. int x = 0;  
  71. int y = 0;  
  72. printf("玩家请输入坐标,如:x y\n");  
  73. do  
  74. {  
  75.   scanf("%d %d",&x,&y);  
  76.  if(board[x-1][y-1] == 'x')  
  77. {  
  78. printf("该坐标已经被占用,请重新输入:\n");  
  79. }  
  80. else if(((x-1)>3)||((y-1)>3) || (x-1 < 0) || (y-1 < 0))  
  81. {  
  82. printf("输入坐标错误,请重新输入:\n");  
  83. }  
  84. else  
  85. {  
  86. board[x-1][y-1] = '*';  
  87. break;  
  88. }  
  89. }while(1);  
  90. }  
  91.   
  92.  static int is_full(char board[ROWS][COLS],int rows,int cols)    //判断棋盘满没有  
  93. {  
  94. int i = 0;  
  95. int j = 0;  
  96. for(i = 0;i < rows;i++)  
  97. {  
  98. for(j = 0;j <cols;j++)  
  99. {  
  100. if(board[i][j] == ' ')  
  101. {  
  102. return 0;                             
  103. }  
  104. }  
  105. }  
  106. return 1;  
  107. }  
  108.   
  109. int check_win(char board[ROWS][COLS],int rows,int cols)           //判断输赢  
  110. {  
  111. int k = 1;  
  112. int i = 0;  
  113. for(i = 0;i < rows;i++)  
  114. {  
  115. if((board[i][0] == board[i][1])&&(board[i][1] == board[i][2])&&board[i][0] !=' ')  
  116. {  
  117. return board[i][1];  
  118. }  
  119. }  
  120. for(i = 0;i < cols;i++)  
  121. {  
  122. if((board[0][i] == board[1][i])&&(board[1][i] == board[2][i])&&(board[0][i] !=' '))  
  123. {  
  124. return board[0][i];  
  125. }  
  126. }  
  127. if((board[0][0] == board[1][1])&&(board[1][1] == board[2][2])&&(board[0][0] != ' '))  
  128. {  
  129. return board[1][1];  
  130. }  
  131. if((board[0][2] == board[1][1])&&(board[1][1] == board[2][0])&&(board[0][2] != ' '))  
  132. {  
  133. return board[0][2];  
  134. }  
  135. if(is_full(board,rows,cols))  
  136. {  
  137. return ' ';  
  138. }  
  139. return 'q';  
  140. }  
  141.   
  142. test.c  
  143. #define _CRT_SECURE_NO_WARNINGS   
  144.   
  145. #include"game.h"  
  146. #include<stdio.h>  
  147. #include<stdlib.h>  
  148. #include<time.h>  
  149.   
  150. void menu()  
  151. {  
  152. printf("*******************************\n");  
  153. printf("*****1.paly    2.exit *********\n");  
  154. printf("*******************************\n");  
  155. }  
  156.   
  157. void game()  
  158. {  
  159. int ret = 0;  
  160. char board[ROWS][COLS] = {0};  
  161. init_board(board,ROWS,COLS);  
  162. display_board(board,ROWS,COLS);  
  163. while(1)  
  164. {  
  165. printf("电脑走:\n");  
  166. computer_move(board,ROWS,COLS);  
  167. display_board(board,ROWS,COLS);  
  168. ret = check_win(board,ROWS,COLS);  
  169. if(ret != 'q')  
  170. {  
  171. break;  
  172. }  
  173.   
  174. printf("玩家走:\n");  
  175. player_move(board,ROWS,COLS);  
  176. display_board(board,ROWS,COLS);  
  177. ret = check_win(board,ROWS,COLS);  
  178. if(ret != 'q')  
  179. {  
  180. break;  
  181. }  
  182. }  
  183.   
  184. if(ret == '*')  
  185. {  
  186. printf("玩家赢了!\n");  
  187. }  
  188. else if(ret == 'x')  
  189. {  
  190. printf("电脑赢了!\n");  
  191. }  
  192. else if(ret == ' ')  
  193. {  
  194. printf("平局!\n");  
  195. }  
  196. }  
  197.   
  198. int main()  
  199. {  
  200. int input = 0;  
  201. srand((unsigned)time(NULL));  
  202. do  
  203. {  
  204. menu();  
  205. printf("请选择:");  
  206. scanf("%d",&input);  
  207. switch(input)  
  208. {  
  209. case 1:  
  210. game();  
  211. break;  
  212. case 2:  
  213. return 0;  
  214. break;  
  215. default:  
  216. printf("输入错误,请重新输入!\n");  
  217. break;  
  218. }  
  219. }while(input);  
  220.   
  221. system("pause");  
  222. return 0;  
  223. }  
阅读更多
上一篇定一个小目标
下一篇扫雷
想对作者说点什么? 我来说一句

java三子棋简单三子棋

2011年02月10日 5KB 下载

子棋传统游戏源代码及分析

2009年10月27日 8.32MB 下载

子棋子棋子棋子棋

2009年11月25日 34KB 下载

C++ 三子棋代码

2011年07月11日 305KB 下载

没有更多推荐了,返回首页

关闭
关闭