文档章节

连连看核心代码

梦想游戏人
 梦想游戏人
发布于 2015/06/02 16:00
字数 585
阅读 201
收藏 11

写连连看的时候的  用于判断消除的代码

枚举判断


int data[13][8];

class Point2D
{
public:
	int x;
	int y;
	Point2D(int xx, int yy):x(xx),y(yy){}
	Point2D() :x(0), y(0){}
}


class searchAlg
{
public:

	int search_0(Point2D pre, Point2D las, queue<Point2D> &tmp)
	{
		/*
		二维坐标0代表 空
		搜索0拐点
		return 0 代表未找到
		return N N代表路径数(两点差值)
		相邻返回1 隔一个返回2  以此类推
		*/
		int x_pre = pre.x;
		int y_pre = pre.y;
		int x_las = las.x;
		int y_las = las.y;


		//x变量
		if (y_pre == y_las)
		{
			int min = x_pre > x_las ? x_las : x_pre;
			int max = x_pre < x_las ? x_las : x_pre;

			tmp.push(Point2D(x_pre, y_pre));
			if (x_pre>x_las)
			{
				for (int x = max - 1; x > min; x--)
				{

					if (data[x][y_pre] == 0)
					{
						tmp.push(Point2D(x, y_pre));

					}
					else
					{
						return 0;
					}
				}

			}


			if (x_pre <= x_las) //等价
				//else
			{
				for (int x = min + 1; x < max; x++)
				{

					if (data[x][y_pre] == 0)
					{
						tmp.push(Point2D(x, y_pre));

					}
					else
					{
						return 0;
					}
				}

			}

			return (max - min); //代表队列多少个数据
		}






		///y变量
		if (x_pre == x_las)
		{

			int min = y_pre > y_las ? y_las : y_pre;
			int max = y_pre < y_las ? y_las : y_pre;

			tmp.push(Point2D(x_pre, y_pre));

			if (y_pre>y_las)
			{
				for (int y = max - 1; y > min; y--)
				{

					if (data[x_pre][y] == 0)
					{
						tmp.push(Point2D(x_pre, y));
					}
					else
					{
						return 0;
					}
				}
			}

			if (y_pre <= y_las)
			{
				for (int y = min + 1; y < max; y++)
				{

					if (data[x_pre][y] == 0)
					{
						tmp.push(Point2D(x_pre, y));
					}
					else
					{
						return 0;
					}
				}

			}

			return (max - min); //代表队列多少个数据

		}




		return 0;
	}



	int search_1(Point2D pre, Point2D las, queue<Point2D> &tmp)
		//1个拐点
	{
		if (data[las.x][pre.y] == 0)//右下
		{
			if (search_0(pre, Point2D(las.x, pre.y), tmp) != 0)
			{
				if (search_0(Point2D(las.x, pre.y), las, tmp) != 0)
				{
					return  tmp.size();
				}
			}
		}

		for (; !tmp.empty();)//清空
		{
			tmp.pop();
		}


		if (data[pre.x][las.y] == 0)//左上
		{
			if (search_0(pre, Point2D(pre.x, las.y), tmp) != 0)
			{
				if (search_0(Point2D(pre.x, las.y), las, tmp) != 0)
				{

					return tmp.size();
				}
			}
		}

		return 0;
	}



	int search_2(Point2D pre, Point2D las, queue<Point2D> &tmp)
	{//2拐点

		//凹型y+
		for (int i = 0; i < y; i++)
		{

			for (; !tmp.empty();)//清空
			{
				tmp.pop();
			}


			if (data[las.x][las.y + i] == 0)//凹型
			{
				if (search_1(pre, Point2D(las.x, las.y + i), tmp) != 0)
				{
					if (search_0(Point2D(las.x, las.y + i), las, tmp) != 0)
					{

						return tmp.size();
					}
				}
			}
		}




		for (; tmp.empty() == false;)
		{
			tmp.pop();
		}



		//凹型y-
		for (int i = 0; i < y; i++)
		{

			for (; !tmp.empty();)//清空
			{
				tmp.pop();
			}


			if (data[las.x][las.y - i] == 0)//凹型
			{
				if (search_1(pre, Point2D(las.x, las.y - i), tmp) != 0)
				{
					if (search_0(Point2D(las.x, las.y - i), las, tmp) != 0)
					{

						return tmp.size();
					}
				}
			}
		}




		for (; tmp.empty() == false;)
		{
			tmp.pop();
		}






		//凹型x+
		for (int i = 0; i < x; i++)
		{

			for (; !tmp.empty();)//清空
			{
				tmp.pop();
			}


			if (data[las.x + i][las.y] == 0)//凹型
			{
				if (search_1(pre, Point2D(las.x + i, las.y), tmp) != 0)
				{
					if (search_0(Point2D(las.x + i, las.y), las, tmp) != 0)
					{

						return tmp.size();
					}
				}
			}
		}



		for (; tmp.empty() == false;)
		{
			tmp.pop();
		}



		//凹型x-
		for (int i = 0; i < x; i++)
		{

			for (; !tmp.empty();)//清空
			{
				tmp.pop();
			}


			if (data[las.x - i][las.y] == 0)//凹型
			{
				if (search_1(pre, Point2D(las.x - i, las.y), tmp) != 0)
				{
					if (search_0(Point2D(las.x - i, las.y), las, tmp) != 0)
					{

						return tmp.size();
					}
				}
			}
		}







		return 0;

	}


	int x;
	int y;

	searchAlg(int l, int w) :y(l), x(w)
	{

	}
}


© 著作权归作者所有

上一篇: 自定义 ListView
下一篇: 画圆
梦想游戏人
粉丝 41
博文 461
码字总数 132517
作品 0
成都
私信 提问
做游戏,学编程(C语言) 8 英雄联盟连连看

这次教程,学习15级同学大一时编写的C语言游戏开发大作业:英雄联盟连连看。最终代码2250行,gif动图效果如下(在电脑上点击图片观看): 使用了很多商业游戏的图片音乐素材,仅用于编程教学...

童晶
2017/01/19
0
0
宠物连连看2完整Android代码项目

宠物连连看2完整代码,该源码支持多种风格的连连看游戏的,如有国旗类的连连看,还有宠物连连看的等,基本的功能实现了无尽关卡挑战模式,还有催命倒计时,以及链接提示,暂停,多样图片集,...

tianlongbamu
2015/03/19
70
0
几个Python小案例,爱上Python编程!

Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python语法简洁清晰。 语法简洁清晰,那么我们用少量的Python代码能做哪些有趣的东西?温馨提示:文末必看。 一、...

qq1622479435
2018/06/17
0
0
案例教程—200行python实现杀手级连连看外挂程序

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/06/11
0
0
Android源码50例汇总,欢迎各位下载

下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载。 源码实例如下: 《Android应用开发揭秘》源代码推荐 http://down.51cto.com/data...

程序袁_绪龙
2015/01/23
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
31分钟前
4
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
46分钟前
90
5
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部