zoukankan      html  css  js  c++  java
  • 坦克大战系列8-策略分析之瞄准策略

    前言

    本篇主要介绍Robocode中如何对敌方进行扫描并且不断调整自身的雷达移动方式以达到长时间瞄准的效果,如果该效果实现了,是不是就会对我们坦克的后续的战斗增加很重要的砝码呢!

    直线瞄准策略

    官方图

    ∠AEF= ∠α=敌人与Y轴夹角的绝对角(见前面例子)

    子弹的由E到F的运行时间为diff

    坦克的运行速度speed=ScannedRobotEvent. getVelocity();

    AB=speed*diff

    我们可以算出B点的坐标为,A点坐标(x,y)

    newX=x+AB*Math.sina(α)

    newY=y+EF*Math.cos(α)

    炮弹应该转动的角为normalRelativeAngle(α- getGunHeadingRadians())

    圆周瞄准策略

    其基本原理是:

    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

    通过以上公式的设定就可以充分调动雷达及炮管的角度,更加明确自身的战术,做到游刃有余,大家自己根据理解试一下吧。

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

  • 相关阅读:
    今天不谈技术,谈感情~
    外派金融公司
    OAuth2-简介
    Zookeeper实战-分布式锁
    Zookeeper-基础
    Minio-对象存储
    Redis实战-BloomFilter
    Redis实战-详细配置-优雅的使用Redis注解/RedisTemplate
    Redis-基础
    SpringBoot-表单验证-统一异常处理-自定义验证信息源
  • 原文地址:https://www.cnblogs.com/qfchen/p/11245914.html
Copyright © 2011-2022 走看看