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

📄 gamefrm.cpp

📁 这是一个完全使用wxWidgets开发库开发的小游戏
💻 CPP
字号:
//---------------------------------------------------------------------------
//
// Name:        GameFrm.cpp
// Author:      ejoyc
// Created:     2008-6-22 22:00:35
// Description: GameFrm class implementation
//
//---------------------------------------------------------------------------
#include "InfoDlg.h"
#include "GameFrm.h"

BEGIN_EVENT_TABLE(GameFrm,wxFrame)
	EVT_PAINT(GameFrm::OnPaint)
	EVT_LEFT_DCLICK(GameFrm::OnLeftDClick)
	EVT_LEFT_DOWN(GameFrm::OnLeftDown)
	EVT_LEFT_UP(GameFrm::OnLeftUp)
	EVT_MOTION(GameFrm::OnMouseMove)
	EVT_TIMER(ID_TIMER1,GameFrm::OnTimer1Timer)
	EVT_TIMER(ID_TIMER2,GameFrm::OnTimer2Timer)
	EVT_KEY_DOWN(GameFrm::OnKeyDown)
END_EVENT_TABLE()

#define FRAME_SYTLE wxFRAME_SHAPED|wxMINIMIZE_BOX|wxCLOSE_BOX|wxSYSTEM_MENU|wxSTAY_ON_TOP

GameFrm::GameFrm(wxString title):wxFrame(NULL,wxID_ANY,title,wxPoint(200,100),wxDefaultSize,FRAME_SYTLE)
{
	game_face=wxBitmap(wxBITMAP(IDB_FACE));
	game_brick=wxBitmap(wxBITMAP(IDB_Brick));
	SetSize(wxSize(game_face.GetWidth(),game_face.GetHeight()));
	SetWindowShape();
	SetToolTip(wxT("Tip:双击鼠标开始/暂停/复位游戏"));
	WxTimer1=new wxTimer(this,ID_TIMER1);
	WxTimer2=new wxTimer(this,ID_TIMER2);
	WxTimer2->Start(40,false);
	pGame=new GameCell();
}

GameFrm::~GameFrm()
{
}

void GameFrm::SetWindowShape()
{
	wxRegion region(game_face,*wxWHITE);
	SetShape(region);
}

void GameFrm::OnLeftDClick(wxMouseEvent &event)
{
	if (event.GetX()>150&&event.GetX()<370&&event.GetY()>10&&event.GetY()<110)
	{
		InfoDlg dialog(this);
		dialog.ShowModal();
		return ;
	}
	if(WxTimer1->IsRunning())
	{	
		WxTimer1->Stop();
	}
	else		
	{
		WxTimer1->Start(1000,false);
	}
	if (pGame->GameOverTest())
	{
		pGame->InitWall();
		pGame->UpdateWall();
		WxTimer1->Start(1000,false);
	}		
}

void GameFrm::OnLeftDown(wxMouseEvent &event)
{
	CaptureMouse();
	wxPoint pos = ClientToScreen(event.GetPosition());
	wxPoint origin = GetPosition();
	int dx =  pos.x - origin.x;
	int dy = pos.y - origin.y;
	dpt = wxPoint(dx, dy);
}

void GameFrm::OnLeftUp(wxMouseEvent &WXUNUSED(event))
{
	if(HasCapture())
	{
		ReleaseMouse();
	}	
}

void GameFrm::OnMouseMove(wxMouseEvent &event)
{
	wxPoint pt= event.GetPosition();
	if (event.Dragging() && event.LeftIsDown())
	{
		wxPoint pos = ClientToScreen(pt);
		Move(wxPoint(pos.x - dpt.x, pos.y - dpt.y));
	}
}

void GameFrm::OnPaint(wxPaintEvent& WXUNUSED(event))
{
	wxBufferedPaintDC dc(this);

	dc.DrawBitmap(game_face,0,0,true);
	dc.DrawBitmap(pGame->GetCurrentWall(),20,120,true);
	dc.DrawBitmap(pGame->GetMsgBitmap(),150,10,true);
}

void GameFrm::OnTimer1Timer(wxTimerEvent  &WXUNUSED(event))
{	
	pGame->UpdateWall();
	wxRect rect(0,0,game_face.GetWidth(),game_face.GetHeight());
	RefreshRect(rect,false);
	pGame->MoveToDown();	
	pGame->UpdateWall();
	RefreshRect(rect,false);
}
void GameFrm::OnTimer2Timer(wxTimerEvent  &WXUNUSED(event))
{
	if (pGame->GameOverTest())
	{
		WxTimer1->Stop();
	}
}
 
void GameFrm::OnKeyDown(wxKeyEvent& event)
{
 	switch (event.GetKeyCode())
 	{
	case WXK_ESCAPE:
 		Close(true);
 		break;
  	case WXK_UP:
		pGame->ShapeBrick();
		break;
  	case WXK_DOWN:
		if(WxTimer1->IsRunning())
			pGame->MoveToDown();
  		break;
  	case WXK_LEFT:
		pGame->MoveToLeft();
   		break;
	case WXK_RIGHT:
		pGame->MoveToRight();
  		break;
 	case WXK_SPACE:
		if(WxTimer1->IsRunning())
			WxTimer1->Stop();
		else
			WxTimer1->Start(1000,false);
  	}
	pGame->UpdateWall();
	wxRect rect(0,0,game_face.GetWidth(),game_face.GetHeight());
	RefreshRect(rect,false);
}

⌨️ 快捷键说明

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