我有一段c语言五子棋源代码判断胜利的代码不懂,谁能给我解释一下

c++五子棋胜利的判断_百度知道
c++五子棋胜利的判断
#include&stdio.h&
#include&math.h&
int main(void)
int x,y,a,b,i,j,t;
int m_data[];
scanf(&%d&,&a);
for(t=1;t&=a;t++)
scanf(&%d&,&b);
for(i=0;i&=b-1;i++)
for(j=0;j&=b-1;j++)
scanf(&%d&,&m_data[i]...
我有更好的答案
不多说,直接上代码,你的那些判断感觉太乱了,看下我的吧&#include&&stdio.h&#include&math.h&void&printWinner(int&x){ if&(x&==&0) {
printf(&black&win\n&); } else&if&(x&==&1) {
printf(&white&win\n&); } else {
printf(&neither\n&); }}void&checkWinner(int&data[]&,int&size){ //遍历所有棋子,找出赢家 int&winerValue&=&3;
for&(int&i&=&0;&i&&&i++) {
bool&win&=& //一方胜利,结束
for&(int&j&=&0;&j&&&j++)
if&(data[i][j]&==&'&') //空格不需要判定
//水平方向连续棋子个数检测
int&cnt&=&1;
for&(int&k&=&j-1;&k&&=&0;k--)
if&(data[i][k]&!=&data[i][j]) //非相同棋子时停止检测
for&(int&k&=&j&+&1;&k&&&&k++)
if&(data[i][k]&!=&data[i][j]) //非相同棋子时停止检测
if&(cnt&&=&5)
winerValue&=&data[i][j];
//竖直方向检测
for&(int&k&=&i&-&1;&k&&=&0;&k--)
if&(data[k][j]&!=&data[i][j]) //非相同棋子时停止检测
for&(int&k&=&i&+&1;&k&&&&k++)
if&(data[k][j]&!=&data[i][j]) //非相同棋子时停止检测
if&(cnt&&=&5)
winerValue&=&data[i][j];
//从左下到右上检测
int&m&=&i&+&1;
for&(int&k&=&j&-&1;&k&&=&0;&k--)
if&(m&=size) //左下方出界
if&(data[m][k]&!=&data[i][j]) //非相同棋子时停止检测
m&=&i&-&1;
for&(int&k&=&i&+&1;&k&&&&k++)
if&(m&&&0) //右上方出界
if&(data[m][k]&!=&data[i][j]) //非相同棋子时停止检测
if&(cnt&&=&5)
winerValue&=&data[i][j];
//从左上到右下检测
m&=&i&-&1;
for&(int&k&=&j&-&1;&k&&=&0;&k--)
if&(m&&&0) //左上方出界
if&(data[m][k]&!=&data[i][j]) //非相同棋子时停止检测
m&=&i&+&1;
for&(int&k&=&i&+&1;&k&&&&k++)
if&(m&&=&size) //右下方出界
if&(data[m][k]&!=&data[i][j]) //非相同棋子时停止检测
if&(cnt&&=&5)
winerValue&=&data[i][j];
} } printWinner(winerValue);}int&main(){ int&x,&y,&a,&b,&i,&j,&t; int&m_data[]; scanf(&%d&,&&a); for&(t&=&1;&t&&=&a;&t++) {
scanf(&%d&,&&b);
for&(i&=&0;&i&&=&b&-&1;&i++)
for&(j&=&0;&j&&=&b&-&1;&j++)
scanf(&%d&,&&m_data[i][j]);
checkWinner(m_data,&b);
/*for&(y&=&0;&y&&&(b&-&5);&y++)
for&(x&=&0;&x&&&(b*0.5&+&1);&x++)
if&(m_data[x][y]&==&1&&&&m_data[x&+&1][y]&==&1&&&&m_data[x&+&2][y]&==&1&&&&m_data[x&+&3][y]&==&1&&&&m_data[x&+&4][y]&==&1)
printf(&white&win\n&);
if&(m_data[x][y]&==&0&&&&m_data[x&+&1][y]&==&0&&&&m_data[x&+&2][y]&==&0&&&&m_data[x&+&3][y]&==&0&&&&m_data[x&+&4][y]&==&0)
printf(&black&win\n&);
for&(y&=&0;&y&&&(b*0.5&+&1);&y++)
for&(x&=&0;&x&&&(b&-&5);&x++)
if&(m_data[x][y]&==&1&&&&m_data[x][y&+&1]&==&1&&&&m_data[x][y&+&2]&==&1&&&&m_data[x][y&+&3]&==&1&&&&m_data[x][y&+&4]&==&1)
printf(&white&win\n&);
if&(m_data[x][y]&==&0&&&&m_data[x][y&+&1]&==&0&&&&m_data[x][y&+&2]&==&0&&&&m_data[x][y&+&3]&==&0&&&&m_data[x][y&+&4]&==&0)
printf(&black&win\n&);
for&(y&=&0;&y&&&(b*0.5&+&1);&y++)
for&(x&=&0;&x&&&(b*0.5&+&1);&x++)
if&(m_data[x][y]&==&1&&&&m_data[x&+&1][y&+&1]&==&1&&&&m_data[x&+&2][y&+&2]&==&1&&&&m_data[x&+&3][y&+&3]&==&1&&&&m_data[x&+&4][y&+&4]&==&1)
printf(&white&win\n&);
if&(m_data[x][y]&==&0&&&&m_data[x&+&1][y&+&1]&==&0&&&&m_data[x&+&2][y&+&2]&==&0&&&&m_data[x&+&3][y&+&3]&==&0&&&&m_data[x&+&4][y&+&4]&==&0)
printf(&black&win\n&);
for&(y&=&0;&y&&&(b*0.5&+&1);&y++)
for&(x&=&4;&x&&&(b&-&5);&x++)
if&(m_data[x][y]&==&1&&&&m_data[x&-&1][y&+&1]&==&1&&&&m_data[x&-&2][y&+&2]&==&1&&&&m_data[x&-&3][y&+&3]&==&1&&&&m_data[x&-&4][y&+&4]&==&1)
printf(&white&win\n&);
if&(m_data[x][y]&==&0&&&&m_data[x&-&1][y&+&1]&==&0&&&&m_data[x&-&2][y&+&2]&==&0&&&&m_data[x&-&3][y&+&3]&==&0&&&&m_data[x&-&4][y&+&4]&==&0)
printf(&black&win\n&);
printf(&neither\n&);*/ } return&0;}
采纳率:52%
为您推荐:
其他类似问题
五子棋的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。 上传我的文档
 下载
 收藏
