C语言简易三子棋

2018-12-04 07:14:37来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

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

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JNI-C

下一篇:利用ZYNQ SOC快速打开算法验证通路(6)——LWIP实现千兆TCP/IP