小球跳跃穿过白块小游戏

 基于VS2019   EasyX插件   C/C++

 小球跳跃穿过白块小游戏

#include<graphics.h>
#include<conio.h>
#include<iostream>
#include<stdio.h>
using namespace std;

int main()
{
	float width, height;
	width = 600;
	height = 400;
	initgraph(width, height);

	//小球的属性
	float radius, ball_x, ball_y, ball_vy, gravity;
	radius = 20;//小球半径
	ball_x = width / 4;//小球的位置x
	ball_y = height - radius;//小球的位置y
	ball_vy = 0;//小球竖直方向上的速度
	gravity = 0.6;//小球竖直方向上的加速度

	//方块的属性
	float rect_left_x, rect_top_y, rect_width, rect_height, rect_vx;
	rect_height = 100;//方块高度
	rect_width = 20;//方块宽度
	rect_left_x = width*3/4; //方块左边x坐标
	rect_top_y = height-rect_height; //方块顶部y坐标
	rect_vx = -3;//方块x方向速度

	int score=0;//分数
	int isBallOnFloor = 1;//判断小球是否在地板上

	while (1)
	{
		if (_kbhit())//检测键盘按键
		{
			char input = _getch();
			if (input == ' '&& isBallOnFloor == 1)//当检测到按键为空格时且小球在地板时
			{
				ball_vy = -16;//给小球一个竖直向上的速度
				isBallOnFloor = 0;//小球跳起来之后就不在地板上了
			}
		}

		ball_vy = ball_vy + gravity;//根据中立加速度更新小球y方向速度
		ball_y = ball_y + ball_vy;//根据小球y方向速度更新其y坐标
		if (ball_y >= height - radius)//如果小球落到地面上
		{
			ball_y = 0;//y速度为0
			ball_y = height - radius;//规范其y坐标,避免落到地面下
			isBallOnFloor = 1;//小球回到地面之后,判断小球已经在地面上了
		}

		rect_left_x = rect_left_x + rect_vx;//方块向左移
		if (rect_left_x <= 0)//如果方块跑到最左边
		{
			score++;//方块跑到最左边说明小球跳过
			rect_left_x = width;//在最右边重新出现
			rect_height = rand() % int(height / 4) + height / 4;//设置随机高度
			rect_vx = rand() / float(RAND_MAX) * 4 - 7;//设置方块随机速度
		}

		if ((rect_left_x <= ball_x + radius) 
			&& (rect_left_x + rect_width >= ball_x - radius) 
			&& (height - rect_height <= ball_y + radius))
		{
			//rect_left_x <= ball_x + radius//方块最左边和小球最右边接触
			//rect_left_x + rect_width >= ball_x - radius//方块最右边和小球最左边接触
			//height - rect_height <= ball_y + radius//方块最上边和小球最下边接触
			score = -1;//当触碰到方块的时候分数清零
			Sleep(100);//慢动作来提示玩家触碰到了方块
		}

		cleardevice();//清空画面

		//绘制方块
		//void fillrectangle(
		//	int left,//左上角x坐标
		//	int top,//左上角y坐标
		//	int right,//右下角x坐标
		//	int bottom//右下角y坐标
		//);

		fillcircle(ball_x, ball_y, radius);//绘制小球
		fillrectangle(rect_left_x, height - rect_height, rect_left_x + rect_width,height);//绘制方块

		//用来在游戏界面显示分数
		TCHAR s[20];//定义字符串数组
		swprintf_s(s, _T("%d"), score);//将score转换为字符串
		settextstyle(40, 0, _T("宋体"));//设置文字大小、字体
		outtextxy(20, 20, s);//在指定位置输出得分文字


		Sleep(10);
	}

	_getch();
	closegraph();

	return 0;
}

注释

1、fillrectangle(绘制方块)

void fillrectangle(
int left,//左边x坐标
int top,//顶部y坐标
int right,//方块宽度
int bottom//方块高度);

2、用来在游戏界面显示分数

TCHAR s[20];//定义字符串数组
swprintf_s(s, _T("%d"), score);//将score转换为字符串
settextstyle(40, 0, _T("宋体"));//设置文字大小、字体
outtextxy(20, 20, s);//在指定位置输出得分文字

3、_kbhit()

用于非阻塞地响应键盘输入事件。其中文可译为“键盘敲击”(keyboard hit)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值