⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picturedlg.cpp

📁 拼图游戏源代码资源文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			m_Image[num].SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
			
		}
		if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top 
			&& wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left+x)
		{
			m_Image[num].SetWindowPos(NULL,xnum-x,ynum,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
		}
		if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
			&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top+y)
		{
			m_Image[num].SetWindowPos(NULL,xnum,ynum-y,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
		}
		if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
			&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top-y)
		{
			m_Image[num].SetWindowPos(NULL,xnum,ynum+y,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
		}
}
void CPictureDlg::OnEasy()
//菜单函数,Easy的话,就是9格,Hard 就是16格
{
	pSubMenu=pMainMenu->GetSubMenu(0);
	pSubMenu->CheckMenuItem(ID_HARD,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(ID_EASY,MF_CHECKED);
	
	Easy=TRUE;IsRnd=FALSE;
	count=0;
	CanCount=FALSE;
	SetPos();
	IsWin();
	m_wndStatusBar.SetText("加油!",0,0);
}
void CPictureDlg::OnHard()
//菜单函数,Easy的话,就是9格,Hard 就是16格
{
	pSubMenu=pMainMenu->GetSubMenu(0);
	pSubMenu->CheckMenuItem(ID_EASY,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(ID_HARD,MF_CHECKED);

	Easy=FALSE;IsRnd=FALSE;
	count=0;
	CanCount=FALSE;
	SetPos();
	IsWin();
	m_wndStatusBar.SetText("这个可是有点难度的!",0,0);
}
void CPictureDlg::OnAdvan()
//菜单函数,自定义图片
{
	CFileDialog dlg(TRUE,NULL,NULL,NULL,"位图文件(*.bmp)|*.bmp");
	INT Result=dlg.DoModal();
	if(Result==IDOK)
	{
		CString name="(自定义): "+dlg.GetFileName();
		count=0;	CanCount=FALSE;	IsRnd=FALSE;  Advan=TRUE;
		hbitmap=(HBITMAP)::LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
		BITMAP bm;
		::GetObject(hbitmap,sizeof(BITMAP),&bm);
		//横向的图片
		if(bm.bmWidth>=bm.bmHeight)
		{
			hbitmap=(HBITMAP)::LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,350,280,LR_LOADFROMFILE);
			Width=350; Height=280;
			IsLong=FALSE;
		}
		//竖向的图片
		else if(bm.bmWidth<bm.bmHeight)
		{
			hbitmap=(HBITMAP)::LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,200,310,LR_LOADFROMFILE);
			Width=200;   Height=280;
			IsLong=TRUE;
		}
		SetPos();
		IsWin();
		m_wndStatusBar.SetText(name,0,0);
		}
	else if(Result==IDCANCEL)	return;
}

void CPictureDlg::OnPic1()
//显示图片
{
	OnRun(IDB_BITMAP1,ID_PICTURE1);
	m_wndStatusBar.SetText("Duck(小鸭)",0,0);
}
void CPictureDlg::OnPic2()
//显示图片
{
	OnRun(IDB_BITMAP2,ID_PICTURE2);
	m_wndStatusBar.SetText("HelloKitty(My Love!)",0,0);
}
void CPictureDlg::OnPic3()
//显示图片
{
	OnRun(IDB_BITMAP3,ID_PICTURE3);
	m_wndStatusBar.SetText("咖啡猫",0,0);
}
void CPictureDlg::OnPic4()
//显示图片
{
	OnRun(IDB_BITMAP4,ID_PICTURE4);
	m_wndStatusBar.SetText("美丽的女孩(I Love)",0,0);
}

