zoukankan      html  css  js  c++  java
  • JAVA之坦克大战系列11-高级瞄准策略

    前言

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

    高级运动瞄准

    其基本原理是:

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

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

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

    每转的方向变化:

    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吧!

  • 相关阅读:
    POJ 1426 Find The Multiple (DFS / BFS)
    C++的class的样例
    HDU 5063 Operation the Sequence(暴力 数学)
    VmWare 与 宿主主机通信 STEP BY STEP (适用于刚開始学习的人)
    Pig源代码分析: 简析运行计划的生成
    Extjs, 使用GridPanel出现 Layout run failed
    Codeforces #258 Div.2 E Devu and Flowers
    pat(A) 2-06. 数列求和(模拟摆竖式相加)
    javaWeb Cache技术――OSCache(转-全)
    108句个性搞笑签名 (转)
  • 原文地址:https://www.cnblogs.com/qfchen/p/11394838.html
Copyright © 2011-2022 走看看