首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Robocode 高手秘技:躲避子彈的藝術

     編輯:Java 相關知識

展示這項技巧前,您必須了解 Robocode 基礎。首先,攻擊和防守使用一個能量倉。帶來有趣博弈決定:必須決定何時用能量向對手開火,何時保存能量應付可能損失。

其次,機器人對周圍環境了解非常有限。可知其他機器人距離、方位、方向、速度和能量等級。但看不見子彈,或許根據線索猜測如何發現其他機器人正向它開火。

DodgeBot 靜止不動,不斷追蹤對手前一能量等級。當能量下降一定量,DodgeBot 認為對手開火,向左或右移動。令人驚訝的是,這會迷惑大多數機器人瞄準方法。它們要麼直接向目標開火,要麼嘗試根據您速度和方向推算位置。若您機器人不移動,兩種演算法都正好朝這機器人開火。而您機器人猜到這點,向旁邊躍出一小步,但子彈仍沿原方向。圖 1 展示實際 DodgeBot。

DodgeBot 對 Tracker(上當了!)

DodgeBot 程式碼解析

範例 1 展示 DodgeBot 程式碼。每當雷達偵測到敵人執行主程式碼部分。DodgeBot 保持直角狀態,附加 30 度傾向對手。以 90 度角靜止使機器人避開子彈能力達最大。附加 30 度傾斜使機器人具一定攻擊力,逐漸接近目標。接著關鍵部分:若機器人偵測能量下降介於 0.1 和 3.0 之間 (火力範圍),機器人立即切換方向,向左或右移動。很簡單。切換砲和雷達掃描方向,假定若最後掃描看見機器人,再次掃過同區域還會發現。此時機器人開火。因將砲和雷達連結,掃描器在面朝對手瞬間被調用,砲正對對手開火。最後為下一回合記下對手能量。

範例 1. DodgeBot 程式碼

import robocode.*;
public class DodgeBot extends AdvancedRobot {
    double previousEnergy = 100;
    int movementDirection = 1;
    int gunDirection = 1;
    public void run() {
        setTurnGunRight(99999);
    }
    public void onScannedRobot(ScannedRobotEvent e) {
        // Stay at right angles to the opponent
        setTurnRight(e.getBearing() + 90 - 30 * movementDirection);

        // If the bot has small energy drop, assume it fired
        double changeInEnergy = previousEnergy - e.getEnergy();
        if (changeInEnergy > 0 && changeInEnergy <= 3) {
            // Dodge!
            movementDirection = -movementDirection;
            setAhead((e.getDistance() / 4 + 25) * movementDirection);
        }
        // When a bot is spotted, sweep the gun and radar
        gunDirection = -gunDirection;
        setTurnGunRight(99999 * gunDirection);

        // Fire directly at target
        fire(2);

        // Track the energy level
        previousEnergy = e.getEnergy();
    }
}

我在 Wolverine 機器人使用此技巧,額外用一些感應器資訊使感覺更準確。對手擊中我機器人時,對手得重新充能量。我機器人擊中對手時,能量等級下降。機器人可能同時感受這兩件事,Wolverine 利用此資訊抵消對等能量波動。

技巧缺陷與改進方向

此技巧仍存問題。子彈一發射機器人就移動,最終可能移回砲彈軌跡內。最好在估計子彈到達時再移動。

更嚴重問題:即使能迷惑尋常瞄準,但實際向旁邊一步步移動很容易預測。使用此技巧最佳方式可能是讓資訊指導移動,而非控制移動。

您也許覺得這技巧這麼簡單,自己原本也想得到。不錯。這遊戲就是這樣玩,這也是它如此吸引人緣故。Robocode 象棋類遊戲,每新走一步都是新想法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved