第2章 自由落体的小球
2021-2-23 ~ 2021-4-2
(0)
说明
童晶老师《C 和 C++ 游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。
本章我们将实现小球受重力影响加速下落,碰到地面后反弹的效果,如图所示。
首先学习 EasyX 图形库的下载安装,显示一个静止小球;学习整数常量的知识,并绘制多个小球;接着学习整型变量的定义和使用,从而方便修改小球坐标;然后学习 while(1) 循环和if语句,实现小球下落和反弹;最后学习浮点型变量,实现小球受重力加速下落的效果。
源码
#include <graphics.h>
#include <conio.h>
int main()
{
float y = 100; // 小球的 y 坐标
float vy = 0; // 小球 y 方向速度
float g = 0.5; // 小球加速度,y 方向
initgraph(600, 600); // 初始游戏窗口画面,宽 600,高 600
while(1) // 一直循环运行
{
cleardevice(); // 清除掉之前绘制的内容
vy = vy + g; // 利用加速度 g 更新 vy 速度
y = y + vy; // 利用y方向速度 vy 更新 y 坐标
if (y >= 580) // 当碰到地面时
vy = -0.95 * vy; // y 方向速度改变方向,并受阻尼影响绝对值变小
if (y > 580) // 防止小球越过地面
y = 580;
fillcircle(300, y, 20); // 在坐标 (300, y) 处画一个半径为 20 的圆
Sleep(10); // 暂停 10 毫秒
}
_getch(); // 等待按键
closegraph(); // 关闭窗口
return 0;
}
这一章主要讲解了整数、浮点数常量和变量的定义与使用方法、while(1) 循环和if选择判断语句。利用这些较少的知识点,开发了自由落体小球的仿真程序。本章的实现效果,可以用于 flappy bird 等游戏中的自由落体效果,也可用于愤怒的小鸟等游戏中的抛物线发射效果。
视频教程可以参考这里:https://zhuanlan.zhihu.com/p/186255141
练习 2-8:增加变量x表示小球的 x 坐标,vx 表示 x 方向的速度,vx 初始化为 1。尝试实现小球抛物线运动,并在窗口中四处反弹的效果。
源码:
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
float x, y, vx, vy, g; // 定义一些变量
x = 100; // 小球的 x 坐标
y = 200; // 小球的 y 坐标
vx = 8; // 小球 x 方向速度
vy = 0; // 小球 y 方向速度
g = 0.5; // 小球加速度,y 方向
initgraph(600, 600); // 初始游戏窗口画面,宽 600,高 600
while(1) // 一直循环运行
{
cleardevice(); // 清除掉之前绘制的内容
vy = vy + g; // 利用加速度 g 更新 vy 速度
x = x + vx; // 利用 x 方向速度 vx 更新 x 坐标
y = y + vy; // 利用 y 方向速度 vy 更新 y 坐标
if (y >= 580) // 当碰到地面时
{
vx = 0.98 * vx; // x 方向速度受阻尼影响变小
vy = -0.95 * vy; // y 方向速度改变方向,并受阻尼影响变小
}
if (y > 580) // 防止小球越过地面
y = 580;
if (x >= 580) // 碰到右边墙,小球 x 方向速度反向
vx = -vx;
if (x <= 20) // 碰到左边墙,小球 x 方向速度反向
vx = -vx;
fillcircle(x, y, 20); // 在坐标 (x, y) 处画一个半径为 20 的圆
Sleep(10); // 暂停 10 毫秒
}
_getch(); // 等待按键
closegraph(); // 关闭窗口
return 0;
}
添加评论
取消回复