c语言基于easyx库的 飞机大战游戏(鼠标控制飞机移动,武器升级,boss发射散弹,boss血条等功能)

课设题目
实现功能:
飞机鼠标控制–飞机武器升级–敌机发射子弹–boss发射散弹–boss血条记录–我方多条生命
在这里插入图片描述在这里插入图片描述在这里插入图片描述

图片资源和源码在下面

链接:https://pan.baidu.com/s/1uTQVHAaWfWHXFg3p5zQ4KA
提取码:y606

源码:

(本程序运行需要图片资源,自行到上方的百度网盘下载)

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#pragma comment(lib,"Winmm.lib")						// 引用 Windows Multimedia API

#define High 800		// 游戏画面尺寸
#define Width 800

IMAGE img_bk;									// 背景图片
IMAGE img_planeNormal1, img_planeNormal2;		// 正常飞机图片
IMAGE img_planeExplode1, img_planeExplode2;     // 爆炸飞机图片
IMAGE img_enemyPlane1, img_enemyPlane2;			// 敌机图片
IMAGE boss1_a, boss1_b;							// boss图片
IMAGE bullet_lis[10][2];						// 我方飞机子弹图片

float e_speed[3] = {
    0.4,0.5,0.6 };			//敌机随机飞行速度列表
int enemy_cnt = 5;							//同一画面最大敌机数量
int enemy_life = 3;							//敌机的生命值
int e_bullet_cnt = 20;						//同一画面最多敌机子弹数量
int bullet_type = 2;							//我方飞机子弹种类
int bullet_rank = 0;							//我方飞机now子弹等级 and 对应打boss的伤害为 bullet_rank+1 
int bullet_cnt = 20;				            //我方飞机最大子弹数量
int isExpolde = 0;								//飞机是否爆炸
int score = 0;									//得分

int b_bullet_cnt = 5;						//boss子弹同一画面最大数量
int time_cnt = 0;                           //用于控制boss子弹发射间隔

struct Plane {
   				//我方飞机属性
	float x, y;
	int life;
	float w, h;
}plane;

struct Bullet {
   				//我方飞机子弹属性
	float x, y;
	int life;
	float w, h;
}bullet[200];

struct Enemy {
   			    //敌机属性
	float x, y;
	int speed;									//准确来说敌机速度是e_speed[enemy.speed]
	int life;
	float w, h;
}enemy[20];

struct Enemy_bullet {
   	   //敌机子弹属性
	float x, y;    
	float speed;
	int life;
	float w, h;
}e_bullet[100];

struct Boss {
   				//boss属性
	float x, y;
	float w, h;
	float add_x, add_y;							//x,y轴移动速度
	int life;									//生命值大小
	int is_active;								//boss是否出现	
	int is_protect;
}boss;

struct Boss_bullet {
   		//boss子弹属性
	float x, y;
	float w, h;
	float add_x, add_y;
	int life;
}b_bullet[20][3];

void startup();										// 数据初始化(加载图片资源,初始化飞机属性)
void show();										// 画面刷新
void updateWithoutInput();							// 与用户输入无关的更新
void updateWithInput();								// 与用户输入有关的更新
void gameover();									//游戏结束

void reset_plane();									//设置我方飞机的初始属性
void reset_bullet();								//设置我方子弹 和 敌军子弹的大小
void reset_enemy(int i);							//设置敌机属性
void reset_e_bullet(Enemy a);						//设置敌机子弹属性
void reset_boss();									//设置boss属性
void reset_b_bullet(Boss_bullet a[3]);				//设置boss属性

int is_crash(Enemy a, Bullet b);					//子弹--敌机碰撞检测
int is_crash_boss(Boss a, Bullet b);				//子弹--boss碰撞检测
int is_crash_plane(Plane a, Enemy_bullet b);		//我方--敌机子弹碰撞检测
int is_crash_boss_plane(Plane a, Boss_bullet b);	//我方--boss子弹碰撞检测

				
int main()
{
   
	startup();						// 数据初始化	
	while (1)					    // 游戏循环执行
	{
   
		show();						// 显示画面
		updateWithoutInput();		// 与用户输入无关的更新
		updateWithInput();			// 与用户输入有关的更新
		if (isExpolde == 1) break;
	}
	gameover();						// 游戏结束、后续处理
	return 0;
}
void startup()										// 数据初始化(加载图片资源,初始化飞机属性)
{
   
	mciSendString("open image/game_music.mp3 alias bkmusic", NULL, 0, NULL);//打开背景音乐
	mciSendString("play bkmusic repeat", NULL, 0, NULL);  // 循环播放
	initgraph(Width, High);
	loadimage(&img_bk, "image/back2.jpg", 800, 800);
	loadimage(&img_planeNormal1, "image/plane1.jpg");
	loadimage(&img_planeNormal2, "image/plane2.jpg");

	loadimage(&img_enemyPlane1, "image/enemyPlane1.jpg");
	loadimage(&img_enemyPlane2, "image/enemyPlane2.jpg");
	loadimage(&img_planeExplode1, "image/planeExplode_1.jpg");
	loadimage(&img_planeExplode2, "image/planeExplode_2.jpg");
	loadimage(&bullet_lis[0][0], "image/bullet1_a.jpg");
	loadimage(&bullet_lis[0][1], "image/bullet1_b.jpg");
	loadimage(&bullet_lis[1][0], "image/bullet2_a.jpg");
	loadimage(&bullet_lis[1][1], "image/bullet2_b.jpg");
	loadimage(&bullet_lis[2][0], "image/bullet3_a.jpg");
	loadimage(&bullet_lis[2][1], "image/bullet3_b.jpg");
  • 22
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
您好! 对于使用easyx实现飞机大战双人模式的问题,您可以按照以下步骤进行操作: 1. 首先,您需要安装easyx图形,您可以从CSDN等网站上找到相关的安装教程和下载链接。 2. 创建一个窗口,并设置窗口大小和标题。您可以使用`initgraph`函数来初始化图形环境,并使用`setbkcolor`函数设置窗口背景色。 3. 使用`IMAGE`结构体来加载并显示背景图片。您可以使用`loadimage`函数加载背景图片,并使用`putimage`函数将其显示在窗口中。 4. 创建两个飞机,并使用`putimage_transparent`函数将其显示在窗口中。您可以使用键盘事件来控制飞机移动,例如使用`GetAsyncKeyState`函数来检测键盘按键状态。 5. 创建一个子弹结构体,包括子弹的位置和速度等信息。使用定时器来更新子弹的位置,并使用`putpixel`函数将子弹显示在窗口中。 6. 碰撞检测:在定时器中检测子弹与飞机之间的碰撞,并更新分数。可以使用矩形碰撞检测函数`IntersectRect`来判断两个矩形是否相交。 7. 在窗口中显示得分。您可以使用`outtextxy`函数在窗口中显示分数。 8. 游戏结束条件:可以根据您的需求,在窗口中添加游戏结束的判断条件,例如当分数达到一定值或者飞机被击中时游戏结束。 这只是一个简单的实现思路,具体的实现细节还需要您根据需求进行调整和完善。希望对您有所帮助!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值