📄 tankdlg.cpp
字号:
{
game.m_pBackGroundBuffer->Release();
game.m_pBackGroundBuffer=NULL;
}
sprintf(szMapFile,"pic\\bkd\\background%d.bmp",m_nLevel);
game.m_pBackGroundBuffer = game.DDLoadBitmap(szMapFile);
if(!game.m_pBackGroundBuffer)AfxMessageBox("载入背景图失败");
*/
game.DrawLevel(m_nLevel);
KillTimer(1);
KillTimer(2);
SetTimer(3,1000,NULL);
}
else
game.SetGameState(GAMEWIN);
}
if(gstate==GAMEWIN)
{
game.UpdateScreen();
KillTimer(2);
KillTimer(3);
}
if(gstate==GAMEOVER)
{
game.UpdateScreen();
KillTimer(2);
KillTimer(3);
}
break;
case 2:
{
CEgg * egg=new CEgg;
if(egg)
{
egg->SetEggBmp(game.m_pEggBuffer);
egg->RandomSet();
game.m_Egg.AddTail(egg);
}
}
break;
case 3:
if(nNum>3)
{
nNum=0;
game.StartGame(m_nLevel);
KillTimer(3);
SetTimer(1,20,NULL);
SetTimer(2,60000,NULL);
return;
}
game.DrawWait(nNum);
nNum++;
break;
}
CDialog::OnTimer(nIDEvent);
}
void CTankDlg::OnOK()
{
}
BOOL CTankDlg::PreTranslateMessage(MSG* pMsg)
{
static pausetime=0;
if(::GetKeyState(VK_PAUSE)<0)
{
if(GetTickCount()-pausetime>=1000)
{
if(game.GetGameState()==GAMEACTIVE||game.GetGameState()==GAMEPAUSE)
{
if(m_bPause)m_bPause=FALSE;
else m_bPause=TRUE;
if(m_bPause)
{
game.SetGameState(GAMEPAUSE);
SuspendThread(hThread);
}
else
{
game.SetGameState(GAMEACTIVE);
ResumeThread(hThread);
}
}
pausetime=GetTickCount();
return TRUE;
}
else return TRUE;
}
if(::GetKeyState(VK_ESCAPE)<0&&!m_bEscPress)
{
m_OldState=game.GetGameState();
if(m_OldState==GAMEBEGIN||m_OldState==GAMENEXT||m_OldState==GAMEPAUSE)return TRUE;
//运行时载入menu图片
game.m_pMenuBuffer=game.DDLoadBitmap("pic\\bmp\\menu.bmp");
if(!game.m_pMenuBuffer){AfxMessageBox("载入菜单图片出错");return TRUE;}
game.DDSetColorKey( game.m_pMenuBuffer, 0);
m_bEscPress=TRUE;
game.SetGameState(GAMEMENU);
return TRUE;
}
if(::GetKeyState(VK_ESCAPE)<0&&m_bEscPress)
{
//运行时销毁menu图片
if(game.m_pMenuBuffer)
{
game.m_pMenuBuffer->Release();
game.m_pMenuBuffer=NULL;
}
game.SetGameState(m_OldState);
m_bEscPress=FALSE;
return TRUE;
}
if(::GetKeyState(VK_RETURN)<0)
{
return TRUE;
}
if(pMsg->message==WM_CHAR)
{
CEvent event;
event.ResetEvent();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CTankDlg::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
m_bPaint=TRUE;
CDialog::OnWindowPosChanged(lpwndpos);
}
void CTankDlg::OnMove(int x, int y)
{
CRect rc;
rc.left=0;
rc.right=SCREEN_WIDTH;
rc.top=0;
rc.bottom=SCREEN_HEIGHT;
ClientToScreen(&rc);
rc.OffsetRect(5,5);
game.SetWndRect(rc);
m_bPaint=TRUE;
CDialog::OnMove(x, y);
}
void CTankDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if(game.GetGameState()==GAMEBEGIN)
{
game.SetGameState(GAMENEXT);
if(game.m_pBeginBuffer)
{
game.m_pBeginBuffer->Release();
game.m_pBeginBuffer=NULL;
}
}
CDialog::OnLButtonDown(nFlags, point);
}
void CTankDlg::ShowPlayerInfo()
{
static leftLife=0;
static rightLife=0;
static leftKill=0;
static rightKill=0;
static leftScore=0;
static rightScore=0;
static lefttanknumber=0;
static righttanknumber=0;
if(game.m_tankleft)
{
//绘制生命显示条
int i=game.m_tankleft->GetTankLife();
if(i!=leftLife)
{
m_pictureBloodEmpty.Draw(GetDC(),CPoint(650,44));
m_pictureBloodFull.Draw(GetDC(),CPoint(650,44),(double(i)/200.00));
leftLife=i;
}
//绘制杀敌人坦克数
int m=game.m_nLeftKills;
if(m!=leftKill)
{
CString temp;
int pos=m%10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",pos);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(708,200));
}
pos=m/100;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",pos);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(666,200));
}
m-=pos*100;
pos=m/10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",pos);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(687,200));
}
leftKill=game.m_nLeftKills;
}
//绘制得分
int k=game.m_nLeftScore;
if(k!=leftScore)
{
CString temp;
int pos=k%10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(727,285));
}
pos=k/1000;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(651,285));
}
k-=pos*1000;
pos=k/100;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(677,285));
}
k-=pos*100;
pos=k/10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(702,285));
}
leftScore=game.m_nLeftScore;
}
//绘制坦克剩余量
int num=game.m_nLeftPlayer;
if(num!=lefttanknumber)
{
num=num%10;
CString temp;
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",num);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(720,10));
lefttanknumber=game.m_nLeftPlayer;
}
}
if(!game.m_bSinglePlayer&&game.m_tankright)
{
int j=game.m_tankright->GetTankLife();
if(j!=rightLife)
{
m_pictureBloodEmpty.Draw(GetDC(),CPoint(650,370));
m_pictureBloodFull.Draw(GetDC(),CPoint(650,370),(double(j)/200.00));
rightLife=j;
}
int n=game.m_nRightKills;
if(n!=rightKill)
{
CString temp;
int pos=n%10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",pos);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(706,528));
}
pos=n/100;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",pos);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(664,528));
}
n-=pos*100;
pos=n/10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",pos);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(685,528));
}
rightKill=game.m_nRightKills;
}
int h=game.m_nRightScore;
if(h!=rightScore)
{
CString temp;
int pos=h%10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(727,613));
}
pos=h/1000;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(651,613));
}
h-=pos*1000;
pos=h/100;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(677,613));
}
h-=pos*100;
pos=h/10;
if(pos>=0)
{
temp.Format("pic\\Bmp\\MainDlg\\Math\\L%d.JPG",pos);
m_pictureLMath.Load(temp);
m_pictureLMath.Draw(GetDC(),CPoint(702,613));
}
rightScore=game.m_nRightScore;
}
int num=game.m_nRightPlayer;
if(num!=righttanknumber)
{
num=num%10;
CString temp;
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",num);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(720,335));
righttanknumber=game.m_nRightPlayer;
}
}
static BOOL flash=TRUE;
//专门针对单人情况刷新rightplayer,且只刷新一遍
if(game.m_bSinglePlayer&&flash)
{
flash=FALSE;
CString temp;
temp.Format("pic\\Bmp\\MainDlg\\Math\\B%d.JPG",0);
m_pictureBMath.Load(temp);
m_pictureBMath.Draw(GetDC(),CPoint(720,335));
}
}
void CTankDlg::OnClose()
{
CDialog::OnClose();
}
void CTankDlg::Exit()
{
SuspendThread(hThread);
CDialog::OnCancel();
}
void CTankDlg::OnDestroy()
{
CDialog::OnDestroy();
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void CTankDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -