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

📄 bitmapbrowserdlg.cpp

📁 自己用MFC做的一个小的游戏程序MFC当文档框架
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 			}
			return;
		}
		if (m_sOB[0]->pt.x==29 || m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE || m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y-1].state==TRUE)
		{
			m_ptFlag=LEFTUP;
			if (m_sOB[0]->pt.y-1<0)
			{
				return;
			}
			else if(m_sOB[0]->pt.x<28)
			{	
				if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE)
				{
					m_Scores++;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state=FALSE;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].clr=0;
				}
				
				if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y-1].state==TRUE)
				{
					m_Scores++;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y-1].state=FALSE;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y-1].clr=0;
				}
	
				return;
			}
			else if (m_sOB[0]->pt.x==29)
			{
				m_IsBeginGame=FALSE;
				if (IDYES==MessageBox("对不起!您输了!\n是否重新开始游戏?","失败",MB_YESNO |MB_ICONSTOP))
				{
					OnMeunStart();
				}
				return;
			}
			else 
				return;
		}

	}
	else if (RIGHTDOWN==point)
	{
		if (m_sOB[0]->pt.y==19 || m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state==TRUE /*|| m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state==TRUE*/)
		{
			m_ptFlag=LEFTDOWN;
			if (m_sOB[0]->pt.x+1>28 || m_sOB[0]->pt.y+1>19)
			{
				return;
			}
			if (m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state==TRUE)
			{
 				m_Scores++;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].clr=0;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state=FALSE;
			}
// 			if(m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state==TRUE)
// 			{
// 				m_Scores++;
// 				m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].clr=0;
// 				m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state=FALSE;
// 			}
			return;
		}
		if (m_sOB[0]->pt.x==29 || m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE || m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state==TRUE)
		{
			m_ptFlag=RIGHTUP;
			
			if (m_sOB[0]->pt.y+1>19)
			{
				return;
			}
			else if(m_sOB[0]->pt.x<28)
			{
				if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE)
				{
					m_Scores++;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state=FALSE;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].clr=0;
				}
				if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state==TRUE)
				{
					m_Scores++;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state=FALSE;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].clr=0;
				}

				return;
			}
			else if (m_sOB[0]->pt.x==29)
			{
				m_IsBeginGame=FALSE;
				if (IDYES==MessageBox("对不起!您输了!\n是否重新开始游戏?","失败",MB_YESNO |MB_ICONSTOP))
				{
					OnMeunStart();
				}
				return;
			}
			else 
				return;
		}

	}

	clr=m_sOB[0]->clr;
	m_sOB[0]->state=FALSE;
	m_sOB[0]=&m_Matrix[ptTemp.x][ptTemp.y];
	m_sOB[0]->state=TRUE;
	m_sOB[0]->clr=clr;
	if (ROW*COL==m_Scores)
	{
		m_IsBeginGame=FALSE;
		if (IDYES==MessageBox("恭喜!您赢了!\n是否重新开始游戏?","成功",MB_YESNO | MB_ICONEXCLAMATION ))
		{
			OnMeunStart();
		}
	}
}

