Advertisement
Guest User

K4B

a guest
Sep 23rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.64 KB | None | 0 0
  1. package pk;
  2. //este robo tenta acerta o robo inimigo baseado na velocidade e na Distancia, enquanto desvia do disparo adversario
  3. import java.awt.Color;
  4. import java.awt.geom.Point2D;
  5.  
  6. import robocode.AdvancedRobot;
  7. import robocode.BattleEndedEvent;
  8. import robocode.BulletHitBulletEvent;
  9. import robocode.BulletHitEvent;
  10. import robocode.BulletMissedEvent;
  11. import robocode.DeathEvent;
  12. import robocode.HitByBulletEvent;
  13. import robocode.HitRobotEvent;
  14. import robocode.HitWallEvent;
  15. import robocode.RobotDeathEvent;
  16. import robocode.ScannedRobotEvent;
  17. import robocode.WinEvent;
  18. import robocode.util.Utils;
  19.  
  20. public class Cabecadepika extends AdvancedRobot {
  21. // Estas são constantes. Uma vantagem disso é que a lógica neles (como 20-3 * BULLET POWER)
  22. // não usa o espaço de códigos, tornando-os mais baratos do que colocar a lógica no código real.
  23. final static double BULLET_POWER=3;//Our bulletpower.
  24. final static double BULLET_DAMAGE=BULLET_POWER*4;//Formula for bullet damage.
  25. final static double BULLET_SPEED=20-3*BULLET_POWER;//Formula for bullet speed.
  26.  
  27. //variavel
  28. static double dir=1;
  29. static double oldEnemyHeading;
  30. static double enemyEnergy;
  31.  
  32.  
  33.  
  34. boolean correLadrao = true;
  35. double previousEnergy = 100;
  36. int movementDirection = 1;
  37.  
  38. // Quando a batalha começar, execute as instruções abaixo
  39. @Override
  40. public void run() {
  41.  
  42. // BODY => Corpo => Move para frente, trás, gira para a esquerda e
  43. // direita
  44. // GUN => Arma => Responsável por realizar os disparos, gira para
  45. // esquerda e direita
  46. // RADAR => Localiza os inimigos, gira para esquerda e direita
  47. // SCAN => Varredura
  48. // BULLET => Bala
  49. // TURN => Virar
  50. // RIGHT => Direita
  51. // LEFT => Esquerda
  52.  
  53. // Cor da arma do robô
  54. setGunColor(new Color(255, 0, 0));
  55. // Cor do radar do robô
  56. setRadarColor(new Color(0, 0, 0));
  57. // Cor do corpo do robô
  58. setBodyColor(new Color(0, 0, 0));
  59. // Cor do scanner do robô
  60. setScanColor(new Color(42, 0, 255));
  61. // Cor da bala do robô
  62. setBulletColor(new Color(255, 255, 255));
  63.  
  64.  
  65. // CADA PARTE DO ROBÔ SE MOVE LIVREMENTE
  66. setAdjustRadarForRobotTurn(true);
  67. setAdjustGunForRobotTurn(true);
  68. setAdjustRadarForGunTurn(true);
  69.  
  70.  
  71.  
  72.  
  73. while(true){
  74. turnRadarLeft(360);
  75. setAhead(200);
  76. turnRight(300);
  77. execute();
  78. }
  79. }
  80.  
  81. // Quando o roboInimigo for detectado
  82. @Override
  83. public void onScannedRobot(ScannedRobotEvent e) {
  84. //tenta prever onde o robo inimigo vai estar
  85.  
  86.  
  87.  
  88. double absBearing=e.getBearingRadians()+getHeadingRadians();
  89.  
  90. // Isso faz com que a quantidade que queremos se torne perpendicular ao inimigo.
  91. double turn=absBearing+Math.PI/2;
  92.  
  93. // Esta fórmula é usada porque o 1 / e.getDistance () significa que, à medida que nos aproximarmos do inimigo, nos voltaremos mais rapidamente para eles.
  94. // Queremos fazer isso porque reduz nossas chances de ser derrotado antes de alcançar o robô inimigo.
  95. turn-=Math.max(0.5,(1/e.getDistance())*100)*dir;
  96.  
  97. setTurnRightRadians(Utils.normalRelativeAngle(turn-getHeadingRadians()));
  98.  
  99.  
  100.  
  101. // Encontrando a mudança de título e título.
  102. double enemyHeading = e.getHeadingRadians();
  103. double enemyHeadingChange = enemyHeading - oldEnemyHeading;
  104. oldEnemyHeading = enemyHeading;
  105.  
  106. /* Este método de segmentação é conhecido como segmentação circular; você assume que seu inimigo irá
  107. * continue movendo-se com a mesma velocidade e taxa de rotação que ele está usando no horário de incêndio.
  108. * código base vem do wiki.
  109. */
  110. double deltaTime = 0;
  111. double predictedX = getX()+e.getDistance()*Math.sin(absBearing);
  112. double predictedY = getY()+e.getDistance()*Math.cos(absBearing);
  113. while((++deltaTime) * BULLET_SPEED < Point2D.Double.distance(getX(), getY(), predictedX, predictedY)){
  114.  
  115. // Adicione o movimento que pensamos que nosso inimigo fará aos nossos inimigos atuais X e Y
  116. predictedX += Math.sin(enemyHeading) * e.getVelocity();
  117. predictedY += Math.cos(enemyHeading) * e.getVelocity();
  118.  
  119.  
  120. // Encontre as mudanças de cabeçalho do seu inimigo.
  121. enemyHeading += enemyHeadingChange;
  122.  
  123. // Se as nossas coordenadas previstas estão fora das paredes, coloque-as a 18 unidades de distância longe das paredes, como sabemos
  124. // que é o mais próximo que podem chegar à parede (os Bots não são roatentos 36 * 36 quadrados).
  125. predictedX=Math.max(Math.min(predictedX,getBattleFieldWidth()-18),18);
  126. predictedY=Math.max(Math.min(predictedY,getBattleFieldHeight()-18),18);
  127.  
  128. }
  129. // Encontre o porte de nossas coordenadas projetadas de nós.
  130. double aim = Utils.normalAbsoluteAngle(Math.atan2( predictedX - getX(), predictedY - getY()));
  131.  
  132. // Apontar e disparar.
  133. setTurnGunRightRadians(Utils.normalRelativeAngle(aim - getGunHeadingRadians()));
  134. setFire(BULLET_POWER);
  135.  
  136. setTurnRadarRightRadians(Utils.normalRelativeAngle(absBearing-getRadarHeadingRadians())*2);
  137.  
  138. //tenta desvia das balas
  139.  
  140. // Mantenha-se em ângulo reto para o oponente
  141. setTurnRight(e.getBearing()+90 + 30*movementDirection);
  142.  
  143. // Se o bot tiver uma pequena queda de energia,
  144. // assuma que disparou
  145. double changeInEnergy =previousEnergy-e.getEnergy();
  146.  
  147.  
  148. if (changeInEnergy > 0 &&changeInEnergy <= 3) {
  149. // esquivar!
  150. movementDirection =-movementDirection;
  151. setAhead((e.getDistance()/4+25)-movementDirection);
  152. }
  153.  
  154. // Rastreie o nível de energia
  155. previousEnergy = e.getEnergy();
  156.  
  157. }
  158.  
  159. // Quando o seu robô bater com o outro
  160. @Override
  161. public void onHitRobot(HitRobotEvent e) {
  162. saidaFrente();
  163. tiroMortal(e.getBearing(), e.getEnergy(), getEnergy());
  164.  
  165. }
  166. //método para sair das paredes e colisão com robos
  167. public void saidaFrente() {
  168. if (this.correLadrao) {
  169. setBack(500);
  170. this.correLadrao = false;
  171. } else {
  172. setAhead(150);
  173. this.correLadrao = true;
  174. }
  175. }
  176.  
  177.  
  178. public void tiroMortal(double dist, double energiaIni, double minhaEnergia) {
  179.  
  180. double Coordenadas = getHeading() + dist - getGunHeading();
  181.  
  182. double PontoQuarenta = (energiaIni / 4) + .1;
  183.  
  184. if (!(Coordenadas > -180 && Coordenadas <= 180)) {
  185. while (Coordenadas <= -180) {
  186. Coordenadas += 360;
  187. }
  188. while (Coordenadas > 180) {
  189. Coordenadas -= 360;
  190. }
  191. }
  192.  
  193. turnGunRight(Coordenadas);
  194. fire(PontoQuarenta);
  195.  
  196. }
  197.  
  198. //É executado quando seu robô colide com a parede
  199. public void onHitWall(HitWallEvent e) {
  200. saidaFrente();
  201. }
  202.  
  203.  
  204.  
  205. // É executado quando seu tiro acerta um adversário
  206. @Override
  207. public void onBulletHit(BulletHitEvent event) {
  208.  
  209. }
  210.  
  211. // É executado quando uma de suas balas colide com outra bala
  212. @Override
  213. public void onBulletHitBullet(BulletHitBulletEvent event) {
  214.  
  215. }
  216.  
  217. // É executado quando uma de suas balas colide com a parede(erra o tiro)
  218. @Override
  219. public void onBulletMissed(BulletMissedEvent event) {
  220.  
  221. }
  222.  
  223. // É executado se seu robô morrer
  224. @Override
  225. public void onDeath(DeathEvent event) {
  226.  
  227. }
  228.  
  229. // É executado quando seu robô leva um tiro
  230. @Override
  231. public void onHitByBullet(HitByBulletEvent e) {
  232.  
  233. }
  234.  
  235. // É executado quando morre um adversário
  236. @Override
  237. public void onRobotDeath(RobotDeathEvent event) {
  238.  
  239. }
  240.  
  241. // É executado quando seu robô ganha o round
  242. @Override
  243. public void onWin(WinEvent event) {
  244.  
  245. }
  246.  
  247. // Evento disparado quando uma rodada ou batalha é finalizada,
  248. // respectivamente
  249. @Override
  250. public void onBattleEnded(BattleEndedEvent event) {
  251.  
  252. }
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement