敌人游戏

# include & ltiostream & gt

# include & ltwindows.h & gt

# include & ltconio.h & gt

# include & lttime.h & gt

# include & lt字符串& gt

使用命名空间std

/* = = = = = = = = = = = = = = = =所有结构===============*/

typedef结构框架

{

坐标位置[2];

int标志;

}框架;

/* = = = = = = = = = = = = = = = =所有函数===============*/

void SetPos(COORD a)//设置光标

{

HANDLE out = GetStdHandle(STD _ OUTPUT _ HANDLE);

SetConsoleCursorPosition(out,a);

}

void SetPos(int i,int j)//设置光标

{

COORD pos={i,j };

设定值(位置);

}

void HideCursor()

{

控制台_光标_信息光标_信息= {1,0 };

SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE),& ampcursor _ info);

}

//将Y线之间的坐标,[x1,x2]填充为ch。

void drawRow(int y,int x1,int x2,char ch)

{

SetPos(x1,y);

for(int I = 0;我& lt=(x2-x 1);i++)

cout & lt& ltch;

}

//在A和B的纵坐标相同的前提下,将坐标[a,b]之间的空间填充为ch。

void drawRow(坐标a,坐标b,字符通道)

{

如果(a.Y == b.Y)

drawRow(a.Y,a.X,b.X,ch);

其他

{

SetPos(0,25);

cout & lt& lt”错误代码01:无法填充行,因为两个坐标的垂直坐标(x)不相等”;

系统(“暂停”);

}

}

//将X列之间的坐标,[y1,y2]填充为ch。

void drawCol(int x,int y1,int y2,char ch)

{

int y = y 1;

while(y!=y2+1)

{

SetPos(x,y);

cout & lt& ltch;

y++;

}

}

//在A和B的横坐标相同的前提下,将坐标[a,b]之间的空间填充为ch。

void drawCol(坐标a,坐标b,字符通道)

{

如果(a.X == b.X)

drawCol(a.X,a.Y,b.Y,ch);

其他

{

SetPos(0,25);

cout & lt& lt”错误代码02:无法填充列,因为两个坐标的横坐标(y)不相等”;

系统(“暂停”);

}

}

//左上角坐标,右下角坐标,行填充,列填充

void drawFrame(坐标a,坐标b,字符行,字符列)

{

drawRow(a.Y,a.X+1,b.X-1,row);

drawRow(b.Y,a.X+1,b.X-1,row);

drawCol(a.X,a.Y+1,b.Y-1,col);

drawCol(b.X,a.Y+1,b.Y-1,col);

}

void drawFrame(int x1,int y1,int x2,int y2,char row,char col)

{

COORD a={x1,y 1 };

坐标b={x2,y2 };

画框(a,b,行,列);

}

void drawFrame(框架框架,字符行,字符列)

{

COORD a = frame . position[0];

COORD b = frame . position[1];

画框(a,b,行,列);

}

void drawPlaying()

{

drawFrame(0,0,48,24,' = ',' | ');//绘制地图框;

drawFrame(49,0,79,4,'-',' | ');//绘制输出帧

drawFrame(49,4,79,9,'-',' | ');//绘制乐谱框架

drawFrame(49,9,79,20,'-',' | ');//绘制操作框架

drawFrame(49,20,79,24,'-',' | ');//绘制其他消息框架

SetPos(52,6);

cout & lt& lt"分数:";

SetPos(52,7);

cout & lt& lt”标题:“;

SetPos(52,10);

cout & lt& lt”操作模式:“;

SetPos(5212);

cout & lt& lt" A、S、D和W控制战斗机的移动.";

SetPos(5214);

cout & lt& lt"暂停游戏.";

SetPos(5216);

cout & lt& lt“e退出游戏。”;

SetPos(5218);

cout & lt& lt“k发射子弹。”;

}

//生成一个[a,b]之间的随机整数

int random(int a,int b)

{

int c =(rand()%(a-b))+a;

返回c;

}

//在两个坐标包含的矩形框中随机生成一个坐标。

坐标随机(坐标a,坐标b)

{

int x=random(a.X,b . X);

int y=random(a.Y,b . Y);

COORD c={x,y };

返回c;

}

bool judgeCoordInFrame(框架框架,坐标点)

