栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言+Easy X图形库实现飞机大战,源码加素材

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言+Easy X图形库实现飞机大战,源码加素材

最近学习c语言,看了Mooc上童晶老师的课,用c和Easy x图形库写了一个简单的飞机大战,练练手,第一次写出完整的,虽然还有好多功能没有实现,但是也是有点成就感的,大家看看就好,不喜勿喷!!注:我是用vs2019写的,素材好像传不上,需要的私。

简单效果图如下:

 

 

#include
#include 
#include 
#include 
#include 
#include 
#include
#pragma comment(lib,"Winmm.lib")
#define high 640//定义画布大小
#define width 480

IMAGE img_bk;//背景图片
IMAGE img_planeNormal_1, img_planeNormal_2;//飞机图片显示
IMAGE img_bullet_1, img_bullet_2;//飞机子弹
IMAGE img_enemyPlane_1, img_enemyPlane_2;//敌机
IMAGE img_planeBoom_1, img_planeBoom_2;//飞机相撞

int position_x, position_y;//飞机坐标
int bullet_x, bullet_y;//子弹坐标
int enemyPlane_x, enemyPlane_y;//敌机坐标
int planBoom_x, planBoom_y;//爆炸坐标
int isExplode = 0;//飞机是否爆炸
int score = 0;

void startup()//数据初始化
{
	mciSendString(_T("open E:\游戏素材\飞机大战\game_music.mp3 alias bkmusic"), NULL, 0, NULL);
	mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL);

	initgraph(width, high);
	loadimage(&img_bk, "E:\游戏素材\飞机大战\background.jpg");//背景
	loadimage(&img_planeNormal_1, "E:\游戏素材\飞机大战\planeNormal_1.jpg");//我方飞机
	loadimage(&img_planeNormal_2, "E:\游戏素材\飞机大战\planeNormal_2.jpg");
	loadimage(&img_bullet_1, "E:\游戏素材\飞机大战\bullet_1.jpg");
	loadimage(&img_bullet_2, "E:\游戏素材\飞机大战\bullet_2.jpg");//子弹
	loadimage(&img_enemyPlane_1, "E:\游戏素材\飞机大战\enemyPlane_1.jpg");
	loadimage(&img_enemyPlane_2, "E:\游戏素材\飞机大战\enemyPlane_2.jpg");//敌机
	loadimage(&img_planeBoom_1, "E:\游戏素材\飞机大战\planeBoom_1.jpg");
	loadimage(&img_planeBoom_2, "E:\游戏素材\飞机大战\planeBoom_2.jpg");//碰撞

	position_x = width * 0.4;
	position_y = high * 0.7;
	bullet_x = position_x+45;
	bullet_y = -85;
	enemyPlane_x = 0.5 * width;
	enemyPlane_y = 0;
	planBoom_x =-100;
	planBoom_y = -100;

	BeginBatchDraw();
}
void show()//显示画面 
{
	putimage(0, 0, &img_bk);//显示背景
	if (isExplode == 0)
	{
		
		putimage(position_x, position_y, &img_planeNormal_1, NOTSRCERASE);
		putimage(position_x, position_y, &img_planeNormal_2, SRCINVERT);//显示飞机
		putimage(bullet_x, bullet_y, &img_bullet_1, NOTSRCERASE);
		putimage(bullet_x, bullet_y, &img_bullet_2, SRCINVERT);//显示子弹
		putimage(enemyPlane_x, enemyPlane_y, &img_enemyPlane_1, NOTSRCERASE);
		putimage(enemyPlane_x, enemyPlane_y, &img_enemyPlane_2, SRCINVERT);//显示敌机
	}
	else
	{
		putimage(planBoom_x, planBoom_y, &img_planeBoom_1, NOTSRCERASE);
		putimage(planBoom_x, planBoom_y, &img_planeBoom_2, SRCINVERT);
		outtextxy(width * 0.48, high * 0.48, _T("小辣鸡,这都能死!"));
	}
	TCHAR s[] = _T("得分:");
	outtextxy(width * 0.48, high*0.8 , s);
	char a[5];
	sprintf(a,"%d", score);
	outtextxy(width * 0.55, high*0.8, a);
	

	Sleep(20);

	FlushBatchDraw();
}
void updateWithoutInput()//与用户输入无关的更新
{
	if(bullet_y>-30)//子弹上升
	bullet_y = bullet_y - 5;
	
	if (enemyPlane_y < high)//敌机下落
		enemyPlane_y+=2;
	else
	{
		srand(time(NULL));
		enemyPlane_x =rand() % width;//随机生成新敌机
		enemyPlane_y = 0;
	}

	if (abs(enemyPlane_x - bullet_x) + abs(enemyPlane_y - bullet_y) < 70)//子弹击中敌机
	{
		srand(time(NULL));
		enemyPlane_x = rand() % width;
		enemyPlane_y = 0;
		score++;
	}

	if (abs(enemyPlane_x - position_x) + abs(enemyPlane_y - position_y) < 70)//敌机与我机碰撞
	{
		mciSendString("close boo", NULL, 0, NULL);
		mciSendString("open E:\游戏素材\飞机大战\explode.mp3 alias boo", NULL, 0, NULL);//子弹爆炸音效
		mciSendString("play boo ", NULL, 0, NULL);
		planBoom_x = position_x;
		planBoom_y = position_y;
		isExplode = 1;
			
	}
}


void updateWithInput()//与用户输入有关的更新
{
	MOUSEMSG m;//记录鼠标消息
	while (MouseHit())
	{
		m = GetMouseMsg();

		if (m.uMsg == WM_MOUSEMOVE)//鼠标移动时,飞机坐标变化
		{
			position_x = m.x;
			position_y = m.y;
		}
		else if (m.uMsg==WM_LBUTTONDOWN)
		{
			mciSendString("close pi", NULL, 0, NULL);
			mciSendString("open E:\游戏素材\飞机大战\f_gun.mp3 alias pi", NULL, 0, NULL);//子弹发射音效
			mciSendString("play pi ", NULL, 0, NULL);

			mciSendString("close ps", NULL, 0, NULL);
			mciSendString("open E:\游戏素材\飞机大战\5.mp3 alias ps", NULL, 0, NULL);
			mciSendString("play ps ", NULL, 0, NULL);
			bullet_x = position_x+45;
			bullet_y = position_y - 50;
			
		}
	}
}

int main()
{
	startup();//数据初始化
	while (1)
	{
		show();//显示画面 
		updateWithoutInput();//与用户输入无关的更新
		updateWithInput();//与用户输入有关的更新
	}
	EndBatchDraw();
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853766.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号