爆肝星际战争c++代码

#include<iostream> 
#include<windows.h> 
#include<conio.h> 
#include<time.h> 
#include<string> 
using namespace std; 
/*=============== all the structures ===============*/ 
typedef struct Frame 

COORD position[2]; 
int flag; 
}Frame; 
/*=============== all the functions ===============*/ 
void SetPos(COORD a)// set cursor 

HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE); 
SetConsoleCursorPosition(out, a); 

void SetPos(int i, int j)// set cursor 

COORD pos={i, j}; 
SetPos(pos); 

void HideCursor() 

CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); 

//把第y行,[x1, x2) 之间的坐标填充为 ch 
void drawRow(int y, int x1, int x2, char ch) 

SetPos(x1,y); 
for(int i = 0; i <= (x2-x1); i++) 
cout<<ch; 

//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch 
void drawRow(COORD a, COORD b, char ch) 

if(a.Y == b.Y) 
drawRow(a.Y, a.X, b.X, ch); 
else 

SetPos(0, 25); 
cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等"; 
system("pause"); 


//把第x列,[y1, y2] 之间的坐标填充为 ch 
void drawCol(int x, int y1, int y2, char ch) 

int y=y1; 
while(y!=y2+1) 

SetPos(x, y); 
cout<<ch; 
y++; 


//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch 
void drawCol(COORD a, COORD b, char ch) 

if(a.X == b.X) 
drawCol(a.X, a.Y, b.Y, ch); 
else 

SetPos(0, 25); 
cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等"; 
system("pause"); 


//左上角坐标、右下角坐标、用row填充行、用col填充列 
void drawFrame(COORD a, COORD b, char row, char col) 

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, y1}; 
COORD b={x2, y2}; 
drawFrame(a, b, row, col); 

void drawFrame(Frame frame, char row, char col) 

COORD a = frame.position[0]; 
COORD b = frame.position[1]; 
drawFrame(a, b, row, col); 

void drawPlaying() 

drawFrame(0, 0, 48, 24, '=', '|');// draw map frame; 
drawFrame(49, 0, 79, 4, '-', '|');// draw output frame 
drawFrame(49, 4, 79, 9, '-', '|');// draw score frame 
drawFrame(49, 9, 79, 20, '-', '|');// draw operate frame 
drawFrame(49, 20, 79, 24, '-', '|');// draw other message frame 
SetPos(52, 6); 
cout<<"得分:"; 
SetPos(52, 7); 
cout<<"称号:"; 
SetPos(52,10); 
cout<<"操作方式:"; 
SetPos(52,12); 
cout<<"a,s,d,w,k控制战机移动和发射子弹"; 
SetPos(52,14); 
cout<<" p 暂停游戏。"; 
SetPos(52,16); 
cout<<" e 退出游戏。"; 

//在[a, b)之间产生一个随机整数 
int random(int a, int b) 

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

//在两个坐标包括的矩形框内随机产生一个坐标 
COORD random(COORD a, COORD b) 

int x=random(a.X, b.X); 
int y=random(a.Y, b.Y); 
COORD c={x, y}; 
return c; 

bool judgeCoordInFrame(Frame frame, COORD spot) 

if(spot.X>=frame.position[0].X) 
if(spot.X<=frame.position[1].X) 
if(spot.Y>=frame.position[0].Y) 
if(spot.Y<=frame.position[0].Y) 
return true; 
return false; 

void printCoord(COORD a) 

cout <<"( "<<a.X<<" , "<<a.Y<<" )"; 

void printFrameCoord(Frame a) 

printCoord(a.position[0]); 
cout <<" - "; 
printCoord(a.position[1]); 

int drawMenu() 

SetPos(30, 1); 
cout<<"P l a n e W a r"; 
drawRow(3, 0, 79, '-'); 
drawRow(5, 0, 79, '-'); 
SetPos(28, 4); 
cout<<"w 和 s 选择, k 确定"; 
SetPos(15, 11); 
cout<<"1. 简单的敌人"; 
SetPos(15, 13); 
cout<<"2. 冷酷的敌人"; 
drawRow(20, 0, 79, '-'); 
drawRow(22, 0, 79, '-'); 
SetPos(47, 11); 
cout<<"简单的敌人:"; 
SetPos(51, 13); 
cout<<"简单敌人有着较慢的移动速度。"; 
SetPos(24, 21); 
int j=11; 
SetPos(12, j); 
cout<<"→"; 
//drawFrame(45, 9, 79, 17, '=', '|'); 
while(1) 
{ if( _kbhit() ) 

char x=_getch(); 
switch (x) 

case 'w' : 

if( j == 13) 
{
SetPos(12, j); 
cout<<" "; 
j = 11; 
SetPos(12, j); 
cout<<"→"; 
SetPos(51, 13); 
cout<<"            "; 
SetPos(47, 11); 
cout<<"简单的敌人:"; 
SetPos(51, 13); 
cout<<"简单敌人有着较慢的移动速度。"; 

break; 

case 's' : 

if( j == 11 ) 

SetPos(12, j); 
cout<<" "; 
j = 13; 
SetPos(12, j); 
cout<<"→"; 
SetPos(51, 13); 
cout<<"              "; 
SetPos(47, 11); 
cout<<"冷酷的敌人:"; 
SetPos(51, 13); 
cout<<"冷酷的敌人移动速度较快。"; 

break; 

case 'k' : 

if (j == 8) return 1; 
else return 2; 





/*

DWORD WINAPI MusicFun(LPVOID lpParamte) 

//DWORD OBJ; 
sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC); 
return 0; 

*/

/*================== the Game Class ==================*/

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 initThisBullet( COORD ); 
//void initThisEnemy( Frame ); 
void planeMove(char); 
void bulletMove(); 
void enemyMove(); 
//填充所有 
void drawPlane(); 
void drawPlaneToNull(); 
void drawBullet(); 
void drawBulletToNull(); 
void drawEnemy(); 
void drawEnemyToNull(); 
//填充其中一个 
void drawThisBulletToNull( COORD ); 
void drawThisEnemyToNull( Frame ); 
void Pause(); 
void Playing(); 
void judgePlane(); 
void judgeEnemy(); 
void Shoot(); 
void GameOver(); 
void printScore(); 
}; 
Game::Game() 

initPlane(); 
initBullet(); 
initEnemy(); 
score = 0; 
rank = 25; 
rankf = 0; 
flag_rank = 0; 

void Game::initPlane() 

COORD centren={39, 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<=4; i++) 
position[i].Y=centren.Y; 
for(int i=6; i<=8; i++) 
position[i].Y=centren.Y+1; 
position[5].Y=centren.Y-1; 
position[9].Y=centren.Y-2; 

void Game::drawPlane() 

for(int i=0; i<9; i++) 

SetPos(position[i]); 
if(i!=5) 
cout<<"O"; 
else if(i==5) 
cout<<"I"; 


void Game::drawPlaneToNull() 

for(int i=0; i<9; i++) 

SetPos(position[i]); 
cout<<" "; 


void Game::initBullet() 

for(int i=0; i<10; i++) 
bullet[i].Y = 30; 

void Game::drawBullet() 

for(int i=0; i<10; i++) 

if( bullet[i].Y != 30) 

SetPos(bullet[i]); 
cout<<"^"; 



void Game::drawBulletToNull() 

for(int i=0; i<10; i++) 
if( bullet[i].Y != 30 ) 

COORD pos={bullet[i].X, bullet[i].Y+1}; 
SetPos(pos); 
cout<<" "; 


void Game::initEnemy() 

COORD a={1, 1}; 
COORD b={45, 15}; 
for(int i=0; i<8; i++) 

enemy[i].position[0] = random(a, b); 
enemy[i].position[1].X = enemy[i].position[0].X + 3; 
enemy[i].position[1].Y = enemy[i].position[0].Y + 2; 


void Game::drawEnemy() 

for(int i=0; i<8; i++) 
drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|'); 

void Game::drawEnemyToNull()

for(int i=0; i<8; i++) 

drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' '); 


void Game::Pause() 

SetPos(61,2); 
cout<<" "; 
SetPos(61,2); 
cout<<"暂停中..."; 
char c=_getch(); 
while(c!='p') 
c=_getch(); 
SetPos(61,2); 
cout<<" "; 

void Game::planeMove(char x) 

if(x == 'a') 
if(position[1].X != 1) 
for(int i=0; i<=9; i++) 
position[i].X -= 2; 
if(x == 's') 
if(position[7].Y != 23) 
for(int i=0; i<=9; i++) 
position[i].Y += 1; 
if(x == 'd') 
if(position[4].X != 47) 
for(int i=0; i<=9; i++) 
position[i].X += 2; 
if(x == 'w') 
if(position[5].Y != 3) 
for(int i=0; i<=9; i++) 
position[i].Y -= 1; 

void Game::bulletMove() 

for(int i=0; i<10; i++) 

if( bullet[i].Y != 30) 

bullet[i].Y -= 1; 
if( bullet[i].Y == 1 ) 

COORD pos={bullet[i].X, bullet[i].Y+1}; 
drawThisBulletToNull( pos ); 
bullet[i].Y=30; 




void Game::enemyMove() 

for(int i=0; i<8; i++) 

for(int j=0; j<2; j++) 
enemy[i].position[j].Y++; 
if(24 == enemy[i].position[1].Y) 

COORD a={1, 1}; 
COORD b={45, 3}; 
enemy[i].position[0] = random(a, b); 
enemy[i].position[1].X = enemy[i].position[0].X + 3; 
enemy[i].position[1].Y = enemy[i].position[0].Y + 2; 



