代码:
#include<iostream>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<cmath>
using namespace std;
//函数外全局变量定义
int position_x1, position_y1; //飞机位置
int position_x2, position_y2; //飞机位置
int position_x3, position_y3; //飞机位置
int bullet_x, bullet_y; //子弹位置
int high=35, width=55; //游戏画面尺寸
int enemy_x[40],enemy_y[40];
int enemy_x2[40],enemy_y2[40];
int enemy_xb[40],enemy_yb[40]; //敌机子弹位置
int score=1;
int a[100][100]={0};
int number; //敌机数量
int ew=1;
int bw=2; //子弹宽度
int k=0;
int j=1;
int je=1;
void startup() //数据初始化
{
position_x1 = high-3;
position_y1 = width/2;
position_x2 = high-2;
position_y2 = width/2-1;
position_x3 = high-1;
position_y3 = width/2;
a[position_x1][position_y1]=1; //1表示飞机
bullet_x = -1;
bullet_y = position_y1;
a[position_x2][position_y2]=5; //5表示飞机
a[position_x3][position_y3]=6; //6表示飞机
number=3; //初始飞机数量
for(int i=0;i<number;i++)
{ //if(i>=1)
/*for(int j=0;j<number;j++)
{
if(i!=j)
{
enemy_x[i]= 0;
enemy_y[i]=rand()%(width-3)+1;
a[enemy_x[i]][enemy_y[i]]=3; //3表示敌机
if(abs(enemy_x[i]-enemy_x[j])<2&&abs(enemy_y[i]-enemy_y[j])<3)
{
i--;
break;
}
}
else
{
enemy_x[i]= 0;
enemy_y[i]=rand()%(width-3)+1;
a[enemy_x[i]][enemy_y[i]]=3; //3表示敌机
}
}*/
//else
//{
enemy_x[i]= 0;
enemy_y[i]=rand()%(width/number-2)+(width/number-2)*i+3;
a[enemy_x[i]][enemy_y[i]]=3; //3表示敌机
enemy_xb[i]=enemy_x[i];
enemy_yb[i]=enemy_y[i]+1;
a[enemy_xb[i]][enemy_yb[i]]=7; //7表示敌机子弹
//}
enemy_x2[i]= -1;
enemy_y2[i]=enemy_y[i]-1;
a[enemy_x2[i]][enemy_y2[i]]=4; //4表示敌机
//j=j+width/number;
}
}
void gotoXY(int x, int y) //光标移动到(x,y)位置
{
COORD pos = { x,y };
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
SetConsoleCursorPosition(hOut, pos);//两参数分别是指定哪个窗体,具体位置
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = { 1,0 };//第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void show() //显示画面
{
HideCursor();
gotoXY(0,0); //光标移动到原点位置,以下重画清屏;
int i, j;
//system("cls"); //清屏
for (i = 0; i <= high; i++) {
for (j = 0; j <= width; j++) {
if(a[i][j]==6)
{
k=2;
cout<<"* *";
}
else if(a[i][j]==1)
{
k=2;
cout<<"/="<<'\\';
}
else if(a[i][j]==5)
{
k=4;
cout<<"<<*>>";
}
else if((i<high)&&(j==width))
cout<<"|"; //右边界
else if((i<high)&&(j==1))
cout<<"|"; //左边界
else if(i==high)
cout<<"-";
else if(a[i][j]==2)
cout<<"|"; //输出子弹
else if(a[i][j]==3)
cout<<"|";
else if(a[i][j]==4)
{
k=2;
cout<<'\\'<<"+/";
}
else if(a[i][j]==7)
cout<<".";
else if(a[i][j]==0)
{
if(!k)
cout<<" ";
else
k--;
}
}
cout << endl;
}
cout << "得分:" << score<<"\n";
cout<<"不要尝试使飞机飞出边界!";
}
void updateWithoutInput() //与用户输入无关的更新
{
if(score<1)
{
cout<<"失败!\n";
for(int i=0;i<200000000;i++){;}
system("pause");
exit(0);
} //得分<0游戏结束
for(int i=0;i<=high;i++)
{
for(int j=0;j<=width;j++)
{
if(a[i][j]==2){
for(int m=0;m<number;m++)
{
if((i<=enemy_x[m]+1)&&(i>=enemy_x[m]-1)&&(j==enemy_y[m])){
a[enemy_x[m]][enemy_y[m]]=0;
enemy_x[m]=0;
enemy_y[m]=rand()%(width/number-2)+(width/3-2)*m+3;
a[enemy_xb[m]][enemy_yb[m]]=0;
enemy_xb[m]=enemy_x[m]+1;
enemy_yb[m]=enemy_y[m];
a[enemy_x[m]][enemy_y[m]]=7;
a[enemy_x2[m]][enemy_y2[m]]=0;
enemy_x2[m]=enemy_x[m]-1;
enemy_y2[m]=enemy_y[m]-1;
a[enemy_x[m]][enemy_y[m]]=3; //击中敌机,重新生成敌机
a[enemy_x2[m]][enemy_y2[m]]=4;
score++;
//je=je+width/number;
}
}
a[i][j]=0;
if(i>0)
a[i-1][j]=2; //子弹上移
}
}
}
for(int i=0;i<number;i++)
{
if((position_y1<=enemy_y[i]+1)&&(position_y1>=enemy_y[i]-1)&&(position_x1-1==enemy_x[i]))
{
cout<<"失败!\n";
for(int i=0;i<200000000;i++){;}
system("pause");
exit(0);
}
if((enemy_yb[i]<=position_y1+3)&&(enemy_yb[i]>=position_y1-2)&&(position_x1-1==enemy_xb[i]))
{
a[enemy_xb[i]][enemy_yb[i]]=0;
score-=1;
}
if(enemy_x[i]>high)
{
a[enemy_x[i]][enemy_y[i]]=0;
enemy_x[i]=0;
enemy_y[i]=rand()%(width/number-2)+(width/number-2)*i+3;
a[enemy_x[i]][enemy_y[i]]=3;
a[enemy_xb[i]][enemy_yb[i]]=0;
enemy_xb[i]=enemy_x[i]+1;
enemy_yb[i]=enemy_y[i];
a[enemy_xb[i]][enemy_yb[i]]=7;
a[enemy_x2[i]][enemy_y2[i]]=0;
enemy_x2[i]=enemy_x[i]-1;
enemy_y2[i]=enemy_y[i]-1;
a[enemy_x2[i]][enemy_y2[i]]=4;
//je=je+width/number;
}
static int speed=0;
static int speedb=0;
if(speed<4)
speed++;
if(speed==4){
a[enemy_x[i]][enemy_y[i]]=0;
enemy_x[i]++;
a[enemy_x[i]][enemy_y[i]]=3;
a[enemy_x2[i]][enemy_y2[i]]=0;
enemy_x2[i]++;
a[enemy_x2[i]][enemy_y2[i]]=4;
speed = 0;
}
if(speedb<2)
speedb++;
if(speedb==2){
a[enemy_xb[i]][enemy_yb[i]]=0;
enemy_xb[i]++;
a[enemy_xb[i]][enemy_yb[i]]=7;
speedb = 0;
}
}
}
void updateWithInput() //与用户输入有关的更新
{
char input;
if (_kbhit()) //当按键时被执行
{
input = _getch();
if (input == 'a')//&&(position_y>2)&&(position_y<=width-1))
{
a[position_x1][position_y1]=0;
a[position_x2][position_y2]=0;
a[position_x3][position_y3]=0;
position_y1--;
position_y2--;
position_y3--;
a[position_x1][position_y1]=1;
a[position_x2][position_y2]=5;
a[position_x3][position_y3]=6;
}
else if (input == 'd')//&&(position_y>=0)&&(position_y<width-1))
{
a[position_x1][position_y1]=0;
a[position_x2][position_y2]=0;
a[position_x3][position_y3]=0;
position_y1++;
position_y2++;
position_y3++;
a[position_x1][position_y1]=1;
a[position_x2][position_y2]=5;
a[position_x3][position_y3]=6;
}
else if (input == 'w')//&&(position_x>1)&&(position_x<=high))
{
a[position_x1][position_y1]=0;
a[position_x2][position_y2]=0;
a[position_x3][position_y3]=0;
position_x1--;
position_x2--;
position_x3--;
a[position_x1][position_y1]=1;
a[position_x2][position_y2]=5;
a[position_x3][position_y3]=6;
}
else if (input == 's')//&&(position_x>=0)&&(position_x<high-2))
{
a[position_x1][position_y1]=0;
a[position_x2][position_y2]=0;
a[position_x3][position_y3]=0;
position_x1++;
position_x2++;
position_x3++;
a[position_x1][position_y1]=1;
a[position_x2][position_y2]=5;
a[position_x3][position_y3]=6;
}
else if (input == ' ')
{
int left,right;
left=position_y1-bw+1;
right=position_y1+bw+1;
if(left<0) left=0;
if(right>=width) right=width-1;
for(int q=left;q<=right;q++)
a[position_x1-1][q]=2;
}
/*enemy_xb=enemy_x+2;
enemy_yb=enemy_y;*/
}
//je=je+width/number;
}
int main()
{
startup(); //数据初始化
while (1) //游戏循环进行
{
show(); //显示画面
updateWithoutInput(); //与用户输入无关的更新
updateWithInput(); //与用户输入有关的更新
}
return 0;
}