void CPictureDlg::On3D()
//菜单函数,3D风格
{
	pSubMenu=pMainMenu->GetSubMenu(2);
	pSubMenu->CheckMenuItem(ID_FLAT,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(ID_3D,MF_CHECKED);
	Style3d=TRUE;
	SetImage();
}
void CPictureDlg::OnFlat()
//平面风格
{
	pSubMenu=pMainMenu->GetSubMenu(2);
	pSubMenu->CheckMenuItem(ID_FLAT,MF_CHECKED);
	pSubMenu->CheckMenuItem(ID_3D,MF_UNCHECKED);
	Style3d=FALSE;
	SetImage();
}
void CPictureDlg::OnAbout()
//菜单函数
{
	AboutDlg dlg;
	dlg.DoModal();
}
void CPictureDlg::OnBegin()
//菜单函数
{
	IsRnd=FALSE;
	CanCount=FALSE;
	count=0;
	SetPos();
	IsWin();
	m_wndStatusBar.SetText("加油!",0,0);
}
void CPictureDlg::OnForHelp()
//菜单函数,得到略缩图
{
	ShowItem();
	if(!pkDC) pkDC=new CDC;
	if(pkDC)  pkDC->DeleteDC();	
	SetPre();
}

UINT CPictureDlg::MapRand(UINT nMax)
//随机函数
{
	int nRand=rand();
	float fMap=(float)nMax/RAND_MAX;
	float fRetVal=(float)nRand*fMap+0.5f;
	return (UINT)fRetVal;
}
void CPictureDlg::Rnd()
//随机图格的位置
{
	int xnum,ynum,level;
	UINT rand;
	if(Easy) level=8;			//如果是9格
	else if(!Easy) level=15;	//如果是16格
	WINDOWPLACEMENT wpnum,wp15;
	for(int a=0;a<=600;a++)
	{
	rand=MapRand(4);
	if(rand==1)
		for(int b=0;b<=level-1;b++)
		{
		m_Image[level].GetWindowPlacement(&wp15);
	    m_Image[b].GetWindowPlacement(&wpnum);
		xnum=wpnum.rcNormalPosition.left;	ynum=wpnum.rcNormalPosition.top;
		if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top
			&& wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left-x)
		{	m_Image[b].SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
		}
		}
	if(rand==2)
		for(int c=0;c<=level-1;c++)
		{
		m_Image[level].GetWindowPlacement(&wp15);
	    m_Image[c].GetWindowPlacement(&wpnum);
		xnum=wpnum.rcNormalPosition.left;	ynum=wpnum.rcNormalPosition.top;
		if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top 
			&& wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left+x)
		{	m_Image[c].SetWindowPos(NULL,xnum-x,ynum,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
		}
		}
	if(rand==3)
		for(int d=0;d<=level-1;d++)
		{
		m_Image[level].GetWindowPlacement(&wp15);
	    m_Image[d].GetWindowPlacement(&wpnum);
		xnum=wpnum.rcNormalPosition.left;	ynum=wpnum.rcNormalPosition.top;
		if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
			&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top+y)
		{	m_Image[d].SetWindowPos(NULL,xnum,ynum-y,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
		}
		}
	if(rand==4)
		for(int e=0;e<=level-1;e++)
		{
		m_Image[level].GetWindowPlacement(&wp15);
	    m_Image[e].GetWindowPlacement(&wpnum);
		xnum=wpnum.rcNormalPosition.left;	ynum=wpnum.rcNormalPosition.top;
		if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
			&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top-y)
		{	m_Image[e].SetWindowPos(NULL,xnum,ynum+y,0,0,SWP_NOSIZE);
			m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
		}
		}
	}
	if(Easy) m_Image[8].ShowWindow(SW_HIDE);
	else if(!Easy) 
	{
		m_Image[8].ShowWindow(SW_SHOW);
		m_Image[15].ShowWindow(SW_HIDE);
	}
	pSubMenu=pMainMenu->GetSubMenu(0);
	pSubMenu->EnableMenuItem(ID_FORHELP,MF_ENABLED);
	IsRnd=TRUE;
	CanCount=TRUE;
}
BOOL CPictureDlg::IsWin()
//判断是否完成的函数
{
	WINDOWPLACEMENT wp;
	INT con,move;
	INT win=0;
	if(IsLong) move=70;
	else move=0;
	if(Easy==TRUE) con=2;
	else if(!Easy) con=3;
	for(int a=0;a<=con;a++)
	{
		m_Image[a].GetWindowPlacement(&wp);
		if(wp.rcNormalPosition.top==0 && wp.rcNormalPosition.left
			==a*x+move)
			win+=1;
	}
	for(int b=0;b<=con;b++)
	{
		m_Image[con+1+b].GetWindowPlacement(&wp);
		if(wp.rcNormalPosition.top==y && wp.rcNormalPosition.left
			==x*b+move)
			win+=1;
	}
	if(win<3) return FALSE;
	for(int c=0;c<=con;c++)
	{
		m_Image[2*(con+1)+c].GetWindowPlacement(&wp);
		if(wp.rcNormalPosition.top==2*y && wp.rcNormalPosition.left
			==x*c+move)
			win+=1;
	}
	if(win<5) return FALSE;
	if(!Easy)
	for(int d=0;d<=3;d++)
	{
		m_Image[12+d].GetWindowPlacement(&wp);
		if(wp.rcNormalPosition.top==3*y && wp.rcNormalPosition.left
			==x*d+move)
			win+=1;
	}
	if(Easy==TRUE && win==9)	//判断是否完成  
		{
			m_Image[8].ShowWindow(SW_SHOW);
			m_wndStatusBar.SetText("祝贺你,拼出来了!",0,0);
			return TRUE;
		}
	else if(!Easy && win==16)	//判断是否完成 
	{
		m_Image[8].ShowWindow(SW_SHOW);
		m_Image[15].ShowWindow(SW_SHOW);
		m_wndStatusBar.SetText("祝贺你,拼出来了!",0,0);
		return TRUE;
	}
	else return FALSE;
}
void CPictureDlg::OnEndHelp()
//重新显示图格
{
	ShowItem();
	::DeleteObject(pkDC);
}
void CPictureDlg::OnDlgAbout()
{
	OnAbout();
}
void CPictureDlg::OnWin()
//快速完成
{
	OnEndHelp();
	SetPos();
	IsWin();
	MessageBox("马上完成!!!","Hi~ ~!",MB_OK|MB_ICONINFORMATION);	
}
void CPictureDlg::SetPre()
//生成略缩图	
{
	BITMAP bm;
	CClientDC dc(&m_Preview);
	pkDC->CreateCompatibleDC(&dc);
	if(!Advan)  
	{
		m_Preview.SetWindowPos(NULL,0,0,136,112,SWP_NOMOVE);
		pkDC->SelectObject(bitmap);
		bitmap.GetObject(sizeof(BITMAP),&bm);
		dc.StretchBlt(0,0,136,112,pkDC,0,0,
			bm.bmWidth,bm.bmHeight,SRCCOPY);
	}
	else if(Advan)
	{
		INT wei,hei;
		if(IsLong)
		{
			m_Preview.SetWindowPos(NULL,0,0,85,120,SWP_NOMOVE);
			wei=85;	hei=120;
		}
		else 
		{
			wei=136;  hei=112;
			m_Preview.SetWindowPos(NULL,0,0,136,112,SWP_NOMOVE);
		}
		::GetObject(hbitmap,sizeof(BITMAP),&bm);
		pkDC->SelectObject(hbitmap);
		dc.StretchBlt(0,0,wei,hei,pkDC,0,0,
			bm.bmWidth,bm.bmHeight,SRCCOPY);
		}
}
void CPictureDlg::OnHide()
//出现秘密图画
{
	OnEndHelp();
	OnRun(IDB_BITMAP5,NULL);
	m_wndStatusBar.SetText("秘密图画!!",0,0);
}
void CPictureDlg::ShowItem()
//显示帮助对话框
{
	INT count;
	if(Easy) count=7;
	else count=14;
	if(!IsHelp)
	{
	GetDlgItem(IDC_ENDHELP)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_DLGABOUT)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_PREVIEW)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_WIN)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_HIDE)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RECT)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_VERSION)->ShowWindow(SW_SHOW);
	for(int i=0;i<=count;i++)
		m_Image[i].ShowWindow(SW_HIDE);

	pSubMenu=pMainMenu->GetSubMenu(0);
	pSubMenu->EnableMenuItem(ID_BEGIN,MF_DISABLED|MF_GRAYED);
	pSubMenu->EnableMenuItem(ID_EASY,MF_DISABLED|MF_GRAYED);
	pSubMenu->EnableMenuItem(ID_HARD,MF_DISABLED|MF_GRAYED);
	pSubMenu->EnableMenuItem(ID_FORHELP,MF_DISABLED|MF_GRAYED);

	pSubMenu=pMainMenu->GetSubMenu(1);
	pSubMenu->EnableMenuItem(ID_PICTURE1,MF_DISABLED|MF_GRAYED);
	pSubMenu->EnableMenuItem(ID_PICTURE2,MF_DISABLED|MF_GRAYED);
	pSubMenu->EnableMenuItem(ID_PICTURE3,MF_DISABLED|MF_GRAYED);
	pSubMenu->EnableMenuItem(ID_PICTURE4,MF_DISABLED|MF_GRAYED);
	pSubMenu->EnableMenuItem(ID_ADVAN,MF_DISABLED|MF_GRAYED);
	
	IsHelp=TRUE;
	}
	else if(IsHelp)
	{
	GetDlgItem(IDC_ENDHELP)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_DLGABOUT)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_PREVIEW)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_WIN)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_HIDE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RECT)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_VERSION)->ShowWindow(SW_HIDE);
	for(int i=0;i<=count;i++)
		m_Image[i].ShowWindow(SW_SHOW);

	pSubMenu=pMainMenu->GetSubMenu(0);
	pSubMenu->EnableMenuItem(ID_BEGIN,MF_ENABLED);
	pSubMenu->EnableMenuItem(ID_EASY,MF_ENABLED);
	pSubMenu->EnableMenuItem(ID_HARD,MF_ENABLED);
	pSubMenu->EnableMenuItem(ID_FORHELP,MF_ENABLED);

	pSubMenu=pMainMenu->GetSubMenu(1);
	pSubMenu->EnableMenuItem(ID_PICTURE1,MF_ENABLED);
	pSubMenu->EnableMenuItem(ID_PICTURE2,MF_ENABLED);
	pSubMenu->EnableMenuItem(ID_PICTURE3,MF_ENABLED);
	pSubMenu->EnableMenuItem(ID_PICTURE4,MF_ENABLED);
	pSubMenu->EnableMenuItem(ID_ADVAN,MF_ENABLED);

	IsHelp=FALSE;
	}
}
void CPictureDlg::OnRun(UINT nBitmapID,UINT nMenuID)
//改变菜单、初始化的函数
{
	pSubMenu=pMainMenu->GetSubMenu(1);
	pSubMenu->CheckMenuItem(ID_PICTURE1,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(ID_PICTURE2,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(ID_PICTURE3,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(ID_PICTURE4,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(ID_ADVAN,MF_UNCHECKED);
	pSubMenu->CheckMenuItem(nMenuID,MF_CHECKED);
	
	count=0;
	IsLong=FALSE;
	CanCount=FALSE;
	IsRnd=FALSE;
	Advan=FALSE;
	bitmap.DeleteObject();
	bitmap.LoadBitmap(nBitmapID);
	SetPos();
	SetImage();
	IsWin();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -