zoukankan      html  css  js  c++  java
  • 软件制作: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

  • 相关阅读:
    VS Code 编译运行C/C++
    滴水逆向-文件读写&内存分配-PE准备阶段
    技术从业者的未来(三)
    房价预测-California House Prices
    记录一下Linux的文件夹的rwx权限使用。
    对微任务和宏任务的执行顺序的个人理解
    算法1.4 节 ----- 算法分析
    .NetCore中间件实现原理
    谷歌浏览器禁用JS步骤
    管理经验分享
  • 原文地址:https://www.cnblogs.com/Gemgin/p/3136258.html
Copyright © 2011-2022 走看看