弹球游戏设计
Posted ping2yingshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹球游戏设计相关的知识,希望对你有一定的参考价值。
此博客链接:https://www.cnblogs.com/ping2yingshi/p/12164369.html
一、问题描述
1、问题描述
用c语言实现一个弹球游戏,实现小球在控制台的一定范围内(可自行定义范围,此博客小球的横坐标范围在(5,15),小球的纵坐标在(0,19)做抛物线运动。
二、解决问题的物理模型
2.1、没有大小的小球。
2.2、运动轨迹。
小球合运动轨迹是一个抛物线,把小球运动分解,分为水平方向运动和竖直方向运动。小球在水平方向是匀速直线运动,在竖直方向是加速度向下的变速运动。
2.3.小球的运动学方程。
小球合运动轨迹是一个抛物线,把小球运动速度分解,分为水平方向速度和竖直方向速度。小球在水平方向是匀速直线运动,水平方向速度不变;小球在竖直方向是加速度向下的变速运动,速度的运动学方程:velocity_y(竖直方向的速度)=v0(初速度)-g*t。
2.4.小球由上一位置移动到下一个位置时,速度改变。
2.5. 位移是速度在时间上的累积,速度是加速度在时间上的累积。
2.6.小球在设定的范围内运动。
三、物理模型对应的技术原型
3.1 在指定位置显示小球。
3.1.1 原理(包含公式)
以字母o代表小球。
3.1.2 函数
void Show(int x,int y);
函数作用:在控制台打印输出小球每次移动的位置
Ø 函数参数说明:
参数名1:x
参数类型:int
参数意义:小球在控制台位置的纵坐标(竖直方向)
参数名2:y
参数类型:int
参数意义:小球在控制台位置的横坐标(水平方向)
Ø 返回值说明:
返回值类型:void
3.1.3 举例说明/解释函数实现的功能
使用双重for循环,以换行为x竖直方向,空格为y水平方向。例如当x=5,y=6时,会在(5,6)位置显示一个小球o。
3.2 一段时间后,小球的新位置计算
3.2.1 原理(2.5节物理模型对应的代码模型,以及时间在代码中如何实现)
循环每执行一次,小球的新纵坐标y=y(小球上一次移动后的纵坐标)+delta(y)( delta(y)代表y的增量),横坐标x=0.1*(y-20)*y+15。
3.2.2 函数
Adrress Getnext_y(struct Adrress A,int y)
结构体Adrress定义:
struct Adrress { int x;//小球竖直方向坐标 int y;//小球水平方向坐标 };
函数作用:根据小球上一次横纵坐标的位置,得到小球新的横纵坐标位置
Ø 函数参数说明:
参数名1:A
参数类型:struct Adrress
参数意义:保存小球新的横纵坐标位置
参数名2:y
参数类型:int
参数意义:小球在控制台上一次位置的横坐标(水平方向)
Ø 返回值说明:
返回值类型:Address
3.2.3 举例说明/解释函数实现的功能
小球从初始坐标x=13,y=1开始移动,每次执行Getnext_y(struct Adrress A,int y)函数,y都加上y方向位移,x=f(y),然后用新得到的x,y更新结构体中的A.x和A.y。检测小球x是否等于15的边界条件,如果小球坐标满足x=15,小球重新从x=13,y=1位置按照上述规则开始移动。
3.3 小球的移动
3.3.1 原理
视觉暂留原理:人眼在观察景物时,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
3.3.2 函数
在main() 中调用了system("cls") ;
Adrress Getnext_y(struct Adrress A,int y);
void Show(int x,int y);
3.3.3 举例说明/解释函数实现的功能
使用system("cls") 清除显示过的小球。我们看到小球消失后,虽然小球消失了,但是小球影像还存在于我们大脑中,把消失的小球坐标y传入Adrress Getnext_y(struct Adrress A,int y);函数中,得到新小球x,y的坐标,使用void Show(int x,int y)函数,新小球会在新的位置再次显示,我们脑中的小球影像会和看到的新小球有一个连接,这让我们感觉小球像是在移动。
3.4、小球在设定的范围内运动的技术原型
3.4.1 函数
bool Isrepeat (int x)
函数作用:对小球运动界定范围。
Ø 函数参数说明:
参数名:x
参数类型:int
参数意义:小球在控制台上位置的纵坐标(竖直方向)
Ø 返回值说明:
返回值类型:bool
3.4.2举例说明/解释函数实现的功能
小球坐标每改变一次,都在Adrress Getnext_y(struct Adrress A,int y)中判断Isrepeat (int x)函数是否为当小球坐标到达x=15时,Isrepeat (int x)函数为真,使小球从初始位置x=13,y=1重新开始运动。
四、运行结果
代码git地址: https://e.coding.net/SpringSun/Ball_parabolic.git 。
以上是关于弹球游戏设计的主要内容,如果未能解决你的问题,请参考以下文章