void Game::judgePlane() 

for(int i = 0; i < 8; i++) 
for(int j=0; j<9; j++) 
if(judgeCoordInFrame(enemy[i], position[j])) 

SetPos(62, 1); 
cout<<"坠毁"; 
drawFrame(enemy[i], '*', '+'); 
Sleep(1000); 
GameOver(); 
break; 


void Game::drawThisBulletToNull( COORD c) 

SetPos(c); 
cout<<" "; 

void Game::drawThisEnemyToNull( Frame f ) 

drawFrame(f, ' ', ' '); 

void Game::judgeEnemy() 

for(int i = 0; i < 8; i++) 
for(int j = 0; j < 10; j++) 
if( judgeCoordInFrame(enemy[i], bullet[j]) ) 

score += 5; 
drawThisEnemyToNull( enemy[i] ); 
COORD a={1, 1}; 
COORD b={45, 3}; 
enemy[i].position[0] = random(a, b); 
enemy[i].position[1].X = enemy[i].position[0].X + 3; 
enemy[i].position[1].Y = enemy[i].position[0].Y + 2; 
drawThisBulletToNull( bullet[j] ); 
bullet[j].Y = 30; 


void Game::Shoot() 

for(int i=0; i<10; i++) 
if(bullet[i].Y == 30) 

bullet[i].X = position[5].X; 
bullet[i].Y = position[5].Y-1; 
break; 


void Game::printScore() 

if(score == 120 && flag_rank == 0) 

rank -= 3; 
flag_rank = 1; 

else if( score == 360 && flag_rank == 1) 

rank -= 5; 
flag_rank = 2; 

else if( score == 480 && flag_rank == 2) 

rank -= 5; 
flag_rank = 3; 

int x=rank/5; 
SetPos(60, 6); 
cout<<score; 
if( rank!=rankf ) 

SetPos(60, 7); 
if( x == 5) 
title="初级飞行员"; 
else if( x == 4) 
title="中级飞行员"; 
else if( x == 3) 
title="高级飞行员"; 
else if( x == 2 ) 
title="王牌飞行员"; 
cout<<title; 

rankf = rank; 

void Game::Playing() 

//HANDLE MFUN; 
//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); 
drawEnemy(); 
drawPlane(); 
int flag_bullet = 0; 
int flag_enemy = 0; 
while(1) 

Sleep(8); 
if(_kbhit()) 

char x = _getch(); 
if ('a' == x || 's' == x || 'd' == x || 'w' == x) 

drawPlaneToNull(); 
planeMove(x); 
drawPlane(); 
judgePlane(); 

else if ('p' == x) 
Pause(); 
else if( 'k' == x) 
Shoot();
else if( 'e' == x) 

//CloseHandle(MFUN); 
GameOver(); 
break; 


/* 处理子弹 */

if( 0 == flag_bullet ) 

bulletMove(); 
drawBulletToNull(); 
drawBullet(); 
judgeEnemy(); 

flag_bullet++; 
if( 5 == flag_bullet ) 
flag_bullet = 0; 
/* 处理敌人 */

if( 0 == flag_enemy ) 

drawEnemyToNull(); 
enemyMove(); 
drawEnemy(); 
judgePlane(); 

flag_enemy++; 
if( flag_enemy >= rank ) 
flag_enemy = 0; 
/* 输出得分 */

printScore(); 


void Game::GameOver() 

system("cls"); 
COORD p1={28,9}; 
COORD p2={53,15}; 
drawFrame(p1, p2, '=', '|'); 
SetPos(36,12); 
string str="Game Over! 哈哈哈"; 
for(int i=0; i<str.size(); i++) 

Sleep(80); 
cout<<str[i]; 

Sleep(1000); 
system("cls"); 
drawFrame(p1, p2, '=', '|'); 
SetPos(31, 11); 
cout<<"击落敌机:"<<score/5<<" 架"; 
SetPos(31, 12); 
cout<<"得  分:"<<score; 
SetPos(31, 13); 
cout<<"获得称号:"<<title; 
SetPos(30, 16); 
Sleep(1000); 
cout<<"继续? 是(y)| 否(n)"; 
as:

char x=_getch(); 
if (x == 'n') 
exit(0); 
else if (x == 'y') 

system("cls"); 
Game game; 
int a = drawMenu(); 
if(a == 2) 
game.rank = 20; 
system("cls"); 
drawPlaying(); 
game.Playing(); 

else goto as; 

/*================== the main function ==================*/ 
int main() 

//游戏准备 
srand((int)time(0)); //随机种子 
HideCursor(); //隐藏光标 
Game game; 
int a = drawMenu(); 
if(a == 2) 
game.rank = 20; 
system("cls"); 
drawPlaying(); 
game.Playing(); 
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值