void CBitmapBrowserDlg::fnRenderScene()
{
	CDC *pDC=GetDC();
	
	CDC comDC;
	comDC.CreateCompatibleDC(pDC);
	
	CBitmap bitmap;
	bitmap.CreateCompatibleBitmap(pDC,m_rectClient.Width(),m_rectClient.Height());
	comDC.SelectObject(&bitmap);
	
	if (m_IsOpenbmp)
	{
		CDC comDC1;
		comDC1.CreateCompatibleDC(pDC);
		BITMAP bm;
		m_bitmap.GetBitmap(&bm);
		comDC1.SelectObject(&m_bitmap);
		comDC.StretchBlt(10,10,m_rectClient.Width()-20,m_rectClient.Height()-20,\
			&comDC1,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
	}
	
	CPen penBlue;
	penBlue.CreatePen(PS_SOLID,1,RGB(0,0,150));
	CPen *pOldPen=comDC.SelectObject(&penBlue);
	
	CBrush *brush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
	CBrush *pOldBrush=comDC.SelectObject(brush);
	
	comDC.SetBkMode(TRANSPARENT);
	comDC.SetTextColor(RGB(255,0,0));
	
	CString strTemp;
	strTemp.Format("\t\t碰碰乐\t\t速度:%d  分数:%d",m_Velocity,m_Scores);
	comDC.DrawText(strTemp,strlen(strTemp),&CRect(m_rectClient.left+10,m_rectClient.top+10,\
		m_rectClient.right,m_rectClient.top+40),DT_CENTER|DT_EXPANDTABS);
	
	comDC.Rectangle(m_rectClient.left+10,m_rectClient.top+50,m_rectClient.right-10,m_rectClient.bottom-10);
	
	CPen penYellow;
	penYellow.CreatePen(PS_SOLID,1,RGB(255,255,0));
	comDC.SelectObject(&penYellow);
	comDC.MoveTo(m_rectClient.left,m_rectClient.top+40);
	comDC.LineTo(m_rectClient.right,m_rectClient.top+40);
	
	comDC.SelectObject(&penBlue);
	
	if(m_IsBeginGame)
		for (int kk=0;kk<30;kk++)
			for (int k=0;k<20;k++)
			{
				if (m_Matrix[kk][k].state)
					comDC.FillSolidRect(m_rectClient.left+10+20*m_Matrix[kk][k].pt.y,
					m_rectClient.top+50+20*m_Matrix[kk][k].pt.x,
					20,
					20,
					m_Matrix[kk][k].clr);
			}
			
			for (int i=1;i<30;i++)
			{
				comDC.MoveTo(m_rectClient.left+10,m_rectClient.top+50+20*i);
				comDC.LineTo(m_rectClient.right-10,m_rectClient.top+50+20*i);
			}
			for (int j=1;j<20;j++)
			{
				comDC.MoveTo(m_rectClient.left+10+20*j,m_rectClient.top+50);
				comDC.LineTo(m_rectClient.left+10+20*j,m_rectClient.bottom-10);
			}
			
			
	pDC->BitBlt(0,0,m_rectClient.Width(),m_rectClient.Height(),&comDC,0,0,SRCCOPY);
	
	comDC.SelectObject(pOldPen);
	comDC.SelectObject(pOldBrush);
	ReleaseDC(pDC);
}

void CBitmapBrowserDlg::OnMenuChoosepic() 
{
	// TODO: Add your command handler code here
	CFileDialog fodlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"BITMAP FILES|*.bmp|ALL FILES|*.*||");
	
	if(IDOK==fodlg.DoModal())
	{
		m_strFileName=fodlg.GetPathName();
		m_hbmp=(HBITMAP)LoadImage(AfxGetApp()->m_hInstance,m_strFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
		
		m_bitmap.Detach();
		m_bitmap.Attach(m_hbmp);
		
		m_IsOpenbmp=TRUE;
		
// 		CString strtemp;
// 		strtemp.Format("Width=%d\tHeight=%d",m_rectClient.Width(),m_rectClient.Height());
// 		MessageBox(strtemp);
		
		Invalidate();
		
	}
}


void CBitmapBrowserDlg::OnMenuSetting() 
{
	// TODO: Add your command handler code here
	CSettingDlg dlg;
	dlg.m_row=ROW;
	dlg.m_col=COL;
	dlg.m_velocity=m_Velocity;
	dlg.m_cheat=m_IsCheat;
	if (IDOK==dlg.DoModal())
	{
		ROW=dlg.m_row;
		COL=dlg.m_col;
		m_Velocity=dlg.m_velocity;
		m_IsCheat=dlg.m_cheat;
		OnMeunStart();
	}
}

void CBitmapBrowserDlg::RandHeadMoving(CPoint point)
{
	if (!m_IsBeginGame || m_IsPauseGame)
	{
		return;
	}
	m_ptFlag=point;
	CPoint ptTemp;
	COLORREF clr;
	ptTemp=m_sOB[0]->pt+point;
	if (LEFTUP==point)
	{
		if (m_sOB[0]->pt.y==0 || m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].state==TRUE)
		{
			m_ptFlag=RIGHTUP;
			if (m_sOB[0]->pt.y-1<0)
			{
				return;
			}
			if(m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].state==TRUE)
			{
				m_Scores++;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].clr=0;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].state=FALSE;
			}
			return;
		}
		if (m_sOB[0]->pt.x==0 || m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].state==TRUE)
		{
			m_ptFlag=LEFTDOWN;
			if (m_sOB[0]->pt.x-1<0)
			{
				return;
			}
			if(m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].state==TRUE)
			{
				m_Scores++;
				m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].clr=0;
				m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].state=FALSE;
			}
			return;
		}
		if (m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y-1].state==TRUE)
		{
			if (rand()%2)
			{
				m_ptFlag=RIGHTUP;
			}
			else
			{
				m_ptFlag=LEFTDOWN;
			}
			if (m_sOB[0]->pt.x-1<0 || m_sOB[0]->pt.y-1<0)
			{
				return;
			}
			m_Scores++;
			m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y-1].clr=0;
			m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y-1].state=FALSE;

			return;
		}
	}
	else if (RIGHTUP==point)
	{
		if (m_sOB[0]->pt.x==0 || m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].state==TRUE /*|| m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y+1].state==TRUE*/)
		{
			m_ptFlag=RIGHTDOWN;
			if (m_sOB[0]->pt.x-1<0)
			{
				return;
			}
			if(m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].state==TRUE)
			{
 				m_Scores++;
				m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].clr=0;
				m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y].state=FALSE;
			}
			return;
		}
		if (m_sOB[0]->pt.y==19 || m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state==TRUE /*|| m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y+1].state==TRUE*/)
		{
			m_ptFlag=LEFTUP;
			if (m_sOB[0]->pt.y+1>19)
			{
				return;
			}
			if (m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state==TRUE)
			{
				m_Scores++;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].clr=0;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state=FALSE;
			}
			return;
		}
		if (m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y+1].state==TRUE)
		{
			if (rand()%2)
			{
				m_ptFlag=LEFTUP;
			}
			else
			{
				m_ptFlag=RIGHTDOWN;
			}
			if (m_sOB[0]->pt.x-1<0 || m_sOB[0]->pt.y+1>19)
			{
				return;
			}
			m_Scores++;
			m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y+1].clr=0;
			m_Matrix[m_sOB[0]->pt.x-1][m_sOB[0]->pt.y+1].state=FALSE;
			
			return;
		}
	}
	else if (LEFTDOWN==point)
	{
		if (m_sOB[0]->pt.y==0 || m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].state==TRUE)
		{
			m_ptFlag=RIGHTDOWN;
			if (m_sOB[0]->pt.y-1<0)
			{
				return;
			}
			if (m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].state==TRUE)
			{
				m_Scores++;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].clr=0;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y-1].state=FALSE;
			}
			return;
		}
		if (m_sOB[0]->pt.x==29 || m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE)
		{
			m_ptFlag=LEFTUP;
			if(m_sOB[0]->pt.x<28)
			{	
				if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE)
				{
					m_Scores++;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state=FALSE;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].clr=0;
				}	
				return;
			}
			else if (m_sOB[0]->pt.x==29)
			{
				m_IsBeginGame=FALSE;
				if (IDYES==MessageBox("对不起!您输了!\n是否重新开始游戏?","失败",MB_YESNO |MB_ICONSTOP))
				{
					OnMeunStart();
				}
				return;
			}
			else 
				return;
		}
		if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y-1].state==TRUE)
		{
			if (rand()%2)
			{
				m_ptFlag=LEFTUP;
			}
			else
			{
				m_ptFlag=RIGHTDOWN;
			}
			if (m_sOB[0]->pt.x+1>28 || m_sOB[0]->pt.y-1<0)
			{
				return;
			}
			m_Scores++;
			m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y-1].clr=0;
			m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y-1].state=FALSE;

			return;
		}

	}
	else if (RIGHTDOWN==point)
	{
		if (m_sOB[0]->pt.y==19 || m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state==TRUE)
		{
			m_ptFlag=LEFTDOWN;
			if (m_sOB[0]->pt.y+1>19)
			{
				return;
			}
			if (m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state==TRUE)
			{
 				m_Scores++;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].clr=0;
				m_Matrix[m_sOB[0]->pt.x][m_sOB[0]->pt.y+1].state=FALSE;
			}
			return;
		}
		if (m_sOB[0]->pt.x==29 || m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE /*|| m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state==TRUE*/)
		{
			m_ptFlag=RIGHTUP;
			
			if(m_sOB[0]->pt.x<28)
			{
				if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state==TRUE)
				{
					m_Scores++;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].state=FALSE;
					m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y].clr=0;
				}
				return;
			}
			else if (m_sOB[0]->pt.x==29)
			{
				m_IsBeginGame=FALSE;
				if (IDYES==MessageBox("对不起!您输了!\n是否重新开始游戏?","失败",MB_YESNO |MB_ICONSTOP))
				{
					OnMeunStart();
				}
				return;
			}
			else 
				return;
		}
		if (m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state==TRUE)
		{
			if (rand()%2)
			{
				m_ptFlag=RIGHTUP;
			}
			else
			{
				m_ptFlag=LEFTDOWN;
			}
			if (m_sOB[0]->pt.x+1>28 || m_sOB[0]->pt.y+1>19)
			{
				return;
			}
			m_Scores++;
			m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].clr=0;
			m_Matrix[m_sOB[0]->pt.x+1][m_sOB[0]->pt.y+1].state=FALSE;
			return;
		}

	}

	clr=m_sOB[0]->clr;
	m_sOB[0]->state=FALSE;
	m_sOB[0]=&m_Matrix[ptTemp.x][ptTemp.y];
	m_sOB[0]->state=TRUE;
	m_sOB[0]->clr=clr;
	if (ROW*COL==m_Scores)
	{
		m_IsBeginGame=FALSE;
		if (IDYES==MessageBox("恭喜!您赢了!\n是否重新开始游戏?","成功",MB_YESNO | MB_ICONEXCLAMATION ))
		{
			OnMeunStart();
		}
	}
}

⌨️ 快捷键说明

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