基于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)。