{

如果(现货。X & gt=frame.position[0]。x)

如果(现货。X & lt=frame.position[1]。x)

如果(现货。Y & gt=frame.position[0]。y)

如果(现货。Y & lt=frame.position[0]。y)

返回true

返回false

}

无效打印坐标(坐标a)

{

cout & lt& lt"(" & lt& lta . X & lt& lt“,”& lt& lta . Y & lt& lt" )";

}

void printFrameCoord(帧a)

{

print coord(a . position[0]);

cout & lt& lt" - ";

print coord(a . position[1]);

}

int drawMenu()

{

SetPos(30,1);

cout & lt& lt”P l a n e W a r”;

drawRow(3,0,79,'-');

drawRow(5,0,79,'-');

SetPos(28,4);

cout & lt& lt“选定W和S,确定K”;

SetPos(15,11);

cout & lt& lt"1.单纯的敌人”;

SetPos(15,13);

cout & lt& lt"2.冷敌”;

drawRow(20,0,79,'-');

drawRow(22,0,79,'-');

SetPos(47,11);

cout & lt& lt“单纯的敌人”;

SetPos(51,13);

cout & lt& lt"简单的敌人移动速度较慢.";

SetPos(24,21);

cout & lt& lt" ☆○☆○☆○☆○☆○☆ ";

int j = 11;

SetPos(12,j);

cout & lt& lt" & gt>;

//drawFrame(45,9,79,17,' = ',' | ');

while(1)

{ if(_ kb hit())

{

char x = _ getch();

开关(x)

{

案例“w”:

{

如果(j == 13)

{

SetPos(12,j);

cout & lt& lt" ";

j = 11;

SetPos(12,j);

cout & lt& lt" & gt>;

SetPos(51,13);

cout & lt& lt" ";

SetPos(47,11);

cout & lt& lt“单纯的敌人”;

SetPos(51,13);

cout & lt& lt"简单的敌人移动速度较慢.";

}

打破;

}

案例:

{

if( j == 11)

{

SetPos(12,j);

cout & lt& lt" ";

j = 13;

SetPos(12,j);

cout & lt& lt" & gt>;

SetPos(51,13);

cout & lt& lt" ";

SetPos(47,11);

cout & lt& lt“冷敌”;

SetPos(51,13);

cout & lt& lt“无情的敌人行动更快。”;

}

打破;

}

案例“k”:

{

if (j == 8)返回1;

否则返回2;

}

}

}

}

}

/*

DWORD WINAPI music fun(LPVOID lpParamte)

{

//德沃德·OBJ;

sndPlaySound(TEXT("bgm.wav "),SND _ FILENAME | SND _ ASYNC);

返回0;

}

*/

/* = = = = = = = = = = = = = = = = = = =游戏类==================*/

班级游戏

{

公共:

坐标位置[10];

COORD bullet[10];

陷害敌人[8];

int分数;

int rank

int rankf

字符串标题;

int flag _ rank

game();

//全部初始化

void init plane();

void init bullet();

void init enemy();

//初始化其中一个。

//void initthisbulle(COORD);

//void initthismine(Frame);

void plane move(char);

void bullet move();

void enemy move();

//全部填充

void draw plane();

void drawPlaneToNull();

void draw bullet();

void drawBulletToNull();

void draw enemy();

void drawnenemytonull();

//填充其中一个

void drawThisBulletToNull(COORD);

void drawThisEnemyToNull(Frame);

void Pause();

void播放();

void judge plane();

void judgeEnemy();

void shot();

void game over();

void print score();

};

游戏::游戏()

{

init plane();

init bullet();

init enemy();

得分= 0;

排名= 25;

rankf = 0;

flag _ rank = 0;

}

void Game::initPlane()

{

坐标中心={39,22 };

位置[0]。x =位置[5]。x =位置[7]。x =位置[9]。x =中心。x;

位置[1]。x =中心。x-2;

位置[2]。x =位置[6]。x =中心。x-1;

位置[3]。x =位置[8]。x =中心。x+1;

位置[4]。x =中心。x+2;

for(int I = 0;我& lt=4;i++)

位置[i]。y =中心。y;

for(int I = 6;我& lt=8;i++)

位置[i]。y =中心。y+1;

位置[5]。y =中心。y-1;

位置[9]。y =中心。y-2;

}

