使用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); }
看完上述内容,你们掌握使用C++怎么制作一个打地鼠游戏的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。