函数封装的飞机大战,实现随着得分的增加,加快敌机下落的速度。
代码实现:
#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; // 得分
int speed_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;
position_x = high/2;
position_y = width/2;
bullet_x = -2;
bullet_y = position_y;
enemy_x = 0;
enemy_y = position_y;
score = 0;
speed_score=0;
HideCursor(); // 隐藏光标
}
void show() // 显示画面
{
gotoxy(0,0);
int i,j;
for(i=0;i<high;i++)
{
for(j=0;j<width;j++)
{
if((i==position_x)&&(j==position_y))
printf("*");
else if((i==enemy_x)&&(j==enemy_y))
printf("@");
else if((i==bullet_x)&&(j==bullet_y))
printf("|");
else
printf(" ");
}
printf("\n");
}
printf("得分:%d\n",score);
}
void updateWithoutInput() // 与用户输入无关的更新
{
if(bullet_x>-1)
bullet_x--;
if((bullet_x==enemy_x)&&(bullet_y==enemy_y))
{
score++;
speed_score++;
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<10-speed_score)
speed++;
if(speed==10-speed_score){
enemy_x++;
speed=0;
}
}
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;
}
}
}
int main()
{
startup(); // 数据初始化
while (1) // 游戏循环执行
{
show(); // 显示画面
updateWithoutInput(); // 与用户输入无关的更新
updateWithInput(); // 与用户输入有关的更新
}
return 0;
}