赞
踩
C语言飞机大战小游戏
//----------------------------------------------------------------- // 《飞机大战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秒,敌机不出现 }
//----------------------------------------------------------------- // 《开场动画》 //作者:辰梦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); }
#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); } } }
#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,以及方向键
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。