陨石撞飞机游戏 DirectX版

// DirectXFrame.cpp : implementation file
//

#include "stdafx.h"
#include "DirectXr.h"
#include "DirectXFrame.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// DirectXFrame

IMPLEMENT_DYNCREATE(DirectXFrame, CFrameWnd)

DirectXFrame::DirectXFrame()
{   
   srand((unsigned)time(NULL)); //产生随机种子
    work=0;

   for(int i=0;i<=7;i++)
   {
    shitleft[i]=(rand()%30)*29;
    shitspeed[i]=rand()%20+5;
    shittop[i]=-60;
   }

   MessageBox("在窗体中单击鼠标左键开始游戏!");

 RECT rect;
 Create(NULL,"陨石撞飞机DirectX版  作者:傅城州");
 CClientDC dc(this);
 int width = dc.GetDeviceCaps(HORZRES);
 int height = dc.GetDeviceCaps(VERTRES);
 GetWindowRect( &rect );
 width = ( width - ( rect.right - rect.left ))/2 ;
 height = (height - (rect.bottom - rect.top ))/2 ;
 MoveWindow( width , height , (rect.right - rect.left ) , (rect.bottom - rect.top ) ,true);

}

DirectXFrame::~DirectXFrame()
{
}


BEGIN_MESSAGE_MAP(DirectXFrame, CFrameWnd)
 //{{AFX_MSG_MAP(DirectXFrame)
 ON_WM_PAINT()
 ON_WM_KEYDOWN()
 ON_WM_TIMER()
 ON_WM_LBUTTONDOWN()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// DirectXFrame message handlers
d3dTexture a_Bk;
d3dTexture a_Role;
d3dTexture a_Role1;

 

LRESULT DirectXFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 switch( message )
 {
 case WM_CREATE :
  if( !d3dCreate( m_hWnd , 800 , 600 , true ))
   return PostMessage( WM_CLOSE );
  a_Bk.Create( "背景.bmp" );
  a_Role.Create( "FlightWar.bmp" );
  a_Role1.Create( "FlightShit.bmp" );


  return 0 ;
 case WM_DESTROY :
  d3dRelease();
  return 0 ;
 }
 return CFrameWnd::WindowProc(message, wParam, lParam);
}

void DirectXFrame::OnPaint()
{
 // TODO: Add your message handler code here
 Render();
 // Do not call CFrameWnd::OnPaint() for painting messages
 CPaintDC dc(this); // device context for painting
}

void DirectXFrame::Render()
{
 d3dClear();
 d3d_Device->BeginScene();

  d3d_Device->SetRenderState( D3DRS_CULLMODE , D3DCULL_NONE );
  d3d_Device->SetRenderState( D3DRS_ZENABLE , D3DZB_FALSE );
  d3d_Device->SetRenderState( D3DRS_SHADEMODE , D3DSHADE_FLAT );
  d3d_Device->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
  a_Bk.BltFast( 0 , 0 );

  d3d_Device->SetRenderState( D3DRS_SRCBLEND , D3DBLEND_SRCALPHA );
  d3d_Device->SetRenderState( D3DRS_DESTBLEND , D3DBLEND_INVSRCALPHA );
  d3d_Device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
  a_Role.BltFast( flileft , flitop );

        for(int i=1;i<=6;i++)
  {
   d3d_Device->SetRenderState( D3DRS_SRCBLEND , D3DBLEND_SRCALPHA );
   d3d_Device->SetRenderState( D3DRS_DESTBLEND , D3DBLEND_INVSRCALPHA );
   d3d_Device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
   a_Role1.BltFast( shitleft[i]  , shittop[i] );
  }

     

 d3d_Device->EndScene();
 d3d_Device->Present( NULL , NULL , NULL , NULL );

}

void DirectXFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 // TODO: Add your message handler code here and/or call default
    int   flispeed=30;
   switch(nChar)                                 //键盘响应
   {
   case VK_LEFT:
    if(flileft>0) {flileft-=flispeed;}
       break;
  
   case VK_RIGHT:
    if(flileft<740){flileft+=flispeed;}
    break;

   case VK_DOWN:
    if(flitop<490){flitop+=flispeed;}
    break;

   case VK_UP:
    if(flitop>0){flitop-=flispeed;}
    break;
   }
     Render();
 CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}

void DirectXFrame::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
  work=0;
    int a=4;   //设定加速度
 
 if(nIDEvent==1)
  {  
  for(int k=1;k<=6;k++)
   {  
          
    if(shittop[k]<600){shittop[k]+=shitspeed[k];}
     else 
     {
      shittop[k]=-20;
         shitleft[k]=(rand()%35)*22;
         shitspeed[k]=rand()%10;  //设定初速度
     }
    shitspeed[k]+=(rand()%3)*a;
  }
  }
 
 else if(nIDEvent==2)
   for(int i=1;i<=6;i++)
   if(shittop[i]>=flitop && shittop[i]<=flitop+103 && shitleft[i]>=flileft-17 && shitleft[i]<=flileft+66 )
    {                                       //判断是否击中陨石    
     for(int k=1;k<=6;k++)
     shittop[k]=-60;
     KillTimer(1); 
     work=1;        
     Invalidate();  
     break;
   }
 if(work==1){ 
         flileft=380;
         flitop=490;
   MessageBox("击中要害,鼠标左击窗体继续!");
 }

     Render();
 CFrameWnd::OnTimer(nIDEvent);
}

void DirectXFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
     SetTimer(1,180,NULL);
     SetTimer(2,170,NULL);            //设置两个定时器
  CFrameWnd::OnLButtonDown(nFlags, point);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值