连连看算法实现

最近做了一个连连看的游戏,虽然还不能作为产品使用,但关键算法已经成型。

算法

连连看的连接成功的方式可简单叙述为,两张相同图片在不途径其他图片的情况下,用不多于两个拐角的直线连接起来。
再简单的叙述,可表示为,两相同图片连接途中最多只有三条不会被中断的直线。
因此我们只需写好一条直线,然后是两条直线,然后是三条直线的方法。如果方法可行,就返回一个boolean类型的参数,为true即消除两相同图片,反之,不消除。

默认大家已经知道怎么用数组的方式判断行和列,以及随机出最后的模型。在此,不多做叙述。
判断图片是否相同,可在监听器中实现,也不多叙述。
直接跳到算法,如何正确的将两图片连接。

首先实现,只有一条直线的情况:
显然一条直线时,必然是同行或者同列的。

请看

public boolean zero(int width, int length, int width_1, int length_1, Graphics g, int[][] image) {
   
		boolean j=false;  //width,length指的是第一张图片的行列,width_1,length_1指的第二张图片的行列
		//g用来画连接线,image为我的图片代码,0,1,2,3,4,5为不同图片,6为空图片,
		//不了解的话可以看我放在末尾的我敲的图片排列代码
		if(width==width_1){
   
			if(Math.abs(length-length_1)==1){
   
				j=true;
				
			}
			else if(Math.abs(length-length_1)>=2){
   
				if(length<length_1){
   
					for(int i=1;i<Math.abs(length-length_1);i++){
   
						if(image[width][length+i]!=6){
       //图片不为空,6指的是空图片,下同
							j=false;
							break;
						}
						else{
   
							j=true;
							
						}
					}
				}
				else if(length>length_1){
   
					for(int k=1;k<Math.abs(length-length_1);k++){
   
						if(image[width][length_1+k]!=6){
   
							j=false;
							break;
						}
						else{
   
							j=true;
							
						}
					}
				}
			}
		}
	 if(length==length_1){
   
		 if(Math.abs(width-width_1)==1){
   
			 j=true;
		 }
		 else if(Math.abs(width-width_1)>=2){
   
			 if(width<width_1){
   
				 for(int i=1;i<Math.abs(width-width_1);i++){
   
					 if(image[width+i][length]!=6){
   
						 j=false;
						 break;						
					 }
					 else{
   
						 j=true;
					 }
				 }
			 }
			 else if(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值