粉丝量:943
如有需要或疑问,请联系我的微信:qsyd9h.请注明:"道客巴巴"
 下载此文档
有完整源代码
下载积分:1500
内容提示:毕业设计
有完整源代码
文档格式:DOC|
浏览次数:1371|
上传日期: 16:51:54|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1500 积分
下载此文档
该用户还上传了这些文档
有完整源代码
关注微信公众号五子棋怎么定输赢?-百科大全-就爱阅读网
五子棋怎么定输赢?
黑25堵住白活三后,白26下在H14就赢定,黑无解楼主可以自行摆盘一下,之后变化很简单
不常下五子棋的人,就会感觉黑先禁手好麻烦,不能临时很好的利用优势去思考。可不可以这样想:1,无禁手对弈中,谁执黑棋先输,判定为执白水平高。2,如果1成立,黑白对弈,六局内没有分出胜负,再禁手。想法基于:无禁手中,黑先胜率高,黑如果获胜,是顺势,守本。换言之,如果白胜,是逆势,计高。
哎! 又有人问这个问题。你看看:你与对手的积分相差200分以上时,不管你是嬴是输都不会得分或被扣分,只有积分相差在200以内赢时才能得积分。 具体如下:两个人分差小于 100 的时候 :胜者得分 :如果胜者积分 >= 负者积分胜者得分为 : 10 – 两人分差 / 10如果胜者积分 < 负者积分胜者得分为 : 10 + 两人分差 / 10和棋得分 :分低者得分为: 两人分差 / 10高低者得分为: - 两人分差 / 10负者失分数等于胜者得分数两人分差不小于 100 的时候:胜者得 1 分,负者输 1 分和棋时,分高者输一分,分低者赢一分两个玩家的分数差别大于等于 200 分时,胜负都不计分。五.QQ游戏五子棋的积分级别对应关系9 级 =-8008 级 =-7007 级 =-6006 级 =-5005 级 =-4004 级 =-3003 级 =-2002 级 =-1001 级 =01 段 =1002 段 =2003 段 =3004 段 =4005 段 =5006 段 =6007 段 =7008 段 =8009 段 =900
你只判断了右边没判断左边,和上下边。如果下的为X,Y 颜色的C。 先往左减X-1是不是C,如果是判断减2是不是C,直到不是或者X-4还是为C(这时加上本身就是5个C胜利了),如果左边不满X-4计算X+1循环判断,加上左边的累加数是否为4,如果成立则C胜利,如果不成立,则判断上下,同样的沿用左右的思想
2楼胡说八道,五子棋在无禁手下的时候先走的一方必胜,但是不是所有开局都必胜的,在有禁的情况下花月开局和浦月开局也是必胜的,很多开局在有禁情况下是必胜或者占优,楼主不妨去中国连珠网看看开局,如果要学的话,建议先学花月和浦月,学好花月和浦月走遍天下都不怕。。。而且这2个开局也是最最基本的
没用过JAVA,说个思路希望对你有帮助准备两个变量 一个 黑赢变量 一个白赢变量为棋盘上每个点准备一个变量 叫点变量该变量空为0 下白棋加1 下黑棋加2看看拥有超过4个点的线(包括斜线)有多少个 作为外循环次数外循环的工作要6次重置起始点的位置,和内循环次数,和内循环里面的起始点内存地址以及距离一下个点的内存地址的距离,每循环一次是加还是减也要知道规律会变化6次内循环的工作1.测试点如果为0则把黑赢和白赢变量清0如果为1把白赢变量加1黑赢变量清0如果为2把黑赢变量加1白赢变量清02.测试黑赢和白赢变量是否为5 哪个为5就是哪个赢了 结束循环3.根据外循环提供的规律调整指向点变量的指针,和距离一下个点变量在内存里的距离判断当前点周围也可以,不过涉及到边界问题,我觉得那样更复杂
每下一个子判断一次啊落子为a[row][col]count=0;//计数横线 for(i=col+1;i<=col+4;i++) {if(a[row][i]!=a[row][col])count++;}for(i=col-1;i>=col-4;i--;) {if(a[row][i]!=a[row][col])count++;}if(count>=4) {printf("WIN!\n");return 0;}其他线类似,核心思想就是定义一个计数的变量count, 分别记录该棋子两边相邻相同棋子个数
QQ五子棋积分技巧本人玩QQ五子棋不久,对于其中积分技巧倒有点研究~~~先说明我所说的是纯粹的积分技巧,靠此法在QQ五子棋界中创个三段四段还是不成问题的~罗嗦了~~~~第一就是选对手,主要看他的积分,以下是QQ游戏五子棋的积分计算方法两个人分差小于 100 的时候 :胜者得分 :如果胜者积分 >= 负者积分胜者得分为 : 10 – 两人分差 / 10如果胜者积分 < 负者积分胜者得分为 : 10 + 两人分差 / 10和棋得分 :分低者得分为: 两人分差 / 10分高者得分为: - 两人分差 / 10负者失分数等于胜者得分数两人分差不小于 100 的时候:胜者得 1 分,负者输 1 分和棋时,分高者输一分,分低者赢一分两个玩家的分数差别大于等于 200 分时,胜负都不计分。所以选对手最好是积分比自己高,而且分差在100分以内,如果赢了自己积分最高,和自己分差超过200的最好不要下,输赢都不积分,还要注意一点不要和积分比自己低100到200之间的对手和棋,你会扣掉一分~~~第二就是先手优势。怎么才能得到先手优势?可能这样做有点有损棋风~~,呵呵很简单,找个空房间坐下,等,很快就有人来了,第一盘自己是先手,靠先手优势赢了他(具体怎么赢,后面还要说~~)到第二盘时,如果对手比自己差,继续啊,如果比自己厉害,闪呀,然后再重复上述动作即可~~如果嫌这个太麻烦,那下完第一盘是就把对方赶出去,具体就不说了,不管软的硬的,赶出去就好~~第三就是我说的关键,以上准备条件做好了,剩下就是怎么在实战中赢对手,这招就更不耻了~~呵呵,我强调,我只说的是积分技巧,~~很简单,下载一个单机版五子棋游戏,然后打开QQ五子棋和对手开始,对手走什么着数,你对电脑就走什么着数,当然,一般情况下,把电脑的智慧调到最高,对手是下不过电脑的,也就是说对手是下不过你的,实际上是对手在和电脑下,呵呵 ,具体不说了~~恩~是有点失风范~~但是遇上高手就麻烦了,电脑也拿他没办法,那怎么办?没关系,这就是我要说的下一点第四遇到高手中的高手,只有一个办法,赶快闪,如果下了两步才知道对手是高手,那时千万不要跑,一跑就惨了。乖乖认输~~相信靠此法不出200盘,足可以达到QQ五子棋二段三段的境界,其实还可以更高,但是四段五段的高手又太少,和比自己积分很低的人下,没什么前途,有时赢了也不积分,真正碰上四五段的高手,其实胜算也不大不过三四段在QQ五子棋中也不差了啊!~~本文纯属积分技巧,对于实战的硬功夫,不久大家将会看到了~~呵呵
看坐标的位置x轴不变Y轴++ 或-- 他们的颜色一样的 数量>=5 就赢了; //横向Y轴不变X轴++ 或-- 他们的颜色一样的 数量>=5就赢了; //纵向X轴++ Y轴-- 或X轴--Y轴++ 他们颜色一样 数量>=5就赢了;X轴++ Y轴++ 或X轴--Y轴-- 他们颜色一样数量>=5就赢了;//斜向我也才看完视频教程:代码:先把每个点放入2维数组里 定义一个 chess[x][y]//这里的x ,y是用mouseclick监听他的x,y 用arg0.getY() , arg0.getY() 方法取到的 值定义一个boolean类判断是否赢 flag// 横向boolean flag = //一开始不赢int i1 = 1; //用他来循环第几个棋子int count1 = 1; //用它来计数有多少个棋子连起来while(chess[x][y] == chess[x + i][y]){i1++;count1 ++;}while(chess[x][y] == chess[x - i][y]) {i1++;count1 ++;}if(count1 >= 5){ flag = } //棋子>=5就赢了 flag为true//纵向int i2 = 1;int count2 = 1;while(chess[x][y] == chess[x][y + i]){i2++;count2 ++;}while(chess[x][y] == chess[x][y - i]) {i2++;count2 ++; ......余下全文>>
最就简单的 每走一步就对该棋子所在的 行, 列,对角线全部遍历一次,找到五连就判断胜利。。可以找份五子棋的代码看下别人怎么实现,这个网上很多吧。
Copyright &
就爱阅读网 All Rights Reserved. 鲁ICP备号-4
声明:文章《五子棋怎么定输赢?》由就爱阅读网友共享发布,目的只是为了归纳学习和传递资讯
所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!          《程序设计-五子棋》
                        作者:蜡笔小黑(原创博文,转载请说明)
