User:BenHorner/Calculations

From Robowiki
< User:BenHorner
Revision as of 06:38, 5 March 2021 by BenHorner (talk | contribs) (some more details for anatomy of a turn)
Jump to navigation Jump to search

Units of measure

these are the units I use throughout this page


  • time is measured in (t)urns (getTurn())
  • distance is measured in (p)ixels
  • angles are measured in (d)egrees or (r)adians
  • compound units
    • movement speed is measured in p/t (ppt)
    • rotational speed is measured in d/t (dpt) or r/t (rpt)
    • movement acceleration is measured in ppt/t (pptpt)
    • there is no automatic rotational acceleration


Movement and Combat

all of this is taken from the [Robocode FAQ] it's just condensed here for my easy use.


  • movement values determined in this order:
    • heading
      • max robot turn rate is 10 - 0.75 * getVelocity() dpt
    • acceleration
      • accelerating: 1 pptpt
      • decelerating: 2 pptpt
    • velocity
      • max velocity is 8 ppt
    • position

  • combat
    • tracking
      • radar turn rate is 45 dpt
    • targeting
      • gun turn rate is 20 dpt
    • ramming (what counts as "moving towards" when hit?)
      • both robots lose 0.6 energy
      • ram-er gain 1.2 score points
    • hitting the wall
      • AdvancedRobots lose energy max(abs(velocity) / 2 - 1, 0);
    • firing bullets
      • 0.1 <= bullet power (bp) <= 3.0
      • firing drains bp energy from firer
      • if (bp <= 1) struck robot loses 4 * bp energy
      • if (bp > 1) struck robot loses 6 * bp - 2 energy
      • firer gains 3 * bp energy when bullet hits
      • bullet speed is 20 - 3 * bp
      • gun heat (gh)
        • bullets cannot be fired when gh > 0
        • gh increases 1 + (bp / 5) when a bullet is fired
        • gh drops 0.1/turn (by default, can be changed in interface)


Scoring

this part is from [The Robocode Help]


  • the battle score is the sum of these:
    • survival score, 50 points for every robot that died before you
      • bonus: if you're last, 10 additional points for each robot that died
    • bullet damage, total amount of damage inflicted (including ramming?)
      • bonus: if you kill an enemy, 20% of the damage you did to that enemy
    • ram damage, 2 time the total amount of damage inflicted by ramming
      • bonus: if you kill an enemy by ramming, 30% of the damage you did to that enemy


Anatomy of a turn

this is from [The Game Physics Page] (altered so that everything happens with the same time value)


  • each turn these things happen in order:
    • time is incremented
    • bullets move and check for collisions
      • BulletHitEvent data collected
    • robots move
      • bullets are fired and move, energy is charged for firing, collisions are determined
      • adjust heading (gun, then radar, then body)
      • determine acceleration
      • adjust velocity
      • adjust position
      • gun cools
    • ScannedRobotEvent data collected
    • events are fired in priority order using previously collected data
    • robots execute their run() method until their thread is blocked (through taking action, or time out)


calculations:

maximize: bppt = bp / ((1+(bp/5))/(cool rate))

              = bp * (cool rate) / ((5+bp)/5)
              = 5 * bp * (cool rate) / (5 + bp)