软件制作:QQGamePlug Lianliankan Core Function

// 检查2点是否相通

boolCheckLine(POINT p1,POINT p2)

{

  int x,y,t;    //同一线上的两点间全为0 则返回真

 

  //如果 p1==p2 也返回真

  if ((p1.x==p2.x)&&(p1.y==p2.y) && (chessdata[p1.y][p1.x]==0) && (chessdata[p2.y][p2.x]==0))  {return  true;   }else

  if ((p1.x<0) || (p1.x>18) || (p1.y<0) || (p1.y>10) ||

     (p2.x<0) || (p2.x>18) || (p2.y<0) || (p2.y>10) )  {return  false; }

 

  if (p1.x==p2.x)     //如果X轴相等则比较

               {

                    if (p1.y>p2.y) {t=p1.y;p1.y=p2.y;p2.y=t;}

                    for (y=p1.y;y<=p2.y;y++)

                     {

                       if (chessdata[y][p1.x]!=0 ) {return false;}

                     }

               }

  if (p1.y==p2.y)

              {    //如果Y轴相等则比较

                  if (p1.x > p2.x)  {t=p1.x;p1.x=p2.x ;p2.x=t;}

                    for(x=p1.x;x<=p2.x;x++)

                     {

                       if (chessdata[p1.y][x]!=0 ) {return  false;}

                     };

              };

  return  true;

};

 

// 检查2点是否可以消除

bool

Check2p(POINT a,POINT b)

 {

 CChessPointp1(a),p2(b);

 POINT  pa,pb;//转角点

 int x,y;

 

// 如果2点为同一点则返回假

 if ((a.x==b.x) && (a.y==b.y ))  { return false;} else

       if ((chessdata[a.y][a.x]==0) || (chessdata[b.y][b.x]==0))   

                               { return false;} else

                 if (chessdata[a.y][a.x]!=chessdata[b.y][b.x])  

                             { return false;}

 

        pa=a;pb=b;

       // 在横向一条线上 y坐标相同

       if (a.y==b.y) 

                    {     // 2点在y轴相邻

                           if ((p1.right.x==p2.p.x) || (p1.left.x==p2.p.x))      { return true;   }

               //检测这条线是否有一条路径相通

 

               if (CheckLine(p1.right,p2.left )) {return true; }

                //检测上下

                //y

                pa=a;pb=b;

                if ((p1.up.y >=0) && (p1.up.y<=10))

                for ( y=0 ;y<=p1.up.y;y++)

                  {

                     pa.y=y;pb.y=y;

                    if (CheckLine(pa,p1.up) && CheckLine(pb,p2.up ) && CheckLine(pa,pb))  { return true; }

                  }

                  // y

                   pa=a;pb=b;

                   if ((p1.down.y >=0)&& (p1.down.y <=10))

                for ( y=p1.down.y;y<=10;y++)

                  {

                     pa.y=y;pb.y=y;

                    if (CheckLine(pa,p1.down ) && CheckLine(pb,p2.down ) && CheckLine(pa,pb))  { return true; }                                               

                  }

 

               //检测左右    因为 y轴相等,所以不存在左右路径

 

        } else

//纵向一条线  x 坐标相同

if (a.x==b.x)

        {

            //x下上相邻不

            if ((p1.down.y==p2.p.y ) || (p1.up.y==p2.p.y))   { return true;   }

           //检测这条线是否有一条路径相通

           if (CheckLine(p1.down,p2.up) )  { return true;    }

           //检测上下   国为x 轴相等所以不存在路径

 

           //检测左右

            //x

            pa=a;pb=b;

            for (x=0 ;x<=p1.left.x ;x++)

             {

                 pa.x=x;

                 pb.x=x;

                  if (CheckLine(pa,p1.left) && CheckLine(pb,p2.left ) && CheckLine(pa,pb))  { return true;  }

             }

            //x

 

pa=a;pb=b;

for (x=p1.right.x;x<=18;x++)

{

pa.x=x;

pb.x=x;

if (CheckLine(pa,p1.right ) && CheckLine(pb,p2.right ) && CheckLine(pa,pb))  { return true;  }

}

} else

 

//xy 坐标都不相同 {{{{{{

{

pa=a;pb=b;

 

if (a.x>b.x)  {   // p2 left

////////////////xxxxxxxxxxxxxxxxx  x轴路径

for (x=0;x<=p2.left.x;x++)

{

pa.x=x;pb.x=x;

if (CheckLine(pa,p1.left) && CheckLine(pa,pb) && CheckLine(pb,p2.left)) 

                                      {return true; }

} // end for

 

for (x=p2.right.x ;x<= p1.left.x;x++)

{

pa.x=x;pb.x=x;

if (CheckLine(p2.right,pb) && CheckLine(pa,pb)&& CheckLine(pa,p1.left))  {return true; }

                                                   

}

for (x=p2.right.x;x<=18;x++)

{

pa.x=x;pb.x=x;

if (CheckLine(p1.right ,pa)&& CheckLine(p2.right ,pb) && CheckLine(pa,pb))  { return true; }

}

/////////////////yyyyyyyyyyyyyyyyyyyy y轴路径由于是从上向下搜索所以p1.y>p2.y

pa.x=a.x;   pb.x=b.x; //初始化坐标 y軕渐变

for ( y=0 ;y<=p1.up.y;y++)    //1

{

pa.y=y;pb.y=y;

if (CheckLine(pb,pa) && CheckLine(pa,p1.up) && CheckLine(pb,p2.up))      { return true;}                                                                  

}

////////////////////////

for (y=p1.down.y ;y<=p2.up.y;y++)//2

{

pa.y=y;pb.y=y;

if (CheckLine(pb,pa)&& CheckLine(p1.down,pa) && CheckLine(pb,p2.up))   {

                                            return true;}

}

///////////////////////

for (y=p2.down.y ;y<=10 ;y++) //3

{

///////////////////////////////

pa.y=y;pb.y=y;

if (CheckLine(pb,pa) && CheckLine(p1.down,pa) && CheckLine(p2.down,pb))   { return true;   }

}

 

    } else

////////////p2  right a.x>b.x

      {

       pa.y=a.y;   pb.y=b.y; //初始化坐标

        for (x=0 ;x<= p1.left.x ;x++);

        {

        pa.x=x;pb.x=x;

         if (CheckLine(pa,pb)&& CheckLine(pa,p1.left)&& CheckLine(pb,p2.left))  {

                                                                    return true;}

 

                                                                    

        }

        /////////////////////

 

        for (x=p1.right.x ;x<=p2.left.x;x++)

        {

        pa.x=x;pb.x=x;

        if (CheckLine(pa,pb)&& CheckLine(p1.right,pa)&& CheckLine(pb,p2.left))  { return true;

                                                                              }

        }

        ///////////////////////

 

        for (x=p2.right.x ;x<=18;x++)

        {

        pa.x=0;pb.x=x;

        if (CheckLine(pa,pb) && CheckLine(p1.right,pa)&& CheckLine(p2.right,pb)) {return true; }

        }

///////////////////////yyyyyyyyyyyyyyyyyy   y轴渐变

    pa.x =a.x;   pb.x =b.x ; //初始化坐标

    if ((p1.up.y>=0) && (p1.up.y<=10))

       {

    for (y=0 ;y<=p1.up.y ;y++)    //1

    {

     pa.y=y;pb.y=y;

      if (CheckLine(pa,pb)&& CheckLine(pa,p1.up) && CheckLine(pb,p2.up))  { return true; }

 

                                                                                    

    }}

    //////

       pa.x =a.x;   pb.x =b.x ; //初始化坐标

     if ((p1.down.y<=10) && (p2.up.y>=0))

        {

    for (y=p1.down.y ;y<=p2.up.y;y++)  //2

    {

     pa.y=y;pb.y=y;

     if (CheckLine(pa,pb)&& CheckLine(p1.down,pa) && CheckLine(pb,p2.up))  { return true;

       }                                                                          }

    }

    ////

       pa.x =a.x;   pb.x =b.x ; //初始化坐标

    if (p2.down.y <=10)

       {

    for ( y=p2.down.y;y<=10;y++)           //3

    {

     pa.y=y;pb.y=y;

     if (CheckLine(pa,pb) && CheckLine(p1.down,pa)&& CheckLine(p2.down ,pb))  { return true; }

 

       }                                                                         

    }

      }

}

 

//xy 坐标都不相同 }}}}}}}}}

  return false;

}

 

 //双击可以消除的2点

