个程序的源码没有什么技术要求,一般至少能看懂95%,因为博主是大一上学期写着玩的,当写了一周,还拿它参加了学校的创意编程比赛,结果第一用的ui,直接降维打击了,拿了个二等奖

操作方法游戏内都有

注意事项:1在动画时不能乱按
     2小怪设计的初衷是躲避,因此碰到就直接死(主要是我当初没想到我能把敌方子弹射击出来)
     3子弹按的速度过快会在某个点停下来,困难模式基本不会有这种情况,狂按就完了
     4由于小怪主要设计是躲避,所以子弹给的比较少,到BOSS时会自动增加,足够用
     5积分达到200时BOSS就会出现,BOSS四个技能,其中激光碰到大概率会直接死
     6尽量选择普通和困难,简单模式太弱智了

游戏思路:控制光标移动,通过坐标定点输出起到子弹移动,飞机移动效果和动画效果。
                 以不同数组分别存放我方与敌方的子弹坐标,理论上增加数组就可以增加子弹种类

缺点:就是移动僵硬,不能使长按速度保持稳定,所以点按玩起来效果更好。
          我方飞机不够没观,敌机种类较少
          没有音效(是一个遗憾)

大家有什么问题欢迎评论或私信问我哦,博主现在大一,一般一天之内就可以回复。

因为这个程序是一个多月前写的,有些重要的东西我可能没有说,欢迎提问!

头文件:

#include<iostream>
#include<Windows.h>
#include<conio.h>
#include<cstdlib>
#include<time.h>
#include<stdlib.h>
#include<cmath>
#include"menu.h"//飞机活动大小
#define width 80
#define height 40
//窗口大小
#define t_width 120
#define t_height 40void gotoxy(short x, short y);
void Game();void enemyAppear(char arr[width + 10][height]);
void enemyMove(char arr[width + 10][height]);void bulletMove(char arr[width + 10][height]);
void BOSSgame();
void shotBOSS(char arr[width + 10][height]);
void difficulty();void cartoonStartMenu();
void start_menu();
void game_menu();
void cartoonGameMenu();
void end_menu();
void success_menu();
void BOSScartoon();
void printBOSS();

全局变量:

这部分主要是调节难度用的

extern int score = 0;
extern int bullet = 99999;
extern int HP = 100000;
extern int BOSSHP = 500;
extern int damage = 3;
extern int enemySpeed = 10;
extern int BOSSspeed = 15;
extern int Number = 4;
extern int BOSS = 0;

最难的部分:

该部分是我认为命令行实现按键移动的关键,如果只是想试玩一下只要知道函数功能就够了

深入了解handle(句柄)我推荐:控制台API函数----HANDLE、SetConsoleCursorPosition、SetConsoleTextAttribute_weixin_30901729的博客-CSDN博客

//清除光标
void clearCursor()
{HANDLE hOut;CONSOLE_CURSOR_INFO cur = { 1,0 };hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(hOut, &cur);
}//使光标移动到指定位置
void gotoxy(short x, short y)
{HANDLE hOut;hOut = GetStdHandle(STD_OUTPUT_HANDLE);COORD pos = { x,y };SetConsoleCursorPosition(hOut, pos);
}

存子弹和飞机位置的数组:

char enemyArr[width + 10][height] = { 0 };
char myBulletArr[width + 10][height] = { 0 };

我方飞机的子弹射击,移动

//飞机图像
void printPlane(short x, short y)
{gotoxy(x, y);cout << "*";//头gotoxy(x, y + 1);cout << "*";//尾gotoxy(x - 1, y + 1);cout << "*";//左翼gotoxy(x + 1, y + 1);cout << "*";//右翼
}class myPlane
{
public://头的坐标short x = width / 2;short y = height / 2;//初始化飞机void initMyPlane(){printPlane(x, y);}//清除飞机移动前位置图像void clearMyplane(){gotoxy(x, y);cout << " ";//头gotoxy(x, y + 1);cout << " ";//尾gotoxy(x - 1, y + 1);cout << " ";//左翼gotoxy(x + 1, y + 1);cout << " ";//右翼}//射击void shoot(char myArr[width + 10][height]){if (bullet == 0)return;myArr[x][y - 1] = '*';gotoxy(x, y - 1);cout << "*";bullet--;gotoxy(width + (t_width - width) / 2, 9);cout << "   ";gotoxy(width + (t_width - width) / 2, 9);cout << bullet;}//飞机移动+游戏中的菜单栏功能实现void myPlaneMove(char arr[width + 10][height]){//判断是否有键盘操作if (_kbhit()){char move;move = _getch();switch (move){case 'w':if (BOSS == 1)if (y == 16)break;//判断是否是边界if (y == 1)break;//清除原图像clearMyplane();y--;//打印新位置printPlane(x, y);break;case 'a':if (x - 1 == 1)break;clearMyplane();x--;printPlane(x, y);break;case 's':if (y + 1 == height - 2)break;clearMyplane();y++;printPlane(x, y);break;case 'd':if (x + 1 == width - 2)break;clearMyplane();x++;printPlane(x, y);break;case 'j':shoot(myBulletArr);case 'W':if (BOSS == 1)if (y == 16)break;//判断是否是边界if (y == 1)break;//清除原图像clearMyplane();y--;//打印新位置printPlane(x, y);break;case 'A':if (x - 1 == 1)break;clearMyplane();x--;printPlane(x, y);break;case 'S':if (y + 1 == height - 2)break;clearMyplane();y++;printPlane(x, y);break;case 'D':if (x + 1 == width - 2)break;clearMyplane();x++;printPlane(x, y);break;//控制射击case 'J':shoot(myBulletArr);}}}
};myplane p;//创捷我方飞机

