C语言---飞机大战游戏

示例演示:

C语言飞机大战小游戏

一.建立的全部源文件

在这里插入图片描述

二、源代码

1.飞机大战2.0 .cpp

//-----------------------------------------------------------------
//                  《飞机大战2.0》
//作者:辰梦star_dream
//最近修改时间:2021.8.12
//-----------------------------------------------------------------

//-----------------------------------------------------------------
//描述:头文件部分
//-----------------------------------------------------------------
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<Windows.h>
#include<stdlib.h>
#include<process.h>
#include<mmsystem.h>
#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 < BULLET_NUM; i++)
		{
			if (bullet[i].live)//如果子弹被创建,则贴出相应的子弹图
			{
				putimage(bullet[i].x, bullet[i].y, &player_bullet[0], SRCAND);//贴掩码图,绘制出的像素颜色 = 屏幕颜色 & 图像颜色
				putimage(bullet[i].x, bullet[i].y, &player_bullet[1], SRCPAINT);//贴素材图			
			}
		}
	}
	for (int j = 0; j < ENEMY_NUM; j++)
	{
		if (enemy[j].live)//判断敌机是否存在,存在就显示图片
		{
			if (enemy[j].type == BIG)//判断是否是敌机BOSS
			{
				putimage(enemy[j].x, enemy[j].y, &enemy_appear[1][0], SRCAND);//贴掩码图,绘制出的像素颜色 = 屏幕颜色 & 图像颜色
				putimage(enemy[j].x, enemy[j].y, &enemy_appear[1][1], SRCPAINT);//贴素材图
			}
			else//不是敌机BOSS,就贴普通敌机
			{
				putimage(enemy[j].x, enemy[j].y, &enemy_appear[0][0], SRCAND);//贴掩码图,绘制出的像素颜色 = 屏幕颜色 & 图像颜色
				putimage(enemy[j].x, enemy[j].y, &enemy_appear[0][1], SRCPAINT);//贴素材图
			}
		}
	}
}
//-----------------------------------------------------------------
// 描述:游戏初始化
//-----------------------------------------------------------------
void GameInit()
{
	player.x = WIDTH / 2 - 25;//游戏刚开始的飞机横坐标
	player.y = HEIGHT - 50;//游戏刚开始的飞机纵坐标
	player.live = true;//默认飞机存活
	//初始化子弹
	for (int i = 0; i < BULLET_NUM; i++)
	{
		bullet[i].x = 0;
		bullet[i].y = 0;
		bullet[i].live = false;//默认情况下,未发射子弹
	}
	//初始化敌机
	for (int j = 0; j < ENEMY_NUM; j++)
	{
		enemy[j].live = false;//默认情况下,敌机未出现
		enemy_hp(j);
	}
}
//-----------------------------------------------------------------
// 描述:玩家操作飞机
//-----------------------------------------------------------------
void player_move(int speed)//定义速度speed
{
	if (_kbhit())//检测是否有按键消息
	{
		if (GetAsyncKeyState('W') || GetAsyncKeyState(VK_UP))//玩家飞机向上飞行
		{
			if (player.y > 0)//限制范围,只能在显示的画布上移动
			{
				player.y -= speed;
			}
		}
		if (GetAsyncKeyState('S') || GetAsyncKeyState(VK_DOWN))//玩家飞机向下飞行
		{
			if (player.y < HEIGHT - 50)
			{
				player.y += speed;
			}
		}
		if (GetAsyncKeyState('A') || GetAsyncKeyState(VK_LEFT))//玩家飞机向左飞行
		{
			if (player.x > -25)
			{
				player.x -= speed;
			}
		}
		if (GetAsyncKeyState('D') || GetAsyncKeyState(VK_RIGHT))//玩家飞机向右飞行
		{
			if (player.x < WIDTH - 25)
			{
				player.x += speed;
			}
		}
		if (GetAsyncKeyState(VK_ESCAPE))//当按下的是ESC键时,退出游戏
		{
			exit(0);
		}
		if (GetAsyncKeyState(VK_SPACE) && timer(200,0))//如果按下的键盘上的空格键,则创建子弹,进行发射
		{//隔一段时间,才能发出子弹
			create_bullet();
		}
	}
	game_draw();//操作完后,游戏绘制显示画面
}
//-----------------------------------------------------------------
// 描述:当玩家按下空格键的时候,发射一颗子弹
//-----------------------------------------------------------------
void create_bullet()
{
	if (player.live)//当飞机存在时才发射子弹
	{
		for (int i = 0; i < BULLET_NUM; i++)
		{
			if (!bullet[i].live)//在创建子弹之前,没有子弹所以加一个感叹号
			{
				bullet[i].x = player.x + 18;//子弹从飞机的最上方的中间开始发射
				bullet[i].y = player.y - 10;//比飞机略高一点
				bullet[i].live = true;//创建完子弹,就标志为存在
				break;//创建一个子弹后,就跳出循环
			}
		}
	}
}
//-----------------------------------------------------------------
// 描述:子弹发射速度通过改变它一次移动几个格子,来实现的
//-----------------------------------------------------------------
void bullet_move(int bullet_speed)//定义子弹发射的速度bullet_speed
{
	for (int i = 0; i < BULLET_NUM; i++)
	{
		if (bullet[i].live)//子弹移动,说明子弹是存在的!
		{
			bullet[i].y -= bullet_speed;
			if (bullet[i].y < 0)//当子弹离开画布后,将该子弹注销,标志为FALSE
			{
				bullet[i].live = false;
			}
		}
	}
}
//-----------------------------------------------------------------
// 描述:敌机BOSS出现概率,以及敌机的基本情况,如血量hp等
//-----------------------------------------------------------------
void enemy_hp(int j)
{
	srand((unsigned)time(NULL));//设定随机种子
	if (rand() % 10 == 0)//当随机数等于0时,出现BOSS
	{
		enemy[j].type = BIG;
		enemy[j].enemy_hp = 3;
		enemy[j].enemy_width = 80;
		enemy[j].enemy_height = 80;
	}
	else
	{
		enemy[j].type = SMALL;
		enemy[j].enemy_hp = 1;
		enemy[j].enemy_width = 40;
		enemy[j].enemy_height = 40;
	}
}
//-----------------------------------------------------------------
// 描述:敌机的生成,包括但不限于敌机BOSS
//-----------------------------------------------------------------
void create_enemy()
{
	for (int i = 0; i < ENEMY_NUM; i++)//遍历整个敌机数量
	{
		if (!enemy[i].live)//在创建敌机之前,没有敌机所以加一个感叹号
		{
			enemy[i].x = rand() % (WIDTH - 80);//敌机在画布横轴的任意位置都可以出现
			enemy[i].y = 0;//敌机从画布最上角开始进入
			enemy[i].live = true;//创建完敌机,就标志为存在
			enemy_hp(i);
			break;//创建一个敌机后,就跳出循环
		}
	}
}
//-----------------------------------------------------------------
// 描述:敌机的移动,敌机的移动不用我们按键控制
//-----------------------------------------------------------------
void enemy_move(int enemy_speed)
{
	for (int i = 0; i < ENEMY_NUM; i++)
	{
		if (enemy[i].live)//判断敌机是否存在
		{
			enemy[i].y += enemy_speed;//敌机向下移动
			if (enemy[i].y > HEIGHT)//当敌机出了画布范围后,将其标志为FALSE
			{
				enemy[i].live = false;
			}
		}
	}
}
//-----------------------------------------------------------------
// 描述:攻击敌机,当子弹打入敌机内部时,扣除敌机生命值,直至摧毁敌机
//-----------------------------------------------------------------
void attack_enemy()
{
	for (int i = 0; i < ENEMY_NUM; i++)
	{
		if (!enemy[i].live)//当敌机不存在时
		{
			continue;
		}
		for (int j = 0; j < BULLET_NUM; j++)
		{
			if (!bullet[j].live)//当子弹不存在时
			{
				continue;
			}
			else
			{
				if(bullet[j].x >= enemy[i].x &&
					bullet[j].y >= enemy[i].y &&
					bullet[j].x <= enemy[i].x + enemy[i].enemy_width &&
					bullet[j].y <= enemy[i].y + enemy[i].enemy_height)//子弹打中敌机
				{
					bullet[j].live = false;//子弹射中敌机,子弹就会消失
					enemy[i].enemy_hp--;//敌机生命值减去一点
				}
			}
		}
		//画出瞄准框
//		setlinecolor(RED);//设置当前线条颜色为红色
//		line(enemy[i].x, enemy[i].y, enemy[i].x + enemy[i].enemy_width / 4, enemy[i].y);//画一条线
//		line(enemy[i].x + 3 * enemy[i].enemy_width / 4, enemy[i].y, enemy[i].x + enemy[i].enemy_width, enemy[i].y);//画一条线
//		line(enemy[i].x + enemy[i].enemy_width, enemy[i].y, enemy[i].x + enemy[i].enemy_width, enemy[i].y + enemy[i].enemy_height / 4);//画一条线
//		line(enemy[i].x + enemy[i].enemy_width, enemy[i].y + 3 * enemy[i].enemy_height / 4, enemy[i].x + enemy[i].enemy_width, enemy[i].y + enemy[i].enemy_height);//画一条线
//		line(enemy[i].x + enemy[i].enemy_width, enemy[i].y + enemy[i].enemy_height, enemy[i].x + 3 * enemy[i].enemy_width / 4, enemy[i].y + enemy[i].enemy_height);//画一条线
//		line(enemy[i].x + enemy[i].enemy_width / 4, enemy[i].y + enemy[i].enemy_height, enemy[i].x, enemy[i].y + enemy[i].enemy_height);//画一条线
//		line(enemy[i].x, enemy[i].y + enemy[i].enemy_height, enemy[i].x, enemy[i].y + 3 * enemy[i].enemy_height / 4);//画一条线
//		line(enemy[i].x, enemy[i].y, enemy[i].x, enemy[i].y + enemy[i].enemy_height / 4);//画一条线
		if (enemy[i].enemy_hp <= 0)//当敌机的生命值小于或者等于0时,敌机摧毁
		{
			enemy[i].live = false;
		}
	}
}
//-----------------------------------------------------------------
// 描述:当玩家飞机触碰到敌机时,玩家飞机将被销毁,游戏失败!
//-----------------------------------------------------------------
void be_touched()
{
	for (int i = 0; i < ENEMY_NUM; i++)//遍历所有的敌机
	{
		if (!enemy[i].live)//当敌机不存在时
		{
			continue;
		}
		if (player.x >= enemy[i].x &&
			player.y >= enemy[i].y &&
			player.x <= enemy[i].x + enemy[i].enemy_width &&
			player.y <= enemy[i].y + enemy[i].enemy_height
			)//当玩家飞机碰到敌机时,飞机消亡
		{
			player.live = false;//飞机消亡,标记为FALSE
		}
	}
}
//-----------------------------------------------------------------
// 描述:做个定时器,防止敌机同时出现,防止子弹连续输出
//-----------------------------------------------------------------
bool timer(int ms, int num)
{
	static DWORD t[10];
	if (clock() - t[num] > ms)
	{
		t[num] = clock();
		return true;//如果两个敌机出现的时间大于ms秒,表明敌机可以出现
	}
	return false;//两个敌机出现的时间小于ms秒,敌机不出现
}

