模仿QQ连连看【思路、java源码】
2008-02-23 09:53:31来源:互联网 阅读 ()
模仿QQ连连看【思路、源码】
目 录
一 连连看的要求
二 任意两点能否连通
三 地图无解提示
四 连接提示功能
五 道具问题
六 地图问题
一、连连看的要求
1:要连接的两点上的图形是相同的。
2:两点间存在一条没有“障碍”的并且折点不超过两个的路线。
那么分析一下可以看到,一般分为三种情况
【图例说明】
假设以一个2维数组来表示一张连连看的地图,数组中
元素值为0的代表游戏界面中的空格子,值大于0的代表游戏
中的各种连接对象(1代表星星、2代表企鹅之类)
情况一:要连接的两点在同一条直线上
0 0 0 0 0 0
0 2 0 0 0 2 * ------ *
0 0 0 0 0 0
情况二:经过一个折点相连( 号代表折点)
0 0 0 0 0 0
0 2 0 0 0 * ------
0 0 0 0 2 ------ *
(两条路都可连通)
情况三:经过两个折点相连(针对企鹅来说,即数字2)
0 0 0 0 0 0 0 0 0 0
0 2 0 1 0 2 0 2 0 1 0 2
0 0 0 0 0 0 或者 0 0 0 0
由于有1这个障碍,所以需要两个折点才能连通
二、任意两点能否连通
寻路算法是整个游戏的核心算法。网上实现的版本也很多,这里
的方法是我比较容易理解的一个方法^o^ ,还希望大家能提出宝
贵的批评意见和建议,谢谢了。
思路如下:
1 一条直线上两点能否相连是好判断的(一个简单的循环判断即可)
2 对于上面图例的情况二,折点的坐标是固定的,即折点要么是
[连点1的坐标x,连点2的坐标y]要么是[连点1的坐标y,连点2的坐标x]
y
|
|
| * ------
| ------ *
---------------- x
所以,我们只需判断连点1到折点能否连通,连点2到折点能否连通即可
得知连点1和连点2能否连通。并且由于折点与两个连点分别是在同一条
直线上,所以可以由第一步轻松判断得出结论。
3 将情况三转化为情况二,(这一步是该算法中最影响性能和需要改进的地方)
怎么转化?
0 0 0 0
0 2 0 1 0 2
0 0 0 0 0 0 (情况三)
将和其中一个连点在同一条直线上的折点当作该连点,那么情况三就转化为
了情况二
0 2 0 0 0
0 * 0 1 0 2 (星号为原先的连点)
0 0 0 0 0 0 (转化后的情况三,最左上的折点已经被替换)
现在两个连接对象2之间的情形,已经变为情况二了。
4 由上可知,寻找这个被替换的折点就成了关键。因为其坐标不固定,所以只
好递归一个一个寻找了。寻找这个点需要做很多的优化(偶也没想到多少)
2 0 0 0 0 0 * 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 1 2 0 0 0 * 0 0 0
0 0 0 1 2 * 0 2 1 0 0 0 0 2 1 2 0 0
上面三个图, 号是折点,*号就是需要被替换的折点
假设A、B两点是同一个图形,来思考一下下面的路线
0 0 0 0 0 0
0 0 1 0 B 0
0 0 0 0 0 0
0 A AA 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0
如果我们的算法从向右开始寻找,顺时针方向旋转,那么A点先向右移动1格
到达AA的位置,这时测试AA与B是否能连通(按情况二处理),结果不能,因
为折点出都有“障碍”(两个1),然后A点在移动,到达AAA处
0 0 0 0 0 0
0 0 1 0 B 0
0 0 0 0 0 0
0 A AA AAA 1 0
0 0 0 0 0 0
0 0 0 0 0 0
在AAA处,再次与B点测试连通的时候(按情况二处理),结果是可以,所以
A点可以与B点连通,路线为
*
|
* ---
在增加一个障碍
0 0 0 0 0 0
0 0 1 1 B 0
0 0 0 0 0 0
0 A AA AAA 1 0
0 0 0 0 0 0
0 0 0 0 0 0
这次,当寻找到AAA位置时,结果为不能连通。在向右,由于有障碍,所以向
右这条路,宣告失败,递归返回到原点,换一个方向从A点向下在开始判断
0 0 0 0 0 0
0 0 1 1 B 0
0 0 0 0 0 0
0 A 0 0 1 0
0 AA 0 0 0 0
0 AAA 0 0 0 0 (向下仍不能连通)
向左,一样。最后向上
0 0 0 0 0 0
0 0 1 1 B 0
0 AA 0 0 0 0
0 A 0 0 1 0
0 0 0 0 0 0
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Hibernate FAQ
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash