敌人游戏
# 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();
游戏。玩();
}