五子棋略说一二

话说五子棋的游戏大家都玩过,而且有的还是大牛,但如果叫你自己写一个五子棋的游戏自己玩,估计你就变菜鸟了吧,是的,我就是属于这类家伙,但值得说明一下的是,这是之前的我,之前吗没有接触过五子棋游戏开发的我,而现在的我敢保证,自己写出来的五子棋算法估计你都下不赢,呵呵。为什么这么说呢,确实,这段时间里,一直在进行java培训,真心学到的东西真不少,下面就分享下自己写五子棋的一些薄见咯。。。

要想写一个优秀的五子棋算法,你就必须得了解五子棋的各种规则。首先来讲下人人算法,在五子棋算法中,数人人对战的算法最容易,也是最能给人信心的,在没有接触五子棋编程之前,想都不敢想。
在五子棋的人人算法中,较难的一部分是判断输赢的部分,现在我就就这问题说下我的思路。我觉得要想实现五子棋能判断输赢,一个思路就是想办法确定你当前下的子的八个方向上的其他子是否与你下的子的颜色是一样的,如果有五个连续相连的子,就可以判断赢了。然而这倒是是怎么实现的呢?很简单,我们要想知道当前下的子的八个方向上的子的颜色,我们只需定义一个二维数组,保存我们所有下过的子的情况,当我们在判断我们当前所下的子是否与其他方向上的子颜色是一样的时候,我们就可以直接遍历数组,寻找我们所期望的结果,接下来就看下我是怎么实现的,下面是部分代码。

//判断左右是否有5连
public boolean checkwin_r_l()
{
int count1=1;

//向右
for(int i=X2+1;i<allChess[X2].length;i++){
if(allChess[i][Y2]==allChess[X2][Y2]){

count1++;
}
else
break;
}
//向左
//当X的坐标为50时,X2=50/50-1=1,X2-1=1-1=0,如小于0,就说明到了最左边了。。
for(int i=X2-1;i>=0;i--){
if(allChess[i][Y2]==allChess[X2][Y2]){

count1++;


}
else
break;
}
if(count1>=5)
{
return true;
}
return false;
}


//判断上下是否有5连
public boolean checkwin_u_d()
{
int count2=1;

//向上
for(int i=Y2+1;i<allChess[X2].length;i++){

if(allChess[X2][i]==allChess[X2][Y2]){

count2++;
}else
break;
}
//向下
for(int i=Y2-1;i>=0;i--){
if(allChess[X2][i]==allChess[X2][Y2]){

count2++;
}else
break;
}
if(count2>=5)
{
return true;
}

return false;
}


//判断左上右下是否有5连
public boolean checkwin_zu_yd()
{
int count3=1;

//左上
for(int i=X2-1,j=Y2+1;i>=0&&j<allChess[i].length;i--,j++){

if(allChess[i][j]==allChess[X2][Y2]){

count3++;

}else
break;
}
//右下
for(int i=X2+1,j=Y2-1;i<allChess.length&&j>=0;i++,j--){

if(allChess[i][j]==allChess[X2][Y2]){

count3++;

}else
break;
}
if(count3>=5)
{
return true;
}

return false;
}



//判断右上左下是否有5连
public boolean checkwin_yu_zd()
{
int count4=1;

//右上
for(int i=X2+1,j=Y2+1;i<allChess.length&&j<allChess[i].length;i++,j++){
if(allChess[i][j]==allChess[X2][Y2]){
count4++;
}else break;
}
//左下
for(int i=X2-1,j=Y2-1;i>=0&&j>=0;i--,j--){
if(allChess[i][j]==allChess[X2][Y2]){
count4++;
}else break;
}
if(count4>=5)
{
return true;
}

return false;
}


上面是人人对战的思路,但五子棋的最重要的一个算法就是人机对战的算法了,接下来我也就小谈下我的思路。
要想实现人机对战,其实思路就和人人对战的差不多,只不过当我们在下一个子的时候,接下来要下子的就不在是我们了,而是电脑,也就是说,要写一个算法,产生一个棋子,代替人人对战,而成为人机对战,那么这个算法怎么写呢?别急,待我慢慢道来。首先,我们想想,电脑下棋的时候,有两种情况,一种是不断地堵我们棋子,不让我们赢,还有一种就是根据自己所连续的棋子额个数选择继续落子,而电脑的这两种行为都是靠我们的算法实现的,当我们在下完一个子后,电脑就检索我们当前所下的子的八个方向,根据连子的不同情况合理地赋予不同的权值,最后找出权值最大的空白点,进行电脑落子。由于人机对战的代码有点长,爱这里就不贴出来了。。相信大家看到这个思路后,都可以自己写出属于自己的五子棋算法了吧。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值