boolClick2p(POINT p1,POINT p2)

{

 //点击p1

HWNDhwnd=FindWindow(NULL,gameCaption);

 int lparam;

 lparam=((p1.y*35+192)<<16)+(p1.x*31+21);

SendMessage(hwnd,WM_LBUTTONDOWN,0,lparam);//

SendMessage(hwnd,WM_LBUTTONUP,0,lparam);//

 //点击p2

lparam=((p2.y*35+192)<<16)+(p2.x*31+21);

SendMessage(hwnd,WM_LBUTTONDOWN,0,lparam);//

SendMessage(hwnd,WM_LBUTTONUP,0,lparam);//

return true;

 

}

////////////////////////////消除一对棋子//////////////////////////////////////////////////////////////////////////////////////////////////

boolClearPiar() {   

       //读出棋盘数据至chessdata 11,19

       updatdChess();

       //遍历整个棋盘找出相同类型一对棋子

       POINT p1,p2;

       int x1,y1,x2,y2;

       for (y1=0;y1<11;y1++)

              for (x1=0;x1<19;x1++)

              {   for (y2=y1;y2<11;y2++)

              for (x2=0;x2<19;x2++)

                     if ((chessdata[y1][x1]==chessdata[y2][x2]) // 棋子1与棋子2 类型是否相同

                            &&(!((x1==x2)&&(y1==y2)))  //要求点1与点2 相等则假

                            )

                     { 

                            p1.x=x1;p1.y=y1;

                            p2.x=x2;p2.y=y2;

                            //检测相同的2个棋子是否可消掉

                            if ( Check2p(p1,p2))//如果可消除则返回真

                            {

                                   //click2p 鼠标模拟点击 p1p2

                                   Click2p(p1,p2);

                                   /* m_p1x=x1;

                                   m_p1y=y1;

                                   m_p2x=x2;

                                   m_p2y=y2;

                                   UpdateData(false);//更新数据至窗口

                                   */

                                   return true;

                                  

                            }

                     }

              }

              return false;

}

我最近在玩和讯微博,很方便,很实用,你也来和我一起玩吧!
去看看我的微博吧!http://t.hexun.com/3006897/default.html

原文地址:https://www.cnblogs.com/Gemgin/p/3136258.html