?? gamefrm.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 + -