#define WIN32_LEAN_AND_MEAN
#define INITGUID
#include <vector>
#include <cstdio>
#include <cmath>
#include <windows.h>
#include <mmsystem.h>
#include <ctime>
#include <cstdlib>
#include "info.h"
using namespace std;
#define WINDOW_CLASS_NAME "Fly_Game"
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define ERASE 1
#define NO_ERASE 0
#define IS_CANON 0
#define IS_LASER 1<<1
#define IS_MISSILE 1<<2
#define IS_STONE 1<<3
#define IS_ENEMY 1<<4
#define IS_SPACESHIP 1<<5
#define IS_SUPPLY 1<<6
#define LASER 1
#define MISSILE 2
#define BATTLE_OFFSET 200
#define BATTLE_WIDTH 400
#define BATTLE_HEIGHT 600
#define BATTLE_LEFT BATTLE_OFFSET
#define BATTLE_RIGHT BATTLE_LEFT + BATTLE_WIDTH
#define KEYDOWN(vk_code) (GetAsyncKeyState(vk_code) & 0x8000 ? 1:0)
#define KEYUP(vk_code) (GetAsyncKeyState(vk_code) & 0x8000 ? 0:1)
#pragma comment(lib,"winmm.lib")
vector<CLaser> LaserList;
vector<CMissile> MissileList;
vector<CCanon> CanonList;
vector<CStone> StoneList;
vector<CEnemy> EnemyList;
vector<CSupply> SupplyList;
HWND main_window_handle = NULL;
HINSTANCE main_window_hinstance = NULL;
HDC global_hdc;
int window_closed = 0;
int Enemy_Kill = 0;
CSpaceShip ship;
char buffer1[] = " 'A'键向左移动 ";
char buffer2[] = " 'S'键向下移动 ";
char buffer3[] = " 'D'键向右移动 ";
char buffer10[] = " 'W'键向上移动 ";
char buffer4[] = " 'J'键开火";
char buffer5[] = " 'K'键更换武器 ";
char buffer6[80];
char buffer7[80];
char buffer8[80];
char buffer9[80];
char buffer11[80];
char buffer12[80];
char buffer13[80];
char buffer14[80];
char buffer15[80];
char buffer16[80];
char buffer17[10];
int Game_Init();
int Game_Main();
int Game_Shutdown();
int Draw_Sprite(int);
int Check_Hit(int);
void Game_Over();
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
PAINTSTRUCT ps;
HDC win_hdc;
switch(msg)
{
case WM_CREATE:
{
return(0);
} break;
case WM_PAINT:
{
win_hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return(0);
} break;
case WM_CLOSE:
{
if(MessageBox(main_window_handle,"Are you sure you want to quit?","Warning",MB_YESNO)==IDYES)
return (DefWindowProc(hwnd, msg, wparam, lparam));
else
return(0);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
} break;
default:break;
}
return (DefWindowProc(hwnd, msg, wparam, lparam));
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WindowProc;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = WINDOW_CLASS_NAME ;
main_window_hinstance = hInstance;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
WINDOW_CLASS_NAME, MB_ICONERROR) ;
return 0 ;
}
if(!(hwnd = CreateWindow (WINDOW_CLASS_NAME,
"FlyGame_DEMO",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
WINDOW_WIDTH,
WINDOW_HEIGHT,
NULL, NULL, hInstance, NULL)))
return 0;
main_window_handle = hwnd;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
Game_Init();
while(TRUE)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Game_Main();
}
Game_Shutdown();
return msg.wParam ;
}
int Game_Init()
{
srand(time(NULL));
global_hdc = GetDC(main_window_handle);
SetTextColor(global_hdc,RGB(0,255,0));
SetBkMode(global_hdc,TRANSPARENT);
return 0;
}
int Game_Main()
{
SetBkMode(global_hdc, OPAQUE);
strcpy(buffer13,"当前武器类型: ");
if (ship.wepon == LASER)
{
strcpy(buffer17," 机炮 ");
}
else
{
strcpy(buffer17," 导弹 ");
}
strcat(buffer13,buffer17);
sprintf(buffer12,"飞船等级: %d ",ship.level);
sprintf(buffer6,"得分: %d ", ship.score);
sprintf(buffer7,"生命值: %d ", ship.life);
sprintf(buffer8,"激光弹药数: %d ", ship.laser_ammo);
sprintf(buffer9,"导弹数量: %d ", ship.missile_ammo);
sprintf(buffer11,"摧毁敌机数量: %d ",Enemy_Kill);
sprintf(buffer14,"机炮伤害值: %d ", CLaser::damage);
sprintf(buffer15,"导弹伤害值: %d ", CMissile::damage);
sprintf(buffer16,"敌机生命值: %d ", CEnemy::life_max);
TextOut(global_hdc,2,55, buffer1,strlen(buffer1));
TextOut(global_hdc,2,80, buffer2,strlen(buffer2));
TextOut(global_hdc,2,105, buffer3,strlen(buffer3));
TextOut(global_hdc,2,130, buffer10,strlen(buffer10));
TextOut(global_hdc,2,155, buffer4,strlen(buffer4));
TextOut(global_hdc,2,180,buffer5,strlen(buffer5));
TextOut(global_hdc,640,55, buffer12,strlen(buffer12));
TextOut(global_hdc,640,80, buffer6,strlen(buffer6));
TextOut(global_hdc,640,105,buffer7,strlen(buffer7));
TextOut(global_hdc,640,130,buffer8,strlen(buffer8));
TextOut(global_hdc,640,155,buffer9,strlen(buffer9));
TextOut(global_hdc,640,180,buffer11,strlen(buffer11));
TextOut(global_hdc,640,205,buffer13,strlen(buffer13));
TextOut(global_hdc,640,230,buffer14,strlen(buffer14));
TextOut(global_hdc,640,255,buffer15,strlen(buffer15));
TextOut(global_hdc,640,280,buffer16,strlen(buffer16));
Draw_Sprite(NO_ERASE);
Sleep(40);
SetBkMode(global_hdc, TRANSPARENT);
SetBkColor(global_hdc, RGB(0,0,0));
Draw_Sprite(ERASE);
// Sleep(15);
if(KEYDOWN('A'))
ship.MoveLeft();
if(KEYDOWN('S'))
ship.MoveDown();
if(KEYDOWN('D'))
ship.MoveRight();
if(KEYDOWN('W'))
ship.MoveUp();
if(KEYDOWN('J'))
{
ship.Fire();
if(ship.wepon == LASER)
PlaySound("Fire.wav", main_window_hinstance, SND_ASYNC | SND_FILENAME);
else
PlaySound("rocket.wav", main_window_hinstance, SND_ASYNC | SND_FILENAME);
}
if(KEYDOWN('K'))
ship.ChangeWepon();
if(rand()%1000 < 30)
{
EnemyList.push_back(CEnemy());
}
if(rand()%2000 < 5)
{
SupplyList.push_back(CSupply());
}
for(int i = 0; i < StoneList.size(); i++)
{
StoneList[i].Move();
}
/////////////Enemy/////////////////////////////////////////
for(i = 0; i < EnemyList.size(); i++)
{
EnemyList[i].Move();
if(rand()%100 < 5)
EnemyList[i].Attack();
}
///////////Supply ////////////////////////////////////////
for(i = 0; i < SupplyList.size(); i++)
{
SupplyList[i].Move();
}
////////////Canon ///////////////////////////////////////
for(i = 0; i < CanonList.size(); i++)
{
CanonList[i].Move();
}
//////////////////Laser //////////////////////////////////
for(i = 0; i < LaserList.size(); i++)
{
LaserList[i].Move();
}
///////////////////Missile ///////////////////////////
for(i = 0; i < MissileList.size(); i++)
{
MissileList[i].ScanTarget();
MissileList[i].TraceTarget();
}
Check_Hit(IS_CANON);
Check_Hit(IS_LASER);
Check_Hit(IS_MISSILE);
Check_Hit(IS_SUPPLY);
ship.LevelUp();
return 0;
}
int Game_Shutdown()
{
ReleaseDC(main_window_handle, global_hdc);
return 0;
}
int Draw_Sprite(int flag)
{
HDC hdc;
hdc = GetDC(main_window_handle);
HBRUSH b
打飞机游戏源码(VC)
4星 · 超过85%的资源 需积分: 10 59 浏览量
2009-06-02
11:03:58
上传
评论
收藏 165KB RAR 举报
song_0521
- 粉丝: 56
- 资源: 78
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