#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <time.h>
#include <ddraw.h>
#include <dinput.h>
#include <direct.h>
#include "ddutil.h"
#include "dsobj.h"
#include "midobj.h"
#include "resource.h"
#include "fj.h"
#include "enemy.h"
#define MAXENEMY 10 //暂不能更改,很多参数使用.
#define MAXSLUG 10 //自机的子弹总数
#define SLUG_DELAY 500 //两个子弹之间的延迟时间
#define SUPER_TIME 0 //无敌时间
#define TREE_NUM 0 //树木的数量
#define DOWN_MAX 200 //击落敌机数,超过出BOSS.
#define BOSS_MAX_HP 100
//使用DX6.0的SDK声明
LPDIRECTDRAW4 g_pDD; //DirectDraw对象
LPDIRECTDRAWSURFACE4 g_pDDSPrimary; //以下均为DirectDrawSurface对象
LPDIRECTDRAWSURFACE4 g_pDDSBack;
LPDIRECTDRAWSURFACE4 back;
LPDIRECTDRAWSURFACE4 m_back;
LPDIRECTDRAWSURFACE4 Map;
LPDIRECTDRAWPALETTE g_pDDPal = NULL;
LPDIRECTINPUT g_lpDI;
LPDIRECTINPUTDEVICE g_lpKey;
HWND hWnd; //主窗口句柄
BOOL bActive = TRUE; //应用程序是否活跃
int fps,speed=0;
char fspeed=3;
BYTE KEY_INPUT[256]; //Dinput
char apppath[50]; //应用程序路径
char openmidi[50]; //打开midi命令字符串
char closemidi[50]; //关闭midi命令字符串
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow);
HWND InitWindow( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK WinProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam );
BOOL InitDDraw(void);
void DrawMap(void );
void FreeDDraw( void );
void FreeDInput();
void UpdateFrame(void );
BOOL LoadBmp(void);
HRESULT RestoreAll(void);
BOOL InitDInput(HINSTANCE hInstance);
int process_input();
void gameinit();
void game_loop();
void movebkg(int);
extern void GetRect(RECT* rect, long left, long top, long width, long height);
extern void draw_play(int,int,int);
extern void draw_play_start();
extern void draw_play_dead(int,int);
extern void draw_power();
extern void draw_missile();
extern void draw_missile_num(int);
extern int power_x,power_y,m_x,m_y;
void draw_slug();
bool d_time(int);
static char szBitmap[] = "FJ1.BMP";
int count=1; //用来向下移屏的记数器
//player 的参数
POINT play,slug[MAXSLUG];// x,y
int move_flag,play_num=5,super_num=0,slug_delay,pm=50,pm2=30;//移动的标志
char slug_sum;//子弹的数量
int missile_num,m_num; //导弹的数量
char p_type=0,p_speed=2;//enemy plane type,speed
bool game_over=false,wav_error=false,play_start=TRUE;
bool play_dead=false,super=false,final=false,power=false,missile=false;
int 击毙敌机=0; //记录击中敌机的数量
int e_over=0,123;
bool enemy_over=false,boss_music=false;
//*******************************************************************
//应用程序入口
//*******************************************************************
//类定义
enemy ep[MAXENEMY]; //敌机
D_fire d_fire[MAXENEMY]; //子弹击中敌机后的火焰
D_fire ml_fire[MAXSLUG]; //导弹击中敌机后的火焰-----left
D_fire mr_fire[MAXSLUG]; //导弹击中敌机后的火焰-----right
enemy_slug e_slug[MAXENEMY];//敌机子弹
CDSObj wav_obj; // DXSOUND CLASS
CMidi midi; // Midi Class
BOSS boss; // BOSS Class
boss_slug b_l_slug[3];
boss_slug b_m_slug[3];
boss_slug b_r_slug[3];
BOSS_HIT_FLAME boss_hit_flame[MAXSLUG];//BOSS被击中后的火焰
MISSILE_L m_l[MAXSLUG]; //left missile
MISSILE_R m_r[MAXSLUG]; //right missile
BOSS_DEAD_FLAME boss_dead_f[5];
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
//初始化主窗口
hWnd=InitWindow( hInstance, nCmdShow ) ;
if (hWnd == NULL ) return FALSE;
if(!InitDInput(hInstance))
{
MessageBox(GetActiveWindow(), "初始化DirectInput过程中出错!请检查你是否正确的安装了DirectX。", "Error", MB_OK );
FreeDInput();
return FALSE;
}
if(g_lpKey) g_lpKey->Acquire(); //Dinput Acquire
//初始化DirectDraw环境,并实现DirectDraw功能
if (!InitDDraw())
{
MessageBox(GetActiveWindow(), "初始化DirectDraw过程中出错!请检查你是否正确的安装了DirectX。", "Error", MB_OK );
FreeDDraw();
return FALSE;
}
//dxsound init
wav_obj.Initialize(hWnd);
gameinit();
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=GetTickCount();
if (nt > ot+1000)
{
ot=nt;
fps=frame;
frame=0;
}
//画面延时
static int NewCount, OldCount=0;
NewCount=GetTickCount();
if (NewCount > OldCount+speed)
{
frame++;
OldCount=NewCount;
UpdateFrame();//更新画面
}
}
//等待消息
else WaitMessage();
}
}
//******************************************************************
//创建主窗口。
//******************************************************************
HWND InitWindow( HINSTANCE hInstance, int nCmdShow )
{
HWND hwnd;
WNDCLASS wc;
//填充窗口类结构
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE(IDI_ICON1) );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "TK";
//注册窗口类
RegisterClass( &wc );
//创建主窗口
hwnd = CreateWindowEx(
WS_EX_TOPMOST,
"TK",
"FJ",
WS_POPUP,
0,
0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
NULL,
NULL,
hInstance,
NULL );
if( !hwnd ) return FALSE;
//显示并更新窗口
ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );
return hwnd;
}
//*****************************
//处理主窗口消息
//*****************************
LRESULT CALLBACK WinProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_ACTIVATEAPP://
bActive = wParam;
break;
case WM_KEYDOWN://击键消息
switch( wParam )
{
case VK_ESCAPE://退出
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
break;
case MM_MCINOTIFY: //midi replay
midi.Replay();
break;
case WM_DESTROY://退出消息
FreeDDraw();//释放所有DirectDraw对象
PostQuitMessage( 0 );
break;
case WM_SETCURSOR:
// Turn off the cursor since this is a full-screen app
SetCursor(NULL);
return TRUE;
}
//调用缺省消息处理过程
return DefWindowProc(hWnd, message, wParam, lParam);
}
//******************************************************************
//初始化DirectDraw环境
BOOL LoadBmp(void)
{
DDReLoadBitmap(Map,szBitmap);
//直接创建一个用图块填充的底背景
static int mapposX=80, mapposY=60;
int tree_x,tree_y,tree_type;
RECT rc,rect;
GetRect(&rc, 499,191, mapposX, mapposY);
srand( (unsigned)time( NULL ) );
for (int x=0; x<=640; x+=mapposX)
for (int y=0; y<=480; y+=mapposY)
{
GetRect(&rect, x, y, mapposX, mapposY);
m_back->Blt( &rect, Map, &rc, DDBLT_WAIT, NULL);
}
for(int i=0;i<TREE_NUM;i++)
{
tree_x=rand()%640;
tree_y=rand()%480;
if(tree_x<50)tree_x=rand()%640+50;
if(tree_y<50)tree_y=rand()%480+50;
tree_type=rand()%4;
switch(tree_type)
{
case 0:
GetRect(&rc,570,81,27,24);
break;
case 1:
GetRect(&rc,600,81,28,22);
break;
case 2:
GetRect(&rc,570,108,37,31);
break;
case 3:
GetRect(&rc,611,108,14,20);
break;
}
m_back->BltFast(tree_x,tree_y,Map,&rc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
用VC6.0写的战斗机
4星 · 超过85%的资源 需积分: 3 135 浏览量
2011-06-02
22:56:49
上传
评论
收藏 125KB RAR 举报
千丘远
- 粉丝: 0
- 资源: 31
最新资源
- 无风险利率数据1990-2020
- 年Beta数据1991-2019年
- 新疆105个区县财政收支一般公共预算科学技术支出税收收入2000-2023
- Unity3D((2018-2019)版本游戏源码(2018,2019)(泡泡龙)
- 基于matlab实现的针对旋转机械采集到得振动信号进行消燥处理.rar
- 基于matlab实现的针对红外弱小目标检测难点,采用高通和双边滤波实现弱小目标的检测 .rar
- 基于 YOLOv8 和 LPRNet 的车牌识别系统
- 11-18年润灵环球责任数据
- Unity3D((2018-2019)版本游戏源码(2018,2019)2D螺旋球无限旋转休闲益智游戏
- 2005-2020年中国全球投资追踪数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