前言:
08年的时候, 写过一个台球游戏, 用的是java, 不过代码真的是用传说中的神器notepad写的(你信吗? 其实是用GVIM写的, ^_^), 很多类都在同一java文件中编写. 可见当时的JAVA水平真的不咋地, 时过进迁, 还是一样的不咋地.
这边是当时的CSDN下载链接: java(台球游戏), 实现比较简单. 后来写过一个版本, 比这个要强大许多, 可惜源码丢失了.
效果展示入下图所示:
本文想讲述下台球游戏中核心算法的实现, 以及游戏AI的设计技巧. 当然自己也有个小愿望, 希望能实现一个html5版的台球游戏.
基础物理知识:
• 摩擦阻力
其满足牛顿第二定律:
f = m * a
速度与加速度关系公式:
vt = v0 + a * t
地面摩擦力与运动物体的方向相反, 阻碍物体的向前运动.
• 动量守恒
假设物体A质量为m1, 速度为v1, 物体B质量为m2, 速度为v2, 碰撞后速度分别为v1', v2'.
则满足动量守恒定律:
m1 * v1 + m2 * v2 = m1 * v1' + m2 * v2'
• 碰撞类型和能量守恒定律
1). 完全弹性碰撞
动能没有损失, 则满足如下公式:
1/2 * m1 * v1^2 + 1/2 * m2 * v2^2 = 1/2 * m1 * v1'^2 + 1/2 * m2 * v2'^2
注: 前后物体的动能保持均衡, 没有其他能量的转化.
结合之前的动量守