Java躲子弹课设,Robocode高手的诀窍 - 躲避子弹[Java编程]
贊助商鏈接
本文“Robocode高手的訣竅 - 躲避子彈[Java編程]”是由七道奇為您精心收集,來(lái)源于網(wǎng)絡(luò)轉(zhuǎn)載,文章版權(quán)歸文章作者所有,本站不對(duì)其觀點(diǎn)以及內(nèi)容做任何評(píng)價(jià),請(qǐng)讀者自行判斷,以下是其具體內(nèi)容:
在我向您展示這一本領(lǐng)之前,您必須理解 Robocode 的一些底子知識(shí).首先 ,它攻擊和防衛(wèi)利用的是一個(gè)能量倉(cāng).這就帶來(lái)了風(fēng)趣的博弈決意:您必須決意 什么時(shí)刻利用能量向?qū)κ珠_(kāi)炮,什么時(shí)刻保存能量以對(duì)付大概的喪失.
其次,機(jī)械人關(guān)于四周環(huán)境的理解非常有限.它可以知道別的機(jī)械人的距離 、方位、方向、速度和能量等級(jí).但是,它看不到子彈,不過(guò)大概按照這些線索 ,您可以猜想若何發(fā)現(xiàn)別的機(jī)械人正向它開(kāi)炮.
DodgeBot 靜止不動(dòng),不斷的跟蹤對(duì)手的前一能量等級(jí).當(dāng)它的能量下降一定 的量時(shí),DodgeBot 就認(rèn)為它開(kāi)炮了,并移向左邊或右邊.令人吃驚的是,這將 會(huì)迷惑大大都機(jī)械人的對(duì)準(zhǔn)辦法.它們要末直接向目標(biāo)開(kāi)炮,要末試著按照您的 速度和方歷來(lái)推算位置.假如您的機(jī)械人不移動(dòng),兩種算法城市恰好沖著這個(gè)機(jī) 器人開(kāi)炮.而您的機(jī)械人猜到了這一點(diǎn),向旁邊躍出一小步,但子彈還是沿本來(lái) 的方向.圖 1 展示了實(shí)際的 DodgeBot.
圖 1. DodgeBot 對(duì) Tracker(被騙了!)
清單 1展示了 DodgeBot 的代碼.每當(dāng)雷達(dá)發(fā)覺(jué)到仇人時(shí)履行主代碼部份. DodgeBot 保持自己的直角狀況,別的還有 30 度偏向?qū)κ?以 90 度角靜止使 機(jī)械人避開(kāi)子彈的本領(lǐng)到達(dá)最大.附加的 30 度傾斜使機(jī)械人具有一定的攻擊力 ,并漸漸接近目標(biāo).接著是代碼的關(guān)鍵部份:假如機(jī)械人發(fā)覺(jué)到能量下降介于 0.1 和 3.0 之間(火力范圍),那么機(jī)械人就當(dāng)即切換方向,向左或向右移動(dòng) .很簡(jiǎn)單.它會(huì)切換炮和雷達(dá)掃描的方向,假定假如它在最后一次掃描中看到了 一個(gè)機(jī)械人,那么當(dāng)它再次掃過(guò)同一區(qū)域時(shí)還會(huì)再發(fā)現(xiàn)它.這機(jī)會(huì)械人就會(huì)開(kāi)炮 .因?yàn)槲野雅诤屠走_(dá)接洽在一同,而掃描器是在它面朝對(duì)手的那一刻被調(diào)用的, 所以炮會(huì)正對(duì)著對(duì)手開(kāi)炮.最后,我會(huì)為下一回合記下對(duì)手的能量.
清單 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
f i r e ( 2 ) ;
// Track the energy level
previousEnergy = e.getEnergy();
}
}
我在叫做 Wolverine 的機(jī)械人上利用了這一本領(lǐng),它別的利用了一些感到器 信息以使感受更精確.當(dāng)對(duì)手擊中我的機(jī)械人時(shí),對(duì)手得重新充能量.當(dāng)我的機(jī) 器人擊中對(duì)手時(shí),能量等級(jí)就會(huì)下降.機(jī)械人大概同時(shí)感遭到這兩件事情,所以 Wolverine 操縱這一信息來(lái)抵消對(duì)等的能量波動(dòng).
這個(gè)本領(lǐng)還存在問(wèn)題.子彈一發(fā)射,機(jī)械人就移動(dòng),所以它終究大概會(huì)移回 炮彈軌跡之內(nèi).最好是在預(yù)計(jì)子彈要到達(dá)時(shí)再移動(dòng).
更嚴(yán)重的問(wèn)題是,即便您可以迷惑普通的對(duì)準(zhǔn),但實(shí)際上向旁邊一步一步的 移動(dòng)很簡(jiǎn)單猜測(cè).利用這一本領(lǐng)的最佳方法大概是讓信息指導(dǎo)您的移動(dòng),而不是 讓它掌握.
您大概會(huì)想,這個(gè)本領(lǐng)這么簡(jiǎn)單,您自己本來(lái)也是想得到的.不錯(cuò).這個(gè)游 戲就是這樣玩的,這也恰是它為什么如此吸惹人的來(lái)由.Robocode 就象棋類游 戲,每新走一步城市是一個(gè)新的設(shè)法.
以上是“Robocode高手的訣竅 - 躲避子彈[Java編程]”的內(nèi)容,如果你對(duì)以上該文章內(nèi)容感興趣,你可以看看七道奇為您推薦以下文章:
總結(jié)
以上是生活随笔為你收集整理的Java躲子弹课设,Robocode高手的诀窍 - 躲避子弹[Java编程]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 汇编 --- 栈结构的妙用
- 下一篇: java socket 重连复用_Jav