【c语言】飞机大战终

这篇具有很好参考价值的文章主要介绍了【c语言】飞机大战终。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果展示

效果演示文章来源地址https://www.toymoban.com/news/detail-774524.html

源码展示

#include<stdio.h>
#include <graphics.h>
#include <assert.h>
#include <stdlib.h>
#include<conio.h>//_getch();
#include <time.h>
#include <math.h>
#include<mmsystem.h>//包含多媒体设备接口头文件

#pragma comment(lib,"winmm.lib")//加载静态库
#define PI 3.1415926
#define HEIGHT  503
#define WIDTH 700
int score = 0;
static int enemy = 0;
static int mode = 0;
IMAGE img_bk, img_plane, img_a, img_b, img_c, img_abullet, img_bbullet, img_cbullet, img_planebullet, img_tmp, img_start, img_sta, img_fail, img_history,img_hp,img_nam,img_score,img_select;
typedef struct bullet
{
	float x, y;
	float vx, vy;
	int  isexist;
	struct bullet* next;

}list;
list* planebullet = NULL;
list* abullet = NULL;
list* bbullet = NULL;
void pushback2(list** pphead, float vx, float vy);
void pushback3(list** pphead, float vx, float vy);
void pushback1(list** pphead, list* newnode);//尾插;
struct aircraft
{
	int x, y;
	int width;
	int height;
	int speed;
	int bornflag;
	int hp;

};
aircraft plane, a, b, c;
static int dir1 = 1;
bool Timer(int ms, int id)
{
	static DWORD t[10];

	if (clock() - t[id] > ms)
	{

		t[id] = clock();
		return true;
	}

	return false;
}
void bgm()
{    //打开音乐
	mciSendString("open ./bgm.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./bgm.MP3", 0, 0, 0);//后面参数不用管
}
void bgm1()
{
	mciSendString("close ./shoot.MP3", 0, 0, 0);//后面参数不用管
	//打开音乐
	mciSendString("open ./shoot.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./shoot.MP3", 0, 0, 0);//后面参数不用管
}
void bgm2()
{    //打开音乐
	mciSendString("open ./boom.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./boom.MP3", 0, 0, 0);//后面参数不用管
}
void bgm3()
{
	mciSendString("close ./change.MP3", 0, 0, 0);//后面参数不用管
	//打开音乐
	mciSendString("open ./change.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./change.MP3", 0, 0, 0);//后面参数不用管
}
void bgm4()
{
	
	mciSendString("open ./win.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./win.MP3", 0, 0, 0);//后面参数不用管
}
void datainit()
{
	plane.x = 150;
	plane.y = 150;
	//a = { 0,0 };
	/*b = { 300,0 };*/
	/*c = { 450,0 };*/
	a.speed = 1;
	a.bornflag = 1;
	b.bornflag = 1;
	c.bornflag = 1;
	a.width = 100;
	a.height = 100;
	b.speed = 1;
	b.width = 80;
	b.height = 100;
	c.height = 70;
	c.width = 70;
	c.speed = 3;
	plane.hp = 500;
	a.hp = 500;
	b.hp = 500;
	c.hp = 500;










}
list* BuyabulletNode(float vx, float vy)
{
	list* newnode = (list*)malloc(sizeof(list));//空间申请
	assert(newnode);//断言,新结点是否申请到了
	newnode->vx = vx;//数据赋值
	newnode->vy = vy;//数据赋值
	newnode->x = a.x + a.width / 2-10;
	newnode->y = a.y+80;
	newnode->isexist = 1;
	newnode->next = NULL;//指向的地址赋值
	return newnode;//将申请好的空间首地址返回回去



}
list* BuybbulletNode(float vx, float vy)
{
	list* newnode = (list*)malloc(sizeof(list));//空间申请
	assert(newnode);//断言,新结点是否申请到了
	newnode->vx = vx;//数据赋值
	newnode->vy = vy;//数据赋值
	newnode->x = b.x + b.width / 2 - 10;
	newnode->y = b.y + 80;
	newnode->isexist = 1;
	newnode->next = NULL;//指向的地址赋值
	return newnode;//将申请好的空间首地址返回回去



}
list* BuyplanebulletNode(float vx, float vy)
{





	list* newnode = (list*)malloc(sizeof(list));//空间申请
	assert(newnode);//断言,新结点是否申请到了
	newnode->vx = vx;//数据赋值
	newnode->vy = vy;//数据赋值
	newnode->x = plane.x + plane.width / 2+17;
	newnode->y = plane.y;
	newnode->isexist = 1;
	newnode->next = NULL;//指向的地址赋值
	return newnode;//将申请好的空间首地址返回回去



}
void drawAlpha(IMAGE* picture, int  picture_x, int picture_y) //x为载入图片的X坐标,y为Y坐标
{
	// 变量初始化
	DWORD* dst = GetImageBuffer();    // GetImageBuffer()函数,用于获取绘图设备的显存指针,EASYX自带
	DWORD* draw = GetImageBuffer();
	DWORD* src = GetImageBuffer(picture); //获取picture的显存指针
	int picture_width = picture->getwidth(); //获取picture的宽度,EASYX自带
	int picture_height = picture->getheight(); //获取picture的高度,EASYX自带
	int graphWidth = getwidth();       //获取绘图区的宽度,EASYX自带
	int graphHeight = getheight();     //获取绘图区的高度,EASYX自带
	int dstX = 0;    //在显存里像素的角标

	// 实现透明贴图 公式: Cp=αp*FP+(1-αp)*BP , 贝叶斯定理来进行点颜色的概率计算
	for (int iy = 0; iy < picture_height; iy++)
	{
		for (int ix = 0; ix < picture_width; ix++)
		{
			int srcX = ix + iy * picture_width; //在显存里像素的角标
			int sa = ((src[srcX] & 0xff000000) >> 24); //0xAArrggbb;AA是透明度
			int sr = ((src[srcX] & 0xff0000) >> 16); //获取RGB里的R
			int sg = ((src[srcX] & 0xff00) >> 8);   //G
			int sb = src[srcX] & 0xff;              //B
			if (ix >= 0 && ix <= graphWidth && iy >= 0 && iy <= graphHeight && dstX <= graphWidth * graphHeight)
			{
				if ((ix + picture_x) >= 0 && (ix + picture_x) <= graphWidth)	//防止出边界后循环显示
				{
					dstX = (ix + picture_x) + (iy + picture_y) * graphWidth; //在显存里像素的角标
					int dr = ((dst[dstX] & 0xff0000) >> 16);
					int dg = ((dst[dstX] & 0xff00) >> 8);
					int db = dst[dstX] & 0xff;
					draw[dstX] = ((sr * sa / 255 + dr * (255 - sa) / 255) << 16)  //公式: Cp=αp*FP+(1-αp)*BP  ; αp=sa/255 , FP=sr , BP=dr
						| ((sg * sa / 255 + dg * (255 - sa) / 255) << 8)         //αp=sa/255 , FP=sg , BP=dg
						| (sb * sa / 255 + db * (255 - sa) / 255);              //αp=sa/255 , FP=sb , BP=db
				}
			}
		}
	}
}
void selectplane()
{
	while (1)
	{
		BeginBatchDraw();
		loadimage(&img_select, "./22.png");
		drawAlpha(&img_select, 0, 0);
		loadimage(&img_select, "./23.png");
		drawAlpha(&img_select, 0, 0);
		loadimage(&img_select, "./24.png");
		drawAlpha(&img_select, 0, 400);
		if (mode == 0)
		{
			
			loadimage(&img_plane, "./1.png");
			drawAlpha(&img_plane, 300, 200);
		}
		
		if (mode == 1)
		{
			loadimage(&img_plane, "./10.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 2)
		{
			loadimage(&img_plane, "./11.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 3)
		{
			loadimage(&img_plane, "./12.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 4)
		{
			loadimage(&img_plane, "./13.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 5)
		{
			loadimage(&img_plane, "./25.png");
			drawAlpha(&img_plane, 300, 200);
		}
		
	







		

		if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState('A') && Timer(300, 1))
		{
			bgm3();
			if (mode == 0)
			{
				mode = 0;
			}
			else
			{
				mode--;
			}
		}
		
		if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState('D') && Timer(300, 1))
		{
			bgm3();

			if (mode == 5)
			{
				mode = 5;
			}
			else
			{
				mode++;
			}

		}
		if ((GetAsyncKeyState(VK_SPACE)) && Timer(300, 1))
		{
			break;
		}
		EndBatchDraw();
	}











}

void load()
{
	loadimage(&img_bk, "./back.png");
	if (mode == 0)
	{
		loadimage(&img_plane, "./1.png");
	}
	loadimage(&img_a, "./2.png");
	loadimage(&img_b, "./3.png");
	loadimage(&img_c, "./4.png");
	loadimage(&img_abullet, "./5.png");
	loadimage(&img_bbullet, "./6.png");
	loadimage(&img_cbullet, "./7.png");
	if (mode == 0)
	{
		loadimage(&img_planebullet, "./8.png");
	}
	if (mode == 1)
	{
		loadimage(&img_planebullet, "./8.png");
	}
	if (mode == 2)
	{
		loadimage(&img_planebullet, "./5.png");
	}
	if (mode == 3)
	{
		loadimage(&img_planebullet, "./16.png");
	}
	if (mode == 4)
	{
		loadimage(&img_planebullet, "./7.png");
	}

	if (mode == 5)
	{
		loadimage(&img_planebullet, "./19.png");
	}

}
void draw()
{
	putimage(0, 0,&img_bk);
	loadimage(&img_nam, "./20.png");
	drawAlpha(&img_nam, 500, 0);
	
	if (plane.hp == 500)
	{
		//img_hp
		loadimage(&img_hp, "./19.png");
		drawAlpha(&img_hp, 628, 0);





	}
	if (plane.hp == 1000)
	{
		//img_hp
		loadimage(&img_hp, "./19.png");
		loadimage(&img_hp, "./19.png");
		drawAlpha(&img_hp, 628, 0);
		drawAlpha(&img_hp, 652, 0);




	}
	if (plane.hp == 1500)
	{
		//img_hp
		loadimage(&img_hp, "./19.png");
		loadimage(&img_hp, "./19.png");
		loadimage(&img_hp, "./19.png");
		drawAlpha(&img_hp, 628, 0);
		drawAlpha(&img_hp, 652, 0);
		drawAlpha(&img_hp, 676, 0);



	}
	if (plane.x > -1 && plane.x < WIDTH && plane.y>-1 && plane.y + 48< HEIGHT)
	{
		drawAlpha(&img_plane, plane.x, plane.y);
	}
	else
	{
		putimage(plane.x, plane.y, &img_plane);
	}
	if (a.x > -1 && a.x < WIDTH && a.y>0&& a.y + 98 < HEIGHT)
	{
		drawAlpha(&img_a, a.x, a.y);
	}
	else
	{
		putimage(a.x, a.y, &img_a);

	}
	if (b.x > -1 && b.x < WIDTH && b.y>-1 && b.y +120 < HEIGHT)
	{
		drawAlpha(&img_b, b.x, b.y);
	}
	else
	{
		putimage(b.x, b.y, &img_b);

	}
	if (c.x > -1 && c.x < WIDTH && c.y>-1 && c.y + 120 < HEIGHT)
	{
		drawAlpha(&img_c, c.x, c.y);
	}
	else
	{
		putimage(c.x, c.y, &img_c);

	}



	
	
	

		




}

void ufoamove()
{
	
	static int cnt = 0;

	if (a.bornflag == 1)
	{
		a.bornflag = 0;
		a.x = rand() % (WIDTH - a.width);
		a.y = -50;




	}
	if (a.y > 200)
	{
		dir1 = 0;
	}
	else if (a.y < -150)
	{
		dir1 = 1;
		a.bornflag = 1;
	}
	if (1 == dir1)
	{
		a.y += a.speed;

	}
	else
	{
		a.y -= a.speed;
	}
	if (++cnt % 50 == 0)
	{
		pushback2(&abullet, 0, 10);
	




	}
	if (cnt > 99999)
	{
		cnt = 0;
	}













}
void ufobmove()
{
	static int num = 0;
	static int step = b.speed;
	if (b.bornflag == 1)
	{
		b.bornflag = 0;
		b.x = rand() % (WIDTH - b.width);
		b.y = -b.height;




	}
	if (b.x <= 0 || b.x + b.width >= WIDTH)
	{
		step = -step;



	}
	b.x += step;
	b.y++;
	if (b.y >= HEIGHT)
	{
		b.bornflag = 1;


	}

	if (++num % 100 == 0)
	{
		pushback3(&bbullet, 0, 10);
		/*for (int i = 0; i < 10; i++)
		{
			float angle = i * 2 * PI / 10;
			float vx = 1* sin(angle);
			float vy = 1 * cos(angle);
			pushback3(&bbullet, vx, vy);




		}*/


	}
	if (num > 99999)
	{
		num = 0;
	}






}


void pushback1(list** pphead,float vx,float vy)//尾插
{
	
	
	list* newnode = BuyplanebulletNode(vx, vy);
	
	if (*pphead == NULL)//链表无结点
	{
		*pphead = newnode;// 将创建好的头节点的地址给给*pphead,作为新头节点的地址
		
	}
	else
	{
		
		list* tail = *pphead;//定义一个指针,先指向头结点的地址
		while (tail->next != NULL)//循环遍历找尾结点
		{
			tail = tail->next;//指针指向下一个结点

		}
		tail->next = newnode;//找到尾结点,将尾结点的next存放新接结点的地址

	}

}
void pushback2(list** pphead, float vx, float vy)//尾插
{
	
	list* newnode = BuyabulletNode(vx, vy);

	if (*pphead == NULL)//链表无结点
	{
		*pphead = newnode;// 将创建好的头节点的地址给给*pphead,作为新头节点的地址

	}
	else
	{
		
		list* tail = *pphead;//定义一个指针,先指向头结点的地址
		while (tail->next != NULL)//循环遍历找尾结点
		{
			tail = tail->next;//指针指向下一个结点

		}
		tail->next = newnode;//找到尾结点,将尾结点的next存放新接结点的地址

	}

}
void pushback3(list** pphead, float vx, float vy)//尾插
{
	
	list* newnode = BuybbulletNode(vx, vy);

	if (*pphead == NULL)//链表无结点
	{
		*pphead = newnode;// 将创建好的头节点的地址给给*pphead,作为新头节点的地址

	}
	else
	{
		
		list* tail = *pphead;//定义一个指针,先指向头结点的地址
		while (tail->next != NULL)//循环遍历找尾结点
		{
			tail = tail->next;//指针指向下一个结点

		}
		tail->next = newnode;//找到尾结点,将尾结点的next存放新接结点的地址

	}

}
void removebullet(list** pplist)
{
	if (*pplist == NULL)
		return;
	list* cur = *pplist;
	list* prev = NULL;
	while (cur != NULL)
	{
		if (cur->isexist == 0)
		{
			if (*pplist == cur)
			{
				*pplist = cur->next;
				free(cur);
				cur = *pplist;


			}
			else
			{
				prev->next = cur->next;
				free(cur);
				cur = prev;




			}
		}
		else
		{
			prev = cur;
			cur = cur->next;


		}





	}






}

void listchangexy(list** pplist)
{
	if (*pplist == NULL)
		return;
	list* cur = *pplist;
	while (cur != NULL)
	{
		cur->x += cur->vx;
		cur->y += cur->vy;
		
		if ((cur->y<0 )|| (cur->y>HEIGHT) || (cur->x >0) || (cur->x <WIDTH))
			cur->isexist = 0;
		cur = cur->next;



	}










}

void showbullet()
{
	static int count1 = 0;
	
	
	listchangexy(&planebullet);
	if (++count1 == 20)
	{
		removebullet(&planebullet);
		removebullet(&abullet);
		removebullet(&bbullet);
	}
	

	///}
	if (count1 > 99999)
	{
		count1 = 0;
	}

	for (list* cur = planebullet; cur!= NULL; cur = cur ->next)
	{
		if (mode == 0)
		{
			if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 15 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);

			}
		}
	if (mode == 1)
		{
			if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 15 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);

			}
		}
		if (mode == 2)
		{
			if (cur->x > 5 && cur->x + 25 < WIDTH && cur->y > 5 && cur->y + 35 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);

			}
		}
		if (mode == 3)
		{
			if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 40 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);

			}
		}
		if (mode == 4)
		{
			if (cur->x > 5 && cur->x + 25< WIDTH && cur->y > 5 && cur->y + 43 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);

			}
		}
			if (mode == 5)
		{
			if (cur->x > 5 && cur->x + 25< WIDTH && cur->y > 5 && cur->y + 43 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);

			}
		 }
		
		
		
		
		
		
		
		
		
		
		
		if (cur->x + 10 < a.x || cur->x > a.x + a.width || cur->y + 10 > a.y || cur->y > a.y + a.height)
		{


		}
		else
		{
			cur->isexist = 0;
			score += 600;
			a.hp -= 500;
		}
		if (cur->x + 10 < b.x || cur->x > b.x + b.width || cur->y + 10 > b.y || cur->y > b.y + b.height)
		{


		}
		else
		{
			cur->isexist = 0;
			score += 400;
			b.hp -= 500;
		}
		if (cur->x + 10 < c.x || cur->x > c.x + c.width || cur->y + 10 > c.y || cur->y > c.y + c.height)
		{


		}
		else
		{
			cur->isexist = 0;
			score += 200;
			c.hp -= 500;
		}


	}
	
	listchangexy(&abullet);
	
	
	
	for (list* cur = abullet; cur != NULL; cur = cur->next)
	{
		if (cur->x > 5 && cur->x + 25 < WIDTH && cur->y > 5 && cur->y + 30 < HEIGHT)
		{
			drawAlpha(&img_abullet, cur->x, cur->y);
			
		}
		else
		{
			putimage(cur->x, cur->y, &img_abullet);

		}







		
		


			if (cur->x + 20 < plane.x || cur->x > plane.x + plane.width || cur->y + 30 > plane.y || cur->y > plane.y + plane.height)
			{
				

			}
			else
			{
				cur->isexist = 0;
			
				plane.hp -= 1000;
			}
		


		

		
	
	}

	listchangexy(&bbullet);

	for (list* cur = bbullet; cur != NULL; cur = cur->next)
	{
		if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 20 < HEIGHT)
		{
			drawAlpha(&img_bbullet, cur->x, cur->y);

		}
		else
		{
			putimage(cur->x, cur->y, &img_bbullet);

		}


		
	
		if (cur->x + 10< plane.x || cur->x > plane.x + plane.width || cur->y + 15 > plane.y || cur->y > plane.y + plane.height)
		{


		}
		else
		{
			cur->isexist = 0;

			plane.hp -= 1000;
		}
	

	}





}


