【VC开源代码栏目提醒】:以下是网学会员为您推荐的VC开源代码-A10.CPP,希望本篇文章对您学习有所帮助。
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <mmsystem.h>
#include <time.h>
#include <direct.h>
#include <ddraw.h>
#include "ddutil.h"
#include "resource.h"
#define WINDOW_WIDTH 350//窗口宽度
#define WINDOW_HEIGHT 450//窗口高度
#define TIMER_CHANGEMAP 1//定时器ID
#define TIMER_GAME 2
LPDIRECTDRAW lpDD; //DirectDraw对象
LPDIRECTDRAWCLIPPER lpClipper; //DirectDrawClipper对象
LPDIRECTDRAWSURFACE lpDDSFront; //以下均为DirectDrawSurface对象
LPDIRECTDRAWSURFACE lpDDSBack;
LPDIRECTDRAWSURFACE lpDDSPlane[3];
LPDIRECTDRAWSURFACE lpDDSBall;
LPDIRECTDRAWSURFACE lpDDSBom[2];
LPDIRECTDRAWSURFACE lpDDSMap;
LPDIRECTDRAWSURFACE lpDDSBulet[2];
LPDIRECTDRAWSURFACE lpDDSFlame;
LPDIRECTDRAWSURFACE lpDDSDead;
LPDIRECTDRAWSURFACE lpDDSEnemy;
const int BOMNUMBER=5; //炸弹总数
const int BULETNUMBER=10; //子弹总数
const int ENEMYNUMBER=16; //敌机总数
HWND hWnd; //主窗口句柄
BOOL bActive = TRUE; //应用程序是否活跃
char apppath[50]; //应用程序路径
char openmidi[50]; //打开midi命令字符串
char closemidi[50]; //关闭midi命令字符串
int speed=12; //延时速度
int movespeed=2; //移动速度
int fps; //帧频率
int gamestatus; //游戏进程
#define GAME_LOG 0
#define GAME_START 1
#define GAME_OVER 2
BOOL super=FALSE; //我机是否无敌
BOOL cancontrol=FALSE; //我机是否能控制
int Plane=1; //我机姿态
POINT pos; //我机位置
int forewidth, foreheight;//前台页面的宽度和高度
RECT backrect; //后台页面映射矩形
int backwidth, backheight;//后台页面的宽度和高度
int enemylost; //敌机损失数量
int planeremain; //我机剩余数量
POINT bompos[BOMNUMBER]; //炸弹位置
int bom=0; //当前炸弹记录
POINT buletposleft[BULETNUMBER];//左侧子弹位置
POINT buletposright[BULETNUMBER];//右侧子弹位置
int bulet=0; //当前子弹记录
POINT enemypos[ENEMYNUMBER]; //敌机位置
int enemyspeed[ENEMYNUMBER];//敌机速度
int enemydir[ENEMYNUMBER]; //敌机方向
int enemystyle[ENEMYNUMBER];//敌机是子弹还是飞机
int enemydead[ENEMYNUMBER]; //敌机是否已死
POINT flamepos[ENEMYNUMBER]; //火焰位置
int flamestatus[ENEMYNUMBER];//火焰状态记录
POINT deadflamepos; //我机死时的火焰位置
int deadflamestatus=0; //火焰状态记录
//函数声明
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
HWND InitWindow( HINSTANCE hInstance, int nCmdShow );
BOOL InitDDraw( void );
void FreeDDraw( void );
void Flip(void);
void DrawPlane(void);
void DrawBom(void);
void DrawMap(void );
void DrawText(void );
void UpdateFrame(void );
void ChangeMap(void);
void DrawBulet(void);
void DrawFlame(void);
void DrawEnemy(void);
void CheckHit(void);
BOOL OutOfRange(POINT p);
void GetRect(RECT* rect, long left, long top, long width, long height);
//*******************************************************************
//应用程序入口
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
//初始化主窗口
hWnd=InitWindow( hInstance, nCmdShow ) ;
if (hWnd == NULL )
return FALSE;
//初始化DirectDraw环境,并实现DirectDraw功能
if (!InitDDraw())
{
MessageBox(GetActiveWindow(), "初始化DirectDraw过程中出错!请检查你是否正确的安装了DirectX。", "Error", MB_OK );
FreeDDraw();
return FALSE;
}
while(1)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(bActive)
{
//计算帧频率
static int frame=0, nt, ot=0;
nt=GetTickCoun