飞机大战C++源代码
acan___:
#pragma once
#include
#include//定义控制台应用程序的入口点
using namespace std;
//界面颜色
void setcolor(char str[])
{
if(str=="lightblue")
SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|1);
if(str=="lightred")
SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(str=="lightyellow")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
if(str=="lightpink" )
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(str=="blue")
SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
if(str=="red")
SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
if(str=="yellow")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE);
if(str=="pink")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE);
if(str=="lightgray")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN |8);
if(str=="gray")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 8);
else return;
}
//定义敌人结构 其中最后面Frame代表结构体类型 若不加typedef代表定义的结构体变量
typedef struct Frame
{
COORD position[2];
// COORD 是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。
// 其定义为:
// typedef struct _COORD {
// SHORT X;
// SHORT Y;
// } COORD;
int flag;
}Frame;
class Game
{
public:
COORD position[10];
COORD bullet[10];//子弹坐标
Frame enemy[8];//敌人数量
int score;
int rank;//级别,难度
int rankf;//等级标志
string title;
int flag_rank;//等级标志
//构造函数
Game();
//初始化所有 //设定位置
void initPlane();
void initBullet();
void initEnemy();
//填充所有 --画出形状和消失的形状
void drawPlane();
void drawPlaneToNull();
void drawBullet();
void drawBulletToNull();
void drawEnemy();
void drawEnemyToNull();
//执行某一个操作
void Playing();//游戏主循环
void planeMove(char x);//飞机移动
void judgePlane();//判断飞机是否与障碍物重叠
void GameOver();//游戏失败
void Pause();// 该成员函数用来使得游戏暂停
void Shoot();//发射子弹
void bulletMove();//子弹移动
void drawThisBulletToNull(COORD c);//画出失效子弹
void judgeEnemy();//判断子弹是否击中障碍物
void drawThisEnemyToNull(Frame f); //击败的障碍物清空
void enemyMove();//障碍物移动
void printScore();//输出分数
};
//主菜单
int drawMenu();
//隐藏光标
void HideCursor();
void SetPos(int i, int j);//设置光标
COORD random(COORD a, COORD b);//产生随机障碍物位置
void drawFrame(COORD a, COORD b, char row, char col);//画出障碍物
//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch);
//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch);
// 绘制游戏界面
void drawPlaying();
void drawFrame(Frame frame, char row, char col);//画坠毁后的战机
// 该函数用来判断战机的某一部分是否与障碍物有接触
bool judgeCoordInFrame(Frame frame, COORD spot);
void drawRow(COORD a, COORD b, char ch);
#include
#include
#include
#include
#include
using namespace std;
Game::Game()
{
// 调用类成员函数来进行初始化
initPlane();
initBullet();
initEnemy();
// 初始化四个int型数据成员,采用赋值的方式进行初始化
// string类型的数据成员title没有进行初始化,因为:
// string本身就是一个标准库类类型,它的类定义中设置了默认构造函数,
// 这些默认构造函数会将对象初始化为合理的默认状态,
// string的默认构造函数会产生空字符串,相当于"" 。
this->score = 0;
rank = 25;
rankf = 25;
flag_rank = 0;
}
void Game::initPlane()
{
COORD centren;
centren.X = 39;
centren.Y = 22;
position[0].X = position[5].X = position[7].X = position[9].X = centren.X;
position[1].X = centren.X - 2;
position[2].X = position[6].X = centren.X - 1;
position[3].X = position[8].X = centren.X + 1;
position[4].X = centren.X + 2;
for (int i = 0; i |