#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
int position_x,position_y;
int bullet_x,bullet_y;
int enemy_x,enemy_y;
int high,width;
int score;
void startup();
void show();
void updateWithoutInput();
void updateWithInput();
void HideCursor();
void gotoxy(int x,int y);
int main()
{
startup();
while(1)
{
show();
updateWithoutInput();
updateWithInput();
}
return 0;
}
void startup() //数据初始化
{
high = 18;
width = 30;
position_x = high/2+6;
position_y = width/2;
bullet_x = -1;
bullet_y = position_y;
enemy_x = 0;
enemy_y = width/2;
score = 0;
HideCursor();
}
void gotoxy(int x,int 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};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void show()
{
gotoxy(0,0); //system("cls");
int i,j;
for (i=0;i<high;i++)
{
for (j=0;j<width;j++)
{
if ((i==position_x) && (j==position_y))
{
printf("*"); /*printf("*****\n");printf(" * * "); */
}
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 updateWithInput()
{
char input;
if (kbhit())
{
input = getch();
if (input=='a')
position_y--;
if (input=='d')
position_y++;
if (input=='w')
position_x--;
if (input=='s')
position_x++;
if (input==' ')
{
bullet_x = position_x-1;
bullet_y = position_y;
}
}
}
void updateWithoutInput()
{
if ((bullet_x==enemy_x)&&(bullet_y==enemy_y)) //击中
{
score++;
enemy_x = 0;
bullet_x = -1;
enemy_y = rand() % width;
}
if (bullet_x > -1) //子弹发射上升
bullet_x--;
static int speed = 0;
if (speed < 10)
speed++;
if (speed==10)
{
if (enemy_x>high) //重新生成敌机或移动
{
enemy_x = 0;
enemy_y = rand() % width;
}
else
{
enemy_x++;
speed = 0;
}
}
}