本文实例为大家分享了C++实现打地鼠游戏的具体代码,供大家参考,具体内容如下
代码:
#include <afxwin.h>
class CMyWnd :public CFrameWnd
{
private:
CDC *m_pmdc;
CBitmap *m_pbitmap[5];
CRect myRect[6];
CString picPath[5];
int hit;
BOOL m_state[6];
int counter;
int num;
int hammer_x;
int hammer_y;
public:
CMyWnd()
{
Create(NULL,"Third App");
CClientDC dc(this);
picPath[0]="../image/background.bmp";
picPath[1]="../image/mouse1.bmp";
picPath[2]="../image/mouse2.bmp";
picPath[3]="../image/hammer1.bmp";
picPath[4]="../image/hammer2.bmp";
//
myRect[0].SetRect(30,10,130,110);
myRect[1].SetRect(190,10,290,110);
myRect[2].SetRect(340,10,440,110);
myRect[3].SetRect(30,140,130,240);
myRect[4].SetRect(190,140,290,240);
myRect[5].SetRect(340,140,440,240);
//
hit=0;
for(int i=0;i<6;i++)
m_state[i]=FALSE;
counter=0;
hammer_x=hammer_y=0;
num=0;
//不显示鼠标
//ShowCursor(FALSE);
m_pmdc=new CDC;
for(int i=0;i<5;i++)
{
m_pbitmap[i]=new CBitmap;
m_pbitmap[i]->m_hObject=(HBITMAP)::LoadImage(NULL,picPath[i],
IMAGE_BITMAP, 0,0,LR_LOADFROMFILE);
}
m_pmdc->CreateCompatibleDC(&dc);
MoveWindow(200,20,480,320);
this->SetTimer(1,1000,NULL);
}
void myPait(int flag);
~CMyWnd()
{
for(int i=0;i<5;i++)
delete m_pbitmap[i];
delete m_pmdc;
}
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
// afx_msg void OnPaint();
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
// afx_msg void OnPaint();
};
class CMyApp:public CWinApp
{
public:
BOOL InitInstance();
};
BOOL CMyApp::InitInstance()
{
CMyWnd *pf=new CMyWnd;
pf->ShowWindow(m_nCmdShow);
this->m_pMainWnd=pf;
return TRUE;
}
CMyApp FirstApp;BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
ON_WM_LBUTTONUP()
// ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
// ON_WM_PAINT()
END_MESSAGE_MAP()
void CMyWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
counter++;
m_state[num]=FALSE;
num=rand()%6;
m_state[num]=TRUE;
for(int i=0;i<6;i++)
{
if(myRect[i].PtInRect(point)&&m_state[i])
{
hit++;
}
else
hit=0;
}
CFrameWnd::OnLButtonUp(nFlags, point);
}
void CMyWnd::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this); // device context for painting
m_pmdc->SelectObject(m_pbitmap[0]);
dc.BitBlt(0,0,480,320,m_pmdc,0,0,SRCCOPY);
m_pmdc->SelectObject(m_pbitmap[3]);
dc.BitBlt(hammer_x,hammer_y,148,148,m_pmdc,0,0,SRCAND);
m_pmdc->SelectObject(m_pbitmap[4]);
dc.BitBlt(hammer_x,hammer_y,148,148,m_pmdc,0,0,SRCPAINT);
for(int i=0;i<6;i++)
{
if(m_state[i])
{
m_pmdc->SelectObject(m_pbitmap[1]);
dc.BitBlt(myRect[i].left,myRect[i].top,100,100,m_pmdc,0,0,SRCAND);
m_pmdc->SelectObject(m_pbitmap[2]);
dc.BitBlt(myRect[i].left,myRect[i].top,100,100,m_pmdc,0,0,SRCPAINT);
}
}
if(hit>=3)
{
KillTimer(1);
MessageBox("你赢了!");
}
if(counter>=10)
{
KillTimer(1);
MessageBox("你输了!");
}
CFrameWnd::OnTimer(nIDEvent);
}
void CMyWnd::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
hammer_x=point.x;
hammer_y=point.y;
CFrameWnd::OnMouseMove(nFlags, point);
}
您可能感兴趣的文章:QT实现简单打地鼠游戏