2.开场动画.cpp

//-----------------------------------------------------------------
//                  《开场动画》
//作者:辰梦star_dream
//最近修改时间:2021.8.12
//-----------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>   
#include <windows.h> 
#include <graphics.h>

void cartoon();//开场动画
void gotoxy(int x, int y);//光标移动
void eye();
void one();
void two();
void three();

void gotoxy(int x, int y)
{
	COORD Pos;
	HANDLE hCon;
	hCon = GetStdHandle(STD_OUTPUT_HANDLE);
	Pos.X = x;
	Pos.Y = y;
	SetConsoleCursorPosition(hCon, Pos);
}
void cartoon()
{
	eye();
	two();
	Sleep(300);
	three();
	Sleep(1000);
}
void eye()
{
	int flag = 1;
	MOUSEMSG m;
	FlushMouseMsgBuffer();
	void one();
	int check_button(int x, int y);

	setbkcolor(RGB(173, 189, 202));
	cleardevice();

	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	solidroundrect(226, 214, 362, 316, 50, 50);
	solidroundrect(462, 214, 600, 316, 50, 50);

	setfillcolor(RGB(0, 0, 0));
	fillcircle(269, 267, 25);
	fillcircle(505, 267, 25);

	setlinecolor(RGB(125, 0, 0));
	setfillcolor(RGB(125, 0, 0));
	solidroundrect(350, 367, 481, 481, 80, 80);

	settextcolor(WHITE);
	setbkcolor(RGB(125, 0, 0));
	settextstyle(32, 16, "宋体");
	outtextxy(390, 410, "进入");

	while (flag)
	{

		Sleep(600);

		setlinecolor(WHITE);
		setfillcolor(RGB(255, 255, 255));
		fillcircle(269, 267, 25);
		fillcircle(505, 267, 25);
		setfillcolor(RGB(0, 0, 0));
		fillcircle(319, 267, 25);
		fillcircle(555, 267, 25);

		Sleep(600);

		setlinecolor(WHITE);
		setfillcolor(RGB(255, 255, 255));
		fillcircle(319, 267, 25);
		fillcircle(555, 267, 25);
		setfillcolor(RGB(0, 0, 0));
		fillcircle(269, 267, 25);
		fillcircle(505, 267, 25);

		while (MouseHit())
		{
			m = GetMouseMsg();	// 获取鼠标消息
			if (check_button(m.x, m.y))
			{
				switch (m.uMsg)		// 根据不同的鼠标消息,执行不同的代码
				{
				case WM_LBUTTONDOWN:
					one();
					flag = 0;
					break;
				default:
					break;
				}
			}
		}
	}
}