难度参数设置:

//难度选择
void difficulty()
{gotoxy(t_width / 2 - 5, t_height / 2 - 4);cout << "1.简单模式";gotoxy(t_width / 2 - 5, t_height / 2);cout << "2.普通模式";gotoxy(t_width / 2 - 5, t_height / 2 + 4);cout << "3.困难模式";char choice;choice = _getch();switch (choice){case '1':enemySpeed = 50;BOSSspeed = 25;HP = 1000;damage = 5;bullet = 50;Number = 2;break;case '2':enemySpeed = 10;BOSSspeed = 15;HP = 500;damage = 3;bullet = 30;Number = 4;break;case '3':enemySpeed = 8;BOSSspeed = 5;HP = 100;damage = 2;bullet = 10;Number = 6;break;}}

子弹功能实现:

void shotEnemy(char enemyArr[width + 10][height], char myArr[width + 10][height])
{for (int i = 2; i < width; i++)for (int j = 2; j < height; j++){if (myArr[i][j] == '*' || myArr[i][j] == '@'){//碰头if (enemyArr[i][j - 2] == '+'){myArr[i][j] = '@';gotoxy(i, j - 1);cout << "*";}//碰左翼else if (enemyArr[i][j - 2] == 'p'){myArr[i][j] = '@';gotoxy(i, j - 1);cout << "*";}//碰右翼else if (enemyArr[i][j - 2] == 'q'){myArr[i][j] = '@';gotoxy(i, j - 1);cout << "*";}//碰头if (enemyArr[i][j - 1] == '+'){myArr[i][j] = 0;enemyArr[i][j - 1] = 0;enemyArr[i - 1][j - 2] = 0;enemyArr[i + 1][j - 2] = 0;enemyArr[i][j - 2] = 0;gotoxy(i, j - 1);cout << " ";gotoxy(i - 1, j - 2);cout << " ";gotoxy(i + 1, j - 2);cout << " ";gotoxy(i, j - 2);cout << " ";gotoxy(i, j);cout << " ";}//碰左翼else if (enemyArr[i][j - 1] == 'p'){myArr[i][j] = 0;enemyArr[i][j - 1] = 0;enemyArr[i - 1][j] = 0;enemyArr[i - 1][j - 1] = 0;enemyArr[i - 2][j - 1] = 0;gotoxy(i, j - 1);cout << " ";gotoxy(i - 1, j);cout << " ";gotoxy(i - 1, j - 1);cout << " ";gotoxy(i - 2, j - 1);cout << " ";gotoxy(i, j);cout << " ";}//碰右翼else if (enemyArr[i][j - 1] == 'q'){myArr[i][j] = 0;enemyArr[i][j - 1] = 0;enemyArr[i + 1][j] = 0;enemyArr[i + 1][j - 1] = 0;enemyArr[i + 2][j - 1] = 0;gotoxy(i, j - 1);cout << " ";gotoxy(i + 1, j);cout << " ";gotoxy(i + 1, j - 1);cout << " ";gotoxy(i + 2, j - 1);cout << " ";gotoxy(i, j);cout << " ";}}}
}//子弹移动
void bulletMove(char myArr[width + 10][height])
{for (int i = 2; i < width; i++)for (int j = 2; j < height; j++){if (myArr[i][j] == '*'){myArr[i][j] = 0;myArr[i][j - 1] = '*';gotoxy(i, j - 1);cout << "*";gotoxy(i, j);cout << " ";}}//清除触界子弹for (int k = 1; k < width; k++){if (myArr[k][1] == '*'){gotoxy(k, 1);cout << " ";myArr[k][1] = 0;}}
}

敌机设置:

//随机出现敌机
void enemyAppear(char enemyArr[width + 10][height])
{srand((unsigned int)time(NULL));//随机敌机数量int number = rand() % 6 + Number;//随机敌机位置for (int i = 0; i < number; i++){short x = rand() % (width - 4) + 2;//防止敌机重叠if (enemyArr[x][2] == '+' || enemyArr[x - 1][2] == '+' || enemyArr[x + 1][2] == '+' || enemyArr[x - 2][2] == '+' || enemyArr[x + 2][2] == '+')continue;short y = 2;enemyArr[x][y] = '+';enemyArr[x][y - 1] = 'T';enemyArr[x - 1][y - 1] = 'q';enemyArr[x + 1][y - 1] = 'p';gotoxy(x, y);cout << "+";//头gotoxy(x, y - 1);cout << "T";//尾   gotoxy(x - 1, y - 1);cout << "q";//右翼     //+++ gotoxy(x + 1, y - 1);  // 0   cout << "p";//左翼}
}void enemyMove(char enemyArr[width + 10][height])
{for (int i = width; i > 0; i--)for (int j = height - 3; j > 0; j--){if (enemyArr[i][j] == '+'){enemyArr[i][j - 1] = 0;enemyArr[i - 1][j - 1] = 0;enemyArr[i + 1][j - 1] = 0;enemyArr[i][j] = 'T';enemyArr[i][j + 1] = '+';enemyArr[i - 1][j] = 'q';enemyArr[i + 1][j] = 'p';gotoxy(i, j - 1);cout << " ";gotoxy(i - 1, j - 1);cout << " ";gotoxy(i + 1, j - 1);cout << " ";gotoxy(i, j + 1);cout << "+";gotoxy(i, j);cout << "T";gotoxy(i - 1, j);cout << "q";gotoxy(i + 1, j);cout << "p";}}//清除触界敌机for (int i = 0; i < width; i++){if (enemyArr[i][height - 2] == '+'){enemyArr[i][height - 2] = 0;enemyArr[i][height - 3] = 0;enemyArr[i + 1][height - 3] = 0;enemyArr[i - 1][height - 3] = 0;gotoxy(i, height - 2);cout << " ";gotoxy(i - 1, height - 3);cout << " ";gotoxy(i + 1, height - 3);cout << " ";gotoxy(i, height - 3);cout << " ";score++;}}
}//判断是否触碰敌机
bool judgeEnemy(short x, short y, char enemyArr[width + 10][height])
{if (enemyArr[x][y] == '+' || enemyArr[x][y] == 'p' || enemyArr[x][y] == 'q' || enemyArr[x - 1][y + 1] == '+' || enemyArr[x - 1][y + 1] == 'p' || enemyArr[x - 1][y + 1] == 'q'|| enemyArr[x + 1][y + 1] == '+' || enemyArr[x + 1][y + 1] == 'p' || enemyArr[x + 1][y + 1] == 'q' || enemyArr[x][y + 1] == '+' || enemyArr[x][y + 1] == 'p' || enemyArr[x][y + 1] == 'q'){return true;}else{gotoxy(width + (t_width - width) / 2, 11);cout << HP << "    ";return false;}
}

函数整合:

void Game()
{//存储敌机坐标system("cls");difficulty();system("cls");cartoonStartMenu();game_menu();p.initMyPlane();while (true){enemyAppear(enemyArr);//这里可能有点难理解,可以先把外层循环去掉只看内层循环//Sleep(1)是停止1ms也就是说每enemySpeed毫秒子弹,敌军移动一次//把外层循环加进来就是10*enemySpeed毫秒敌军出现一次//这样写的目的是使得每一毫秒程序都能检测是否有按键移动射击操作for (int i = 0; i < 10; i++){for (int j = 0; j < enemySpeed; j++) {p.myPlaneMove(enemyArr);if (judgeEnemy(p.x, p.y, enemyArr)){end_menu();}Sleep(1);}bulletMove(myBulletArr);shotEnemy(enemyArr, myBulletArr);enemyMove(enemyArr);gotoxy(width + (t_width - width) / 2, 7);cout << score;//分数大于200进入BOSS战if (score > 200)BOSSgame();}}}

BOSS功能的实现:

大家在这里可以充分发挥自己的创造力啊>_<

//BOSS子弹移动
void enemyBulletMove(char enemyArr[width + 10][height])
{for (int i = width; i > 0; i--)for (int j = height - 3; j > 0; j--){if (enemyArr[i][j] == '+'){enemyArr[i][j] = 0;enemyArr[i][j + 1] = '+';gotoxy(i, j);cout << " ";gotoxy(i, j + 1);cout << "+";judgeBOSSBullet(p.x, p.y, enemyArr);}}//清除触界敌军子弹for (int i = 0; i < width; i++){if (enemyArr[i][height - 2] == '+'){enemyArr[i][height - 2] = 0;gotoxy(i, height - 2);cout << " ";}}
}//持续射击
void keepShooting(char enemyArr[width + 10][height])
{srand((unsigned int)time(NULL));for (int j = 0; j < 100; j++){int x = rand() % 78 + 1;gotoxy(x, 16);cout << "+";enemyArr[x][16] = '+';gotoxy(79 - x, 16);cout << "+";enemyArr[79 - x][16] = '+';for (int j = 0; j < BOSSspeed; j++){Sleep(1);p.myPlaneMove(enemyArr);}enemyBulletMove(enemyArr);bulletMove(myBulletArr);shotBOSS(myBulletArr);}
}//技能1
void skillA(char enemyArr[width + 10][height])
{srand((unsigned int)time(NULL));for (int z = 0; z < 3; z++){for (int i = width / 2 - 5; i > 2; i--){gotoxy(i, 16);cout << "+";enemyArr[i][16] = '+';gotoxy((width - i - 1), 16);cout << "+";enemyArr[width - i - 1][16] = '+';for (int j = 0; j < BOSSspeed; j++){Sleep(1);p.myPlaneMove(enemyArr);}enemyBulletMove(enemyArr);bulletMove(myBulletArr);shotBOSS(myBulletArr);}}}//技能2
void skillB(char enemyArr[width + 10][height])
{srand((unsigned int)time(NULL));for (int z = 0; z < 3; z++){int x = rand() % 76 + 2;gotoxy(x, 16);cout << "!";gotoxy(79 - x, 16);cout << "!";for (int k = 0; k < 10; k++){for (int j = 0; j < BOSSspeed; j++){Sleep(1);p.myPlaneMove(enemyArr);}enemyBulletMove(enemyArr);bulletMove(myBulletArr);shotBOSS(myBulletArr);}for (int i = 16; i < height - 1; i++){gotoxy(x, i);cout << "+";enemyArr[x][i] = '+';gotoxy(x + 1, i);cout << "+";enemyArr[x + 1][i] = '+';gotoxy(x - 1, i);cout << "+";enemyArr[x - 1][i] = '+';gotoxy(79 - x, i);cout << "+";enemyArr[79 - x][i] = '+';gotoxy(79 - x - 1, i);cout << "+";enemyArr[79 - x - 1][i] = '+';gotoxy(79 - x + 1, i);cout << "+";enemyArr[79 - x + 1][i] = '+';}}
}//技能3
void skillC(char enemyArr[width + 10][height])
{srand((unsigned int)time(NULL));int x = rand() % 6 + 37;gotoxy(x, 16);cout << "+";enemyArr[x][16] = '+';gotoxy(79 - x, 16);cout << "+";enemyArr[79 - x][16] = '+';p.myPlaneMove(enemyArr);enemyBulletMove(enemyArr);bulletMove(myBulletArr);shotBOSS(myBulletArr);for (int j = 0; j < 50; j++){int dir = rand() % 2 - 1;x = x + dir;gotoxy(x, 16);cout << "+";enemyArr[x][16] = '+';gotoxy(79 - x, 16);cout << "+";enemyArr[79 - x][16] = '+';for (int j = 0; j < BOSSspeed; j++){Sleep(1);p.myPlaneMove(enemyArr);}enemyBulletMove(enemyArr);bulletMove(myBulletArr);shotBOSS(myBulletArr);}
}//BOSS血条
void BOSSHPcartoon()
{gotoxy(13, 1);cout << "HP:";gotoxy(16, 1);for (int i = 0; i < BOSSHP / 10; i++)cout << "▇";cout << "    ";
}//射击BOSS检测
void shotBOSS(char myArr[width + 10][height])
{//尾部for (int i = 9; i < 14; i++){if (myArr[i][4] == '*'){BOSSHP = BOSSHP - damage / 2;myArr[i][4] = 0;gotoxy(i, 4);cout << " ";}if (myArr[79 - i][4] == '*'){BOSSHP = BOSSHP - damage / 2;myArr[79 - i][4] = 0;gotoxy(79 - i, 4);cout << " ";}}//中后部for (int i = 14; i < 18; i++){if (myArr[i][6] == '*'){BOSSHP = BOSSHP - damage;myArr[i][6] = 0;gotoxy(i, 6);cout << " ";}if (myArr[79 - i][6] == '*'){BOSSHP = BOSSHP - damage;myArr[79 - i][6] = 0;gotoxy(79 - i, 6);cout << " ";}}//中前部for (int i = 18; i < 29; i++){if (myArr[i][11] == '*'){BOSSHP = BOSSHP - damage;myArr[i][11] = 0;gotoxy(i, 11);cout << " ";}if (myArr[79 - i][11] == '*'){BOSSHP = BOSSHP - damage;myArr[79 - i][11] = 0;gotoxy(79 - i, 11);cout << " ";}}for (int i = 27; i < 40; i++){if (myArr[i][13] == '*'){BOSSHP = BOSSHP - damage;myArr[i][13] = 0;gotoxy(i, 13);cout << " ";}if (myArr[79 - i][13] == '*'){BOSSHP = BOSSHP - damage;myArr[79 - i][13] = 0;gotoxy(79 - i, 13);cout << " ";}}//头后部for (int i = 31; i < 40; i++){if (myArr[i][15] == '*'){BOSSHP = BOSSHP - 2 * damage;myArr[i][15] = 0;gotoxy(i, 15);cout << " ";}if (myArr[79 - i][15] == '*'){BOSSHP = BOSSHP - 2 * damage;myArr[79 - i][15] = 0;gotoxy(79 - i, 15);cout << " ";}}//头部for (int i = 37; i < 40; i++){if (myArr[i][16] == '*'){BOSSHP = BOSSHP - 2 * damage;myArr[i][16] = 0;gotoxy(i, 16);cout << " ";}if (myArr[79 - i][16] == '*'){BOSSHP = BOSSHP - 2 * damage;myArr[79 - i][16] = 0;gotoxy(79 - i, 16);cout << " ";}}BOSSHPcartoon();if (BOSSHP <= 0)success_menu();
}void BOSSshot(char enemyArr[width + 10][height])
{srand((unsigned int)time(NULL));while (true){int i = rand() % 4;switch (i){case 0:keepShooting(enemyArr);break;case 1:skillA(enemyArr);break;case 2:skillB(enemyArr);break;case 3:skillC(enemyArr);break;}}
}

BOSS函数整合:

void BOSSgame()
{BOSS = 1;bullet = 1000;for (int i = 2; i < width; i++)for (int j = 2; j < height; j++){if (enemyArr[i][j] == '+'){enemyArr[i][j] = 0;enemyArr[i - 1][j - 1] = 0;enemyArr[i + 1][j - 1] = 0;enemyArr[i][j - 1] = 0;gotoxy(i - 1, j - 1);cout << " ";gotoxy(i + 1, j - 1);cout << " ";gotoxy(i, j - 1);cout << " ";gotoxy(i, j);cout << " ";}}BOSScartoon();BOSSHPcartoon();BOSSshot(enemyArr);
}

菜单,动画的实现:

这个动画。。。嘿嘿,其实没啥学的必要,我是图省事这么写的,你们肯定有更好的办法来实现

大家看看上面的菜单就行了,可以直接看后面的main函数

//开始菜单
void start_menu()
{for (int i = t_height - 1; i >= t_height / 2 - 4; i--){gotoxy(t_width / 2 - 5, i + 1);cout << "        ";gotoxy(t_width / 2 - 5, i);cout << "飞机大战";if (i < t_height - 2 - 4){gotoxy(t_width / 2 - 6, i + 5);cout << "          ";gotoxy(t_width / 2 - 6, i + 4);cout << "y.进入游戏";}if (i < t_height - 2 - 8){gotoxy(t_width / 2 - 6, i + 9);cout << "          ";gotoxy(t_width / 2 - 6, i + 8);cout << "n.退出游戏";}Sleep(300);}while (true){if (_kbhit()){char input = _getch();switch (input){case 'n':system("cls");cout << "退出成功" << endl;exit(0);break;case 'N':system("cls");cout << "退出成功" << endl;exit(0);break;case 'y':system("cls");cout << "进入游戏" << endl;Sleep(1000);system("cls");Game();break;case 'Y':system("cls");cout << "进入游戏" << endl;Sleep(1000);system("cls");Game();break;}}}
}void cartoonStartMenu()
{gotoxy(t_width / 2 - 8, t_height / 2 - 6);cout << "************";gotoxy(t_width / 2 - 8, t_height / 2 - 5);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 - 4);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 - 3);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 - 2);cout << "************";gotoxy(t_width / 2 - 8, t_height / 2 - 1);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 + 1);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 + 2);cout << "************";Sleep(1000);system("cls");gotoxy(t_width / 2 - 8, t_height / 2 - 6);cout << "************";gotoxy(t_width / 2 - 8, t_height / 2 - 5);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 - 4);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 - 3);cout << "           *";gotoxy(t_width / 2 - 8, t_height / 2 - 2);cout << "************";gotoxy(t_width / 2 - 8, t_height / 2 - 1);cout << "*           ";gotoxy(t_width / 2 - 8, t_height / 2);cout << "*           ";gotoxy(t_width / 2 - 8, t_height / 2 + 1);cout << "*           ";gotoxy(t_width / 2 - 8, t_height / 2 + 2);cout << "************";Sleep(1000);system("cls");gotoxy(t_width / 2 - 8, t_height / 2 - 6);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2 - 5);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2 - 4);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2 - 3);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2 - 2);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2 - 1);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2 + 1);cout << "     **     ";gotoxy(t_width / 2 - 8, t_height / 2 + 2);cout << "     **     ";Sleep(1000);system("cls");
}//地图框架和右菜单
void game_menu()
{//框架gotoxy(0, 0);for (int i = 0; i < width; i++)cout << "#";gotoxy(0, height - 1);for (int i = 0; i < width; i++)cout << "#";for (int i = 0; i < height; i++){gotoxy(0, i);cout << "#";}for (int i = 0; i < height; i++){gotoxy(width - 1, i);cout << "#";}//右部菜单gotoxy(width + (t_width - width) / 2 - 6, 5);cout << "代号:NJTECH";gotoxy(width + (t_width - width) / 2 - 6, 7);cout << "得分:";gotoxy(width + (t_width - width) / 2 - 6, 9);cout << "子弹:";gotoxy(width + (t_width - width) / 2 - 6, 11);cout << "血量:";gotoxy(width, 13);cout << "                   **                   ";gotoxy(width, 14);cout << "                   **                   ";gotoxy(width, 15);cout << "                   **                   ";gotoxy(width, 16);cout << "                  ****                  ";gotoxy(width, 17);cout << "                 ******                 ";gotoxy(width, 18);cout << "            *  ****  ****  *            ";gotoxy(width, 19);cout << "           ******************           ";gotoxy(width, 20);cout << "          ****   ******   ****          ";gotoxy(width, 21);cout << "       **************************       ";gotoxy(width, 22);cout << "             ****      ****             ";gotoxy(width, 23);cout << "               **      **               ";gotoxy(width, 24);cout << "                *      *                ";//规则gotoxy(width + (t_width - width) / 2 - 14, 28);cout << "w 前进";gotoxy(width + (t_width - width) / 2 - 14, 30);cout << "s 后退";gotoxy(width + (t_width - width) / 2 - 14, 32);cout << "d 右移";gotoxy(width + (t_width - width) / 2 - 14, 34);cout << "a 左移";gotoxy(width + (t_width - width) / 2 - 14, 36);cout << "j 射击";
}void cartoonGameMenu()
{for (int i = 0; i < height / 2; i++){gotoxy(0, i);for (int j = 0; j < t_width; j++){cout << "▇";}gotoxy(0, height - i - 1);for (int k = 0; k < t_width; k++){cout << "▇";}Sleep(100);}system("cls");Sleep(1000);for (int i = 0; i < t_width; i++){for (int j = 0; j < t_height; j++){cout << "▇";if (j == t_width - 1)cout << endl;}}Sleep(1000);system("cls");Sleep(1000);}void BOSScartoon()
{for (int i = 0; i < 9; i++){gotoxy(width / 2 - 1, t_height / 2 - 8 + i);cout << "****";}for (int i = 0; i < 3; i++){gotoxy(width / 2 - 1, t_height / 2 + 2 + i);cout << "****";}Sleep(1000);for (int i = 0; i < 9; i++){gotoxy(width / 2 - 1, t_height / 2 - 8 + i);cout << "    ";}for (int i = 0; i < 3; i++){gotoxy(width / 2 - 1, t_height / 2 + 2 + i);cout << "    ";}Sleep(1000);for (int i = 0; i < 9; i++){gotoxy(width / 2 - 1, t_height / 2 - 8 + i);cout << "****";}for (int i = 0; i < 3; i++){gotoxy(width / 2 - 1, t_height / 2 + 2 + i);cout << "****";}Sleep(1000);for (int i = 0; i < 9; i++){gotoxy(width / 2 - 1, t_height / 2 - 8 + i);cout << "    ";}for (int i = 0; i < 3; i++){gotoxy(width / 2 - 1, t_height / 2 + 2 + i);cout << "    ";}Sleep(1000);for (int i = 0; i < 9; i++){gotoxy(width / 2 - 1, t_height / 2 - 8 + i);cout << "****";}for (int i = 0; i < 3; i++){gotoxy(width / 2 - 1, t_height / 2 + 2 + i);cout << "****";}Sleep(1000);for (int i = 0; i < 9; i++){gotoxy(width / 2 - 1, t_height / 2 - 8 + i);cout << "    ";}for (int i = 0; i < 3; i++){gotoxy(width / 2 - 1, t_height / 2 + 2 + i);cout << "    ";}Sleep(1000);printBOSS();
}void end_menu()
{system("cls");Sleep(3000);gotoxy(width / 2 - 8, height - 1);cout << "你失败了,但这不是你的过错,只是这次的英雄并不是你......";Sleep(300);for (int i = height - 2; i > 18; i--){gotoxy(width / 2 - 8, i + 1);cout << "                                                        ";gotoxy(width / 2 - 8, i);cout << "你失败了,但这不是你的过错,只是这次的英雄并不是你......";Sleep(300);}Sleep(10000000);
}void success_menu()
{for (int i = 16; i > 1; i--){gotoxy(2, i);cout << "                                                                     ";Sleep(100);}Sleep(1000);gotoxy(width / 2 - 3, 2);cout << "游戏胜利";Sleep(300);for (int i = 3; i < 17; i++){gotoxy(width / 2 - 3, i - 1);cout << "        ";gotoxy(width / 2 - 3, i);cout << "游戏胜利";Sleep(300);}Sleep(100000);
}void printBOSS()
{gotoxy(0, 0);for (int i = 0; i < width; i++)cout << "#";gotoxy(0, height - 1);for (int i = 0; i < width; i++)cout << "#";for (int i = 0; i < height; i++){gotoxy(0, i);cout << "#";}for (int i = 0; i < height; i++){gotoxy(width - 1, i);cout << "#";}for (int i = 2; i < 16; i++){gotoxy(37, i);cout << "\\ ++ /";if (i > 2){gotoxy(33, i - 1);cout << "\\  \\  ++  /  /";}if (i > 3){gotoxy(30, i - 2);cout << "\\ \\  \\   ++   /  / /";}if (i > 4){gotoxy(27, i - 3);cout << "+++++++************+++++++";gotoxy(27, i - 4);cout << "                          ";}if (i > 5){gotoxy(32, i - 4);cout << "****************";gotoxy(32, i - 5);cout << "                ";}if (i > 6){gotoxy(18, i - 5);cout << "***  ***00******   ******   ******00***  ***";gotoxy(18, i - 6);cout << "                                            ";}if (i > 7){gotoxy(19, i - 6);cout << "******00****   **  ****  **   ****00******";gotoxy(19, i - 7);cout << "                                          ";}if (i > 8){gotoxy(24, i - 7);cout << "*****    *00*      *00*    *****";gotoxy(24, i - 8);cout << "                                ";}if (i > 9){gotoxy(22, i - 8);cout << "****   ****0000* ** *0000****   ****";gotoxy(22, i - 9);cout << "                                    ";}if (i > 10){gotoxy(23, i - 9);cout << "*********0000***  ***0000*********";gotoxy(23, i - 10);cout << "                                  ";}if (i > 11){gotoxy(14, i - 10);cout << "*********** ************    ************ ***********";gotoxy(14, i - 11);cout << "                                                    ";}if (i > 12){gotoxy(14, i - 11);cout << "********   ***  *  *  *      *  *  *  ***   ********";gotoxy(14, i - 12);cout << "                                                    ";}if (i > 13){gotoxy(9, i - 12);cout << "************       ******    ****    ******       ************";gotoxy(9, i - 13);cout << "                                                              ";}Sleep(300);}}

