日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java躲子弹课设,Robocode高手的诀窍 - 躲避子弹[Java编程]

發(fā)布時(shí)間:2023/12/10 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java躲子弹课设,Robocode高手的诀窍 - 躲避子弹[Java编程] 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

贊助商鏈接

本文“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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。