void Game::drawPlane()

{

for(int I = 0;我& lt9;i++)

{

SetPos(位置[I]);

如果(我!=5)

cout & lt& lt“o”;

else if(i==5)

cout & lt& lt"|";

}

}

void Game::drawPlaneToNull()

{

for(int I = 0;我& lt9;i++)

{

SetPos(位置[I]);

cout & lt& lt" ";

}

}

void Game::initBullet()

{

for(int I = 0;我& lt10;i++)

项目符号[i]。Y = 30

}

void Game::drawBullet()

{

for(int I = 0;我& lt10;i++)

{

如果(项目符号[i]。y!= 30)

{

SetPos(项目符号[I]);

cout & lt& lt"^";

}

}

}

void Game::drawBulletToNull()

{

for(int I = 0;我& lt10;i++)

如果(项目符号[i]。y!= 30 )

{

COORD pos={bullet[i]。x,项目符号[i]。y+1 };

设定值(位置);

cout & lt& lt" ";

}

}

void Game::initEnemy()

{

COORD a={1,1 };

坐标b={45,15 };

for(int I = 0;我& lt8;i++)

{

敌人[我]。position[0] = random(a,b);

敌人[我]。位置[1]。X =敌人[i]。位置[0]。x+3;

敌人[我]。位置[1]。Y =敌人[i]。位置[0]。y+2;

}

}

void Game::drawEnemy()

{

for(int I = 0;我& lt8;i++)

画框(敌人[我]。位置[0],敌人[i]。position[1],'-',' | ');

}

void Game::drawnenemytonull()

{

for(int I = 0;我& lt8;i++)

{

画框(敌人[我]。位置[0],敌人[i]。position[1],' ',' ');

}

}

void游戏::暂停()

{

SetPos(61,2);

cout & lt& lt" ";

SetPos(61,2);

cout & lt& lt"正在挂起...";

char c = _ getch();

而(c!='p ')

c = _ getch();

SetPos(61,2);

cout & lt& lt" ";

}

虚空游戏::位面移动(char x)

{

if(x == 'a ')

if(位置[1]。x!= 1)

for(int I = 0;我& lt=9;i++)

位置[i]。x-= 2;

if(x == 's ')

if(位置[7]。y!= 23)

for(int I = 0;我& lt=9;i++)

位置[i]。y+= 1;

if(x == 'd ')

if(位置[4]。x!= 47)

for(int I = 0;我& lt=9;i++)

位置[i]。x+= 2;

if(x == 'w ')

if(位置[5]。y!= 3)

for(int I = 0;我& lt=9;i++)

位置[i]。y-= 1;

}

void Game::bulletMove()

{

for(int I = 0;我& lt10;i++)

{

如果(项目符号[i]。y!= 30)

{

项目符号[i]。y-= 1;

如果(项目符号[i]。Y == 1)

{

COORD pos={bullet[i]。x,项目符号[i]。y+1 };

drawThisBulletToNull(pos);

项目符号[i]。Y = 30

}

}

}

}

void Game::enemyMove()

{

for(int I = 0;我& lt8;i++)

{

for(int j = 0;j & lt2;j++)

敌人[我]。位置[j]。y++;

if(24 ==敌人[i]。位置[1]。y)

{

COORD a={1,1 };

COORD b={45,3 };

敌人[我]。position[0] = random(a,b);

敌人[我]。位置[1]。X =敌人[i]。位置[0]。x+3;

敌人[我]。位置[1]。Y =敌人[i]。位置[0]。y+2;

}

}

}

void Game::judgePlane()

{

for(int I = 0;我& lt8;i++)

for(int j = 0;j & lt9;j++)

if(judgeCoordInFrame(敌人[i],位置[j]))

{

SetPos(62,1);

cout & lt& lt“崩溃”;

drawFrame(敌人[i],'+','+');

睡眠(1000);

game over();

打破;

}

}

void Game::drawThisBulletToNull(坐标c)

{

SetPos(c);

cout & lt& lt" ";

}

void Game::drawThisEnemyToNull(f帧)

{

drawFrame(f,' ',' ');

}

void Game::judgeEnemy()

