C语言-五子棋

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <windows.h>
  4
  5 #define N 19
  6 int pieces[N][N]= {0}; //五子棋盘19*19
  7 int flag=1;  //状态,0-无子;1-A子;2-B子
  8
  9 void DrawPanel()//棋盘模块
 10 {
 11     int count=1;
 12     int i,j;
 13     system("CLS");
 14     for(i=0; i<=N; i++) //列坐标
 15     {
 16         if(i==0)
 17         {
 18             printf(" ");
 19         }
 20         else
 21         {
 22             printf("%4d",count);
 23             count++;
 24         }
 25     }
 26     printf("\n");
 27     count=1;
 28     for(i=0; i<N; i++)
 29     {
 30         for(j=-1; j<N; j++)
 31         {
 32             if(j==-1)//若是第一列,则输出字符
 33             {
 34                 printf("%2d",count);
 35                 count++;
 36             }
 37             else
 38             {
 39                 if(pieces[i][j]==0)
 40                 {
 41                     printf("   .");
 42                 }
 43                 else if(pieces[i][j]==1)
 44                 {
 45                     printf("  ●");
 46                 }
 47                 else if(pieces[i][j]==2)
 48                 {
 49                     printf("  ○");
 50                 }
 51             }
 52         }
 53         printf("\n");
 54     }
 55
 56 }
 57
 58 int ZouQiHang() //下棋模块1
 59 {
 60     int x;
 61     if(flag==1)
 62     {
 63         printf("\t玩家A●");
 64     }
 65     else
 66     {
 67         printf("\t玩家B○");
 68     }
 69     printf("\t请输入要走棋子的行数!\n");
 70     printf("\tx=");
 71     scanf("%d",&x);
 72     while(x>N-1||x<1)
 73     {
 74         printf("\terror!\n");
 75         if(flag==1)
 76         {
 77             printf("\t玩家A●");
 78         }
 79         else
 80         {
 81             printf("\t玩家B○");
 82         }
 83         printf("\t请输入要走棋子的行数!\n");
 84         printf("\tx=");
 85         scanf("%d",&x);
 86     }
 87     return x;
 88 }
 89
 90 int ZouQiLie()//下棋模块2
 91 {
 92     int y;
 93     if(flag==1)
 94     {
 95         printf("\t玩家A●");
 96     }
 97     else
 98     {
 99         printf("\t玩家B○");
100     }
101     printf("\t请输入要走棋子的列数!\n");
102     printf("\ty=");
103     scanf("%d",&y);
104     while(y>N-1||y<1)
105     {
106         printf("\terror!\n");
107         if(flag==1)
108         {
109             printf("\t玩家A●");
110         }
111         else
112         {
113             printf("\t玩家B○");
114         }
115         printf("\t请输入要走棋子的列数!\n");
116         printf("\ty=");
117         scanf("%d",&y);
118     }
119     return y;
120 }
121
122 int Check(int x,int y)//判断输赢模块
123 {
124     //行检查
125     int count=1;
126     int i=x,j=y;
127     j++;
128     while(j<N&&count<5)//自此向右
129     {
130         if(pieces[i][j]==pieces[x][y])
131         {
132             count++;
133         }
134         else
135         {
136             break;
137         }
138         j++;
139     }
140     j=y;
141     j--;
142     while(j>=0&&count<5)//自此向左
143     {
144         if(pieces[i][j]==pieces[x][y])
145         {
146             count++;
147         }
148         else
149         {
150             break;
151         }
152         j--;
153     }
154     if(count==5)//存在5子连成连续一条线
155     {
156         return pieces[x][y];
157     }
158
159     //列检查
160     i=x;
161     j=y;
162     count=1;
163     i=i+1;
164     while(i<N&&count<5)//自此向下
165     {
166         if(pieces[i][j]==pieces[x][y])
167         {
168             count++;
169         }
170         else
171         {
172             break;
173         }
174         i++;
175     }
176     i=x-1;
177     while(i>=0&&count<5)//自此向上
178     {
179         if(pieces[i][j]==pieces[x][y])
180         {
181             count++;
182         }
183         else
184         {
185             break;
186         }
187         i--;
188     }
189     if(count==5)
190     {
191         return pieces[x][y];
192     }
193
194     //左斜行
195     i=x;
196     j=y;
197     count=1;
198
199     i=i-1;
200     j=j-1;
201     while(i>=0&&j>=0&&count<5)//自此左斜向上
202     {
203         if(pieces[i][j]==pieces[x][y])
204         {
205             count++;
206         }
207         else
208         {
209             break;
210         }
211         i--;
212         j--;
213     }
214
215     i=x+1;
216     j=y+1;
217     while(i<N&&j<N&&count<5)//自此左斜向下
218     {
219         if(pieces[i][j]==pieces[x][y])
220         {
221             count++;
222         }
223         else
224         {
225             break;
226         }
227         i++;
228         j++;
229     }
230     if(count==5)
231     {
232         return pieces[x][y];
233     }
234
235     //右斜行
236     i=x;
237     j=y;
238     count=1;
239     i=i-1;
240     j=j+1;
241     while(i>=0&&j<N&&count<5)//自此右斜向上
242     {
243         if(pieces[i][j]==pieces[x][y])
244         {
245             count++;
246         }
247         else
248         {
249             break;
250         }
251         i--;
252         j++;
253     }
254
255     i=x+1;
256     j=y-1;
257     while(i<N&&j>=0&&count<5)////自此右斜向下
258     {
259         if(pieces[i][j]==pieces[x][y])
260         {
261             count++;
262         }
263         else
264         {
265             break;
266         }
267         i++;
268         j--;
269     }
270     if(count==5)
271     {
272         return pieces[x][y];
273     }
274     return 0;
275 }
276
277 void HeQi()//信息模块1
278 {
279     Sleep(5000);
280     system("CLS");
281     printf("\t**********************************************************\n");
282     printf("\t*                                                        *\n");
283     printf("\t*                                                        *\n");
284     printf("\t*                                                        *\n");
285     printf("\t*                   和棋!                               *\n");
286     printf("\t*                                                        *\n");
287     printf("\t*                                                        *\n");
288     printf("\t*                                                        *\n");
289     printf("\t*                                                        *\n");
290     printf("\t**********************************************************\n");
291 }
292
293 void Over() //信息模块2
294 {
295     Sleep(5000);
296     //system("CLS");
297     printf("\t**********************************************************\n");
298     printf("\t*                                                        *\n");
299     printf("\t*                                                        *\n");
300     printf("\t*                                                        *\n");
301     printf("\t*                     游戏结束!                         *\n");
302     printf("\t*                                                        *\n");
303     printf("\t*                                                        *\n");
304     printf("\t*                                                        *\n");
305     printf("\t*                                                        *\n");
306     printf("\t**********************************************************\n");
307 }
308
309 void Welcome()
310 {
311     system("CLS");
312     printf("\t**********************************************************\n");
313     printf("\t*                                                        *\n");
314     printf("\t*                                                        *\n");
315     printf("\t*                                                        *\n");
316     printf("\t*                       欢迎!                           *\n");
317     printf("\t*                                                        *\n");
318     printf("\t*                                                        *\n");
319     printf("\t*                                                        *\n");
320     printf("\t*                                                        *\n");
321     printf("\t**********************************************************\n");
322     printf("\tpress any key to start!\n");
323     getchar();
324 }
325
326 int main()
327 {
328     int x,y; //行列坐标
329     char ch=‘y‘;
330     int winner; //赢家
331     int countpieces=0;//落子总数
332     Welcome();
333     DrawPanel();
334
335     while(countpieces<N*N)
336     {
337         x=ZouQiHang();
338         y=ZouQiLie();
339         x=x-1;
340         y=y-1;
341         if(pieces[x][y]==0)//是否可以落子
342         {
343             pieces[x][y]=flag;
344             countpieces++;
345             //改变状态
346             if(flag==1)
347             {
348                 flag=2;
349             }
350             else
351             {
352                 flag=1;
353             }
354             //判断输赢,继续?
355             winner=Check(x,y);
356             if(winner==1)
357             {
358                 DrawPanel();
359                 printf("\t恭喜A●赢了!\n");
360                 break;
361             }
362             else if(winner==2)
363             {
364                 DrawPanel();
365                 printf("\t恭喜B○赢了!\n");
366                 break;
367             }
368         }
369         else
370         {
371             printf("ERROR!\n");
372             printf("落子行列错误,请随意按键重新输入!\n");
373             getchar();
374             getchar();
375         }
376         DrawPanel();
377     }//while
378
379     if(countpieces==N*N)
380     {
381         HeQi();//和棋
382     }
383     else
384     {
385         Over();//结束
386     }
387     return 0;
388
389 }
时间: 2024-10-20 01:34:36

C语言-五子棋的相关文章

C语言 AI智能,五子棋 人机对战,人人对战

C语言五子棋,人机对战,人人对战 [email protected]:~$ cat main.c  # include<stdio.h> # include<string.h> # include<stdlib.h> # define SPA 0 # define MAN 1 # define COM 2    /* 空位置设为0 ,玩家下的位置设为1 ,电脑下的位置设为2 */ int qipan[15][15];    /* 15*15的棋盘 */ int a,b,

详解 C 语言开发五子棋游戏以及游戏中的重要算法与思路

重拾 C 语言之后发现,原来 C 语言是那么的简洁,对于写小项目来讲,C 语言是那么的合适,然后,博主自己写了一个五子棋游戏,同样是基于博主自己封装的 nkCEngine 代码库编写,其实整个游戏里面大部分代码都用在逻辑处理上了,图形处理以及窗口创建的部分,因为有高度封装的 nkCEngine,基本上可以忽略不计,这篇博文来讲一讲 C 语言开发一个简单的五子棋游戏,这个游戏不包含人机对战的逻辑,所以唯一的难点估计就是在于如何判断下棋的一方在下棋时候是否获胜了,同时博主也会介绍一个游戏开发中最经常

C 语言控制台实现五子棋项目

花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋>作为项目进行编码. 本项目定位: 控制台小程序,作为熟悉一个完整的项目流程存在. 项目周期: 一星期. 实际时间: 一天.(2016年4月5日) 游戏功能: 首先实现能够让双人进行对战,最后得出胜负(结果).然后加入人机对战元素,也就是传统意义上一个人玩的单机游戏. 编码风格: C语言面向过程编程,变量名与

