#include
#include
#include
#include
//全局变量
int add_x,add_y; //飞机位置
int high,width; //游戏画面尺寸
int bullet_x,bullet_y; //子弹位置
int enemy_x,enemy_y; //敌军位置
int score;
void gotoxy(int x,int y) //光标移动到(x,y)位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
void HideCursor() // 用于隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void startup()
{
high = 20;
width = 30;
add_x = high/2;
add_y = width/2;
bullet_x = 0;
bullet_y = add_y+1;
enemy_x = 0;
enemy_y = add_y;
score = 0;
HideCursor() ;//隐藏光标
}
void show()
{
system("cls");//gotoxy(0,0); //清屏函数{:10_249:}
int i,j,k,l;
for( i = 0 ; i < high ; i ++ )
{
for( j = 0 ; j < width ; j ++ )
{
if((i==add_x)&&(j==add_y)) //输出飞机
{
printf("lYl");
printf("\n");
for( k = 0 ; k < j-1 ; k ++ )
printf(" ");
printf("/ l \");
printf("\n");
for( k = 0 ; k< j ; k ++ )
printf(" ");
printf("/ \");
printf("\n");
}
else if((i==bullet_x)&&(j==bullet_y))
printf("|"); //输出子弹
else if((i==enemy_x)&&(j==enemy_y))
printf("*");
else
printf(" "); //输出空格
}
printf("\n");
}
printf("得分: %d\n",score);
}
void updateWithoutInput()
{
if( add_x >= high )
add_x--;
if( add_y >= width )
add_y--;
if( add_x<1 )
add_x++;
if( add_y<1 )
add_y++;
if( bullet_x>-1 )
bullet_x -- ;
if( bullet_x == enemy_x&&bullet_y == enemy_y )
{
score ++; //得分+1
enemy_x = -1; //产生新的敌机
enemy_y = rand()%width;
bullet_x = -2; //子弹无效
}
if( enemy_x > high )
{
enemy_x = -1 ;
enemy_y = rand()%width ;
}
//敌机移动
static int speed=0;
if( speed < 20 )
speed++;
if( speed == 20 )
{
speed = 0;
enemy_x++;
}
}
void updateWithInput()
{
char input;
if( kbhit() ) //判断是否有输入
{
input = getch();
switch(input){
case 'w':add_x--;break;
case 'a':add_y--;break;
case 's':add_x++;break;
case 'd':add_y++;break;
case 'W':add_x--;break;
case 'A':add_y--;break;
case 'S':add_x++;break;
case 'D':add_y++;break;
case ' ':bullet_x = add_x-1,bullet_y = add_y+1;
}
}
}
int main()
{
startup(); //数据的初始化
while(1) //游戏循环执行
{
show(); //显示画面
updateWithoutInput(); //与输入无关的更新
updateWithInput(); //与输入有关的更新
}
return 0;
}