文章目录
- 1.绘制小球
- 2.按下空格让小球跳起来
我们今天来实现下按下空格键控制小球的起跳(还没阅读之前文章的同学可以先去阅读一下:C++图形开发专栏)
1.绘制小球
首先,我们要绘制小球,这里就不细讲啦,之前的文章里都有,新内容看一下注释:
#include<graphics.h> 
#include<conio.h>
#include<stdio.h>
int main() {
	double width, height;//定义画面长度、宽度
	width = 600;
	height = 400;
	initgraph(width, height);
	int ball_x, ball_y, r;//定义小球x轴、y轴、半径
	r = 20;
	ball_x = width / 4;//x坐标等于整个画面x轴长度的四分之一
	ball_y = height - r;//y坐标等于画面的y轴长度减去圆的半径(保证圆在画面的最底端)
	cleardevice();
	fillcircle(ball_x, ball_y, r);
	_getch();
	closegraph();
	return 0;
}
运行效果:
 
2.按下空格让小球跳起来
我们要让小球跳起来,其实就是让小球y方向的坐标发生变化,如图:
 
 要让小球跳起来,那显然就需要定义一个变量来调整小球的速度和重力加速度:
int ball_vy = 0;//最初小球落在地面上时y轴方向的速度显然应该为0
double g = 0.6;//重力加速度
然后就是构造循环体实现球的起跳:
while (1){
		ball_vy = ball_vy + g;//根据牛顿力学定律得
		ball_y = ball_y + ball_vy;//小球y轴方向的变化
		if (ball_y >= height - r) {
			ball_vy = 0;//小球落地以后速度清零
			ball_y = height - r;
		}
		cleardevice();
		fillcircle(ball_x, ball_y, r);
		Sleep(10);
	}
但是……就只有以上的代码的话小球是无法移动的,因为小球y轴方向的速度(ball_vy)为0,所以,我们要通过检测按键来实现按下空格后更改y轴方向的速度使小球跳起:
if (_kbhit()) {
			char input = _getch();
			if (input == ' ') {
				ball_vy = -16;
			}
		}
在以上代码中,_kbhit()是一个函数,作用是检查键盘上是否有输入字符,如果有则返回一个非零值,否则返回零。
 在实际编程中,可以利用_kbhit()函数来检测用户是否有键盘输入,从而进行相应的操作。比如,可以在游戏中检测用户按下了哪个键盘上的按键,或者在命令行中读取用户输入的命令等。
在以上代码中,我们是通过如果检测到键盘有输入,就执行if内的语句
而我们将_getch()所获得的键盘输入的内容储存在一个名为input的char类型变量中,接着在下面的if语句中检测输入内容,若输入的内容为空格,就将小球y轴方向的速度(ball_vy)更改为-16,从而使小球的y轴坐标减少,来达到向上“跳起”的效果
注意:这里所有的g(重力加速度)与ball_vy所更改的值都是经过反复试验所得到的效果较理想的值,也可以自行修改
那么整个一段代码就是:
#include<graphics.h> 
#include<conio.h>
#include<stdio.h>
int main() {
	double width, height;//定义画面长度、宽度
	width = 600;
	height = 400;
	initgraph(width, height);
	double ball_x, ball_y,ball_vy, r,g;//定义小球x轴、y轴、y轴方向的速度、半径、重力加速度
	g = 0.6;
	r = 20;
	ball_x = width / 4;//x坐标等于整个画面x轴长度的四分之一
	ball_y = height - r;//y坐标等于画面的y轴长度减去圆的半径(保证圆在画面的最底端)
	ball_vy = 0; //最初小球落在地面上时y轴方向的速度为0
	while (1){
		if (_kbhit()) {
			char input = _getch();
			if (input == ' ') {
				ball_vy = -16;
			}
		}
		ball_vy = ball_vy + g;//根据牛顿力学定律得
		ball_y = ball_y + ball_vy;//小球y轴方向的变化
		if (ball_y >= height - r) {
			ball_vy = 0;//小球落地以后速度清零
			ball_y = height - r;
		}
		cleardevice();
		fillcircle(ball_x, ball_y, r);
		Sleep(10);
	}
	_getch();
	closegraph();
	return 0;
}
效果展示:
 



















