热门关键字:
jquery > jquery教程 > jquery教程 > html5 游戏 算法,台球类html5游戏的AI设计与核心算法的实现

html5 游戏 算法,台球类html5游戏的AI设计与核心算法的实现

321
作者:管理员
发布时间:2021/7/31 18:58:10
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=5200
  一、前言:


  08年的时候, 写过一个台球游戏, 用的是java, 不过代码真的是用传说中的神器notepad写的(你信吗? 其实是用GVIM写的, ^_^), 很多类都在同一java文件中编写。 可见当时的JAVA水平真的不咋地, 时过进迁, 还是一样的不咋地。


  这边是当时的CSDN下载链接: java(台球游戏), 实现比较简单。 后来写过一个版本, 比这个要强大许多, 可惜源码丢失了。


  效果展示入下图所示:


  本文想讲述下台球游戏中核心算法的实现, 以及游戏AI的设计技巧。 当然自己也有个小愿望, 希望能实现一个html5版的台球游戏。


  二、基础物理知识:


  1、摩擦阻力


  其满足牛顿第二定律:


  f = m * a


  速度与加速度关系公式:


  vt = v0 + a * t


  地面摩擦力与运动物体的方向相反, 阻碍物体的向前运动。


  2、动量守恒


  假设物体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


  注: 前后物体的动能保持均衡, 没有其他能量的转化。


  结合之前的动量守恒定律, 我们可以进一步得到:


  v1' = [(m1-m2) * v1 + 2 * m2 * v2] / (m1 + m2)


  v2' = [(m2-m1) * v2 + 2 * m1 * v1] / (m1 + m2)


  2)、完全非弹性碰撞


  则存在其他能量的转化, 动能不守恒。


  且此时两物体粘连, 速度一致, 即v1'=v2', 此时动能损失最大。


  3)、弹性碰撞


  介于完全弹性碰撞和完全非弹性碰撞两者之间。 动能有损失的。


  三、物理模型:


  台球游戏中, 最核心的就是其物理模型的抽象及其碰撞算法的执行过程了。


  鉴于是2D版的台球游戏, 因此我们对物理模型做下简化, 球运动的方向必然穿越球的中心。


  把每个台球抽象为圆(x, y, radius), 而台球桌边框抽象为线段((x1, y1), (x2, y2))。


  1、碰撞检测


  1)、检测球与球碰撞


  我们假定球A(x1, y1, r), 球B(x2, y2, r)。 则满足条件:


  (x1 - x2) ^ 2 + (y1 - y2) ^ 2 <= (2*r) ^ 2


  则发生碰撞, 否则没有发生碰撞


  2)、检测球与球台边框碰撞


  相对比较简单。 求球心到边框的垂直距离即可, 若小于等于则发生碰撞, 若大于则没有。


  2、碰撞反应


  1)、球与球的碰撞反应


  动量是向量, 其在正交的两个方向上, 互相守恒。 我们选取两球圆心的直线为x轴, 垂直于圆心直线的为y轴。 如上图所述。


  x轴上满足动量守恒:


  m1 * Vx + m2 * Ux = m1 * Vx' + m2 * Ux';


  并假定两球碰撞是完全弹性碰撞, 两球质量相等m1=m2, 依据基础物理知识篇的结论。


  Vx' = [(m1-m2) * Vx + 2 * m2 * Ux] / (m1 + m2) = Ux;


  Ux' = [(m2-m1) * Ux + 2 * m1 * Vx] / (m1 + m2) = Vx;


  在X轴方向, 两球交换速度, 而在Y轴方向, 两球分速度不变。


  Vy' = Vy;


  Uy' = Uy;


  最终碰撞后的速度公式为:


  V' = Vx' + Vy' = Ux + Vy;


  U' = Ux' + Uy' = Vx + Uy;


  2)、球与边框的碰撞反应


  把台球边框视为质量无穷大, 则简单把运动的球, 其在垂直边框的分方向反向即可。




如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:jquery
友荐云推荐