飛機大戰(zhàn)C++源代碼
acan___:
#pragma once
#include
#include//定義控制臺應(yīng)用程序的入口點
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;
}
//定義敵人結(jié)構(gòu) 其中最后面Frame代表結(jié)構(gòu)體類型 若不加typedef代表定義的結(jié)構(gòu)體變量
typedef struct Frame
{
COORD position[2];
// COORD 是Windows API中定義的一種結(jié)構(gòu),表示一個字符在控制臺屏幕上的坐標(biāo)。
// 其定義為:
// typedef struct _COORD {
// SHORT X;
// SHORT Y;
// } COORD;
int flag;
}Frame;
class Game
{
public:
COORD position[10];
COORD bullet[10];//子彈坐標(biāo)
Frame enemy[8];//敵人數(shù)量
int score;
int rank;//級別,難度
int rankf;//等級標(biāo)志
string title;
int flag_rank;//等級標(biāo)志
//構(gòu)造函數(shù)
Game();
//初始化所有 //設(shè)定位置
void initPlane();
void initBullet();
void initEnemy();
//填充所有 --畫出形狀和消失的形狀
void drawPlane();
void drawPlaneToNull();
void drawBullet();
void drawBulletToNull();
void drawEnemy();
void drawEnemyToNull();
//執(zhí)行某一個作
void Playing();//游戲主循環(huán)
void planeMove(char x);//飛機移動
void judgePlane();//判斷飛機是否與障礙物重疊
void GameOver();//游戲失敗
void Pause();// 該成員函數(shù)用來使得游戲暫停
void Shoot();//發(fā)射子彈
void bulletMove();//子彈移動
void drawThisBulletToNull(COORD c);//畫出失效子彈
void judgeEnemy();//判斷子彈是否擊中障礙物
void drawThisEnemyToNull(Frame f); //擊敗的障礙物清空
void enemyMove();//障礙物移動
void printScore();//輸出分?jǐn)?shù)
};
//主菜單
int drawMenu();
//隱藏光標(biāo)
void HideCursor();
void SetPos(int i, int j);//設(shè)置光標(biāo)
COORD random(COORD a, COORD b);//產(chǎn)生隨機障礙物位置
void drawFrame(COORD a, COORD b, char row, char col);//畫出障礙物
//把第y行,[x1, x2) 之間的坐標(biāo)填充為 ch
void drawRow(int y, int x1, int x2, char ch);
//把第x列,[y1, y2] 之間的坐標(biāo)填充為 ch
void drawCol(int x, int y1, int y2, char ch);
// 繪制游戲界面
void drawPlaying();
void drawFrame(Frame frame, char row, char col);//畫墜毀后的戰(zhàn)機
// 該函數(shù)用來判斷戰(zhàn)機的某一部分是否與障礙物有接觸
bool judgeCoordInFrame(Frame frame, COORD spot);
void drawRow(COORD a, COORD b, char ch);
#include
#include
#include
#include
#include
using namespace std;
Game::Game()
{
// 調(diào)用類成員函數(shù)來進(jìn)行初始化
initPlane();
initBullet();
initEnemy();
// 初始化四個int型數(shù)據(jù)成員,采用賦值的方式進(jìn)行初始化
// string類型的數(shù)據(jù)成員title沒有進(jìn)行初始化,因為:
// string本身就是一個標(biāo)準(zhǔn)庫類類型,它的類定義中設(shè)置了默認(rèn)構(gòu)造函數(shù),
// 這些默認(rèn)構(gòu)造函數(shù)會將對象初始化為合理的默認(rèn)狀態(tài),
// string的默認(rèn)構(gòu)造函數(shù)會產(chǎn)生空字符串,相當(dāng)于"" 。
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 |