void one()
{
	cleardevice();
	setbkcolor(WHITE);
	cleardevice();

	setfillcolor(RGB(239, 90, 89));
	fillcircle(400, 200, 50);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(400, 200, 15);
	setfillcolor(RGB(0, 0, 0));
	fillcircle(400, 200, 5);

	setfillcolor(RGB(173, 188, 201));
	fillrectangle(250, 250, 550, 300);

	setfillcolor(RGB(80, 92, 133));
	setlinecolor(RGB(80, 92, 133));
	arc(300, 300, 500, 500, 0, 3.14159);
	line(300, 399, 500, 399);
	floodfill(350, 350, RGB(80, 92, 133));

	setfillcolor(RGB(243, 169, 183));
	POINT pts1[] = { {400, 400},{346,400},{314, 470}, {358, 489},{400, 400} };
	solidpolygon(pts1, 4);
	POINT pts2[] = { {400, 400},{457,400},{488, 470}, {443, 490},{400, 400} };
	solidpolygon(pts2, 4);

	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));
	fillcircle(400, 275, 4);  //little-cicrle-up

	Sleep(200);

	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));
	fillrectangle(250, 250, 550, 300);
	setfillcolor(RGB(173, 188, 201));
	POINT pts3[] = { {250,265},{546,234},{550, 283},{253, 314},{250,265} };  //left-arm
	solidpolygon(pts3, 4);

	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));
	fillcircle(400, 275, 4);  //little-cicrle-up

	Sleep(300);

	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));
	fillcircle(400, 350, 4);  //little-cicrle-bottom

	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));

	solidpolygon(pts3, 4);
	setfillcolor(RGB(173, 188, 201));
	fillrectangle(250, 250, 550, 300);

	Sleep(200);

	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));
	fillrectangle(250, 250, 550, 300);
	setfillcolor(RGB(173, 188, 201));
	POINT pts4[] = { {255,230},{550,271},{544, 319},{248, 279},{255,230} };  //right-arm
	solidpolygon(pts4, 4);

	Sleep(200);

	//小人往下蹲
	cleardevice();

	//头部三个circle
	setfillcolor(RGB(239, 90, 89));
	fillcircle(390, 210, 50);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(390, 210, 15);
	setfillcolor(RGB(0, 0, 0));
	fillcircle(390, 210, 5);

	//手臂
	setfillcolor(RGB(173, 188, 201));
	POINT right_arm_2[] = { {245,240},{540,281},{534, 329},{238, 289},{245,240} };  //right-arm
	solidpolygon(right_arm_2, 4);

	//两条腿
	setfillcolor(RGB(243, 169, 183));
	//POINT pts1[] = { {400, 400},{346,400},{314, 470}, {358, 489},{400, 400}};
	solidpolygon(pts1, 4);
	//POINT pts2[] = { {400, 400},{457,400},{488, 470}, {443, 490},{400, 400}};
	solidpolygon(pts2, 4);

	//半圆身子
	setfillcolor(RGB(80, 92, 133));
	setlinecolor(RGB(80, 92, 133));
	arc(290, 310, 490, 510, 0, 3.14159);
	line(290, 409, 490, 409);
	floodfill(340, 360, RGB(80, 92, 133));

	//衣服扣子
	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));
	fillcircle(390, 360, 4);  //little-cicrle-bottom

	Sleep(200);

	//小人往下蹲2
	cleardevice();

	//头部三个circle
	setfillcolor(RGB(239, 90, 89));
	fillcircle(380, 220, 50);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(380, 220, 15);
	setfillcolor(RGB(0, 0, 0));
	fillcircle(380, 220, 5);

	//手臂
	setfillcolor(RGB(173, 188, 201));
	POINT right_arm_3[] = { {235,250},{530,291},{524, 339},{228, 299},{235,250} };  //right-arm
	solidpolygon(right_arm_3, 4);

	//两条腿
	setfillcolor(RGB(243, 169, 183));
	solidpolygon(pts1, 4);
	POINT pts_right_leg[] = { {400, 419},{461,416},{495, 460}, {460, 490},{400, 419} };
	solidpolygon(pts_right_leg, 4);

	//半圆身子
	setfillcolor(RGB(80, 92, 133));
	setlinecolor(RGB(80, 92, 133));
	arc(280, 320, 480, 520, 0, 3.14159);
	line(280, 419, 480, 419);
	floodfill(330, 350, RGB(80, 92, 133));

	//衣服扣子
	setfillcolor(RGB(255, 255, 255));
	setlinecolor(RGB(255, 255, 255));
	fillcircle(380, 370, 4);  //little-cicrle-bottom

	Sleep(300);
}

int check_button(int x, int y)
{
	if (x > 350 && x < 481 && y>367 && y < 481)
		return 1;
	else
		return 0;
}

void two()
{
	setbkcolor(RGB(248, 106, 89));
	cleardevice();

	//little one circle
	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 283, 15);

	Sleep(300);

	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 179, 339, 262);

	Sleep(300);
	cleardevice();
	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 293, 15);
	fillcircle(424, 283, 15);
	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 179, 339, 262);

	Sleep(300);
	cleardevice();
	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 303, 15);
	fillcircle(424, 293, 15);
	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 179, 339, 272);

	POINT pts1[] = { {400, 179},{432,173},{450, 264}, {415, 272},{400, 179} };
	solidpolygon(pts1, 4);

	Sleep(300);
	cleardevice();
	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 323, 15);
	fillcircle(424, 300, 15);
	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 189, 339, 282);

	POINT pts2[] = { {400, 189},{432,183},{450, 274}, {415, 282},{400, 189} };
	solidpolygon(pts2, 4);

	Sleep(200);

	cleardevice();
	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 343, 15);
	fillcircle(424, 320, 15);
	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 209, 339, 322);

	POINT pts3[] = { {400, 209},{432,203},{450, 294}, {415, 302},{400, 209} };
	solidpolygon(pts3, 4);

	setfillcolor(RGB(90, 59, 70));
	setlinecolor(RGB(90, 59, 70));
	arc(296, 87, 479, 278, -0.19, 2.949);
	line(299, 163, 479, 200);
	floodfill(386, 127, RGB(90, 59, 70));

	Sleep(200);

	cleardevice();
	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 363, 15);
	fillcircle(418, 360, 15);
	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 229, 339, 342);
	fillrectangle(400, 229, 435, 342);


	setfillcolor(RGB(90, 59, 70));
	setlinecolor(RGB(90, 59, 70));
	arc(281, 97, 464, 288, 0, 3.1415);
	line(281, 191, 466, 191);
	floodfill(395, 150, RGB(90, 59, 70));

	Sleep(200);

	setfillcolor(RGB(253, 177, 169));
	setlinecolor(RGB(253, 177, 169));
	POINT pts4[] = { {325,0},{375,50},{425,0},{325,0} };
	solidpolygon(pts4, 3);

	Sleep(100);

	setlinecolor(RGB(248, 106, 89));
	setfillcolor(RGB(248, 106, 89));
	fillcircle(321, 363, 15);
	fillcircle(418, 360, 15);

	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 493, 15);
	fillcircle(418, 493, 15);

	Sleep(100);
	setlinecolor(RGB(248, 106, 89));
	setfillcolor(RGB(248, 106, 89));
	fillrectangle(304, 229, 339, 342);
	fillrectangle(400, 229, 435, 342);

	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 339, 339, 452);
	fillrectangle(400, 339, 435, 452);

	Sleep(100);

	setfillcolor(RGB(248, 106, 89));
	setlinecolor(RGB(248, 106, 89));
	floodfill(395, 150, RGB(248, 106, 89));

	setlinecolor(RGB(109, 147, 163));
	setfillcolor(RGB(109, 147, 163));
	fillrectangle(169, 271, 350, 295);
	fillrectangle(402, 271, 582, 294);

	setfillcolor(RGB(90, 59, 70));
	setlinecolor(RGB(90, 59, 70));
	arc(281, 245, 464, 436, 0, 3.1415);
	line(281, 339, 466, 339);
	floodfill(395, 290, RGB(90, 59, 70));

	Sleep(100);
	setfillcolor(RGB(248, 106, 89));
	setlinecolor(RGB(248, 106, 89));
	solidpolygon(pts4, 3);

	setfillcolor(RGB(253, 177, 169));
	setlinecolor(RGB(253, 177, 169));
	POINT pts5[] = { {378,50},{432,107},{377,161},{323,107},{378,50} };
	solidpolygon(pts5, 4);

	Sleep(100);
	setfillcolor(RGB(248, 106, 89));
	setlinecolor(RGB(248, 106, 89));
	solidpolygon(pts5, 4);

	setfillcolor(RGB(253, 177, 169));
	setlinecolor(RGB(253, 177, 169));
	POINT pts6[] = { {378,134},{432,191},{378,245},{323,191},{378,134} };
	solidpolygon(pts6, 4);

	Sleep(100);

	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(378, 190, 30);

	Sleep(100);

	setlinecolor(BLACK);
	setfillcolor(RGB(0, 0, 0));
	fillcircle(378, 190, 10);

	Sleep(100);
	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(141, 284, 13);
	fillcircle(616, 284, 13);

	setlinecolor(RGB(125, 123, 123));
	setfillcolor(RGB(125, 123, 123));
	fillroundrect(125, 500, 308, 508, 5, 5);
}