void ufocmove()
{


	static float disx = 0, disy = 0;
	static float tmpx = 0, tmpy = 0;
	static float vx = 0, vy = 0;

	
	float step = 1000 / c.speed;
	if (1 == c.bornflag)
	{
		c.bornflag = 0;
		tmpx = rand() % (WIDTH - c.width);
		tmpy = -c.height;
		disx = plane.x - tmpx;
		disy = plane.y - tmpy;
		vx = disx / step;
		vy = disy / step;




	}
	tmpx += vx;
	tmpy += vy;
	c.x = (int)(tmpx + 0.5);
	c.y = (int)(tmpy + 0.5);
	if (c.x < -c.width)
	{
		c.bornflag = 1;
	}
	if (c.x > WIDTH)
	{
		c.bornflag = 1;

	}
	if (c.y > HEIGHT)
	{
		c.bornflag = 1;

	}
	if (c.hp <= 0)
	{
		c.bornflag = 1;
		c.hp = 500;

	}






}

void player_move(int speed) //处理飞机移动
{
	int reload_time = 100;
	static int fire_start = 0;
	int tmp = clock();
	if (GetAsyncKeyState(VK_UP) || GetAsyncKeyState('W'))
	{
		if (plane.y > 0)
			plane.y -= speed;
	}
	if (GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState('S'))
	{
		if (plane.y + 51 < HEIGHT)
			plane.y += speed;
	}
	if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState('A'))
	{
		if (plane.x > 0)
			plane.x -= speed;
	}
	if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState('D'))
	{
		if (plane.x + 51 < WIDTH)
			plane.x += speed;
	}

	if ((GetAsyncKeyState(VK_SPACE))&& Timer(300, 1))
	{
		
		

		if (mode == 0)
		{
			//bgm1();
			pushback1(&planebullet, 0, -20);
			
		}
		if (mode == 1)
		{
			//bgm1();
			pushback1(&planebullet, 0, -20);


		}
		if (mode == 2)
		{
			//bgm1();
			pushback1(&planebullet, 0, -10);
			
		}
		if (mode == 3)
		{
			//bgm1();
			pushback1(&planebullet, 0, -10);


			}
			
		if (mode == 4)
		{
			//bgm1();
			pushback1(&planebullet, 0, -10);

		}
		if (mode == 5)
		{
			
			
			pushback1(&planebullet, 0, -10);
			

		}
		

		

		

	}
	if (GetAsyncKeyState(VK_SPACE))
	{
		bgm1();

	}

}