main函数实现:

int main()
{system("mode con cols=120 lines=40");clearCursor();cartoonGameMenu();start_menu();cartoonStartMenu();game_menu();BOSSgame();
}

无任何格外需求的命令行C++飞机大战,内含BOSS,动画,万行代码!免费奉上!相关推荐

  1. 无任何格外需求的命令行C++飞机大战,内含BOSS,动画,千行代码免费奉上

    这个程序的源码没有什么技术要求,一般至少能看懂95%,因为博主是大一上学期写着玩的,当写了一周,还拿它参加了学校的创意编程比赛,结果第一用的ui,直接降维打击了,拿了个二等奖... ​​​​​​​ 操 ...

  2. linux下wps 点击无反应 无法打开 在命令行也打不开,最开始可以打开,关机重启之后不能够打开

    linux下wps 点击无反应 无法打开 在命令行也打不开,安装之后可以打开,关机重启之后打不开了 解决方案: 删除~/.config/Kingsoft文件 然后重启,一切正常 转载自https:// ...

  3. Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果

    Python命令行解析:IDE内点击Run运行代码直接得出结果.基于TF flags(或argparse.sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果 目录 命令行解析 T1.采 ...

  4. 通过命令行方式批量设置保留IP地址的代码

    前段时间看到一个提问关于如何批量设置DHCP保留地址的贴子,后来经作实验测试,现将解决方法分享给大家,供互相学习讨论 前段时间看到一个提问关于如何批量设置DHCP保留地址的贴子,后来经作实验测试,现将 ...

  5. python多任务、面向对象、命令行启动动态绑定端口号静态web服务器代码实现

    一.静态web服务器-多任务 多任务web服务器:使用多线程,比进程更节省资源,支持多用户同时访问,可以同时处理多个客户端请求 实现步骤 若客户端与服务端建立连接,则创建子线程,使用子线程处理客户端请 ...

  6. linux缓存清除命令行,unix - Cookies和缓存,如何在Linux和Mac上从命令行清除它们? - 堆栈内存溢出...

    这是从Mac上的Firefox命令行清除cookie和缓存数据的一种方法: #!/bin/bash # A script to clear out Firefox data from the comm ...

  7. linux网易云命令行,网易云音乐还有命令行版本?倒适合部署在Linux系统的机器人上...

    平时工作或生活喜欢有点音乐陪伴.而网易云音乐是一直以来用的音乐播放软件,可能除了里面很多懂你推给你的好音乐外,它还是一个分享和温暖的社区,分享评论,分享故事和温暖.机智客自己不管是PC电脑端还是移动手 ...

  8. 一种命令行解析的新思路(Go 语言描述)

    简介: 本文通过打破大家对命令行的固有印象,对命令行的概念解构后重新梳理,开发出一种功能强大但使用极为简单的命令行解析方法.这种方法支持任意多的子命令,支持可选和必选参数,对可选参数可提供默认值,支持 ...

  9. 08-SNAP的命令行处理工具gpt及其批处理(Sentinel-1和Sentinel-2为例)

    转载自:https://blog.csdn.net/lidahuilidahui/article/details/107005979 08-SNAP的命令行处理工具gpt及其批处理(Sentinel- ...

最新文章

  1. 【Git+Docker】Docker初期学习认识和安装配置详解
  2. 解决IntelliJ IDEA 2019.3.5 启动无反应
  3. Java中资源关闭的处理方式
  4. spark的内存过小报错
  5. CRM Extension field render and property handling
  6. 创建数组表格PHP苹果价格,如何从PHP数组创建HTML表?
  7. sort();对结构体数组的排序
  8. 书屋(一):读《世界是平的》有感
  9. rostcm6情感分析案例分析_情感分析师在线指导情感挽回
  10. U盘windows无法格式化的解决办法
  11. 今天在当当上看到一本书,ASP.NET程序员参考手册
  12. java 购物系统代码_java购物系统源代码
  13. [SQLITE_BUSY]问题简析与解决
  14. 用aspose转换文档成PDF导致中文变成方框
  15. Justinmind,为移动设计而生
  16. 为知笔记的快捷键整理
  17. 随手笔记Cookie
  18. 使用pypcd读取pcd时ValueError: field ‘__0000‘ occurs more than once错误
  19. 半年时间破获电信诈骗大案:我是如何利用数据分析建模,从零基础做到的
  20. java最简单的kafka生产者和消费者,未结合spring

热门文章

  1. 年会抽奖项目免费分享即开即用
  2. SpiderMonkey 入门翻译
  3. 仓储物流中心| 地坪 | 工程设计要点
  4. Windows 安装包介绍
  5. Scrapy爬虫:代理IP配置
  6. 设置div table 等元素高度宽度百分之一百 100% 无效解决办法...
  7. 服务器微信老掉线什么原因吗,怎么回事微信老是无法连接到网络?
  8. 用老毛桃U盘安装:[3]Ghost版Win7系统
  9. 漫谈企业内部图书馆的建立与日常管理
  10. 2021-2027全球与中国实时操作系统市场现状及未来发展趋势