void three()
{
	setbkcolor(RGB(248, 106, 89));
	cleardevice();

	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(141, 284, 13);
	fillcircle(557, 175, 13);

	settextcolor(WHITE);
	setbkcolor(RGB(248, 106, 89));
	settextstyle(32, 16, "宋体");
	outtextxy(575, 139, "你好~");

	setfillcolor(RGB(253, 177, 169));
	setlinecolor(RGB(253, 177, 169));
	POINT pts6[] = { {378,134},{432,191},{378,245},{323,191},{378,134} };
	solidpolygon(pts6, 4);

	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(378, 190, 30);

	setlinecolor(BLACK);
	setfillcolor(RGB(0, 0, 0));
	fillcircle(378, 190, 10);

	setlinecolor(RGB(125, 123, 123));
	setfillcolor(RGB(125, 123, 123));
	fillroundrect(125, 500, 308, 508, 5, 5);

	setlinecolor(RGB(109, 147, 163));
	setfillcolor(RGB(109, 147, 163));

	POINT pts7[] = { {416,281},{531,179},{550,200},{433,300},{416,281} };
	solidpolygon(pts7, 4);

	fillrectangle(169, 271, 350, 295);

	setfillcolor(RGB(90, 59, 70));
	setlinecolor(RGB(90, 59, 70));
	arc(281, 245, 464, 436, 0, 3.1415);
	line(281, 339, 466, 339);
	floodfill(395, 290, RGB(90, 59, 70));

	setlinecolor(WHITE);
	setfillcolor(RGB(255, 255, 255));
	fillcircle(321, 493, 15);
	fillcircle(418, 493, 15);

	setlinecolor(RGB(246, 178, 175));
	setfillcolor(RGB(246, 178, 175));
	fillrectangle(304, 339, 339, 452);
	fillrectangle(400, 339, 435, 452);
}

