连连看API版本的源代码[4]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

    //如果两点都为空
    //垂直向p1点靠近一格
    if(px1<p1.x)
     px1++;
    else if(px1>p1.x)
     px1--;
    //垂直向p2点靠近一格
    if(px2<p2.x)
     px2++;
    else if(px2>p2.x)
     px2--;
   }
     
   //如果能到达两个端点
   if(px1==p1.x && py1==p1.y && px2==p2.x && py2==p2.y )
   {
    //起点
    way[0].x=p1.x;
    way[0].y=p1.y;
    //两个转折点
    way[1].x=i;
    way[1].y=p1.y;
    way[2].x=i;
    way[2].y=p2.y;
    //终点
    way[3].x=p2.x;
    way[3].y=p2.y; 
    return true;
   }

  }
 }

 if(p1.x>p2.x)
  {
   //两点交换
   temp=p1.x;
   p1.x=p2.x;
   p2.x=temp;

   temp=p1.y;
   p1.y=p2.y;
   p2.y=temp;


  }
 //纵向扫描
 for(j=0;j<=N-1;j++)
 {  
  y_across=true;
  //是否垂直连通
  for(i=p1.x+1; i<=p2.x-1; i++ )
  {
   if(matrix[i][j]!=0)
   {
    y_across=false;
    break;
   }
  }

  if(matrix[p1.x][j]!=0  )
  {
   if( j!=p1.y )
    y_across=false;
  }
  if(matrix[p2.x][j]!=0  )
  {
   if( j!=p2.y )
    y_across=false;
  }
    
  if(y_across)
  {//垂直连通才执行下面
  /* for(j=1; j<N-2; j++ )
   {*/
    //检验在水平上是否连通

   py1=py2=j;
   px1=p1.x;
   px2=p2.x;
   while( py1!=p1.y || py2!=p2.y)
   {
    //如果当前点不空且不为p1点,就跳出循环,从下一行开始检测
    if( matrix[px1][py1]!=0 && (px1!=p1.x || py1!=p1.y) )
     break;

    //如果当前点不空且不为p2点,就跳出循环,从下一行开始检测
    if( matrix[px2][py2]!=0 && (px2!=p2.x || py2!=p2.y) )
     break;

    //如果两点都为空
    //水平向p1点靠近一格
    if(py1<p1.y)
     py1++;
    else if(py1>p1.y)
     py1--;
    //水平向p2点靠近一格
    if(py2<p2.y)
     py2++;
    else if(py2>p2.y)
     py2--;
   }
     
   //如果能到达两个端点
   if(px1==p1.x && py1==p1.y && px2==p2.x && py2==p2.y )
   {
    //起点
    way[0].x=p1.x;
    way[0].y=p1.y;
    //两个转折点
    way[1].x=p1.x;
    way[1].y=j;
    way[2].x=p2.x;
    way[2].y=j;
    //终点
    way[3].x=p2.x;
    way[3].y=p2.y; 
    return true;
   }

  }
 }
 //} 
 return false;

}

void Linker_Matrix::init_search()
{
 visited = Matrix< int, M, N >();
 index = 0;
 turn_count = 0;
}

void Linker_Matrix::auto_play()
{
  while( auto_search() );
}

bool Linker_Matrix::man_search(const point p1, const point p2)
{
 init_search();
 if( find_way( p1, p2 ) )
 {
  matrix[p1.x][p1.y]=0;
  matrix[p2.x][p2.y]=0;
  return true;
 }
 return false;
}

 int Linker_Matrix::get_element( int x, int y )
 {
  return matrix[x][y];
 }

本文关键:连连看API版本的源代码
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top