五子棋实现体验其过程


  1 #include <stdio.h>
  2 /*
  3 项目:五子棋赢棋判断
  4 思路:1.横向扫描判断是否有连续5颗相连的棋子
  5 2.纵向扫描判断是否有连续5颗相连的棋子
  6 3.扫描主对角线判断是否有连续5颗相连的棋子
  7 4.斜线扫描主对角线上半面是否有连续5颗相连的棋子
  8 5.斜线扫描主对角线下半面是否有连续5颗相连的棋子
  9 6.扫描次对角线判断是否有连续5颗相连的棋子
 10 7.斜线扫描次对角线上半面是否有连续5颗相连的棋子
 11 8.斜线扫描次对角线下半面是否有连续5颗相连的棋子
 12 
 13   9.1代表黑棋。2代表白棋。其他数字0代表未走棋
 14 */
 15 #define M 10     //定义棋盘上下边界,上边界0 下边界10
 16 #define N 10     //定义棋盘左右边界,左边界0 右边界10
 17 
 18 int main(void)
 19 {
 20     int i,j,k,q;
 21     //    k = q = 0;    
 22     //初始化二维数组
 23     int arr[M][N] = {
 24         {0,1,1,0,1,1,0,0,2,0},
 25         {0,2,1,0,0,2,0,0,0,0},
 26         {0,0,2,0,2,0,1,0,0,0},
 27         {0,0,0,2,1,1,0,0,0,0},
 28         {0,0,2,0,2,1,0,0,0,0},
 29         {0,2,0,1,0,2,0,1,0,0},
 30         {0,0,1,0,0,0,0,0,0,0},
 31         {0,0,0,0,0,0,0,1,0,0},
 32         {0,0,0,0,0,0,0,1,0,0},
 33         {0,0,0,0,0,0,0,1,0,0}
 34     };
 35     //1.横向扫描判断是否有连续5颗相连的棋子
 36     for(k = 0,q = 0,i = 0;i<M;i++)
 37     {
 38         for(j = 0;j<N;j++)
 39         {
 40             if(arr[i][j] == 1)
 41                 k++;
 42             else
 43                 k = 0;
 44             if(arr[i][j] == 2)
 45                 q++;
 46             else
 47                 q = 0;
 48             if(k>=5)
 49             {
 50                 printf("黑棋胜利
");
 51                 return 0;
 52             }
 53             if(q>=5)
 54             {
 55                 printf("白棋胜利
");
 56                 return 0;
 57             }
 58         }
 59         
 60         
 61     }
 62     //2.纵向扫描判断是否有连续5颗相连的棋子
 63     for(j = 0;j<N;j++)
 64     {
 65         k = q = 0;
 66         for(i = 0;i<M;i++)
 67         {
 68             if(arr[i][j] == 1)
 69                 k++;
 70             else
 71                 k = 0;
 72             if(arr[i][j] == 2)
 73                 q++;
 74             else
 75                 q = 0;    
 76             if(k>=5)
 77             {
 78                 printf("黑棋胜利
");
 79                 return 0;
 80             }
 81             if(q>=5)
 82             {
 83                 printf("白棋胜利
");
 84                 return 0;
 85             }
 86         }
 87         
 88     }
 89     //3.扫描主对角线判断是否有连续5颗相连的棋子
 90     for(k = q = 0,i = 0;i<M;i++)
 91     {
 92         if(arr[i][i] == 1)
 93             k++;
 94         else
 95             k = 0;
 96         if(arr[i][i] == 2)
 97             q++;
 98         else
 99             q = 0;
100         if(k>=5)
101         {
102             printf("黑棋胜利
");
103             return 0;
104         }
105         if(q>=5)
106         {
107             printf("白棋胜利
");
108             return 0;
109         }
110     }
111     //4.斜线扫描主对角线上半面是否有连续5颗相连的棋子
112     
113     for(j = 1;j<N;j++)
114     {
115         k = q = 0;
116         for(i = 0;i<M-j;i++)
117         {
118             if(arr[i][i+j] == 1)
119                 k++;
120             else
121                 k = 0;
122             if(arr[i][i+j] == 2)
123                 q++;
124             else
125                 q = 0;
126             if(k>=5)
127             {
128                 printf("黑棋胜利
");
129                 return 0;
130             }
131             if(q>=5)
132             {
133                 printf("白棋胜利
");
134                 return 0;
135             }
136         }
137     }
138     //5.斜线扫描主对角线下半面是否有连续5颗相连的棋子
139     for(i = 1;i<M;i++)
140     {
141         k = q = 0;
142         for(j = 0;j<N-i;j++)
143         {
144             if(arr[j+i][j] == 1)
145                 k++;
146             else
147                 k = 0;
148             if(arr[j+i][j] == 2)
149                 q++;
150             else
151                 q = 0;
152             
153             if(k>=5)
154             {
155                 printf("黑棋胜利
");
156                 return 0;
157             }
158             if(q>=5)
159             {
160                 printf("白棋胜利
");
161                 return 0;
162             }
163         }
164         
165     }
166     //6.扫描次对角线判断是否有连续5颗相连的棋子
167     for(k = q = 0,i = 0;i<M;i++)
168     {
169         if(arr[i][9-i] == 1)
170             k++;
171         else
172             k = 0;
173         if(arr[i][9-i] == 2)
174             q++;
175         else
176             q = 0;
177         if(k>=5)
178         {
179             printf("黑棋胜利
");
180             return 0;
181         }
182         if(q>=5)
183         {
184             printf("白棋胜利
");
185             return 0;
186         }
187     }
188     
189     //7.斜线扫描次对角线上半面是否有连续5颗相连的棋子
190     for(j = N-2;j>=0;j--)
191     {
192         k = q = 0;
193         for(i = 0;i<M-(N-j-1);i++)
194         {
195             if(arr[i][j-i] == 1)
196                 k++;
197             else
198                 k = 0;
199             if(arr[i][j-i] == 2)
200                 q++;
201             else
202                 q = 0;
203             
204             if(k>=5)
205             {
206                 printf("黑棋胜利
");
207                 return 0;
208             }
209             if(q>=5)
210             {
211                 printf("白棋胜利
");
212                 return 0;
213             }
214         }
215         
216     }
217     //8.斜线扫描次对角线下半面是否有连续5颗相连的棋子
218     
219     for(i = 1;i<M;i++)
220     {
221         k = q = 0;
222         for(j = N-1;j>=i;j--)
223         {
224             if(arr[N-j+i-1][j] == 1)
225                 k++;
226             else
227                 k = 0;
228             if(arr[N-j+i-1][j] == 2)
229                 q++;
230             else
231                 q = 0;
232             
233             if(k>=5)
234             {
235                 printf("黑棋胜利
");
236                 return 0;
237             }
238             if(q>=5)
239             {
240                 printf("白棋胜利
");
241                 return 0;
242             }
243         }
244         
245     }
246     
247     return 0;
248 }
原文地址:https://www.cnblogs.com/wangchaomahan/p/9582494.html