void begin()
{
	
	char beginstring[] = "开始游戏";
	char closestring[] = "退出游戏";
	char tipstring[] = "游戏说明: 空格:发射子弹";
	setfillcolor(LIGHTBLUE);
	solidrectangle(240, 300, 380, 350);//画矩形
	solidrectangle(240, 360, 380,410);//左上坐标,右下坐标
	loadimage(&img_start,"./start.jpg");
	loadimage(&img_sta, "./sta.png");

	
	
	
	//putimage(0, 0, &img_start);
	drawAlpha(&img_start,0,0);
	drawAlpha(&img_sta, 0, 0);
		
	settextcolor(RED);
	setbkmode(TRANSPARENT);
	settextstyle(30, 0, "楷体");
	outtextxy(240 + 10, 300 + 10, beginstring);
	outtextxy(240 + 10, 360 + 10, closestring);
	outtextxy(130, 250, tipstring);
	while (1)
	{
		MOUSEMSG m = GetMouseMsg();//鼠标在矩形显示外框
		if (m.x >= 240 && m.x <= 380 && m.y >= 300 && m.y <= 350)
		{

			setlinecolor(RED);
			rectangle(240 - 5, 300 - 5, 380 + 5, 350 + 5);
			if (m.uMsg == WM_LBUTTONDOWN)
			{
				break;
			}

		}
		else if (m.x >= 240 && m.x <= 380 && m.y >= 360 && m.y <= 410)
		{

			setlinecolor(RED);
			rectangle(240 - 5, 360 - 5, 380 + 5, 410 + 5);
			//退出游戏
			if (m.uMsg == WM_LBUTTONDOWN)
			{
				exit(0);
			}
		}
		else//没在擦除
		{
			setlinecolor(WHITE);
			rectangle(240 - 5, 300 - 5, 380 + 5, 350 + 5);
			rectangle(240 - 5, 360 - 5, 380 + 5, 410 + 5);


		}


	}


}
void crash2()
{
	if (b.x + b.width<plane.x || b.x>plane.x + plane.width || b.y + b.height<plane.y || b.y>plane.y + plane.height)
	{


	}
	else
	{

		plane.hp=0;
		bgm2();
		Timer(4000, 1);
		if (plane.hp == 0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			if (Timer(3000, 1))
				exit(0);
		}



	}



}
void crash1()
{
	if (a.x + a.width<plane.x || a.x>plane.x + plane.width || a.y + a.height<plane.y || a.y>plane.y + plane.height)
	{


	}
	else
	{
		plane.hp -= 500;
		bgm2();
		Timer(4000, 1);
		if (plane.hp == 0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			if (Timer(3000, 1))
				exit(0);
		}
	
		


	}




	





}
void crash3()
{
	if (c.x + c.width<plane.x || c.x>plane.x + plane.width || c.y + c.height<plane.y || c.y>plane.y + plane.height)
	{


	}
	else
	{
		plane.hp = 0;
		bgm2();
		Timer(4000, 1);
		if (plane.hp == 0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			if (Timer(4000, 1))
				exit(0);
		}




	}



}

