Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1220131
  • 博文数量: 950
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 13070
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-04 09:23
文章分类

全部博文(950)

文章存档

2011年(1)

2008年(949)

我的朋友

分类: C/C++

2008-08-04 09:34:44

下载本文示例代码
下载源代码


图一 界面描述

一、制作思路

  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次才能作到实现鼠标模拟的另外一次单击。
 

下载本文示例代码
阅读(266) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~