3.游戏结束.cpp

#include<graphics.h>
#include<iostream>
#include<conio.h>
#include<Windows.h>
using namespace std;
//-----------------------------------------------------------------
// 描述:游戏结束,调用该函数
//-----------------------------------------------------------------
void GameOver()
{
	cleardevice();//游戏结束,将其他画面清除掉"
	setbkcolor(WHITE);//背景颜色为白色
	settextcolor(RED);//设置颜色为红色
	settextstyle(70,70,"微软雅黑");
	outtextxy(150, 300, "游戏结束!");
	MOUSEMSG m;
	while (MouseHit())
	{
		m = GetMouseMsg();
		switch (m.uMsg)
		{
		case WM_LBUTTONDOWN:
			exit(0);
		}
	}
	
}

4、头文件connect.h

#pragma once
#ifndef connect.h
//#define connect.h
#include<iostream>
using namespace std;
void cartoon();//开场动画
void gotoxy(int x, int y);//光标移动
void eye();
void one();
void two();
void three();
void GameOver();//游戏结束时,才有的画面

#endif // !1

三、图片资源

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、参考文章和参考视频

开场动画源文件(照搬照抄的),链接如下:
https://blog.csdn.net/weixin_43118073/article/details/103264765?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162834284116780366523351%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162834284116780366523351&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-3-103264765.pc_search_result_control_group&utm_term=easyx%E5%8A%A8%E7%94%BB&spm=1018.2226.3001.4187
飞机大战源文件照着视频学的,链接如下:
https://www.bilibili.com/video/BV1T3411r7dP?p=1

五、百度云下载

链接:百度云

六、缺陷

玩家飞机碰到敌机,有时会失灵,无法出现游戏结束四个字。
“游戏结束”四个字,会闪过去,直接程序结束!

七、操作飞机方法

w、a、s、d,以及方向键

posted @ 2021-08-12 17:21  辰梦starDream  阅读(297)  评论(1编辑  收藏  举报  来源