C++實現打地鼠遊戲設計
阿新 • • 發佈:2020-12-25
本文例項為大家分享了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,290,110); myRect[2].SetRect(340,440,110); myRect[3].SetRect(30,140,240); myRect[4].SetRect(190,240); myRect[5].SetRect(340,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,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,320,m_pmdc,SRCCOPY); m_pmdc->SelectObject(m_pbitmap[3]); dc.BitBlt(hammer_x,hammer_y,148,SRCAND); m_pmdc->SelectObject(m_pbitmap[4]); dc.BitBlt(hammer_x,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,SRCAND); m_pmdc->SelectObject(m_pbitmap[2]); dc.BitBlt(myRect[i].left,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); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。