版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、RoboCode基礎(chǔ)知識(shí)講解,軟件學(xué)社 黃仁海,Robocode簡介,Robocode 是一位IBM的工程師 Mat Nelson 用Java 語言所創(chuàng)造的機(jī)器人戰(zhàn)斗仿真引擎。Robocode不是一個(gè)完整游戲,它是個(gè)半成品,一個(gè)專為程序員們準(zhǔn)備的游戲。它使得你不用不面對(duì)一些無聊瑣碎但又不得不做的工作,編寫界面、處理圖像、處理音頻,。而是用一種更簡單的辦法,讓我們享受游戲開發(fā)的樂趣。 Robocode 它為你處理好一切細(xì)節(jié)。你所做就是為你
2、的機(jī)器人坦克編寫智能程序,讓它能夠移動(dòng)、進(jìn)攻、防御、躲避、開火。而它的對(duì)手就是跟你一樣其他程序員編寫機(jī)器人程序。這就是Robocode魅力所在,最簡單,只用幾十行代碼,就能立刻創(chuàng)造出一個(gè)簡單但完整機(jī)器人。你可以不停的修改你的程序,設(shè)計(jì)新射擊模型、躲避模型、移動(dòng)模型,還可以在網(wǎng)上下載由其他程序員編寫的水平更高的機(jī)器人,與它們比試一下,看看自己的水平到底如何。從2001年7 月誕生之日算起,Robocode發(fā)展到如今,已經(jīng)吸引了全世
3、界無數(shù)愛好者參與其中。不僅出現(xiàn)了許多交流Robocode 技術(shù)的網(wǎng)站,也有各種規(guī)模不等的Robocode 大賽在各地進(jìn)行。還等什么,趕快進(jìn)入Robocode 這個(gè)有趣的世界。,安裝RoboCode平臺(tái),安裝jdk可到 ftp://59.77.6.144 下載用戶名:robocode 密碼robocode 安裝RoboCode運(yùn)行環(huán)境:下載地址:ftp://robocode:robocode@59.77.6.144/pub/R
4、obocode坦克游戲平臺(tái)/robocode-setup.jar雙擊robocode-setup.jar文件進(jìn)行安裝,運(yùn)行RoboCode,進(jìn)入安裝目錄,雙擊robocode.jar文件或robocode.bat文件打開主程序如果有添加桌面圖標(biāo),可直接雙擊桌面圖標(biāo)進(jìn)行新比賽:“Battle”?”new”?”robots”在”robots”選項(xiàng)卡里面,點(diǎn)擊坦克文件,按”add”按鈕進(jìn)行添加,按”remove”進(jìn)行刪除,運(yùn)行R
5、oboCode,修改”Number of rounds”可以設(shè)置比賽場數(shù),默認(rèn)為10場點(diǎn)擊”next”可以設(shè)置戰(zhàn)場的其他的參數(shù),如戰(zhàn)場大小、炮管冷卻速度。點(diǎn)擊”start battle”進(jìn)行坦克比賽,進(jìn)行比賽,全自動(dòng)比賽全自動(dòng)評(píng)比比賽結(jié)果以程序的評(píng)比結(jié)果為準(zhǔn)按”pause”中斷比賽,按”stop”快速結(jié)束比賽并評(píng)出結(jié)果,保存比賽,“battle”?”save”/”save as”進(jìn)行賽場保存“battle”?”o
6、pen”進(jìn)行重載賽場,創(chuàng)建坦克程序,“Robot”?”Editor”打開編輯器,當(dāng)然也可以用其他的編輯器,如:JCreator的下載地址:ftp://robocode:robocode@59.77.6.144/pub/java/JCreatorV4.rar“File”?”New”?”Robot”輸入類名(R04369141),包名(xmu)后,創(chuàng)建一個(gè)坦克的模板文件,創(chuàng)建坦克程序,編寫代碼請(qǐng)查看API文檔“Help”?”R
7、obocode API”軟件學(xué)社FTP上有chm版本的API doc。主要查看Robot類“Compiler”?”Compile”進(jìn)行保存、編譯系統(tǒng)會(huì)自動(dòng)搜索JDK環(huán)境地址(之前已經(jīng)裝好了)保存的路徑建議使用默認(rèn)的路徑,打包坦克程序,“Robot”?”Package robot for upload”選擇要打包的坦克程序,按”add”加入按”next”進(jìn)入下一步,在文本區(qū)域框中填寫程序說明按”next”選擇保
8、存路徑按”next”進(jìn)行信息確認(rèn)最后按”package!”進(jìn)行打包,本次比賽只要上傳這個(gè)包文件,導(dǎo)入坦克程序,“Robot”?”Import downloaded robot”選擇坦克程序.jar文件,導(dǎo)入進(jìn)行比賽加載程序的過程和以前一樣,Robocode坐標(biāo)系統(tǒng),【坐標(biāo)系】:Robocode整個(gè)坐標(biāo)系都是戰(zhàn)場屏幕以左下角為原點(diǎn)?!窘^對(duì)方向系】:Robocode中不管機(jī)器人在哪個(gè)方向都是以靜態(tài)戰(zhàn)場屏幕為參照物的絕對(duì)角度
9、(Heading),正上方為0 度角。即是向北為0,向東為90,向南為180,向西為270?!鞠鄬?duì)方向系】:相對(duì)方向是以機(jī)器人的動(dòng)態(tài)heading角度為參照物的角度差,不再以整個(gè)靜態(tài)屏幕為參照了。叫它相對(duì)是因?yàn)闄C(jī)器人的heading 是隨著機(jī)器人移動(dòng)而不停的在改變,heading 只是個(gè)相對(duì)物體。,坐標(biāo)系統(tǒng),【Heading】:是機(jī)器人方向與屏幕正上方的角度差,方向在0 到360 之間?!綛earing】:是機(jī)器人的某個(gè)部件如雷達(dá)發(fā)
10、現(xiàn)的目標(biāo)與方向的角度差,順時(shí)針為正角度在-180 到180 之間。,坦克結(jié)構(gòu),機(jī)器人的結(jié)構(gòu)包含三個(gè)部分:Body -車身,Gun -炮,Radar -雷達(dá)。,坦克結(jié)構(gòu),車身是一個(gè)比較笨重的部分, 負(fù)責(zé)移動(dòng),它的基本操作有:turnLeft(double degree)和turnRight(double degree)分別是使機(jī)器人(左右)轉(zhuǎn)過一個(gè)指定的角度。ahead(double distance)和back(double dis
11、tance) )分別是使機(jī)器人(前后)移動(dòng)指定的像素點(diǎn)距離,;這兩個(gè)方法在機(jī)器人碰到墻或碰到另外一個(gè)機(jī)器人時(shí)即告完成。,坦克結(jié)構(gòu),炮是用來發(fā)射炮彈攻擊敵人的武器,它的基本操作有:turnGunLeft(double degree) 和turnGunRight(doubledegree)分別是使炮可以獨(dú)立于坦克車的方向(左右)轉(zhuǎn)動(dòng)指定的角度。fire(double power)發(fā)射指定能量的炮彈,能量范圍是(0.1 - 3)。,坦克結(jié)
12、構(gòu),雷達(dá)是機(jī)器人取得敵人信息的主要器官,它的基本操作有:turnRadarLeft(double degree)和turnRadarRight(double degree)分別是使炮上面的雷達(dá)(左右)轉(zhuǎn)動(dòng)指定的角度,轉(zhuǎn)動(dòng)的方向也獨(dú)立于炮的方向(以及坦克車的方向)。,坦克結(jié)構(gòu),默認(rèn)情況下三個(gè)部分的運(yùn)動(dòng)是相對(duì)鎖住的,要使他們能獨(dú)立運(yùn)動(dòng),Robocode 提供了三個(gè)方法來解鎖。setAdjustGunForRobotTurn(boole
13、an flag):如果flag被設(shè)置成true,那么坦克車轉(zhuǎn)動(dòng)時(shí),炮保持原來的方向。setAdjustRadarForRobotTurn(boolean flag):如果flag被設(shè)置成true,那么坦克車(和炮)轉(zhuǎn)動(dòng)時(shí),雷達(dá)會(huì)保持原來的方向。setAdjustRadarForGunTurn(boolean flag):如果flag 被設(shè)置成true,那么炮轉(zhuǎn)動(dòng)時(shí),雷達(dá)會(huì)保持原來的方向。而且,它執(zhí)行的動(dòng)作如同調(diào)用了setAdjust
14、RadarForRobotTurn(true)。,獲取信息,getX()和getY()可以捕捉到機(jī)器人當(dāng)前所在戰(zhàn)場中的坐標(biāo)。getHeading()、getGunHeading()和getRadarHeading()分別可以得出坦克車、炮或雷達(dá)當(dāng)前的方向,該方向是以角度表示的。getBattleFieldWidth()和getBattleFieldHeight()可以得到當(dāng)前這一回合的戰(zhàn)場尺寸。,戰(zhàn)斗事件,ScannedRob
15、otEvent-通過覆蓋onScannedRobot()方法來處理;當(dāng)雷達(dá)檢測到機(jī)器人時(shí),就調(diào)用該方法。HitByBulletEvent - 通過覆蓋onHitByBullet()方法來處理;當(dāng)機(jī)器人被炮彈擊中時(shí),就調(diào)用該方法。HitRobotEvent -通過覆蓋onHitRobot()方法來處理;當(dāng)機(jī)器人擊中另外一個(gè)機(jī)器人時(shí),就調(diào)用該方法。HitWallEvent -通過覆蓋onHitWall()方法來處理;當(dāng)機(jī)器人
16、撞到墻時(shí),就調(diào)用該方法。,戰(zhàn)斗事件,BulletHitEvent -通過覆蓋onBulletHit ()方法來處理;當(dāng)機(jī)器人發(fā)出的子彈擊中其他坦克時(shí),就調(diào)用該方法。BulletMissedEvent -通過覆蓋onBulletMissed ()方法來處理;當(dāng)機(jī)器人發(fā)出的子彈沒有擊中任何坦克時(shí),就調(diào)用該方法。BulletHitBulletEvent -通過覆蓋onBulletHitBullet ()方法來處理;當(dāng)機(jī)器人發(fā)出的子彈擊
17、中其他子彈時(shí),就調(diào)用該方法。,能量,機(jī)器人最重要的動(dòng)參要數(shù)能量(生命值)了,沒有能量就意味著你輸去了這場戰(zhàn)斗。我們可以用函數(shù)getEnergy()得到我們機(jī)器人的生命點(diǎn)數(shù). 能量的損失: 相撞損失:當(dāng)我們撞到墻時(shí)我們的生命點(diǎn)會(huì)下降,生命點(diǎn)損傷度=Math.abs(velocity) * 0.5 -1當(dāng)我們撞到另一個(gè)機(jī)器人,我們移動(dòng)將會(huì)停止,并且我們會(huì)損失生命點(diǎn)6點(diǎn)。同時(shí)我們會(huì)被扣除積分1.2分。 擊中損失 當(dāng)我們被子彈打
18、中我們的生命點(diǎn)損失是依據(jù)對(duì)方的能量大小而定的。當(dāng)子彈能量為1時(shí),我們生命點(diǎn)損失=4 * power,如果子彈能量大于1,那么我們的生命損失+= 2 * (power-1)。,能量,發(fā)射損失 每發(fā)射一顆子彈我們的生命能量就會(huì)減少。減少的能量等于發(fā)射的子彈的能量,炮彈能量范圍是:0.1 - 3 。能量的增加 :有失必有得,如果我們的子彈打中別的機(jī)器人,我們可以從子彈那竊取到3*power的能量.這是唯一增加生命力的途徑。子彈的能
19、量與速度 :子彈的能量與速度與數(shù)度成反比 ,速度= 20 - 3 *能量。因此子彈的能量越小,速度就越快,命中率也越高,不過威力也就越小。,炮管參數(shù),炮管熱量: 當(dāng)我們開火時(shí),炮管產(chǎn)生的熱量由子彈開火時(shí)的能量決定也即:熱量=1+(firepower/5),我們可以利用函數(shù)getGunHeat()得到炮管當(dāng)時(shí)的熱量,只有當(dāng)getGunHeat恒等于0時(shí),我們才能再次發(fā)射子彈。現(xiàn)在你明白了為什么有時(shí)候我們生命點(diǎn)非零并且有子彈就是不能開
20、火的原因了嗎?炮管過熱了! 冷卻度: 有熱度當(dāng)然就有冷卻度,不冷卻我們的炮管會(huì)永遠(yuǎn)不會(huì)開火的。系統(tǒng)戰(zhàn)斗設(shè)定的默認(rèn)冷卻速度是0.1/tick(時(shí)間周期),我們可通過函數(shù)getGunCoolingRate()得到這個(gè)參數(shù)值。,高級(jí)機(jī)器人,以上介紹的是Robot簡單機(jī)器人,編寫時(shí)的父類是Robot。還有一種高級(jí)機(jī)器人AdvancedRobot,前面提到過Robot 是線程阻塞式的,AdvancedRobot是可以使用非阻塞式的調(diào)用。
21、如果要使用高級(jí)機(jī)器人,必須把父類改成AdvancedRobot。當(dāng)你調(diào)用Robot 的ahead(100)時(shí),機(jī)器人就立即 移動(dòng)100個(gè)象素。該動(dòng)作完成后才執(zhí)行下一行代碼。這樣一來就無法實(shí)現(xiàn)曲線運(yùn)動(dòng)了。在AdvancedRobot中調(diào)用setAhead(100)時(shí),將立即返回,并執(zhí)行下一行的代碼,可以看做是將ahead命令壓入堆棧等待調(diào)用.這種異步調(diào)用,可以實(shí)現(xiàn)多種操作同時(shí)進(jìn)行,比如在前進(jìn)的同時(shí)拐彎可以達(dá)到曲線運(yùn)動(dòng)。
22、基于AdvanceRobot的機(jī)器人具有更加高級(jí)的智商。,高級(jí)機(jī)器人,turnRight() setTurnRight() turnLeft() setTurnLeft() turnGunRight() setTurnGunRight() turnGunLeft() setTurnGunLeft(),turnRadarRight() setTurnRadarRight() turnRadarLeft()
23、setTurnRadarLeft() ahead() setAhead() back() setback(),阻塞調(diào)用與非阻塞調(diào)用的對(duì)應(yīng)關(guān)系:,探測軍情,當(dāng)發(fā)現(xiàn)對(duì)方坦克時(shí)如何得到對(duì)方的坐標(biāo)?public void onScannedRobot(ScannedRobotEvent e) { double bearing = (getHeading() + e.getBearing()) % 360;
24、 double distance = e.getDistance(); bearing = Math.toRadians(bearing); double genyX = getX() + Math.sin(bearing) * distance; double genyY = getY() + Math.cos(bearing) * distance; },雷達(dá)鎖定,如何讓它自己的視野之內(nèi)?——雷
25、達(dá)鎖定為了鎖定目標(biāo),我們可以把雷達(dá)往反方向掃描。因?yàn)槔走_(dá)旋轉(zhuǎn)很快,而雷達(dá)的方向與對(duì)方坦克方向的偏移量不大,機(jī)器人是有一定大小的。于是掃描線在目標(biāo)身上來回掃動(dòng),實(shí)現(xiàn)了雷達(dá)鎖定。double RadarOffset=對(duì)方坦克方向-雷達(dá)方向setTurnRadarRightRadians( RadarOffset * 1.2 );,躲避攻擊,坦克對(duì)于周圍環(huán)境的了解非常有限。但是,它看不到子彈。但是由于對(duì)方發(fā)射子彈時(shí)自身的能量會(huì)
26、減少,通過判斷對(duì)方的能量等級(jí)的變化,還是可以得知對(duì)方是否正在發(fā)射子彈。(一般在單挑模式下)public void onScannedRobot(ScannedRobotEvent e) {// previousEnergy 記錄前一次的能量double changeInEnergy = previousEnergy - e.getEnergy(); if (changeInEnergy>0 && chan
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- netlogo基礎(chǔ)知識(shí)講解
- 服裝基礎(chǔ)知識(shí)講解
- 水表基礎(chǔ)知識(shí)講解
- 農(nóng)藥基礎(chǔ)知識(shí)講解
- 水表基礎(chǔ)知識(shí)講解
- 會(huì)計(jì)入門基礎(chǔ)知識(shí)會(huì)計(jì)基礎(chǔ)知識(shí)講解
- 導(dǎo)游基礎(chǔ)知識(shí)試題講解
- mimo基礎(chǔ)知識(shí)講解.pdf
- 鉆展基礎(chǔ)知識(shí)講解
- 《皮膚基礎(chǔ)知識(shí)講解》ppt課件
- 品質(zhì)管理之基礎(chǔ)知識(shí)講解
- 強(qiáng)弱電基礎(chǔ)知識(shí)講解
- 品質(zhì)管理之基礎(chǔ)知識(shí)講解
- 超聲波基礎(chǔ)知識(shí)講解
- 強(qiáng)弱電基礎(chǔ)知識(shí)講解
- 期貨基礎(chǔ)知識(shí)講解和案例分析
- 醫(yī)院感染管理基礎(chǔ)知識(shí)培訓(xùn)講解
- 智能手機(jī)基礎(chǔ)知識(shí)講解
- 初中英語基礎(chǔ)知識(shí)講解
- [教育]展覽講解員(基礎(chǔ)知識(shí))概述
評(píng)論
0/150
提交評(píng)論