#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; //小球碰到挡板的次数
void HideCursor()//隐藏光标显示函数
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
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 startup()
{
high = 20;
width = 18;
ball_x = 1;
ball_y =width / 2;
ball_vx = 1;
ball_vy = 1;
position_x = high;
position_y = width / 2;
radius = 4;
left = position_y - radius;
right = position_y + radius;
ball_number = 0;
}
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 && ball_y==j)
printf("*");//输出飞机
else if (j == width)
printf("|");//输出右边界
else if (i == high+1)
printf("-");//输出下边界
else if (i == high&&j >= left&&j <= right)
printf("*");//输出挡板
else
printf(" ");
}
printf ("\n");
}
printf ("输出小球数:%d \n",ball_number);
}
void updatewithoutinput()//与用户输入无关的数据
{
if (ball_x == high)
{
if (ball_y <=right && ball_x>= left)
{
ball_number++;
ball_vy = -ball_vy;
}
else
{
printf ("Game Over!");
exit(0);
}
}
HideCursor();//隐藏光标
gotoxy(0,0);//清屏
//根据速度更新小球的位置
ball_x = ball_x + ball_vx;
ball_y = ball_y + ball_vy;
//碰到边界后,改变小球的速度,实现反弹
if (ball_x==0 || ball_x==high)
ball_vx = -ball_vx;
if (ball_y==0 || ball_y==width)
ball_vy = -ball_vy;
Sleep(50);
}
void updatewithinput()//与用户输入有关的数据
{
char input;
if (kbhit())//检查是否有键盘输入;
{
input = getch();
if (input == 'a'&&(left > 0))
{
position_y--;
left = position_y - radius;
right = position_y + radius;
}
if (input == 'd'&&(right<width-1))
{
position_y++;
left = position_y - radius;
right = position_y + radius;
}
}
}
int main()
{
startup();//数据初始化
while(1)
{
show();//显示画面
updatewithoutinput();//与用户输入无关的数据
updatewithinput();//与用户输入有关的数据
}
return 0;
}
弹跳小球基础
最新推荐文章于 2024-06-15 14:35:55 发布