小球弹跳游戏

本文介绍了使用C++编写的简单反弹小球游戏,涉及球体移动、边界碰撞检测、挡板控制和用户键盘输入。程序通过`ball_x`和`ball_y`跟踪小球位置,`ball_vx`和`ball_vy`控制速度,实现了游戏的基本规则。
摘要由CSDN通过智能技术生成
//接小球游戏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>//包含system("cls")函数与_getch()
#include <conio.h>//包含_kbhit()
#include <time.h>//包含时间函数
//全局变量
int high, width;//游戏画面尺寸
int ball_x, ball_y;//小球坐标
int ball_vx, ball_vy;//小球速度
int ban_x, ban_y;//板中心坐标
int radius;//挡板半径
int left,right;//挡板左右边界
int ball_number;//记录小球与板子碰撞的次数
int f;//控制游戏是否结束
void show();//显示函数
void noinput();//无关用户操作的计算
void input();//有关用户操作的计算
void open();//初始化操作
int main()
{
	open();
	while (f==0)
	{
		input();
		noinput();
		show();
	}
	printf("游戏结束");
}
void show()//显示函数
{
	system("cls");
	int i, j;
	for (i = 0; i <= high+1; i++)
	{
		for (j = 0; j <=width; j++)
		{
			if ((i == ball_x) && (j == ball_y))
				printf("0");//显示小球
			else if (i == high + 1)
				printf("-");//显示下边界
			else if (j == width)
				printf("|");//显示右边界
			else if ((i == high) && (j >= left) && (j <= right))
				printf("*");//显示挡板
			else
				printf(" ");
		}
		printf("\n");
	}
	printf("反弹小球数为%d", ball_number);
}
	

void noinput()//无关用户输入处理函数
{
	//根据速度小球位移
	ball_x = ball_x + ball_vx;
	ball_y = ball_y + ball_vy;
	//实时更新板子位置
	left = ban_y - radius;
	right = ban_y + radius;
	//碰边界反弹,改变速度方向
	if (ball_x == high)//游戏结束条件以及碰撞板子分数记录以及方向改变
	{
		if (ball_y >= left && ball_y <= right)
		{
			ball_number++;
			ball_vx = -ball_vx;
		}else
		f = 1;
	}
	if (ball_x == 0)//碰到墙上小球方向改变
		ball_vx = -ball_vx;
	if ((ball_y== width-1) || (ball_y == 0))
		ball_vy = -ball_vy;
	if(ball_number<10)//控制小球速度
	Sleep(100);
	if(ball_number<=20)
	Sleep(50);
	if(ball_number <=30)
	Sleep(30);
}
void input()//有关用户输入处理函数
{
	char input1;
	while (_kbhit())//判断是否有输入
	{
		input1 = _getch();
		if ((input1 == 'd'|| input1 == 'D')&&(right<width-1))
		{
			ban_y++;
		}
		if ((input1 == 'a' || input1 == 'A')&&(left>0))
		{
			ban_y--;
		}
	}

}
void open()//初始化函数
{
	high = 20;
	width = 30;

	ball_x = 1;
	ball_y = width / 2;

	ball_vx = 1;
	ball_vy = 1;

	ban_x = high;
	ban_y = width / 2;
	radius = 5;
	left = ban_y - radius;
	right = ban_y + radius;

	ball_number = 0;
	f = 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值