void showScore(int x, int y, int score)
{
	TCHAR time_text[50];
	_stprintf_s(time_text, _T("Score:%d"), score);
	outtextxy(x, y, time_text);
}

int main()
 {

	initgraph(WIDTH, HEIGHT,CONSOLE_FULLSCREEN);
	
	datainit();
	begin();
	selectplane();
	BeginBatchDraw();
	bgm();

	
	while (1)
	{
		
		


	
		
	
		
		load();
		draw();
		ufoamove();
		ufobmove();
		ufocmove();
		player_move(5);
		crash1();
		crash2();
		crash3();
		showScore(520, 50, score);
		printf("hp:%d\n", c.hp);
		if (plane.hp<=0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			if (Timer(3000, 1))
				exit(0);
		}
		if (a.hp <= 0)
		{
			
			a.bornflag = 1;
			a.hp = 500;
		}
		if (b.hp <= 0)
		{
			
			b.bornflag =1;
			b.hp = 500;
		}
		if (score > 10000)
		{
			bgm4();
			loadimage(&img_fail, "./26.png");
			drawAlpha(&img_fail, 100, 0);
		
			if (Timer(2000, 1))
			exit(0);
		}
		
	
	
		showbullet();
	FlushBatchDraw();
	}
	EndBatchDraw();


	getchar();








}

