熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Robocode 高手的秘訣:躲避子彈

2013-11-15 11:40:17  來源: JSP教程 

  在我向您展示這一技巧之前您必須了解 Robocode 的一些基礎知識首先它攻擊和防守使用的是一個能量倉這就帶來了有趣的博弈決定您必須決定何時使用能量向對手開炮何時保存能量以應付可能的損失
  
  其次機器人對於周圍環境的了解非常有限它可以知道其它機器人的距離方位方向速度和能量等級但是它看不到子彈不過也許根據這些線索您可以猜想如何發現其它機器人正向它開炮
  
  DodgeBot 靜止不動不斷的跟蹤對手的前一能量等級當它的能量下降一定的量時DodgeBot 就認為它開炮了並移向左邊或右邊令人吃驚的是這將會迷惑大多數機器人的瞄准方法它們要麼直接向目標開炮要麼試著根據您的速度和方向來推算位置如果您的機器人不移動兩種算法都會正好沖著這個機器人開炮而您的機器人猜到了這一點向旁邊躍出一小步但子彈仍是沿原來的方向 展示了實際的 DodgeBot
  
  
DodgeBot 對 Tracker(上當了!)

  

  
  清單 展示了 DodgeBot 的代碼每當雷達覺察到敵人時執行主代碼部分DodgeBot 保持自己的直角狀態另外還有 度傾向對手 度角靜止使機器人避開子彈的能力達到最大附加的 度傾斜使機器人具有一定的攻擊力並逐漸接近目標接著是代碼的關鍵部分如果機器人覺察到能量下降介於 之間(火力范圍)那麼機器人就立即切換方向向左或向右移動很簡單它會切換炮和雷達掃描的方向假定如果它在最後一次掃描中看到了一個機器人那麼當它再次掃過同一區域時還會再發現它這時機器人就會開炮因為我把炮和雷達聯系在一起而掃描器是在它面朝對手的那一刻被調用的所以炮會正對著對手開炮最後我會為下一回合記下對手的能量
  
  清單 DodgeBot 的代碼
  import robocode*;
  
  public class DodgeBot extends AdvancedRobot
  double previousEnergy = ;
  int movementDirection = ;
  int gunDirection = ;
  public void run() {
  setTurnGunRight();
  }
  public void onScannedRobot(
  ScannedRobotEvent e) {
  // Stay at right angles to the opponent
  setTurnRight(egetBearing()+
  *movementDirection);
  
  // If the bot has small energy drop
  // assume it fired
  double changeInEnergy =
  previousEnergyegetEnergy();
  if (changeInEnergy> &&
  changeInEnergy<=) {
  // Dodge!
  movementDirection =
  movementDirection;
  setAhead((egetDistance()/+)movementDirection);
  }
  // When a bot is spotted
  // sweep the gun and radar
  gunDirection = gunDirection;
  setTurnGunRight(*gunDirection);
  
  // Fire directly at target
  f i r e ( ) ;
  
  // Track the energy level
  previousEnergy = egetEnergy();
  }
  }
  
  我在叫做 Wolverine 的機器人上使用了這一技巧它另外使用了一些感應器信息以使感覺更准確當對手擊中我的機器人時對手得重新充能量當我的機器人擊中對手時能量等級就會下降機器人可能同時感受到這兩件事情所以 Wolverine 利用這一信息來抵消對等的能量波動
  
  這個技巧還存在問題子彈一發射機器人就移動所以它最終可能會移回炮彈軌跡之內最好是在估計子彈要到達時再移動
  
  更嚴重的問題是即使您能夠迷惑平常的瞄准但實際上向旁邊一步一步的移動很容易預測使用這一技巧的最佳方式可能是讓信息指導您的移動而不是讓它控制
  
  您也許會想這個技巧這麼簡單您自己原本也是想得到的不錯這個游戲就是這樣玩的這也正是它為什麼如此吸引人的緣故Robocode 就象棋類游戲每新走一步都會是一個新的想法
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19413.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.