当前位置:   article > 正文

C语言---飞机大战游戏_c语言飞机大战素材

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秒,敌机不出现
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419

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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493

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);
		}
	}
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、图片资源

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

四、参考文章和参考视频

开场动画源文件(照搬照抄的),链接如下:
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,以及方向键

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/358930
推荐阅读
相关标签
  

闽ICP备14008679号