JAVA实现网络对战带技能五子棋(二)——后台判断算法

JAVA实现网络对战带技能五子棋(二)——后台判断输赢算法

上文已经实现了图形界面制作,那么如何判断胜负呢?
一个自然的想法是通过矩阵储存棋盘上棋子的信息,无棋子则为0,白棋为1,黑棋为0。用户每次在棋盘上下棋子的同时会更新棋盘矩阵,然后通过矩阵判断输赢,若胜负未分则进入下一回合,反之则结束游戏。

创建棋盘矩阵

观察之前制作的棋盘,大小为600×510,横线33条、纵线39条(棋子只能画在纵、横线的交点,且棋盘边界不能下棋子),线条之间的距离为15。
因此,初步的想法是建一个33×39大小的矩阵,矩阵(0,0)对应棋盘左上角位置、(33,39)对应棋盘右下角位置。但是,这样有一个弊端,我们先讨论赢棋的情况:在这里插入图片描述

当最后一步棋子周围的同属性棋子”—“、”|“、”\“、”/“连续排列时,即判断最后一步的棋子方赢了(画实心圈只是为了突出它是最后一步)。此时,若创建33×39大小的矩阵,当最后一步下在离边界1-3个点的位置时,若往左、右、上、下索引时会超出矩阵的索引,需要分情况处理(离边界近、离边界远)。为了减少编程复杂度、加快判断速度,因此选择牺牲一些储存量,创建41×47大小的矩阵(其中只有第5-37行、第5-43行有效)

public static int[][] xy=new int[41][47];       //扩充后的矩阵(需转换坐标)

根据矩阵判断输赢

每下一步棋都需要判断是否构成”—“、”|“、”\“、”/“,若赢了则将结果result置为最后一步棋子的属性。具体代码如下:

public int result=0;     //判断结果-1为黑棋赢,1为白棋赢
public void count_module() {
		
		//判断是否赢了
		if(xindex>=4&&yindex>=4&&xindex<=42&&yindex<=36)
		{
			for(int i=-4;i<=0;i++)
			{
				int temp1=0;   //构成——
				int temp2=0;   //构成|
				int temp3=0;   //构成\
				int temp4=0;   //构成/
				for(int j=i;j<=i+4;j++)
				{
	                temp1+=xy[yindex][xindex+j];
	                temp2+=xy[yindex+j][xindex];
					temp3+=xy[yindex+j][xindex+j];
					temp4+=xy[yindex-j][xindex+j];
				}
				if(temp1==5||temp1==-5)
				{
					result=temp1/5;
				}else if(temp2==5||temp2==-5)
				{
					result=temp2/5;
				}
				else if(temp3==5||temp3==-5)
				{
					result=temp3/5;
				}
				else if(temp4==5||temp4==-5)
				{
					result=temp4/5;
				}
			}
		}
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值