- 浏览: 576575 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
hxlniada:
[color=darkred][/color][size=sm ...
利用Handler来更新android的UI -
jack_ye:
...
检测Android中触摸屏手势的动作与坐标 -
z278013421:
Android Services使用示例 -
东方vs不败:
写的不错,挺好的
利用Handler来更新android的UI -
liangxping:
就是双缓存机制而已。
Android中SurfaceView的使用示例
因为有朋友在站内信中问到连连看的具体算法,所以我就把算法post出来,这个算法也是参考网上Flash游戏的算法改写的,原来的参考信息已经找不到了,不过非常感谢那些无私的朋友。
改写的连连看算法如下:
前置条件:用一二维数组存放Map,-1表示没有图案可以连通,非-1表示不同的图案。
首先是横向检测:
private boolean horizon(Point a, Point b) { if(a.x == b.x && a.y == b.y)//如果点击的是同一个图案,直接返回false return false; int x_start = a.y <= b.y ? a.y : b.y; int x_end = a.y <= b.y ? b.y : a.y; for(int x = x_start + 1; x < x_end; x++)//只要一个不是-1,直接返回false if(map[a.x][x] != -1){ return false; } return true; }
其次是纵向检测:
private boolean vertical(Point a, Point b) { if(a.x == b.x && a.y == b.y) return false; int y_start = a.x <= b.x ? a.x : b.x; int y_end = a.x <= b.x ? b.x : a.x; for(int y = y_start + 1; y < y_end; y++) if(map[y][a.y] != -1) return false; return true; }
一个拐角的检测:
如果一个拐角能连通的话,则必须存在C、D两点。其中C点的横坐标和A相同,纵坐标与B相同,D的横坐标与B相同,纵坐标与A相同。
private boolean oneCorner(Point a, Point b) { Point c = new Point(a.x, b.y); Point d = new Point(b.x, a.y); if(map[c.x][c.y] == -1) { boolean method1 = horizon(a, c) && vertical(b, c); return method1; } if(map[d.x][d.y] == -1) { boolean method2 = vertical(a, d) && horizon(b, d); return method2; } else { return false; } }
两个拐角的检测:
这个比较复杂,如果两个拐角能连通的话,则必须存在图中所示的连线,这些连线夹在A、B的横、纵坐标之间,这样的线就以下这个类存储,direct是线的方向,用0、1表示不同的方向
LIne类结构如下:
class Line { public Point a; public Point b; public int direct; public Line() { } public Line(int direct, Point a, Point b) { this.direct = direct; this.a = a; this.b = b; } }
从A、B点的横纵两个方向进行扫描,就是Scan函数做的事情,把合适的线用LinkList存起来。
private LinkedList scan(Point a, Point b) { ll = new LinkedList<Line>(); //Point c = new Point(a.x, b.y); //Point d = new Point(b.x, a.y); for(int y = a.y; y >= 0; y--) if(map[a.x][y] == -1 && map[b.x][y] == -1 && vertical(new Point(a.x, y), new Point(b.x, y))) ll.add(new Line(0, new Point(a.x, y), new Point(b.x, y))); for(int y = a.y; y < map.row; y++) if(map[a.x][y] == -1 && map[b.x][y] == -1 && vertical(new Point(a.x, y), new Point(b.x, y))) ll.add(new Line(0, new Point(a.x, y), new Point(b.x, y))); for(int x = a.x; x >= 0; x--) if(map[x][a.y] == -1 && map[x][b.y] == -1 && horizon(new Point(x, a.y), new Point(x, b.y))) ll.add(new Line(1, new Point(x, a.y), new Point(x, b.y))); for(int x = a.x; x < map.column; x++) if(map[x][a.y] == -1 && map[x][b.y] == -1 && horizon(new Point(x, a.y), new Point(x, b.y))) ll.add(new Line(1, new Point(x, a.y), new Point(x, b.y))); return ll; }
最后是两个拐角的算法:
取出LinkList里面的线,测试A与B到该线的两点是否连通。
private boolean twoCorner(Point a, Point b) { ll = scan(a, b); if(ll.isEmpty()) return false; for(int index = 0; index < ll.size(); index++){ Line line = (Line)ll.get(index); if(line.direct == 1){ if(vertical(a, line.a) && vertical(b, line.b)){ return true; } } else if(horizon(a, line.a) && horizon(b, line.b)){ return true; } } return false; }
前面的函数有以下这个总的调用函数来调用,传入两个点,就可以判断这两个点是否符合连连看的算法了:
public boolean checkLink(Point a,Point b){ if(map[a.x][a.y] != map[b.x][b.y])//如果图案不同,直接为false return false; if(a.x == b.x && horizon(a, b)) return true; if(a.y == b.y && vertical(a, b)) return true; if(oneCorner(a, b)) return true; else return twoCorner(a, b); }
评论
3 楼
ostrichmyself
2009-09-29
不错, 算法才是价值所在
2 楼
pure
2009-09-29
嗯,多谢分享宝贵经验,学习了。
1 楼
citysir
2009-09-29
非常不错呀
发表评论
-
类似Chome的翻转效果
2012-09-18 23:14 2348简单的demo,屏幕上下滑动翻转View,类似Android ... -
3D编程基础数学之旋转及在Android中的应用
2012-02-10 00:11 0最近因为兴趣,看了一些3D编程的书,有种感觉就是写这些书的作者 ... -
Android中屏幕Density对BitmapDrawable的影响
2011-07-08 21:44 7850很早之前写的文章了,发在这里记录一下。 在之前的 ... -
Android程序与Javascript的交换
2010-04-16 21:40 0hello! -
Android Services使用示例
2010-01-12 16:50 14051Android开发中,当需要创建在后台运行的程序的时候,就要 ... -
Android游戏开发之服务器端
2010-01-09 16:38 6675首先我不知道这篇文章发到Android开发板块是否适合的,因为 ... -
Android ListView常用用法
2009-12-03 20:56 36607ListView是比较常用的控件,但一直都觉得创建ListVi ... -
Android View添加 Listener 小技巧示例
2009-12-02 15:35 9796在开发中为控件添加Listener是非常常见的工作,最简单的添 ... -
Android Gesture 手势识别使用实例
2009-10-20 11:56 10160很高兴能在Android1.6的sdk看到手势识别这一 ... -
Android第二个游戏 DragonFeed(勇者喂恶龙)
2009-10-12 17:57 7975这是参加学校一个小比赛的参赛游戏,之前一直在忙 认证考试和项目 ... -
Android 震动示例--心跳效果
2009-10-02 23:58 7678正在开发第二个游戏,计时就要结束的时候,为了营造紧张的气氛, ... -
Android adb的使用略解
2009-09-30 16:08 40226安卓网的一个帖子,写得不错,记下来 ADB全称Android ... -
android游戏开发之选关画面
2009-09-21 15:44 3981在游戏开发中,往往要提供选关的页面,选择关卡可以简单地使用li ... -
Android重力感应Demo
2009-09-11 23:33 13996android中的很多游戏的游戏都使用了重力感应的技术,但其a ... -
Android游戏开发之爆炸效果
2009-09-02 00:29 18368在做Android游戏MagicBubble开发的时候 ... -
Android 的第一个游戏
2009-08-18 08:48 7885学了android1个多月,做了一款连连看游戏,上了andro ... -
Android canvas的save()和restore()用法
2009-08-05 12:21 19839在读Android SDK里面的samples里面游戏的时候, ... -
Android 2d物理引擎Box2d的使用示例
2009-08-04 09:06 14207Box2d是一个很出名的2d物理引擎,大家可以google之。 ... -
利用Handler更新Android UI的另一种方法
2009-07-29 11:28 11851文字程序很简单,一个View,一个Activity,利用han ... -
android布局学习利器-Hierarchy Viewer
2009-07-27 18:17 8075Hierarchy Viewer 帮你分析应用程序UI布局 ...
相关推荐
android 连连看算法android 连连看算法android 连连看算法
基于Android开发的连连看小游戏源码。 基于Android开发的连连看小游戏源码.基于Android开发的连连看小游戏源码.基于Android开发的连连看小游戏源码.基于Android开发的连连看小游戏源码.基于Android开发的连连看小...
android连连看源码,android连连看源码,android连连看源码,android连连看源码,android连连看源码,android连连看源码,android连连看源码,android连连看源码,android连连看源码,android连连看源码,android...
[Android游戏源码]-水果连连看源码,次源码适合安卓游戏开发初学者学习,内有注释。
本项目是一款android连连看游戏,应该说这个游戏太强大了,能触屏连连看,过关。用到技术很多,有小算法,相同的icon就会消掉项目中代码层次分明,大部分方法都加了详细的注释。(项目采用GBK编码)。之前也有很多...
C++实现的连连看算法,一个例子可以明白C++语法和开发 的基础
连连看游戏的开发
android游戏连连看源码,android游戏连连看源码
我发现原来的那个算法进行了一些不必要的检查, 而且在两点不在同一直线上时只考虑了一种情况(向右扩散), 还有三种(向左,上,下)没有考虑。其实还有一种(Z)型没有考虑,Z型我就没写了, 它采用从左到右或从...
java版连连看算法java版连连看算法java版连连看算法
android系统开发的小游戏,连连看,直接导入就可以使用,非常好的东西哦
小游戏连连看的详细算法介绍,供大家参考学习,是doc格式。
android游戏开发, 连连看源码, 适合初学者
用android开发的海贼王连连看游戏源码
Android小游戏连连看源码,完美运行于Android Studio,代码结构简单清晰,适合初学者。
基于Android平台的连连看游戏的开发与实现【毕业作品】.pdf基于Android平台的连连看游戏的开发与实现【毕业作品】.pdf基于Android平台的连连看游戏的开发与实现【毕业作品】.pdf基于Android平台的连连看游戏的开发与...
基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的...
资源名称:Android游戏开发工程师-手机连连看游戏 教程内容:1.创建工程2.界面设计-13.界面设计-24.数据结构设计-15.数据结构设计-26.开始游戏-17.开始游戏-28.消子-29.界面更新-110.界面更新-211.两条直线消子-112...
java游戏开发-连连看2-实现游戏算法.doc