前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一个简单的模型,实现了五子棋最最基本的功能,还有好多地方需要补全,如边界问题,设计问题,游戏逻辑问题,希望读者阅读后能够注意,通过自己的努力来完善它,还能扩展各种功能,如悔棋,网络对战等,有时候写程序和小生命一样,慢慢会成长,而我们作为“父母”的看到自己的小宝宝成为有用之才,过程之欣喜特别棒!下面正题!&
需求分析:通过C++语言来实现一个以windows控制台为展示平台的简单版五子棋程序,其中通过键盘输入来控制游戏中的行为(光标移动、落子、确认)。规则要求某一方在横竖斜方向连续存在五个或五个以上本人所执棋子获得为获胜。
流程设计:
游戏流程分析:& &
&&&当我们要扒一个已存在的程序时(有的是五子棋的程序,可以在互联网里找到很多),我们可以从他的UI入手,通过我们所观察到的,所感受到,所使用到的服务,来对软件进行分析,从而获得以上流程,但我们一旦需要将需求变为代码时,我们的设计就要考虑的更多了。
这样我们就需要一种能力--抽象
<span style="color: #.首先,我们需要一个棋盘,那么我可以使用C++里的什么来存储和表示棋盘呢?通过抽象,因为棋盘是个二维图形,我推荐使用二维数组,假设我们构建一个19行*<span style="color: #列的棋盘。
int qiPan[<span style="color: #][<span style="color: #];
//声明一个19行19列的数组来存储棋盘
for(int h=<span style="color: #;h&<span style="color: #;h++)
//对数组进行遍历,所有元素进行初始化(赋值),默认为0值
for(int l=<span style="color: #;l&<span style="color: #;l++)
qiPan[h][l]=<span style="color: #;
//对当前元素进行初始化(赋值),默认为0值
for(int h=<span style="color: #;h&<span style="color: #;h++)
for(int l=<span style="color: #;l&<span style="color: #;l++)
switch(qiPan[h][l])
case <span style="color: #:
//如果棋盘存储的元素为0时,我们打印 · 样式的字符
cout&&"·";
运行以上代码,我们可以得到一个棋盘。
<span style="color: #.那么拥有棋盘后,我们需要拥有一个光标,来对落子位置进行定点,那么我如何进行表示呢。我们可以在棋盘上找一个点,也就是在数组对应位置找一个元素,更改他的值,我们用8来表示光标,而找到这个元素我们需要知道其横纵坐标值,我们用两个int变量表示。
int X=<span style="color: #;
//<span style="color: #.声明并初始化光标的横纵坐标
int Y=<span style="color: #;
qiPan[<span style="color: #][<span style="color: #]=<span style="color: #;
//更改棋盘中光标所在元素的值为8
打印时,我们只要在switch 语句中添加一个case 选项 8即可:
case <span style="color: #:
//如果棋盘存储的元素为0时,我们打印 · 样式的字符
cout&&"╋";
获得光标后我们如何移动他呢?那么我们可以通过接受键盘输入的字符来控制光标的移动,本例中使用 W上,S下,A左,D右 来移动光标。
char xx=getch();
//控制台从键盘获得一个字符的函数(方法)
switch(xx)
Y=Y-<span style="color: #;
//使光标纵坐标-1
qiPan[Y][X]=<span style="color: #;
//将光标写入棋盘
qiPan[Y+<span style="color: #][X]=<span style="color: #;
//使原本位置的值还原
Y=Y+<span style="color: #;
qiPan[Y][X]=<span style="color: #;
qiPan[Y-<span style="color: #][X]=<span style="color: #;
X=X-<span style="color: #;
qiPan[Y][X]=<span style="color: #;
qiPan[Y][X+<span style="color: #]=<span style="color: #;
X=X+<span style="color: #;
qiPan[Y][X]=<span style="color: #;
qiPan[Y][X-<span style="color: #]=<span style="color: #;
3.这时,我们可以控制光标的移动了,接下来要实现落子操作,棋子又怎么表示呢?
我们可以使用两个int类型的值来表示:白子- 1,黑子- 2,那么我们只要在棋盘中更改光标所在位置元素的值为1或2就可以了,那么我们这么做可行吗?
我们回顾一下光标移动的代码,我们会发现,光标的移动会影响元素的变化,那么我们如果在棋盘中进行落子后,我们光标再次移动有可能会改变已记录的落子信息,为了使光标与棋子不冲突,我们使用两个图层,表示两个相同的棋盘。
&&&那么我就需要再声明一个棋盘,方法和1中一样:
int qiPanTwo[<span style="color: #][<span style="color: #];
//声明一个19行19列的数组来存储棋盘
for(int h=<span style="color: #;h&<span style="color: #;h++)
//对数组进行遍历,所有元素进行初始化(赋值),默认为0值
for(int l=<span style="color: #;l&<span style="color: #;l++)
qiPanTwo[h][l]=<span style="color: #;
//对当前元素进行初始化(赋值),默认为0值
好,棋盘2已经建立好了,那么我们如何落子?我们一定要选择执棋方后,在光标位置通过接收键盘输入的j落子,那么我们只需要在2.中switch语句中添加一个分支 case ’j’:即可,并且我们需要使用一个变量来表示玩家,我们可以在程序一开始定义:
int player=<span style="color: #;//设定玩家并进行初始化赋值
if(player==<span style="color: #)
//如果当前玩家为白色方时
qiPanTwo[Y][X]=<span style="color: #;
//通过棋盘1中的光标位置更改棋盘2
//中对应元素的值为1,也就是白棋落子
player=<span style="color: #;
//白棋落子后更换玩家
else if(player==<span style="color: #)
qiPanTwo[Y][X]=<span style="color: #;
player=<span style="color: #;
落子成功,接下来我们可以把它展示出来,由于此时我们要对两个棋盘进行统一的打印,那么我们使用swicth就不能进行统一的分支选择了,此时我们需要将1.中的打印内容改为:
if(qiPan[h][l]==<span style="color: #)
//由于光标所在图层应该在棋子图层之上,所以优先考虑。
cout&&"╋";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"·";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"●";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"○";
<span style="color: #.游戏规则,我们落子之后要进行一个判断,如何判断是否胜利呢?
此时,我们就要使用游戏规则来进行算法的分析,当落子位横、纵、斜5格内存在相互连接的五个同类棋子时,我们可认为执该棋者获胜,所以我们需要在各个方向进行判断。
int shu=<span style="color: #,heng=<span style="color: #,pie=<span style="color: #,na=<span style="color: #;//横竖撇捺计数器,累计到5则表示某方向出现五个相同的旗子
for(int i=<span style="color: #;i&=<span style="color: #;i++) //上
if(qiPanTwo[Y+i][X]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //下
if(qiPanTwo[Y-i][X]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //左
if(qiPanTwo[Y][X-i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //右
if(qiPanTwo[Y][X+i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //左下
if(qiPanTwo[Y+i][X-i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //右上
if(qiPanTwo[Y-i][X+i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //右下
if(qiPanTwo[Y+i][X+i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //左上
if(qiPanTwo[Y-i][X-i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
if(shu==<span style="color: #||heng==<span style="color: #||pie==<span style="color: #||na==<span style="color: #)
if(qiPanTwo[Y][X]==<span style="color: #)
cout&&"白子获胜!";
system("pause");
cout&&"黑子获胜!";
system("pause");
shu=<span style="color: #,heng=<span style="color: #,pie=<span style="color: #,na=<span style="color: #;
好 当完成这一步时,我们的程序基本就搞定了,剩下就是按照一开始的流程进行拼接了,其中我们在打印屏幕之前,要对上一次打印的结果进行擦除,使用函数
system(“cls”);//擦除控制台中所有已显示的字符
就可以完成了。
&完整代码(可运行):
#include&iostream&
#include&string&
#include&windows.h&
#include&conio.h&
using namespace
int main()
int player=<span style="color: #;
//定义一个玩家,当1时为白方,2时为黑方
//................................棋盘1..............................................
int qiPan[<span style="color: #][<span style="color: #];
//<span style="color: #.声明一个19行19列的数组来存储棋盘 1
for(int h=<span style="color: #;h&<span style="color: #;h++)
//对数组进行遍历,所有元素进行初始化(赋值),默认为0值
for(int l=<span style="color: #;l&<span style="color: #;l++)
qiPan[h][l]=<span style="color: #;
//对当前元素进行初始化(赋值),默认为0值
//...............................棋盘2................................................
int qiPanTwo[<span style="color: #][<span style="color: #];
//声明一个19行19列的数组来存储棋盘
for(int h=<span style="color: #;h&<span style="color: #;h++)
//对数组进行遍历,所有元素进行初始化(赋值),默认为0值
for(int l=<span style="color: #;l&<span style="color: #;l++)
qiPanTwo[h][l]=<span style="color: #;
//对当前元素进行初始化(赋值),默认为0值
//...............................光标声明.............................................
int X=<span style="color: #;
//<span style="color: #.声明并初始化光标的横纵坐标
int Y=<span style="color: #;
qiPan[<span style="color: #][<span style="color: #]=<span style="color: #;
//..............................显示...................................................
for(int h=<span style="color: #;h&<span style="color: #;h++)
for(int l=<span style="color: #;l&<span style="color: #;l++)
if(qiPan[h][l]==<span style="color: #)
cout&&"╋";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"·";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"●";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"○";
//..............................输入控制...............................................
while(true)
char xx=getch();
//控制台从键盘获得一个字符
switch(xx)
Y=Y-<span style="color: #;
//使光标纵坐标-1
qiPan[Y][X]=<span style="color: #;
//讲光标写入棋盘
qiPan[Y+<span style="color: #][X]=<span style="color: #;
//使原本位置的值还原
Y=Y+<span style="color: #;
qiPan[Y][X]=<span style="color: #;
qiPan[Y-<span style="color: #][X]=<span style="color: #;
X=X-<span style="color: #;
qiPan[Y][X]=<span style="color: #;
qiPan[Y][X+<span style="color: #]=<span style="color: #;
X=X+<span style="color: #;
qiPan[Y][X]=<span style="color: #;
qiPan[Y][X-<span style="color: #]=<span style="color: #;
if(player==<span style="color: #)
//如果当前玩家为白色方时
qiPanTwo[Y][X]=<span style="color: #;
//通过棋盘1中的光标位置更改棋盘2中对应元素的值为1,也就是白棋落子
player=<span style="color: #;
//白棋落子后更换玩家
else if(player==<span style="color: #)
qiPanTwo[Y][X]=<span style="color: #;
player=<span style="color: #;
//................................清屏操作................................................
system("cls");
//...............................打印.....................................................
for(int h=<span style="color: #;h&<span style="color: #;h++)
for(int l=<span style="color: #;l&<span style="color: #;l++)
if(qiPan[h][l]==<span style="color: #)
cout&&"╋";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"·";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"●";
else if(qiPanTwo[h][l]==<span style="color: #)
cout&&"○";
//.........................游戏规则..............................................
int shu=<span style="color: #,heng=<span style="color: #,pie=<span style="color: #,na=<span style="color: #;//横竖撇捺
for(int i=<span style="color: #;i&=<span style="color: #;i++) //上
if(qiPanTwo[Y+i][X]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //下
if(qiPanTwo[Y-i][X]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //左
if(qiPanTwo[Y][X-i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //右
if(qiPanTwo[Y][X+i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //左下
if(qiPanTwo[Y+i][X-i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //右上
if(qiPanTwo[Y-i][X+i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //右下
if(qiPanTwo[Y+i][X+i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
for(int i=<span style="color: #;i&=<span style="color: #;i++) //左上
if(qiPanTwo[Y-i][X-i]==qiPanTwo[Y][X]&&qiPanTwo[Y][X]!=<span style="color: #)
if(shu==<span style="color: #||heng==<span style="color: #||pie==<span style="color: #||na==<span style="color: #)
if(qiPanTwo[Y][X]==<span style="color: #)
cout&&"白子获胜!";
system("pause");
cout&&"黑子获胜!";
system("pause");
return <span style="color: #;
& & && &&&20:13:59 &&
阅读(...) 评论()

我要回帖

更多关于 五子棋源代码 的文章

 

随机推荐