连连看算法一点通

来源:互联网 发布:张峰 java精品课程 编辑:程序博客网 时间:2024/05/18 02:12

 

1、两个精灵都在同一横轴或是纵轴

2、另外就是有一个转角的,两种情况箭头向左或向右

3、最复杂,其实掌握下面的情况可以包含上面的所有的情况(重点分析)

 3.1)在纵轴方向有一个共同的没有精灵(障碍)的块(黄色),判断公共i_col到精灵箭头段有没有精灵即可
 

       /**
  * 判断当前列m_col没有障碍
  * @param first_row 行坐标小的精灵
  * @param second_row 行坐标大的精灵
  * @param m_col
  * @return
  */
 public boolean isShu(int first_row, int second_row, int m_col)
 {
  int firstid = (first_row < second_row? first_row:second_row);
  int secondid = (first_row > second_row? first_row:second_row);
  for(int i = firstid; i <= secondid; i++)
  {
   if(mapData[i][m_col] != -1)
   {
    return false;
   }
  }
  return true;
  
 }

  3.2)在横轴方向有一个共同的乜有精灵(障碍)的块(黄色),然后判断i_row箭头这段有没有障碍即可

      

 /**
  * 判断当前行m_row没有障碍
  * @param first_col 纵坐标小的精灵
  * @param second_col 纵坐标大的精灵
  * @param m_row 当前这一行
  * @return 没有障碍表示true
  */
 public boolean isHeng(int first_col, int second_col, int m_row)//表示第一个精灵为起点到第二个精灵,所有行中上没有精灵
 {
  int firstid = (first_col < second_col? first_col:second_col);//跟点击的前后没关系
  int secondid = (first_col > second_col? first_col:second_col);
  for(int i = firstid; i < secondid; i++)
  {
   if(mapData[m_row][i] != -1) //表示中间有障碍物
   {
    return false;
   }
  }
  return true;
 }