{

for(int I = 0;我& lt8;i++)

for(int j = 0;j & lt10;j++)

if( judgeCoordInFrame(敌人[i],子弹[j]))

{

得分+= 5;

drawThisEnemyToNull(敌人[I]);

COORD a={1,1 };

COORD b={45,3 };

敌人[我]。position[0] = random(a,b);

敌人[我]。位置[1]。X =敌人[i]。位置[0]。x+3;

敌人[我]。位置[1]。Y =敌人[i]。位置[0]。y+2;

drawThisBulletToNull(bullet[j]);

项目符号[j]。Y = 30

}

}

虚空游戏::射击()

{

for(int I = 0;我& lt10;i++)

如果(项目符号[i]。Y == 30)

{

项目符号[i]。X =位置[5]。x;

项目符号[i]。Y =位置[5]。y-1;

打破;

}

}

void Game::printScore()

{

if(score = = 120 & amp;& ampflag_rank == 0)

{

秩-= 3;

flag _ rank = 1;

}

else if(score = = 360 & amp;& ampflag_rank == 1)

{

秩-= 5;

flag _ rank = 2;

}

else if(score = = 480 & amp;& ampflag_rank == 2)

{

秩-= 5;

flag _ rank = 3;

}

int x = rank/5;

SetPos(60,6);

cout & lt& lt分数;

如果(排名!=rankf)

{

SetPos(60,7);

如果(x == 5)

Title= "初级飞行员";

else if( x == 4)

Title= "中级飞行员";

else if( x == 3)

Title= "高级飞行员";

else if( x == 2)

Title= "王牌飞行员";

cout & lt& lt标题;

}

rankf =秩;

}

void Game::正在玩()

{

//处理MFUN

//MFUN= CreateThread(NULL,0,MusicFun,NULL,0,NULL);

draw enemy();

draw plane();

int flag _ bullet = 0;

int flag _ enemy = 0;

while(1)

{

睡眠(8);

if(_kbhit())

{

char x = _ getch();

if(' a ' = = x | | ' s ' = = x | | ' d ' = = x | | ' w ' = = x)

{

drawPlaneToNull();

plane move(x);

draw plane();

judge plane();

}

else if ('p' == x)

pause();

else if( 'k' == x)

shoot();

else if( 'e' == x)

{

//close handle(MFUN);

game over();

打破;

}

}

/*处理子弹*/

if( 0 == flag_bullet)

{

bullet move();

drawBulletToNull();

draw bullet();

judgeEnemy();

}

flag _ bullet++;

if( 5 == flag_bullet)

flag _ bullet = 0;

/*对付敌人*/

if( 0 == flag_enemy)

{

drawnenemytonull();

enemy move();

draw enemy();

judge plane();

}

flag _ enemy++;

if(flag _ enemy & gt;=排名)

flag _ enemy = 0;

/*输出分数*/

print score();

}

}

void Game::GameOver()

{

系统(“cls”);

COORD p1={28,9 };

坐标p2 = { 5315 };

drawFrame(p1,p2,' = ',' | ');

SetPos(36,12);

string str= "游戏结束!";

for(int I = 0;我& ltstr . size();i++)

{

睡眠(80);

cout & lt& ltstr[I];

}

睡眠(1000);

系统(“cls”);

drawFrame(p1,p2,' = ',' | ');

SetPos(31,11);

cout & lt& lt"击落敌机:"

SetPos(31,12);

cout & lt& lt"分数:"

SetPos(31,13);

cout & lt& lt"获取标题:"

SetPos(30,16);

睡眠(1000);

cout & lt& lt“继续?是(y)|否(n)";

作为:

char x = _ getch();

if (x == 'n ')

退出(0);

else if (x == 'y ')

{

系统(“cls”);

游戏游戏;

int a = draw menu();

如果(a == 2)

game.rank = 20

系统(“cls”);

draw playing();

游戏。玩();

}

否则转到as;

}

/* = = = = = = = = = = = = = = = = = = =主要功能==================*/

int main()

{

//游戏准备

srand((int)time(0));//随机种子

hide cursor();//隐藏光标

游戏游戏;

int a = draw menu();

如果(a == 2)

game.rank = 20

系统(“cls”);

draw playing();

游戏。玩();

}