参考
- 《C和C++游戏趣味编程》 童真
仿真自由落体的小球
实现小球受重力影响加速下落后,碰到地面反弹的效果
代码如下:
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
float y = 100; // 小球的y坐标
float vy = 0; // 小球y方向的速度,初速度为0
float g = 0.5; // 小球y方向的加速度
initgraph(600, 600); // 初始化游戏画面,600x600
while (1)
{
vy += g; // 利用加速度g更新vy速度
y += vy; // 利用y方向速度vy更新y坐标
if (y >= 580) // 当碰到地面时
{
vy = -0.95 * vy; // y方向速度改变方向,并受阻力影响,绝对值变小
}
if (y > 580) // 防止小球穿过地面
{
y = 580;
}
cleardevice(); // 清除掉之前的绘制内容
fillcircle(300, y, 20); // 在坐标(300, y)处画一个半径为20的圆
Sleep(10); // 暂停10毫秒
}
_getch(); // 等待按键
closegraph(); // 关闭窗口
return 0;
}
实现小球抛物线运动
增加变量x表示小球的x坐标,vx表示x方向的速度,vx初始化为10。尝试实现小球抛物线运动。并实现小球在窗口中四处反弹的效果
代码如下:
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
float x = 0; // 小球的x坐标
float y = 100; // 小球的y坐标
float vx = 10; // 小球x方向的速度,初速度为1
float vy = 0; // 小球y方向的速度,初速度为0
float g = 0.5; // 小球y方向的加速度
initgraph(600, 600); // 初始化游戏画面,600x600
while (1)
{
x += vx; // 利用x方向速度vx更新x坐标
if (x >= 580) // 当碰到右侧墙壁时
{
vx = -0.95 * vx; // x方向速度改变方向,并受阻力影响,绝对值变小
}
if (x > 580) // 放在小球穿过右侧墙面
{
x = 580;
}
if (x <= 20) // 当碰到左侧墙壁时
{
vx = -0.95 * vx; // x方向速度改变方向,并受阻力影响,绝对值变小
}
if (x < 20)
{
x = 20; // 防止小球穿过左侧墙面
}
vy += g; // 利用加速度g更新vy速度
y += vy; // 利用y方向速度vy更新y坐标
if (y >= 580) // 当碰到地面时
{
vy = -0.95 * vy; // y方向速度改变方向,并受阻力影响,绝对值变小
}
if (y > 580) // 防止小球穿过地面
{
y = 580;
}
cleardevice(); // 清除掉之前的绘制内容
fillcircle(x, y, 20); // 在坐标(x, y)处画一个半径为20的圆
Sleep(10); // 暂停10毫秒
}
_getch(); // 等待按键
closegraph(); // 关闭窗口
return 0;
}