j2me 实现连连看的算法

 最近无聊用java写了一个连连看,写之前看了一些资料,很多人用的递归算消除图块时候的路径,感觉很废效率,虽然比较省代码,但是递归如果用在非常大的拼图游戏那速度会慢死的。

所以我就写了N多代码实现一个分情况的比较快捷的寻路算法。

思想就是按下记录当前光标位置的方块ID,再按下先检测no corner(无拐角)是否可以消除,如果不可以消除再检测one corner,不行再two corner。而one corner和two corner也分了很多情况,这样用if-else块把检测过程分成了很多小块,一旦检测成功就跳出来,极大地提高了效率。在检测路径的过程中,同时记录下路径方便消除时画线用,如果检测失败就清除所有记录了的路径。

在绘制上,我把所有图块画在一张大图上,只在按下确定后消除了某块后才更新所有图块,这样省去了每次循环都要遍历GameArry去重绘所有图块的时间。

 

下面上开始的部分代码:

  1.     public static final int row=10+2,col=12+2;
  2.     public static final int rowL=10,colL=12;
  3.     int Vx=0,Vy=0;//框架偏移量
  4.     int Mx=0,My=Type.ScreenHeight-45;//Item偏移量
  5.     int Bx=1,By=1;//光标位置
  6.     Image gameImg[];
  7.     int gameArry[][];
  8.     int bufArry[];
  9.     public void getRondomArry(){
  10.         //得到数组○
  11.         int rand=0;
  12.         for(int i=0;i<bufArry.length;i+=4){
  13.             for(int j=0;j<4;++j){
  14.                 bufArry[i+j]=rand;
  15.             }
  16.             ++rand;
  17. //            rand=t.getRandomNumber(2,3);
  18. //            if(i<bufArry.length-rand*2){
  19. //                for (int j = 0; j < rand * 2; ++j) {
  20. //                    bufArry[i + j] = i;
  21. //                }
  22. //                i += rand;
  23. //            }else if(rand==3&&i<bufArry.length-(rand-1)*2)
  24. //            {
  25. //                for(int j=0;j<(rand-1)*2;++j){
  26. //                    bufArry[i + j] = i;
  27. //                }
  28. //                i+=(rand-1);
  29. //            }else
  30. //            {
  31. //               bufArry[i]=i;
  32. //               bufArry[i+1]=i;
  33. //               break;
  34. //            }
  35. //            System.out.println(i);
  36.         }
  37.         //打乱顺序
  38.         int temp=0;
  39.         int k=0;
  40.         for(int i=0;i<bufArry.length-1;++i){
  41.             temp=bufArry[i];
  42.             k=t.getRandomNumber(i,bufArry.length-1);
  43.             bufArry[i]=bufArry[k];
  44.             bufArry[k]=temp;
  45.         }
  46.         //数组转换
  47.         for(int i=0;i<gameArry.length;++i){
  48.             for(int j=0;j<gameArry[i].length;++j){
  49.                 gameArry[i][j]=100;
  50.             }
  51.         }
  52.         gameArry=t.Arry_1_to_2(bufArry,rowL,colL,gameArry);
  53.     }
  54.     public static int[][] Arry_1_to_2(int[] arry1,int row,int col,int arry2[][]){
  55.         int bufrow=1,bufcol=1;
  56.         for(int i=0;i<arry1.length;++i){
  57.             arry2[bufrow][bufcol]=arry1[i];
  58.             ++bufcol;
  59.             if(bufcol==col+1){
  60.                 bufcol=1;
  61.                 ++bufrow;
  62.             }
  63.         }
  64.         return arry2;
  65.     }
  66.     public static int [] Arry_2_to_1(int [][]arry2){
  67.         int temparry[]=new int[(arry2.length-2)*(arry2[0].length-2)];
  68.         int index=0;
  69.         for(int i=1;i<arry2.length-1;++i){
  70.             for(int j=1;j<arry2[i].length-1;++j){
  71.                 temparry[index]=arry2[i][j];
  72.                 index++;
  73.             }
  74.         }
  75.         return temparry;
  76.     }

为了方便检测路径,我将矩阵4个边全都设置为空,所以数组赋值时起始位置是1 ,1

 

