-
连连看的算法用swing做的连连看谁能指点一下10
java 开发连连看主要用到是一个数组的运算。里面的判断中用到了。for if 最为多
我听说。如果项目经理看到你的代码中if语句用得最,他就会叫你重写。说是思路的问题。谁能过来看看帮忙优化一下代码。或是有更好的方法。在一下有一个已实现的游戏。希望大家看看。帮帮指点一下。
public class Arithmetic { public static boolean opinion(Point p1, Point p2) { if (Main.map[p1.x][p1.y] == Main.map[p2.x][p2.y]) { if (horizontal(p1, p2) || vertical(p1, p2) || line2(p1, p2)||line3(p1,p2)) { return true; } else { return false; } } else { return false; } } /** * ||line2(p1,p2) 判断水平上的两点(一条直线的) * * @param p1是弟一个点 * @param p2是弟二个点 * @return 反回是一个布尔如果是true 就是可以把这两点消除。 */ public static boolean horizontal(Point p1, Point p2) { if (p1.x == p2.x) { Point temp = null; if (p1.y > p2.y) { temp = p1; p1 = p2; p2 = temp; } if (p1.y + 1 == p2.y) {// 在旁边 return true; } for (int i = p1.y + 1; i < p2.y; i++) {// 在对面 if (Main.map[p1.x][i] != -1) { return false; } } return true; } return false; } /** * 判断垂直上的两点(一条直线的) * * @param p1是弟一个点 * @param p2是弟二个点 * @return 反回是一个布尔如果是true 就是可以把这两点消除。 */ public static boolean vertical(Point p1, Point p2) { if (p1.y == p2.y) { Point temp = null; if (p1.x > p2.x) { temp = p1; p1 = p2; p2 = temp; } if (p1.x + 1 == p2.x) {//旁边 return true; } for (int i = p1.x + 1; i < p2.x; i++) { if (Main.map[i][p1.y] != -1) { return false; } } return true; } return false; } /** * * @param p1是弟一个点 * @param p2是弟二个点 * @return 反回是一个布尔如果是true 就是可以把这两点消除。 两条线的情况的下。有没有存在这两点 */ public static boolean line2(Point p1, Point p2) { Point temp = null; if (p1.y > p2.y) { temp = p1; p1 = p2; p2 = temp; } Point p3, p4; if (Main.map[p2.x][p1.y] == -1) {// 左折角 p3 = new Point(p2.x, p1.y); if(horizontal(p3, p2) && vertical(p1, p3)){ return true; } } if (Main.map[p1.x][p2.y] == -1) {// 右折角 p4 = new Point(p1.x, p2.y); if(horizontal(p1, p4) && vertical(p4, p2)){ return true; } } return false; } /** * * @param p1是弟一个点 * @param p2是弟二个点 * @return 反回是一个布尔如果是true 就是可以把这两点消除。 三条线的情况的下。有没有存在这两点 */ public static boolean line3(Point p1, Point p2) { Point temp = null; if (p1.y > p2.y) { temp = p1; p1 = p2; p2 = temp; } Point p3,p4; int i=0; if(p1.y==0){//判断边角的。p1在前面 if(Main.map[p2.x][0]==-1){ p3=new Point(p2.x,0); if(horizontal(p3,p2)){// p1在前面 return true; } } if(p1.y==p2.y&&p2.y==0){// p1---p2在前面 System.out.println("// p1---p2在前面"); return true; } } if(p2.y==Main.map[0].length-1){//p2在前面 System.out.println(Main.map[p1.x][Main.map[0].length-1]); if(Main.map[p1.x][Main.map[0].length-1]==-1){ p3=new Point(p1.x,Main.map[0].length-1); if(horizontal(p3,p1)){ return true; } } if(p2.y==Main.map[0].length-1&&p1.y==p2.y){ return true; } } if(p1.x==0||p2.x==0){//p1---p2在上面 if(p1.x==0){//p1---在上面 if(Main.map[0][p2.y]==-1){ p3=new Point(0,p2.y); if(vertical(p3,p2)){ return true; } } } if(p2.x==0){//p2---在上面 if(Main.map[0][p1.y]==-1){ p3=new Point(0,p1.y); if(vertical(p3,p1)){ return true; } } }if(p1.x==p2.x&&p2.x==0){////p1---p2都在上面 return true; } } if(p1.x==Main.map.length-1||p2.x==Main.map.length-1){//p1--p2在下面 if(p1.x==Main.map.length-1){//p1--在下面 if(Main.map[Main.map.length-1][p2.y]==-1){ p3=new Point(Main.map.length-1,p2.y); if(vertical(p2,p3)){ return true; } } } if(p2.x==Main.map.length-1){//p2---在下面 if(Main.map[Main.map.length-1][p1.y]==-1){ p3=new Point(Main.map.length-1,p1.y); if(vertical(p1,p3)){ return true; } } } if(p2.x==Main.map.length-1&&p1.x==p2.x){//p1--p2都在下面 System.out.println("//p1--p2都在下面"); return true; } } for(i=0;i<Main.map[0].length;i++){//第一种情况左到右 if(i!=p1.y&&i!=p2.y){ if(Main.map[p1.x][i]==-1&&Main.map[p2.x][i]==-1){ p3=new Point(p1.x,i); p4=new Point(p2.x,i); if(line2(p1,p4)&&line2(p3,p2)){ return true; } } } } for(i=0;i<Main.map.length;i++){//第二情况上到下 if(i!=p1.x&&i!=p2.x){ if(Main.map[i][p1.y]==-1&&Main.map[i][p2.y]==-1){ p3=new Point(i,p1.y); p4=new Point(i,p2.y); if(line2(p1,p4)&&line2(p3,p2)){ return true; } } } } for(i=p1.y+1;i<p2.y;i++){//水平 第三种情况p1 到 p2之间 if(Main.map[p1.x][i]==-1&&Main.map[p2.x][p1.x]==-1){ p3=new Point(p1.x,i); p4=new Point(p2.x,i); if(line2(p1,p4)&&line2(p3,p2)){ return true; } } } for(i=p1.x+1;i<p2.x;i++){//垂直 第三种情况p1 到 p2之间 if(Main.map[i][p1.y]==-1&&Main.map[i][p2.y]==-1){ p3=new Point(i,p1.y); p4=new Point(i,p2.y); if(line2(p1,p4)&&line2(p3,p2)){ return true; } } } //边界三折线 if(Main.map[p1.x][0]==-1&&Main.map[p2.x][0]==-1){//第一种p1,p2到最左边界s p3=new Point(p1.x,0);p4=new Point(p2.x,0); if(horizontal(p1,p3)&&horizontal(p4,p2)){ return true; } } if(Main.map[p1.x][Main.map[0].length-1]==-1&&Main.map[p2.x][Main.map[0].length-1]==-1){//第二种p1,p2到最右边界s p3=new Point(p1.x,Main.map[0].length-1);p4=new Point(p2.x,Main.map[0].length-1); if(horizontal(p1,p3)&&horizontal(p4,p2)){ return true; } } if(Main.map[0][p1.y]==-1&&Main.map[0][p2.y]==-1){//第三种p1,p2到最上边界s p3=new Point(0,p1.y);p4=new Point(0,p2.y); if(vertical(p1,p3)&&vertical(p4,p2)){ return true; } } if(Main.map[Main.map.length-1][p1.y]==-1&&Main.map[Main.map.length-1][p2.y]==-1){//第四种p1,p2到最下边界s p3=new Point(Main.map.length-1,p1.y);p4=new Point(Main.map.length-1,p2.y); if(vertical(p1,p3)&&vertical(p4,p2)){ return true; } } return false; } /** * 地图初始化 * @param map * @return */ public static int[][] initialize(int[][] map) { int[] _map = new int[(map.length) * (map[0].length)]; int t = 0; /** * * 生成地图 */ for (int i = 0; i < _map.length - 3; i = i + 4) { for (int j = 0; j < 4; j++) { _map[i + j] = t; } t++; } /** * * 打乱地图 */ int temp = 0, a = 0, b = 0; for (int i = 0; i < _map.length; i++) { while (a == b) { a = (int) (Math.random() * _map.length); b = (int) (Math.random() * _map.length); temp = _map[a]; } _map[a] = _map[b]; _map[b] = temp; a = 0; b = 0; } /** * * * 反回地图 * */ t = 0; for (int i = 0; i < map.length; i++) { for (int j = 0; j < map[0].length; j++) { map[i][j] = _map[t]; t++; } } return map; }
2009年5月15日 10:57
相关推荐
C++实现的连连看算法,一个例子可以明白C++语法和开发 的基础
java版连连看算法java版连连看算法java版连连看算法
android 连连看算法android 连连看算法android 连连看算法
连连看核心算法.rar 连连看核心算法.rar 连连看核心算法.rar 连连看核心算法.rar 连连看核心算法.rar 连连看核心算法.rar
连连看算法 一 连连看的要求 二 任意两点能否连通 三 地图无解提示 四 连接提示功能 五 道具问题 六 地图问题
java swing实现的连连看小程序,导入eclipse即可运行,程序入口在com.lianliankan.setup.Setup.java
Android游戏开发之连连看算法,看看
连连看算法的JAVA实现,使用递归,可达到无限拐点
改变A*寻路算法中的估价函数打造连连看的寻路算法 源码
连连看的核心算法,基于集合形式搜索路径。
仅供VC程序分析,请不要肆意疯传或用做外挂,破坏游戏本身的乐趣!
连连看核心算法
自已做的连连看里面附加我的小算法
java游戏 连连看 游戏开发 源代码
用java做的一个连连看,绝对是你在校学习的好老师,居家旅行的好朋友!具体代码可见空间博客
使用java的swing框架实现连连看小游戏,带图片,可以自定义标题等。 使用java的swing框架实现连连看小游戏,带图片,可以自定义标题等。
java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 (源码+视频+文档+ppt) swing连连看游戏java小游戏 ...
我发现原来的那个算法进行了一些不必要的检查, 而且在两点不在同一直线上时只考虑了一种情况(向右扩散), 还有三种(向左,上,下)没有考虑。其实还有一种(Z)型没有考虑,Z型我就没写了, 它采用从左到右或从...
连连看游戏里边涵盖了:随机分布算法;遍历查找算法;时间进度控制; 这些算法全部是设计并完成的,感觉比别人的算法要简单易懂!
连连看 java算法 基于安卓手机开发的游戏程序