还有一些bug,等我考完试了在改改

到了这里,关于【c语言】飞机大战终的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第一篇【传奇开心果系列】Python的游戏库pygame技术点案例示例:深度解读实战开发飞机大战经典游戏案例

    开发飞机大战游戏不仅能满足广大玩家的娱乐需求,提供寓教于乐的学习机会,也是技术实践、创新实验和商业探索的重要载体,具有多维度的社会与经济价值。 开发飞机大战游戏具有多方面的意义,涵盖娱乐、教育、技术实践与创新等多个层面: 娱乐价值 : 休闲娱乐 :

    2024年04月23日
    浏览(86)
  • python——飞机大战小游戏

    目录 1、导入模块 2、窗口操作 3、事件操作 4、长按事件 5、添加游戏背景 6、添加英雄飞机 7、获取飞机的图片矩形 8、基本游戏窗口 9、添加游戏窗口图片 10、英雄飞机登场 11、英雄飞机装备子弹并发射 1、enemy_plane 2、game_main 3、game_map 4、game_score 5、hero_plane 6、plane_bullet 先安

    2024年02月03日
    浏览(61)
  • python---简单游戏制作(飞机大战)

    1.开发软件 pycharm 编程软件 pygame 第三方库 sprite Group 2.技术介绍      pycharm: PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供

    2024年02月12日
    浏览(46)
  • 用Java编写飞机大战游戏

    飞机大战(Plane War)是一款非常受欢迎的小游戏,它通过增加玩家的难度和挑战性,促使玩家不断提高自己的操作能力和反应速度,并在升级过程中逐步拓展游戏世界的规模和内容。本文将介绍如何使用Java编写一个简单的飞机大战游戏,包括游戏引擎的搭建、游戏素材的制作

    2024年02月01日
    浏览(30)
  • Python飞机大战小游戏

    游戏规则:键盘上下左右键控制飞机移动 游戏展示图片: 源码: 第一个py命名为:plane_main.py 第二py命名为:plane_sprites.py 素材图片image关注私信我获取!!!

    2024年02月10日
    浏览(53)
  • 用python写(飞机大战小游戏)

    w\\\'cwc下面我们进入详细教程:   一、首先我们先建一个文件夹 planewars(名字随便取):  然后用我们python中的pycharm打开这个文件,我们飞机大战的项目就在这进行 二、我们要写这个小游戏要用到pygame模         补充: Pygame是一个利用SDL库的写就的游戏库,Pygame就是Python中使用

    2024年02月09日
    浏览(48)
  • Python利用pygame实现飞机大战游戏

    文章目录: 一:运行效果 1.演示 2.思路和功能 二:代码 文件架构 Demo 必备知识:python图形化编程pygame游戏模块 效果图 ◕‿◕✌✌✌ Python利用pygame实现飞机大战游戏运行演示 参考:【Python游戏】1小时开发飞机大战游戏-Pygame版本(1小时40分钟) 博主提取资源: 提取

    2024年04月09日
    浏览(79)
  • Python课程设计 飞机大战小游戏

    目录 飞机大战小游戏 1.概述 1.1 开发环境及技术 1.2 实现功能描述 1.2.1主要的工作内容 1.2.2 实现功能 1.2.3 功能完善 1.2.4 参考项目 2.项目介绍 2.1 项目内容介绍 2.2 项目介绍 2.2.1 项目代码逻辑 2.2.2 涉及到的知识 2.2.3 遇到的问题 2.3 最终运行效果​编辑 3.附件 3.1 Bullet。py 3.

    2024年01月17日
    浏览(52)
  • 前端技术搭建飞机大战小游戏(内含源码)

    上周我们实通过前端基础实现了弹珠游戏,当然很多伙伴再评论区提出了想法,后续我们会考虑实现的,今天还是继续按照我们原定的节奏来带领大家完成一个飞机大战游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的

    2024年02月04日
    浏览(50)
  • 微信小程序飞机大战游戏步骤及代码

    步骤: 1. 准备游戏资源:准备游戏所需的图片、音效等资源。 2. 创建游戏场景:使用微信小程序的API创建游戏场景,可以使用wx.createCanvasContext()方法创建游戏场景。 3. 加载游戏资源:使用wx.loadImage()方法加载游戏所需的图片资源,使用wx.playBackgroundAudio()方法加载游戏所需的

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包