java 坦克大战_JAVA之坦克大战系列11-高级瞄准策略
发布日期:2021-06-24 13:15:58 浏览次数:2 分类:技术文章

本文共 1370 字,大约阅读时间需要 4 分钟。

前言

本篇将给大家准备一个高级瞄准运动方法。

高级运动瞄准

其基本原理是:

change in x = cos(initialheading) * radius - cos(initialheading + changeinheading) * radius

change in y = sin(initialheading + changeinheading) * radius - sin(initialheading) * radius

其中initialheading是敌方机器人在初始位置的方向,子弹飞行期间的方向变化为 changeinheading,我们假定它以 radius为圆周半径运动。

839979e66a7df93bfd2f0057867d5101.png

每转的方向变化:

headingchangeperturn =

(heading2 - heading1)/time 得到这个值,其中 time是两次测量的间隔时间;

子弹运动时间:

time = getTime()+(range/(20-(3*firepower))) ,其中 range是发射时我们和敌人之间的距离,而 firepower是我们计划使用的射击火力;

半径:radius = velocity/headingchangeperturn。

实现代码如下:

double bulletVelocity = 20 - 3 * bulletPower;

double headingSet = enemy.headingRadian - enemy.prevHeadingRadian + 0.00001;

double r = enemy.velocity / headingSet;

double predictDirection = 0.0;

double enemyDistance = enemy.distance;

for( int i = 0; i < 4; i++){

double bulletTravelTime =

enemyDistance / bulletVelocity;

double predictX, predictY;

double predictHeadingRadian = enemy.headingRadian + headingSet * bulletTravelTime;

predictX = enemy.xCoordinate - r * Math.cos( predictHeadingRadian ) + r*Math.cos( enemy.headingRadian );

predictY = enemy.yCoordinate + r * Math.sin( predictHeadingRadian ) - r * Math.sin(enemy.headingRadian );

predictDirection = enemy.getAngle( getX(), getY(), predictX, predictY );

enemyDistance = Point2D.distance( getX(), getY(), predictX, predictY );

}

好啦,本期内容就到这里喽,我是不会玩游戏却非得写游戏的陈老师,一起来学习JAVA吧!

转载地址:https://blog.csdn.net/weixin_33073525/article/details/112085831 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:中科方德桌面操作系统_创新成就未来,广州世安内网终端安全管理系统与中科方德操作系统实现兼容互认!...
下一篇:python元类 orm_Python-元类实现ORM

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月10日 10时08分37秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章