#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
//函数全局变量
int high,width;
int ball_x,ball_y;
int ball_vx,ball_vy;
int position_x,position_y; //挡板中心变量
int radius; //挡板半径大小
int left,right; //挡板左右边界
int ball_number=0;
int speed=0;
int enemy_x=0,enemy_y=12;
int score=0;
//定义隐藏光标函数
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
}
//清屏幕函数
void gotoxy(int x, int y)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
}
void startup() //数据初始化
{
high = 20;
width = 25;
ball_x = 1;
ball_y = width/2;
ball_vx = 1;
ball_vy = 1;
position_x=high;
position_y=width/2;
radius = 5;
left = position_y - radius;
right = position_y + radius;
HideCursor();
}
void show() //显示画面
{
int i,j;
gotoxy(0,0); //清屏
for(i=0;i<=high+1;i++)
{
for(j=0;j<=width;j++)
{
if((i==ball_x)&&(j==ball_y))
printf("O"); //输出星花
else if(j==width)
printf("|"); //输出右边界
else if(i==high+1)
printf("-"); //输出下边界
else if((i==high)&&(j>=left)&&(j<=right))
printf("*");//输出挡板
else if((i==enemy_x)&&(j==enemy_y))
printf("B");
else
printf(" ");
}
printf("\n");
}
printf("反弹小球数 %d\n",ball_number);
printf("分数 %d\n",score);
}
void updatewithinput() //与用户输入有关的更新
{
char input ;
if(kbhit()) //判断是否有输入
{
input = getch(); //根据用户不同输入来移动
if(input=='a')
{
position_y--;
left = position_y - radius;
right = position_y + radius;
}
if(input=='d')
{
position_y++;
left = position_y - radius;
right = position_y + radius;
}
}
}
void updatewithoutinput() //与用户输入无关的更新
{
if(speed<10)
speed++;
if(speed==10)
{
//碰到边界后,改变速度的方向,实现反弹
if((ball_x==0)||(ball_x==high-1))
ball_vx = -ball_vx;
if((ball_y==0)||(ball_y==width-1))
ball_vy = -ball_vy;
if(ball_x==high-1)
{
if((ball_y>=left-1)&&(ball_y<=right+1))
{
ball_number++;
ball_vy = -ball_vy;
}
else
{
printf("GAME OVER !");
exit (0);
}
}
//根据小球速度更新小球的位置
ball_x=ball_x+ball_vx;
ball_y=ball_y+ball_vy;
if((ball_x==enemy_x)&&(ball_y>=enemy_y-2)&&(ball_y<=enemy_y+2))
{
score++;
enemy_x=0;
enemy_y=rand() %width;
}
speed=0;
}
}
int main()
{
startup(); //数据初始化
while(1) //游戏循环执行
{
show(); //显示画面
updatewithoutinput(); //与用户输入无关的更新
updatewithinput(); //与用户输入有关的更新
}
return 0;
}
//A.D键可控制挡板
简单的消方快游戏
最新推荐文章于 2024-03-30 09:15:00 发布