迷宫小算法之连连看进阶

本文介绍了作者完成的连连看进阶算法,包括行竖判断、拐点判断和两个拐点的消除方法。在实现过程中发现存在小bug,如三拐消除和围住的图形消除情况。作者计划修复这些bug,并对此感到满意。
摘要由CSDN通过智能技术生成

现在是九点四十多快十点了,我做完了左哥给我们布置的作业了。

连连看的进阶,迷宫算法。

连连看的规则是只能消去行竖或者是一拐和俩拐的。

所以我写了四个方法,两个是行竖判断,如果是相连或者中间有空隙就消除。

一个拐点的方法是判断两个相同图形所组成矩阵的对角,判断两对角是否为空,然后再用行竖方法判断。

两个拐点的方法是:从第一个选中的图形向四周出发,一个个点判断一个拐点的消除方法。

代码如下:

//判断行消除
	public boolean checkRow(int Row1,int Column1,int Row2,int Column2){
		if(Row1 == Row2){
			int ColumnMin = Math.min(Column1, Column2);
			int ColumnMax = Math.max(Column1, Column2);
			for(int i=ColumnMin+1;i<ColumnMax;i++){
				if(!"".equals(model.value[Row1][i])){
					return false;
				}
			}
			return true;
		}
		return false;
	}
	//判断列消除
	public boolean checkColumn(int Row1,int Column1,int Row2,int Column2){
		if(Column1 == Column2){
			int RowMin = Math.min(Row1, Row2);
			int RowMax = Math.max(Row1, Row2);
			for(int i=RowMin+1;i<RowMax;i++){
				if(!"".equals(model.value[i][Column1])){
					return false;
				}
			}
			return true;
		}
		return false;
	}
	//判断一个拐点消除
	public boolean onePoint(int Row1,int Column1,int Row2,int Column2){
		//如果同行同列则无一个拐点
		if(Row1 == Row2||Column1 == Column2){
			return false;
		}
		//两个对角拐点:
		//			Row1   Column2		Row2    Column1
		//判断拐点Row1 Column2是否为空
		if("".equals(model.value[Row1][Column2])){
			if(checkRow(Row1, Column1, Row1, Column2)&&
					checkColumn(Row1, Column2, Row2, Column2)){
				return true;
			}
		}
		//判断拐点Row2 Column1是否为空
		if("".equals(model.value[Row2][Column1])){
			if(checkColumn(Row1, Column1, Row2, Column1)&&
					checkRow(Row2, Column1, Row2, Column2)){
				return true;
			}
		}
		return false;
	}
	//判断两个拐点消除
	public boolean twoPoint(int Row1,int Column1,int Row2,int Column2){
		//向左寻找
		for(int i=Row1;i>0;i--){
			if("".equals(model.value[i][Column1])&&onePoint(i, Column1, Row2, Column2)){
				return true;
			}
		}
		//向右寻找
		for(int i=Row1;i<model.value.length;i++){
			if("".equals(model.value[i][Column1])&&onePoint(i, Column1, Row2, Column2)){
				return true;
			}
		}
		//向上寻找
		for(int i=Column1;i>0;i--){
			if("".equals(model.value[Row1][i])&&onePoint(Row1, i, Row2, Column2)){
				return true;
			}
		}
		//向下寻找
		for(int i=Column1;i<model.value[0].length;i++){
			if("".equals(model.value[Row1][i])&&onePoint(Row1, i, Row2, Column2)){
				return true;
			}
		}
		return false;
	}

以下是我的连连看用四个方法消除后的游戏结局:


这个游戏还有点小小的bug:做完了两拐的方法之后发现了有时候可以三拐消除、有时候甚至是可以消除被围住的图形委屈委屈委屈

虽然有点无伤大雅的小bug。

但是做完了连连看,我还是挺开心的微笑微笑微笑,现在还没下课,我就继续看看怎么补一下bug吧。再见再见再见

基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash中….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值