飞机大战小游戏(包含图片、音效)
示例演示:一.建立的全部源文件二、源代码1.飞机大战2.0 .cpp2.开场动画.cpp3.游戏结束.cpp4、头文件connect.h
三、图片资源四、参考文章和参考视频五、百度云下载六、缺陷七、操作飞机方法
示例演示:
C语言飞机大战小游戏
一.建立的全部源文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/3541fc13d5d9404fb4876d7015eef5ed.JPG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzU2NDAyNDc0,size_16,color_FFFFFF,t_70#pic_center)
二、源代码
1.飞机大战2.0 .cpp
//-----------------------------------------------------------------
// 《飞机大战2.0》
//作者:辰梦star_dream
//最近修改时间:2021.8.12
//-----------------------------------------------------------------
//-----------------------------------------------------------------
//描述:头文件部分
//-----------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include"connect.h"//将该项目中的其他源文件,联系起来
#pragma comment(lib,"winmm.lib")
//-----------------------------------------------------------------
//描述:宏定义部分
//-----------------------------------------------------------------
#define WIDTH 800//画布宽度
#define HEIGHT 600//画布高度
#define BULLET_NUM 20//子弹数量
#define ENEMY_NUM 10//敌机的总数量
//-----------------------------------------------------------------
//描述:枚举部分,敌机类型
//-----------------------------------------------------------------
enum enemy_type//敌机的类型,分为BOSS 和 普通敌机
{
BIG, //BOSS
SMALL //普通敌机
};
//-----------------------------------------------------------------
//描述:结构体部分
//-----------------------------------------------------------------
; struct player_game//飞机的结构
{
int x;//玩家横轴坐标
int y;//玩家纵轴坐标
int player_hp;//玩家的生命值
bool live;//判断玩家、敌机是否存亡
int enemy_hp;//敌机的生命值
int enemy_width;//敌机的宽度
int enemy_height;//敌机的高度
int type;//敌机的类型,是普通敌机,还是BOSS
}player, bullet[BULLET_NUM], enemy[ENEMY_NUM];//分别代表飞机,子弹,敌机
//-----------------------------------------------------------------
//描述:全局变量定义部分
//-----------------------------------------------------------------
int gt;//_getch()返回值
IMAGE bk;//定义图片
IMAGE player_plane[2];//定义玩家的飞机,掩码图与素材图
IMAGE player_bullet[2];//定义玩家的射击子弹,掩码图与素材图
IMAGE enemy_appear[2][2];//定义敌机出现
MOUSEMSG m;//定义鼠标
//-----------------------------------------------------------------
// 描述:全局函数声明部分
//-----------------------------------------------------------------
void load_image();//加载图片
void game_draw();//游戏绘制
void player_move(int speed);//玩家移动
void GameInit();//游戏初始化
void create_bullet();//创建子弹
void bullet_move(int bullet_speed);//子弹的移动,子弹向上,故只有纵轴(y轴)发生变化
void enemy_hp(int i);//敌机生命值
void create_enemy();//生成敌机
void enemy_move(int enemy_speed);//敌机的移动
bool timer(int ms, int num);//做个定时器,以毫秒计时
void attack_enemy();//玩家攻击敌机
void be_touched();//玩家碰到敌机
//-----------------------------------------------------------------
// 描述:程序的“入口”,程序从此处开始
//-----------------------------------------------------------------
int main()
{
//打开音乐
mciSendString("open ./music/bk_music.mp3 alias bk_music", NULL, 0, NULL);
mciSendString("play bk_music repeat",NULL,0,NULL);
initgraph(WIDTH, HEIGHT);//新建一个画布
// cartoon();//游戏开始时,播放的开场动画
GameInit();//游戏初始化
game_draw();//游戏画面展示
BeginBatchDraw();//批量处理
while (1)
{
FlushBatchDraw();//将缓存区的图,刷新出来
player_move(5);//玩家移动,移动速度
bullet_move(8);//子弹发射,移动速度8
if (timer(500, 1))
{
create_enemy();//两个敌机的出现,相隔两秒钟
}
enemy_move(2);
attack_enemy();//攻击敌机
be_touched();//判断玩家是否碰触到敌机
if (!player.live)//判断玩家是否存活
{
goto f;//玩家死亡,跳出循环
}
else
{
continue;//玩家存活,则继续循环
}
}
f:
mciSendString("stop bk_music", NULL, 0, NULL);
GameOver();//飞机消亡后,跳转到游戏结束页面
gt = _getch();
EndBatchDraw();//结束批量处理,并将缓存区中未显示的都显示出来
closegraph();
return 0;
}
//-----------------------------------------------------------------
// 描述:加载图片
//-----------------------------------------------------------------
void load_image()
{
//加载图片
loadimage(&bk, "./image/background.jpg", WIDTH, HEIGHT);//背景图
loadimage(&player_plane[0], "./image/player_2.png", 50, 50);//飞机掩码图
loadimage(&player_plane[1], "./image/player_1.png", 50, 50);//飞机素材图
loadimage(&player_bullet[0], "./image/fireball_2.png", 15, 15);//子弹掩码图
loadimage(&player_bullet[1], "./image/fireball_1.png", 15, 15);//子弹素材图
loadimage(&enemy_appear[0][0], "./image/enemy_2.png", 40, 40);//敌机掩码图
loadimage(&enemy_appear[0][1], "./image/enemy_1.png", 40, 40);//敌机素材图
loadimage(&enemy_appear[1][0], "./image/enemyBoss_2.png", 80, 80);//敌机BOSS掩码图
loadimage(&enemy_appear[1][1], "./image/enemyBoss_1.png", 80, 80);//敌机BOSS素材图
}
//-----------------------------------------------------------------
// 描述:游戏绘制
//-----------------------------------------------------------------
void game_draw()
{
load_image();
//显示图片
putimage(0, 0, &bk);//显示背景图
//贴飞机照片
if (player.live)
{
putimage(player.x, player.y, &player_plane[0], SRCAND);//贴掩码图,绘制出的像素颜色 = 屏幕颜色 & 图像颜色
putimage(player.x, player.y, &player_plane[1], SRCPAINT);//贴素材图
}
//贴子弹照片
if (player.live)
{
for (int i = 0; i |