飞机大战小游戏(包含图片、音效)

  • 示例演示:
  • 一.建立的全部源文件
  • 二、源代码
    • 1.飞机大战2.0 .cpp
    • 2.开场动画.cpp
    • 3.游戏结束.cpp
    • 4、头文件connect.h
  • 三、图片资源
  • 四、参考文章和参考视频
  • 五、百度云下载
  • 六、缺陷
  • 七、操作飞机方法

示例演示:

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,      //BOSSSMALL    //普通敌机
};//-----------------------------------------------------------------
//描述:结构体部分
//-----------------------------------------------------------------
; 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);//子弹发射,移动速度8if (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-upSleep(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-armsolidpolygon(pts3, 4);setfillcolor(RGB(255, 255, 255));setlinecolor(RGB(255, 255, 255));fillcircle(400, 275, 4);  //little-cicrle-upSleep(300);setfillcolor(RGB(255, 255, 255));setlinecolor(RGB(255, 255, 255));fillcircle(400, 350, 4);  //little-cicrle-bottomsetfillcolor(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-armsolidpolygon(pts4, 4);Sleep(200);//小人往下蹲cleardevice();//头部三个circlesetfillcolor(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-armsolidpolygon(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-bottomSleep(200);//小人往下蹲2cleardevice();//头部三个circlesetfillcolor(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-armsolidpolygon(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-bottomSleep(300);
}int check_button(int x, int y)
{if (x > 350 && x < 481 && y>367 && y < 481)return 1;elsereturn 0;
}void two()
{setbkcolor(RGB(248, 106, 89));cleardevice();//little one circlesetlinecolor(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,以及方向键

C语言---飞机大战游戏相关推荐

  1. 以java语言为工具的粗糙的飞机大战游戏的开发与实现

    以java语言为工具的粗糙的飞机大战游戏的开发与实现 第一步,导入外部图片的素材库 第二步,构建窗体和面板 第三步,在GamePanel上面构建背景图画 第四步,构建英雄机和敌人的机器,支援机器之类( ...

  2. python飞机大战游戏代码_用python语言如何实现飞机大战游戏

    python语言博大精深,它目前来说已经很火热了,在学好python的同时还要学会用python,可以使用它来开发一些项目最好不过了.下面小编用python实现一个小游戏-飞机大战,使用的python ...

  3. 用C语言实现飞机大战游戏编写

    用C语言实现飞机大战游戏编写 前段时间(其实是寒假)看了知乎上童晶老师的书<"啥名字忘了挺长的">,非常感兴趣,遂自己进行了一系列魔改. 程序用的是单纯的C语言,调用了 ...

  4. c 语言500行小游戏代码,500行代码使用python写个微信小游戏飞机大战游戏.pdf

    500行行代代码码使使用用python写写个个微微信信小小游游戏戏飞飞机机大大战战游游戏戏 这篇文章主要介绍了500行代码使用python写个微信小游戏飞机大战游戏,本文通过实例代码给大家介绍的非常详 ...

  5. 基于pygame实现的飞机大战游戏

    目录 1.引言 1.1 背景 1.2 意义 1.3 功能 2.系统结构 2.1 整体框架 2.2 精灵与精灵组 2.3 功能介绍 2.3.1 玩家飞机 2.3.2 敌机类型和关卡设定 2.3.3 敌机 ...

  6. Python实验,用pygame做飞机大战游戏设计

    飞机大战游戏设计 摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功能 ...

  7. 基于Java的飞机大战游戏的设计与实现论文

    源码下载 http://www.byamd.xyz/hui-zong-1/ 摘 要 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communicat ...

  8. 基于Java的飞机大战游戏的设计与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的飞机大战游戏的设计与实现 摘   要 现如今,随着智能手机的兴起与普及,加上4G( ...

  9. 飞机大战游戏需求分析文档 5改

    飞机大战游戏需求分析说明书     项目经理:   王依民     队伍组成:           计科1704  王依民 2017317210409           计科1704  胡应财 20 ...

最新文章

  1. ACL 2019 | 理解 BERT 每一层都学到了什么
  2. 揭秘码云:全球第二大代码托管平台的核心架构
  3. uni-app 页面数据无法渲染原因总结
  4. Ubuntu下嵌入式Qt开发环境配置全攻略
  5. Linux使用dd命令快速生成大文件
  6. T-SQL查询高级—SQL Server索引中的碎片和填充因子
  7. python每天定时9点执行_python每天定时运行某程序代码
  8. 网络中pkt是什么意思_网络流行语Cp、磕么?是什么意思?
  9. UVA10912 Simple Minded Hashing【DP】
  10. 听音乐学英语之- I Need to Wake Up 奥斯卡获奖单曲:关注全球变暖
  11. Datawhale数据挖掘项目之task1
  12. 大篆汉字对照表_篆书隶书千字对照表(一)
  13. 德软件开发者否认蓄意植入“心血”安全漏洞
  14. php 制作简易论坛,Dreamweaver打造PHP网站之简易论坛教程
  15. day1------安装部署k8s之完成(3)
  16. vscode英文界面转换为中文界面
  17. 计算机组成原理GLK,计算机组成原理课件第一讲.ppt
  18. CAD室内设计构思怎么写?
  19. C++11 std::thread-使用lambda表达式-GCC 4.9编译通过
  20. 穿越火线 raquo; 自动准备挂机刷分器V3.4 6月18号(支持永久跟新)

热门文章

  1. 基于JAVA幼儿早教系统软件设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署
  2. 1688商品详情接口,1688详情页接口,接口key和secret获取方式
  3. debian nvidia 安装_求助在debian下安装nvidia显卡驱动教程
  4. ORACLE数据库备份方法
  5. PHP实现平台商品和京东价格做对比
  6. 什么高大填空四个字动人_高大怎么填空四个字
  7. PACS系统源码 RIS系统源码 医学影像管理系统源码
  8. c语言水塔水位控制,基于西门子PLC的水塔水位控制系统及梯形图
  9. dependency与devDependencies的区别是什么?
  10. 大势至服务器文件备份系统怎么样,大势至服务器文件