码迷,mamicode.com
首页 > 其他好文 > 详细

三子棋小游戏

时间:2019-02-06 17:17:16      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:oid   while   ice   com   \n   printf   srand   div   bsp   

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include<stdio.h>
  3 #include<stdlib.h>
  4 #include<time.h>
  5 
  6 #define ROW 3
  7 #define COL 3
  8 
  9 char g_broad[ROW][COL];
 10 
 11 void Init(char broad[ROW][COL])
 12 {
 13     for (int row = 0;row < ROW;++row)
 14     {
 15         for (int col = 0;col < COL;++col)
 16         {
 17             broad[row][col] =  ;
 18         }
 19     }
 20 }
 21 
 22 void Print(char broad[ROW][COL])
 23 {
 24     for(int row=0;row<ROW;++row)
 25     {
 26         printf("| %c | %c | %c |\n",broad[row][0],broad[row][1],broad[row][2]);
 27         if (row != ROW - 1)
 28         {
 29             printf(" ---|---|---\n");
 30         }
 31     }
 32 }
 33 
 34 void Playermove(char broad[ROW][COL])
 35 {
 36     printf("玩家下棋!\n");
 37     while(1)
 38     { 
 39         int row = 0;
 40         int col = 0;
 41         printf("请输入一组坐标:\n");
 42         scanf("%d %d", &row, &col);
 43         if (row < 0 || row >= ROW || col < 0 || col >= COL)
 44         {
 45             printf("您输入的坐标非法!请重新输入:\n");
 46             continue;
 47         }
 48         if (broad[row][col] !=  )
 49         {
 50             printf("该位置已经有棋子,请重新输入:\n");
 51                 continue;
 52         }
 53         broad[row][col] = x;
 54         break;
 55     }
 56 }
 57 
 58 void Computermove(char broad[ROW][COL])
 59 {
 60     printf("电脑下棋!\n");
 61     while (1)
 62     {
 63         int row = rand() % ROW;
 64         int col = rand() % COL;
 65         if (broad[row][col] !=  )
 66         {
 67             //位置被占用,重新生成
 68             continue;
 69         }
 70         broad[row][col] = o;
 71         break;
 72     }
 73 
 74 }
 75 
 76 int Isfull(char broad[ROW][COL])
 77 {
 78     for (int row = 0;row < ROW;++row)
 79     {
 80         for (int col = 0;col < COL;++col)
 81         {
 82             if (broad[row][col] ==  )
 83             {
 84                 return 0;
 85             }
 86         }
 87     }
 88     return 1;
 89 }
 90 
 91 char Checkgame(char broad[ROW][COL])
 92 {
 93     //先检查所有的行
 94     for (int row = 0;row < ROW;++row)
 95     {
 96         if (broad[row][0] == broad[row][1]
 97             && broad[row][0] == broad[row][2]
 98             && broad[row][0] !=  )
 99         {
100             return broad[row][0];
101         }
102     }
103     //检查所有列
104     for (int col = 0;col < COL;++col)
105     {
106         if (broad[0][col] == broad[1][col]
107             && broad[0][col] == broad[2][col]
108             && broad !=  )
109         {
110             return broad[0][col];
111         }
112     }
113     //检查对角线
114     if (broad[0][0] == broad[1][1]
115         && broad[0][0] == broad[2][2]
116         && broad[0][0] !=  )
117     {
118         return broad[0][0];
119     }
120     if (broad[2][0] == broad[1][1]
121         && broad[2][0] == broad[0][2]
122         && broad[2][0] !=  )
123     {
124         return broad[2][0];
125     }
126     //判定是否和棋
127     if (Isfull(broad))
128     {
129         return q;
130     }
131     return  ;
132 }
133 
134 void Game()
135 {
136     //1.先对棋盘进行初始化
137     Init(g_broad);
138     char winner =  ;
139     while (1)
140     {
141         //2.打印棋盘(此时是一个空的棋盘)
142         Print(g_broad);
143         //3.玩家下棋,检查游戏是否结束
144         Playermove(g_broad);
145         //winner==x   玩家胜利;o电脑胜利;q和棋 ;‘ ‘胜负未分
146         winner = Checkgame(g_broad);
147         if (winner !=  )
148         {
149             break;
150         }
151         //4.电脑下棋,检查游戏是否结束
152         Computermove(g_broad);
153         winner = Checkgame(g_broad);
154         if (winner !=  )
155         {
156             break;
157         }
158         //循环第2步。
159 
160     }
161     //在游戏结束之前打印地图
162     Print(g_broad);
163     if (winner == x)
164     {
165         printf("玩家胜利!\n");
166     }
167     else if (winner == o)
168     {
169         printf("电脑胜利!\n");
170     }
171     else if (winner == q)
172     {
173         printf("和棋!\n");
174     }
175     else
176     {
177         printf("程序出错!\n");
178     }
179 
180 }
181 
182 int Menu()
183 {
184     printf("==============\n");
185     printf("1.开始游戏\n");
186     printf("0.结束游戏\n");
187     printf("==============\n");
188     printf("请输入您的选择:\n");
189     int choice = 0;
190     scanf("%d",&choice);
191     return choice;
192 }
193 
194 int main()
195 {
196     //这里设置随机种子
197     srand((unsigned int)time(0));
198     while (1)
199     {
200         int choice = Menu();
201         if (choice == 1)
202         {
203             Game();
204         }
205         else
206         {
207             printf("Goodbye!\n");
208             break;
209         }
210     }
211     return 0;
212 }

 

三子棋小游戏

标签:oid   while   ice   com   \n   printf   srand   div   bsp   

原文地址:https://www.cnblogs.com/cuckoo-/p/10353817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!