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

📄 tankdlg.cpp

📁 vc编写的超级坦克源码,vc6编写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				{
						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 + -