程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC++ 6.0制作QQ連連看外掛

VC++ 6.0制作QQ連連看外掛

編輯:關於VC++

圖一 界面描述

一、制作思路

  1. 得到QQ連連看窗口指針,從而得到CDC;
  2. 對每幅圖片取4個點進行編碼;
  3. 實現連連看的算法;
  4. 模擬鼠標消去塊;

二、部分代碼

//定義的數據
bool flagx=true; 
int point1x,point1y,point2x,point2y;//保存需要單擊點的位置
struct MYCOLOR
{
  COLORREF c[4];
};
MYCOLOR tc[230];//顏色表230〉11*19
int tcnum;    //所有圖片的種類
int map[19][11]; //存放每個圖片的顏色索引
int r1,g1,b1,r2,b2,g2;
int pop1,pop2;
//對圖形進行編碼
void CZg1Dlg::OnButton3()
{
  int pnum=0;
  //////////////////
  int t[4]={15,11,15,21};//取的4個點的x相對位移
  int tt[4]={17,17,21,17};////取的4個點的y相對位移
  ////////////////////
  int result;
  tc[0].c[0]=tc[0].c[1]=tc[0].c[2]=tc[0].c[3]=7753015;
  tcnum=1;
  MYCOLOR tmp;
  CPoint p(10,180);
  CDC *pdc=myc->GetDC();
  CString hh="   編碼結果: \n";
  CString h;
  int myr,myg,myb,t_t,sh;
  for(int i=0;i<11;i++)
  {
    p.y=180+i*35;
    for(int j=0;j<19;j++)
    {
      p.x=10+j*31;
      for(int k=0;k<4;k++)
        tmp.c[k]=pdc->GetPixel(p.x+t[k],p.y+tt[k]);
      sh=0;
      for(t_t=0;t_t<4;t_t++)
      {
        myr=GetRValue(tmp.c[t_t]);
        myg=GetGValue(tmp.c[t_t]);
        myb=GetBValue(tmp.c[t_t]);
        if ((myr<73)&&(myr>45)&&(myg>50)&&(myg<90)&& \
                     (myb>103) &&(myb<129))                   
          sh++;
      }
      if(sh==4)
        map[j][i]=0;
      
      else
      {
        pnum++;
        result=findcolor(tmp);
        if(result==-1)
        {
          tc[tcnum].c[0]=tmp.c[0];
          tc[tcnum].c[1]=tmp.c[1];
          tc[tcnum].c[2]=tmp.c[2];
          tc[tcnum].c[3]=tmp.c[3];
          map[j][i]=tcnum;
          tcnum++;  
        }
        else
        {
          map[j][i]=result;
        }
      }
      h.Format("%d ",map[j][i]);
      hh+=h;
      sh=0;
    }
    hh+="\n";
  }
  bool yy=true;
  for(int y1=0;y1<11;y1++)
  {
    for(int y2=0;y2<19;y2++)
    {
      if(tc[map[y2][y1]].c[0]==-1)
        yy=false;
    }
  }
  CString cs2;
  cs2.Format("總共有 %d 可消!",pnum);
  hh+=cs2;
  MessageBox(hh);
  for(i=0;i<11;i++)
    for(int j=0;j<19;j++)
    {
      mymap[i][j]=map[j][i];
    }
    
    if(!yy)
    {
      MessageBox("請重新編碼!\n
        編碼時要確保游戲窗口不要被其他窗口擋住!"); 
    }
    flagx=true;
}   

三、結束語

不足之處是點擊2次鼠標才能消去1對。因為這個游戲必須鼠標真正點擊1次才能作到實現鼠標模擬的另外一次單擊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved