连连看核心代码

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

枚举判断

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)
	{

	}
}
时间: 2024-10-17 11:41:14

连连看核心代码的相关文章

Libgdx: android单机斗地主支持局域网wifi联网的网络模块核心代码

这个作品是我最近写的,结合我的毕业设计的通信模块和之前的单机版斗地主.我已经上架到豌豆荚了,贴了点广告,看看能不能赚点茶钱.可是一点也不乐观.因此我想分享给大家源码.只要不用于商业. 下面先贴网络模块的核心代码,第一次写这种逻辑用的udp, 经验不够,没有写的那么好看. 这里是我上架的apk,大家下载来试试也无妨: 地址 http://www.wandoujia.com/apps/com.hj.joker package com.hj.net; import java.io.ByteArrayI

【转】Darwin Streaming Server 核心代码分析

无意中看到了dqzhangp的一篇博客,分析了DSS的核心架构,读完顿时感觉豁然开朗,茅塞顿开,写得非常的鞭辟入里,言简意赅,我想没有相当的功力是写不出这样的文章的,情不自禁转到自己空间来,生怕弄丢了. 基本概念   首先,我针对的代码是Darwin StreamingServer 6.0.3未经任何改动的版本. DarwinStreaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对DarwinStreaming Serv

Darwin Streaming Server 核心代码分析

基本概念 首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本. Darwin Streaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对Darwin Streaming Server核心代码的理解. Reactor模式是典型的事件触发模式,当有事件发生时则完成相应的Task,Task的完成是通过调用相应的handle来实现的,对于handle的调用是由有限个数的Thread来完

从阅读Discuz的核心代码并给出注释的经历分析程序员该如何阅读代码?

本文标签:   程序员 php Discuz的核心代码 框架 深度学习框架 阅读优秀的代码,是技术水平成长的最佳途径.记得每个进来的新人,我都做过阅读优秀代码的要求,但几乎都只能坚持很少一段时间而已. 前晚大家还在开玩笑的讨论,都是因为看了前人的一些写法,才学会了一些乱七八糟的花招. 晚上我又开始重新阅读Discuz的核心代码,花了1h多的时间,才完成一个core文件的注释. 注释后的代码: <?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * Th

微信公众号抢现金红包活动的核心代码分析

红包使用说明及规则,请仔细阅读 (1)必须是认证过的服务号,开通了微信支付功能:在商家后台充足够多的钱来发红包. (2)发送频率规则◆ 每分钟发送红包数量不得超过1800个:◆ 北京时间0:00-8:00不触发红包赠送:(如果以上规则不满足您的需求,请发邮件至[email protected]获取升级指引) (3)红包规则◆ 单个红包金额介于[1.00元,200.00元]之间:◆ 同一个红包只能发送给一个用户:(如果以上规则不满足您的需求,请发邮件至[email protected]获取升级指引

购物车核心代码

购物车关键代码,供自己查阅 /* * 添加到购物车 * */ public String addToCart(){ //------------------------------------- Map session = ActionContext.getContext().getSession(); if(session.get("cart")==null){ List<Book> cart = new ArrayList<Book>(); session.

通过游戏学python 3.6 第一季 第三章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释 可复制直接使用 娱乐 可封装 函数

1 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释 2 3 import random 4 number = random.randint(1,99)#设定答案(可以假设成年龄吧) 5 amount = random.randint(3,8) #设定猜测次数 6 print('本次游戏次数为',amount,'次') 7 8 count = 0 #设定初始次数 9 while count <= amount: #条件成立无限循环 10 try: 11 guess

深度揭密轮播插件核心代码的实现过程

轮播效果在网页中用的很多,swiper是其中最有代表性的作品,它支持水平和竖直滑动,还有反弹效果,兼容移动端和pc端.当然代码量也是相当大的,单是js就有5300行(3.4.0的未缩版本),若不考虑代码利用率和加载速度直接就用了,在移动端比较慎重,比如京东(m.jd.com)的轮播就没有用它,而是自己实现了类似的功能,代码量很少的样子(格式化之后看起来二三百行左右的样子).那么这个功能如果自己来实现,要怎么做呢? 准备工作 1. 准备几张图片(我这里放了四张) 2. 搭建目录结构(html+cs

OC 冒泡排序 -- 核心代码

//冒泡 核心代码 for (int i = 0; i < array.count - 1; i++) { int a = [array[i] intValue]; for (int j = i + 1; j < array.count; j++) { int b = [array[j]  intValue]; if (a > b) { [array exchangeObjectAtIndex:i withObjectAtIndex:j]; } } }