C语言实现五子棋简单功能

/******************************************************************** C-4.29-1: 实现五子棋游戏 操作说明:用方向键或者"w","s","a","d"控制棋子放置位置, 使用空格键放置棋子,使用“ESC”键退出游戏 测试环境:Redhat5.5 *****************************************************

五子棋的c语言源码

这是实现五子棋落子和判断胜负的源代码,电脑落子涉及的人工智能算法(目前AI属于弱智的随机落子)暂时没有实现.本文重点讲一下胜负判断功能的实现,我们都知道五子棋中获胜的条件就是五联子,而五联子的方向有四种:水平.竖直和两个对角线方向.扫描的思想是在每个落子的位置判断各个方向能扫描的次数(最多为5).以水平方向为例,数组下标为[5][5]的从[5][0]开始判断连往右的五个坐标(即数组元素)的值是否相等,如果是则表明获胜. #include <stdio.h> #include <stdli

五子棋(C语言)

五子棋游戏 五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,每次一子,轮流下在棋盘直线与横线的交叉点上,先形成 5子连线者 获胜. 棋具与围棋通用. 源程序: //chess.h #pragma once #include<stdio.h> #define ROW 5 #define COL 5 void Menu(); void Init(char arr[][COL]); void Display(char arr[][COL]); void Player_move

C语言实现五子棋

可以称得上史上最简单的五子棋版本了. 可以使用curses库来改进页面和下棋方式. 并且对于输入的坐标没有进行鉴别,如果输入的坐标超过棋盘大小,就会段错误退出. 我改进了一点,但是还是没有完全避免这个问题. /* *Gobang.c */ #include<stdio.h> #include<stdlib.h> #define N 15 int chessboard[N+1][N+1] = {0}; int whoseTurn = 0; void initGame(); void

简单程序设计-五子棋

<程序设计-五子棋> 作者:蜡笔小黑(原创博文,转载请说明) 前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一个简单的模型,实现了五子棋最最基本的功能,还有好多地方需要补全,如边界问题,设计问题,游戏逻辑问题,希望读者阅读后能够注意,通过自己的努力来完善它,还能扩展各种功能,如悔棋,网络对战等,有时候写程序和小生命一样,慢慢会成长,而我们作为&q

结合自己的项目作业说说做软件工程项目应该如何选择程序设计语言

我们小组的软件工程项目是开发一个简单的即时通讯软件,我们最终选择用Java来开发这个软件.为什么要选择Java呢?首先,Java是一种采用面向对象方法编码的高级语言,相比我们学过的另一种语言——C语言,具有很大的优势.C语言是一种结构化的语言,是面向过程的.下面引用一段文字来说明面向对象相比面向过程的优点: 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而