按下确定键的逻辑处理:Bx和By是当前光标位置

  1. if(this.onceKeyPressed(ok)&&gameArry[Bx][By] != 100)
  2.        {
  3.            vv.removeAllElements();
  4.            if(sign[0]==100){
  5.                sign[0] = Bx;
  6.                sign[1] = By;
  7.            }
  8.            if (this.isDeletAble()) { //消除 清空
  9.                gameArry[sign[0]][sign[1]] = 100;
  10.                gameArry[Bx][By] = 100;
  11.                sign[0] = 100;
  12.                sign[1] = 100;
  13.                this.GetGameImage();//更新不变图
  14.                delete=true;//画线
  15.                kuai--;//减计数器
  16.                if(timelogic<timer)//增加时间
  17.                    timelogic+=3;
  18.            } else { //重新赋值 冲刷
  19.                sign[0] = Bx;
  20.                sign[1] = By;
  21.            }
  22.        }

检测路径:

 

虽然代码看上去很多,但是其实真正执行到的并不多,只是把情况细分了。

在这个游戏里,比递归算法节省了1秒左右

  1.     //记下这个线
  2.     public void getTT(int type,int tx,int ty){
  3.         int tt[]=new int[3];//记录线  类型 坐标
  4.         tt[0]=type;
  5.         tt[1]=tx;
  6.         tt[2]=ty;
  7.         vv.addElement(tt);
  8.         tt=null;
  9.     }
  10.     public boolean isDeletAble() {
  11.         boolean ko=false//完成否
  12.         if (!(Bx == sign[0] && By == sign[1])) {//不是相同点
  13.             if (getBB(0) == getBB(1)) {//第一条件
  14.                 //0 corner--------------------------------------------------
  15. //                System.out.println("no corner");
  16.                 if (By == sign[1]) {
  17.                     ko = true;
  18.                     if (Bx < sign[0]) {
  19.                         this.getTT(1,Bx,By);
  20.                         for (int i = Bx + 1; i < sign[0]; ++i) {
  21.                             this.getTT(1,i,By);
  22.                             if (gameArry[i][By] != 100) {
  23.                                 vv.removeAllElements();
  24.                                 ko = false;
  25.                                 break;
  26.                             }
  27.                         }
  28.                     } else {
  29.                         this.getTT(0,Bx,By);
  30.                         for (int i = sign[0] + 1; i < Bx; ++i) {
  31.                             this.getTT(0,i,By);
  32.                             if (gameArry[i][By] != 100) {
  33.                                 vv.removeAllElements();
  34.                                 ko = false;
  35.                                 break;
  36.                             }
  37.                         }
  38.                     }
  39.                 } else if (Bx == sign[0]) {
  40.                     ko = true;
  41.                     if (By < sign[1]) {
  42.                         this.getTT(3,Bx,By);
  43.                         for (int i = By + 1; i < sign[1]; ++i) {
  44.                             this.getTT(3,Bx,i);
  45.                             if (gameArry[Bx][i] != 100) {
  46.                                 vv.removeAllElements();
  47.                                 ko = false;
  48.                                 break;
  49.                             }
  50.                         }
  51.                     } else {
  52.                         this.getTT(2,Bx,By);
  53.                         for (int i = sign[1] + 1; i < By; ++i) {
  54.                             this.getTT(2,Bx,i);
  55.                             if (gameArry[Bx][i] != 100) {
  56.                                 vv.removeAllElements();
  57.                                 ko = false;
  58.                                 break;
  59.                             }
  60.                         }
  61.                     }
  62.                 }
  63.                 //1 corner -----------------------------------------------
  64.                 if (!ko) { //如果没出来尝试one corner
  65. //                    System.out.println("one corner");
  66.                     vv.removeAllElements();//清空缓冲路径
  67.                     //分析两个点的位置关系
  68.                     //关系A
  69.                     if (Bx < sign[0] && By < sign[1]) {
  70. //                        System.out.println(" one corner A");
  71.                         if (gameArry[Bx][sign[1]] == 100) { //点1
  72.                             ko=true;
  73.                             this.getTT(1,Bx,sign[1]);
  74.                             this.getTT(2,Bx,sign[1]);
  75.                             for (int i = sign[1] - 1; i > By; --i) {
  76.                                 this.getTT(2,Bx,i);
  77.                                 if (gameArry[Bx][i] != 100) {
  78.                                     vv.removeAllElements();
  79.                                     ko = false;
  80.                                     break;
  81.                                 }
  82.                             }
  83.                             if (ko) {
  84.                                 for (int i = Bx + 1; i < sign[0]; ++i) {
  85.                                     this.getTT(1,i,sign[1]);
  86.                                     if (gameArry[i][sign[1]] != 100) {
  87.                                         ko = false;
  88.                                         vv.removeAllElements();
  89.                                         break;
  90.                                     }
  91.                                 }
  92.                             }
  93.                         }
  94.                         if (!ko) {
  95.                             if (gameArry[sign[0]][By] == 100) { //点2
  96.                                 ko=true;
  97.                                 this.getTT(3,sign[0],By);
  98.                                 this.getTT(0,sign[0],By);
  99.                                 for (int i = By + 1; i < sign[1]; ++i) {
  100.                                     this.getTT(3,sign[0],i);
  101.                                     if (gameArry[sign[0]][i] != 100) {
  102.                                         ko = false;
  103.                                         vv.removeAllElements();
  104.                                         break;
  105.                                     }
  106.                                 }
  107.                                 if (ko) {
  108.                                     for (int i = sign[0] - 1; i > Bx; --i) {
  109.                                         this.getTT(0,i,By);
  110.                                         if (gameArry[i][By] != 100) {
  111.                                             ko = false;
  112.                                             vv.removeAllElements();
  113.                                             break;
  114.                                         }
  115.                                     }
  116.                                 }
  117.                             }
  118.                         }
  119.                     }
  120.                     //关系B
  121.                     else if(Bx>sign[0]&&By<sign[1]){
  122. //                        System.out.println(" one corner B");
  123.                         if(gameArry[Bx][sign[1]]==100){//点1
  124.                             ko=true;
  125.                             this.getTT(0,Bx,sign[1]);
  126.                             this.getTT(2,Bx,sign[1]);
  127.                             for(int i=Bx-1;i>sign[0];--i){
  128.                                 this.getTT(0,i,sign[1]);
  129.                                 if(gameArry[i][sign[1]]!=100){
  130.                                     ko=false;
  131.                                     vv.removeAllElements();
  132.                                     break;
  133.                                 }
  134.                             }
  135.                             if(ko){
  136.                                 for(int i=sign[1]-1;i>By;--i){
  137.                                     this.getTT(2,Bx,i);
  138.                                     if(gameArry[Bx][i]!=100){
  139.                                         ko=false;
  140.                                         vv.removeAllElements();
  141.                                         break;
  142.                                     }
  143.                                 }
  144.                             }
  145.                         }
  146.                         if(!ko){
  147.                             if(gameArry[sign[0]][By]==100){//点2
  148.                                 ko=true;
  149.                                 this.getTT(1,sign[0],By);
  150.                                 this.getTT(3,sign[0],By);
  151.                                 for(int i=sign[0]+1;i<Bx;++i){
  152.                                     this.getTT(1,i,By);
  153.                                     if(gameArry[i][By]!=100){
  154.                                         vv.removeAllElements();
  155.                                         ko=false;
  156.                                         break;
  157.                                     }
  158.                                 }
  159.                                 if(ko){
  160.                                     for(int i =By+1;i<sign[1];++i){
  161.                                         this.getTT(3,sign[0],i);
  162.                                         if(gameArry[sign[0]][i]!=100){
  163.                                             vv.removeAllElements();
  164.                                             ko=false;
  165.                                             break;
  166.                                         }
  167.                                     }
  168.                                 }
  169.                             }
  170.                         }
  171.                     }
  172.                     //关系C
  173.                     else if(Bx>sign[0]&&By>sign[1]){
  174. //                        System.out.println(" one corner C");
  175.                         if(gameArry[sign[0]][By]==100){//点1
  176.                             ko=true;
  177.                             this.getTT(2,sign[0],By);
  178.                             this.getTT(1,sign[0],By);
  179.                             for(int i=By-1;i>sign[1];--i){
  180.                                 this.getTT(2,sign[0],i);
  181.                                 if(gameArry[sign[0]][i]!=100){
  182.                                     vv.removeAllElements();
  183.                                     ko=false;
  184.                                     break;
  185.                                 }
  186.                             }
  187.                             if(ko){
  188.                                 for(int i=sign[0]+1;i<Bx;++i){
  189.                                     this.getTT(1,i,By);
  190.                                     if(gameArry[i][By]!=100){
  191.                                         vv.removeAllElements();
  192.                                         ko=false;
  193.                                         break;
  194.                                     }
  195.                                 }
  196.                             }
  197.                         }
  198.                         if(!ko){
  199.                             if(gameArry[Bx][sign[1]]==100){//点2
  200.                                 ko=true;
  201.                                 this.getTT(0,Bx,sign[1]);
  202.                                 this.getTT(3,Bx,sign[1]);
  203.                                 for(int i=Bx-1;i>sign[0];--i){
  204.                                     this.getTT(0,i,sign[1]);
  205.                                     if(gameArry[i][sign[1]]!=100){
  206.                                         vv.removeAllElements();
  207.                                         ko=false;
  208.                                         break;
  209.                                     }
  210.                                 }
  211.                                 if(ko){
  212.                                     for(int i=sign[1]+1;i<By;++i){
  213.                                         this.getTT(3,Bx,i);
  214.                                         if(gameArry[Bx][i]!=100){
  215.                                             vv.removeAllElements();
  216.                                             ko=false;
  217.                                             break;
  218.                                         }
  219.                                     }
  220.                                 }
  221.                             }
  222.                         }
  223.                     }
  224.                     //关系D
  225.                     else if(Bx<sign[0]&&By>sign[1]){
  226. //                        System.out.println(" one corner D");
  227.                         if(gameArry[sign[0]][By]==100){//点1
  228.                             ko=true;
  229.                             this.getTT(0,sign[0],By);
  230.                             this.getTT(2,sign[0],By);
  231.                             for(int i=By-1;i>sign[1];--i){
  232.                                 this.getTT(2,sign[0],i);
  233.                                 if(gameArry[sign[0]][i]!=100){
  234.                                     vv.removeAllElements();
  235.                                     ko=false;
  236.                                     break;
  237.                                 }
  238.                             }
  239.                             if(ko){
  240.                                 for(int i=sign[0]-1;i>Bx;--i){
  241.                                     this.getTT(0,i,By);
  242.                                     if(gameArry[i][By]!=100){
  243.                                         vv.removeAllElements();
  244.                                         ko=false;
  245.                                         break;
  246.                                     }
  247.                                 }
  248.                             }
  249.                         }
  250.                         if(!ko){
  251.                             if(gameArry[Bx][sign[1]]==100){//点2
  252.                                 ko=true;
  253.                                 this.getTT(1,Bx,sign[1]);
  254.                                 this.getTT(3,Bx,sign[1]);
  255.                                 for(int i = sign[1]+1;i<By;++i){
  256.                                     this.getTT(3,Bx,i);
  257.                                     if(gameArry[Bx][i]!=100){
  258.                                         vv.removeAllElements();
  259.                                         ko=false;
  260.                                         break;
  261.                                     }
  262.                                 }
  263.                                 if(ko){
  264.                                     for(int i=Bx+1;i<sign[0];++i){
  265.                                         this.getTT(1,i,sign[1]);
  266.                                         if(gameArry[i][sign[1]]!=100){
  267.                                             ko=false;
  268.                                             vv.removeAllElements();
  269.                                             break;
  270.                                         }
  271.                                     }
  272.                                 }
  273.                             }
  274.                         }
  275.                     }
  276.                 }
  277.                 //two corner-----------------------------------------------
  278.                 //如果还是没出来再尝试two corner
  279.                 if(!ko){
  280. //                    System.out.println("two corner A");
  281.                     vv.removeAllElements();
  282.                     //先分析特殊情况  两点共线
  283.                     if(Bx==sign[0]){
  284.                         for(int i=Bx-1;i>=0;--i){//左遍历
  285.                             if(gameArry[i][By]==100&&gameArry[i][sign[1]]==100){
  286.                                 this.getTT(1,i,By);
  287.                                 this.getTT(1,i,sign[1]);
  288.                                 this.getTT(3,i,By<sign[1]?By:sign[1]);
  289.                                 this.getTT(2,i,By>sign[1]?By:sign[1]);
  290.                                 ko=true;
  291.                                 for(int j=(By<sign[1]?By:sign[1])+1;j<(By>sign[1]?By:sign[1]);++j){
  292.                                     this.getTT(3,i,j);
  293.                                     if(gameArry[i][j]!=100){
  294.                                         ko=false;
  295.                                         vv.removeAllElements();
  296.                                         break;
  297.                                     }
  298.                                 }
  299.                                 if(ko){
  300.                                     for(int k=i+1;k<Bx;++k){
  301.                                         this.getTT(1,k,By);
  302.                                         this.getTT(1,k,sign[1]);
  303.                                         if(gameArry[k][By]!=100||gameArry[k][sign[1]]!=100){
  304.                                             vv.removeAllElements();
  305.                                             ko=false;
  306.                                             break;
  307.                                         }
  308.                                     }
  309.                                 }
  310.                                 if(ko){
  311.                                     break;
  312.                                 }
  313.                             }
  314.                         }
  315.                         if(!ko){
  316.                             for(int i=Bx+1;i<gameArry.length;++i){//右遍历
  317.                                 if(gameArry[i][By]==100&&gameArry[i][sign[1]]==100){
  318.                                     ko = true;
  319.                                     this.getTT(0,i,By);
  320.                                     this.getTT(0,i,sign[1]);
  321.                                     this.getTT(3,i,By < sign[1] ? By : sign[1]);
  322.                                     this.getTT(2,i,By > sign[1] ? By : sign[1]);
  323.                                     for (int j = (By < sign[1] ? By : sign[1]) +1;j <(By > sign[1] ? By : sign[1]);++j) {
  324.                                         this.getTT(3,i,j);
  325.                                         if (gameArry[i][j] != 100) {
  326.                                             vv.removeAllElements();
  327.                                             ko = false;
  328.                                             break;
  329.                                         }
  330.                                     }
  331.                                     if (ko) {
  332.                                         for (int k = i - 1; k > Bx; --k) {
  333.                                             this.getTT(0,k,By);
  334.                                             this.getTT(0,k,sign[1]);
  335.                                             if (gameArry[k][By] != 100 ||gameArry[k][sign[1]] != 100) {
  336.                                                 ko = false;
  337.                                                 vv.removeAllElements();
  338.                                                 break;
  339.                                             }
  340.                                         }
  341.                                     }
  342.                                     if (ko) {
  343.                                         break;
  344.                                     }
  345.                                 }
  346.                             }
  347.                         }
  348.                     }
  349.                     else if(By==sign[1]){
  350.                         for(int i=By-1;i>=0;--i){//上遍历
  351.                             if(gameArry[Bx][i]==100&&gameArry[sign[0]][i]==100){
  352.                                 this.getTT(3,Bx,i);
  353.                                 this.getTT(3,sign[0],i);
  354.                                 this.getTT(1,Bx<sign[0]?Bx:sign[0],i);
  355.                                 this.getTT(0,Bx>sign[0]?Bx:sign[0],i);
  356.                                 ko=true;
  357.                                 for(int j=(Bx<sign[0]?Bx:sign[0])+1;j<(Bx>sign[0]?Bx:sign[0]);++j){
  358.                                     this.getTT(1,j,i);
  359.                                     if(gameArry[j][i]!=100){
  360.                                         vv.removeAllElements();
  361.                                         ko=false;
  362.                                         break;
  363.                                     }
  364.                                 }
  365.                                 if(ko){
  366.                                     for(int k=i+1;k<By;++k){
  367.                                         this.getTT(3,Bx,k);
  368.                                         this.getTT(3,sign[0],k);
  369.                                         if(gameArry[Bx][k]!=100||gameArry[sign[0]][k]!=100){
  370.                                             ko=false;
  371.                                             vv.removeAllElements();
  372.                                             break;
  373.                                         }
  374.                                     }
  375.                                 }
  376.                                 if(ko){
  377.                                     break;
  378.                                 }
  379.                             }
  380.                         }
  381.                         if(!ko){
  382.                             for(int i=By+1;i<gameArry[0].length;++i){//下遍历
  383.                                 if(gameArry[Bx][i]==100&&gameArry[sign[0]][i]==100){
  384.                                     ko = true;
  385.                                     this.getTT(2,Bx,i);
  386.                                     this.getTT(2,sign[0],i);
  387.                                     this.getTT(1,Bx < sign[0] ? Bx : sign[0],i);
  388.                                     this.getTT(0,Bx > sign[0] ? Bx : sign[0],i);
  389.                                     for (int j = (Bx < sign[0] ? Bx : sign[0]) + 1;j < (Bx > sign[0] ? Bx : sign[0]); ++j) {
  390.                                         this.getTT(1,j,i);
  391.                                         if (gameArry[j][i] != 100) {
  392.                                             vv.removeAllElements();
  393.                                             ko = false;
  394.                                             break;
  395.                                         }
  396.                                     }
  397.                                     if (ko) {
  398.                                         for (int k = i - 1; k > By; --k) {
  399.                                             this.getTT(2,Bx,k);
  400.                                             this.getTT(2,sign[0],k);
  401.                                             if (gameArry[Bx][k] != 100 || gameArry[sign[0]][k] != 100) {
  402.                                                 vv.removeAllElements();
  403.                                                 ko = false;
  404.                                                 break;
  405.                                             }
  406.                                         }
  407.                                     }
  408.                                     if (ko) {
  409.                                         break;
  410.                                     }
  411.                                 }
  412.                             }
  413.                         }
  414.                     }//特殊情况分析完毕 开始nb分析
  415.                     else  {
  416. //                System.out.println("two corner B");
  417.                 vv.removeAllElements();
  418. //                System.out.println("you begin!");
  419.                 for (int i = Bx + 1; i < gameArry.length; ++i) { //右扫描
  420.                     if (gameArry[i][By] == 100 &&gameArry[i][sign[1]] == 100) {
  421.                         this.getTT(0,i,By);
  422.                         this.getTT(sign[0]<i?0:1,i,sign[1]);
  423.                         this.getTT(3,i,By < sign[1] ? By : sign[1]);
  424.                         this.getTT(2,i,By > sign[1] ? By : sign[1]);
  425.                         ko = true;
  426.                         for (int j = (By < sign[1] ? By : sign[1]) + 1;j < (By > sign[1] ? By : sign[1]); ++j) {
  427.                             this.getTT(3,i,j);
  428.                             if (gameArry[i][j] != 100) {
  429.                                 ko = false;
  430.                                 vv.removeAllElements();
  431.                                 break;
  432.                             }
  433.                         }
  434.                         if (ko) {
  435.                             for (int k = i - 1; k > Bx; --k) {
  436.                                 this.getTT(0,k,By);
  437.                                 if (gameArry[k][By] != 100) {
  438.                                     ko = false;
  439.                                     vv.removeAllElements();
  440.                                     break;
  441.                                 }
  442.                             }
  443.                         }
  444.                         if (ko) {
  445.                             for (int k = (i > sign[0] ? i : sign[0]) -1;k > (i < sign[0] ? i : sign[0]);--k) {
  446.                                 this.getTT(0,k,sign[1]);
  447.                                 if (gameArry[k][sign[1]] != 100) {
  448.                                     ko = false;
  449.                                     vv.removeAllElements();
  450.                                     break;
  451.                                 }
  452.                             }
  453.                         }
  454.                     }
  455.                     if (ko)
  456.                         break;
  457.                 }
  458.                 if (!ko) {
  459. //                    System.out.println("zuo begin!");
  460.                     for (int i = Bx - 1; i >= 0; --i) { //左扫描
  461.                         if (gameArry[i][By] == 100 &&gameArry[i][sign[1]] == 100) {
  462.                             ko = true;
  463.                             this.getTT(1,i,By);
  464.                             this.getTT(sign[0]>i?1:0,i,sign[1]);
  465.                             this.getTT(3,i,By < sign[1] ? By : sign[1]);
  466.                             this.getTT(2,i,By > sign[1] ? By : sign[1]);
  467.                             for (int j = (By < sign[1] ? By : sign[1]) +1;j <(By > sign[1] ? By : sign[1]);++j) {
  468.                                 this.getTT(3,i,j);
  469.                                 if (gameArry[i][j] != 100) {
  470.                                     ko = false;
  471.                                     vv.removeAllElements();
  472.                                     break;
  473.                                 }
  474.                             }
  475.                             if (ko) {
  476.                                 for (int k = i + 1; k < Bx; ++k) {
  477.                                     this.getTT(1,k,By);
  478.                                     if (gameArry[k][By] != 100) {
  479.                                         ko = false;
  480.                                         vv.removeAllElements();
  481.                                         break;
  482.                                     }
  483.                                 }
  484.                             }
  485.                             if (ko) {
  486.                                 for (int k = (i < sign[0] ? i : sign[0]) +1;k < (i > sign[0] ? i : sign[0]);++k) {
  487.                                     this.getTT(1,k,sign[1]);
  488.                                     if (gameArry[k][sign[1]] != 100) {
  489.                                         ko = false;
  490.                                         vv.removeAllElements();
  491.                                         break;
  492.                                     }
  493.                                 }
  494.                             }
  495.                         }
  496.                         if (ko)
  497.                             break;
  498.                     }
  499.                 }
  500.                 if(!ko){//上扫描
  501. //                    System.out.println("shang begin!");
  502.                     for(int i = By-1;i>=0;--i){
  503.                         if(gameArry[Bx][i]==100&&gameArry[sign[0]][i]==100){
  504.                             ko=true;
  505.                             this.getTT(3,Bx,i);
  506.                             this.getTT(sign[1]>i?3:2,sign[0],i);
  507.                             this.getTT(1,Bx<sign[0]?Bx:sign[0],i);
  508.                             this.getTT(0,Bx>sign[0]?Bx:sign[0],i);
  509.                             for(int j= (Bx<sign[0]?Bx:sign[0])+1;j<(Bx>sign[0]?Bx:sign[0]);++j){
  510.                                 this.getTT(1,j,i);
  511.                                 if(gameArry[j][i]!=100){
  512.                                     vv.removeAllElements();
  513.                                     ko=false;
  514.                                     break;
  515.                                 }
  516.                             }
  517.                             if(ko){
  518.                                 for(int k= i+1;k<By;++k){
  519.                                     this.getTT(3,Bx,k);
  520.                                     if(gameArry[Bx][k]!=100){
  521.                                         ko=false;
  522.                                         vv.removeAllElements();
  523.                                         break;
  524.                                     }
  525.                                 }
  526.                             }
  527.                             if(ko){
  528.                                 for(int k= (i<sign[1]?i:sign[1])+1;k<(i>sign[1]?i:sign[1]);++k){
  529.                                     this.getTT(3,sign[0],k);
  530.                                     if(gameArry[sign[0]][k]!=100){
  531.                                         vv.removeAllElements();
  532.                                         ko=false;
  533.                                         break;
  534.                                     }
  535.                                 }
  536.                             }
  537.                         }
  538.                         if(ko)
  539.                             break;
  540.                     }
  541.                 }
  542.                 if(!ko){//下扫描
  543. //                    System.out.println("xia begin!");
  544.                     for(int i=By+1;i<gameArry[0].length;++i){
  545.                         if(gameArry[Bx][i]==100&&gameArry[sign[0]][i]==100){
  546.                             ko=true;
  547.                             this.getTT(2,Bx,i);
  548.                             this.getTT(sign[1]<i?2:3,sign[0],i);
  549.                             this.getTT(1,Bx<sign[0]?Bx:sign[0],i);
  550.                             this.getTT(0,Bx>sign[0]?Bx:sign[0],i);
  551.                             for(int j= (Bx<sign[0]?Bx:sign[0])+1;j<(Bx>sign[0]?Bx:sign[0]);++j){
  552.                                 this.getTT(1,j,i);
  553.                                 if(gameArry[j][i]!=100){
  554.                                     ko=false;
  555.                                     vv.removeAllElements();
  556.                                     break;
  557.                                 }
  558.                             }
  559.                             if(ko){
  560.                                 for(int k=i-1;k>By;--k){
  561.                                     this.getTT(2,Bx,k);
  562.                                     if(gameArry[Bx][k]!=100){
  563.                                         vv.removeAllElements();
  564.                                         ko=false;
  565.                                         break;
  566.                                     }
  567.                                 }
  568.                             }
  569.                             if(ko){
  570.                                 for(int k= (i>sign[1]?i:sign[1])-1;k>(i<sign[1]?i:sign[1]);--k){
  571.                                     this.getTT(2,sign[0],k);
  572.                                     if(gameArry[sign[0]][k]!=100){
  573.                                         ko=false;
  574.                                         vv.removeAllElements();
  575.                                         break;
  576.                                     }
  577.                                 }
  578.                             }
  579.                         }
  580.                         if(ko)
  581.                             break;
  582.                     }
  583.                 }
  584.             }
  585.         }
  586.     }
  587. }
  588. //System.out.println("----------");
  589. return ko;
  590.     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值