RoboCode基礎知識講解_第1頁
RoboCode基礎知識講解_第2頁
RoboCode基礎知識講解_第3頁
RoboCode基礎知識講解_第4頁
RoboCode基礎知識講解_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、RoboCode基礎知識講解軟件學社黃仁海1Robocode簡介Robocode 是一位IBM的工程師 Mat Nelson 用Java 語言所創(chuàng)造的機器人戰(zhàn)斗仿真引擎。Robocode不是一個完整游戲,它是個半成品,一個專為程序員們準備的游戲。它使得你不用不面對一些無聊瑣碎但又不得不做的工作,編寫界面、處理圖像、處理音頻,。而是用一種更簡單的辦法,讓我們享受游戲開發(fā)的樂趣。 Robocode 它為你處理好一切細節(jié)。你所做就是為你的機器人坦克編寫智能程序,讓它能夠移動、進攻、防御、躲避、開火。而它的對手就是跟你一樣其他程序員編寫機器人程序。這就是Robocode魅力所在,最簡單,只用幾十行代碼

2、,就能立刻創(chuàng)造出一個簡單但完整機器人。你可以不停的修改你的程序,設計新射擊模型、躲避模型、移動模型,還可以在網(wǎng)上下載由其他程序員編寫的水平更高的機器人,與它們比試一下,看看自己的水平到底如何。從2001年7 月誕生之日算起,Robocode發(fā)展到如今,已經(jīng)吸引了全世界無數(shù)愛好者參與其中。不僅出現(xiàn)了許多交流Robocode 技術(shù)的網(wǎng)站,也有各種規(guī)模不等的Robocode 大賽在各地進行。還等什么,趕快進入Robocode 這個有趣的世界。2安裝RoboCode平臺安裝jdk可到 下載用戶名:robocode 密碼robocode 安裝RoboCode運行環(huán)境:下載地址:坦克游戲平臺/roboco

3、de-setup.jar雙擊robocode-setup.jar文件進行安裝3運行RoboCode進入安裝目錄,雙擊robocode.jar文件或robocode.bat文件打開主程序如果有添加桌面圖標,可直接雙擊桌面圖標進行新比賽:“Battle”new”robots”在”robots”選項卡里面,點擊坦克文件,按”add”按鈕進行添加,按”remove”進行刪除4運行RoboCode修改”Number of rounds”可以設置比賽場數(shù),默認為場點擊”next”可以設置戰(zhàn)場的其他的參數(shù),如戰(zhàn)場大小、炮管冷卻速度。點擊”start battle”進行坦克比賽5進行比賽全自動比賽全自動評比比

4、賽結(jié)果以程序的評比結(jié)果為準按”pause”中斷比賽,按”stop”快速結(jié)束比賽并評出結(jié)果6保存比賽“battle”save”/”save as”進行賽場保存“battle”open”進行重載賽場7創(chuàng)建坦克程序“Robot”Editor”打開編輯器,當然也可以用其他的編輯器,如:JCreator的下載地址:robocode:/pub/java/JCreatorV4.rar“File”New”Robot”輸入類名(R04369141),包名(xmu)后,創(chuàng)建一個坦克的模板文件8創(chuàng)建坦克程序編寫代碼請查看API文檔“Help”Robocode API”軟件學社FTP上有chm版本的API doc。主

5、要查看Robot類“Compiler”Compile”進行保存、編譯系統(tǒng)會自動搜索JDK環(huán)境地址(之前已經(jīng)裝好了)保存的路徑建議使用默認的路徑9打包坦克程序“Robot”Package robot for upload”選擇要打包的坦克程序,按”add”加入按”next”進入下一步,在文本區(qū)域框中填寫程序說明按”next”選擇保存路徑按”next”進行信息確認最后按”package!”進行打包,本次比賽只要上傳這個包文件10導入坦克程序“Robot”Import downloaded robot”選擇坦克程序.jar文件,導入進行比賽加載程序的過程和以前一樣11Robocode坐標系統(tǒng)【坐標系

6、】:Robocode整個坐標系都是戰(zhàn)場屏幕以左下角為原點?!窘^對方向系】:Robocode中不管機器人在哪個方向都是以靜態(tài)戰(zhàn)場屏幕為參照物的絕對角度(Heading),正上方為0 度角。即是向北為0,向東為90,向南為180,向西為270。【相對方向系】:相對方向是以機器人的動態(tài)heading角度為參照物的角度差,不再以整個靜態(tài)屏幕為參照了。叫它相對是因為機器人的heading 是隨著機器人移動而不停的在改變,heading 只是個相對物體。12坐標系統(tǒng)【Heading】:是機器人方向與屏幕正上方的角度差,方向在0 到360 之間?!綛earing】:是機器人的某個部件如雷達發(fā)現(xiàn)的目標與方向的

7、角度差,順時針為正角度在-180 到180 之間。13坦克結(jié)構(gòu)機器人的結(jié)構(gòu)包含三個部分:Body 車身,Gun 炮,Radar 雷達。14坦克結(jié)構(gòu)車身是一個比較笨重的部分, 負責移動,它的基本操作有:turnLeft(double degree)和turnRight(double degree)分別是使機器人(左右)轉(zhuǎn)過一個指定的角度。ahead(double distance)和back(double distance) )分別是使機器人(前后)移動指定的像素點距離,;這兩個方法在機器人碰到墻或碰到另外一個機器人時即告完成。15坦克結(jié)構(gòu)炮是用來發(fā)射炮彈攻擊敵人的武器,它的基本操作有:turn

8、GunLeft(double degree) 和turnGunRight(doubledegree)分別是使炮可以獨立于坦克車的方向(左右)轉(zhuǎn)動指定的角度。fire(double power)發(fā)射指定能量的炮彈,能量范圍是(0.1 3)。16坦克結(jié)構(gòu)雷達是機器人取得敵人信息的主要器官,它的基本操作有:turnRadarLeft(double degree)和turnRadarRight(double degree)分別是使炮上面的雷達(左右)轉(zhuǎn)動指定的角度,轉(zhuǎn)動的方向也獨立于炮的方向(以及坦克車的方向)。17坦克結(jié)構(gòu)默認情況下三個部分的運動是相對鎖住的,要使他們能獨立運動,Robocode 提

9、供了三個方法來解鎖。setAdjustGunForRobotTurn(boolean flag):如果flag被設置成true,那么坦克車轉(zhuǎn)動時,炮保持原來的方向。setAdjustRadarForRobotTurn(boolean flag):如果flag被設置成true,那么坦克車(和炮)轉(zhuǎn)動時,雷達會保持原來的方向。setAdjustRadarForGunTurn(boolean flag):如果flag 被設置成true,那么炮轉(zhuǎn)動時,雷達會保持原來的方向。而且,它執(zhí)行的動作如同調(diào)用了setAdjustRadarForRobotTurn(true)。18獲取信息getX()和getY(

10、)可以捕捉到機器人當前所在戰(zhàn)場中的坐標。getHeading()、getGunHeading()和getRadarHeading()分別可以得出坦克車、炮或雷達當前的方向,該方向是以角度表示的。getBattleFieldWidth()和getBattleFieldHeight()可以得到當前這一回合的戰(zhàn)場尺寸。19戰(zhàn)斗事件ScannedRobotEvent通過覆蓋onScannedRobot()方法來處理;當雷達檢測到機器人時,就調(diào)用該方法。HitByBulletEvent 通過覆蓋onHitByBullet()方法來處理;當機器人被炮彈擊中時,就調(diào)用該方法。HitRobotEvent 通過

11、覆蓋onHitRobot()方法來處理;當機器人擊中另外一個機器人時,就調(diào)用該方法。HitWallEvent 通過覆蓋onHitWall()方法來處理;當機器人撞到墻時,就調(diào)用該方法。20戰(zhàn)斗事件BulletHitEvent 通過覆蓋onBulletHit ()方法來處理;當機器人發(fā)出的子彈擊中其他坦克時,就調(diào)用該方法。BulletMissedEvent 通過覆蓋onBulletMissed ()方法來處理;當機器人發(fā)出的子彈沒有擊中任何坦克時,就調(diào)用該方法。BulletHitBulletEvent 通過覆蓋onBulletHitBullet ()方法來處理;當機器人發(fā)出的子彈擊中其他子彈時,

12、就調(diào)用該方法。21能量機器人最重要的動參要數(shù)能量(生命值)了,沒有能量就意味著你輸去了這場戰(zhàn)斗。我們可以用函數(shù)getEnergy()得到我們機器人的生命點數(shù). 能量的損失: 相撞損失:當我們撞到墻時我們的生命點會下降,生命點損傷度=Math.abs(velocity) * 0.5 -1當我們撞到另一個機器人,我們移動將會停止,并且我們會損失生命點6點。同時我們會被扣除積分1.2分。 擊中損失 當我們被子彈打中我們的生命點損失是依據(jù)對方的能量大小而定的。當子彈能量為1時,我們生命點損失=4 * power,如果子彈能量大于1,那么我們的生命損失+= 2 * (power-1)。22能量發(fā)射損失

13、每發(fā)射一顆子彈我們的生命能量就會減少。減少的能量等于發(fā)射的子彈的能量,炮彈能量范圍是:0.1 - 3 。能量的增加 :有失必有得,如果我們的子彈打中別的機器人,我們可以從子彈那竊取到3*power的能量.這是唯一增加生命力的途徑。子彈的能量與速度 :子彈的能量與速度與數(shù)度成反比 ,速度= 20 - 3 *能量。因此子彈的能量越小,速度就越快,命中率也越高,不過威力也就越小。23炮管參數(shù) 炮管熱量: 當我們開火時,炮管產(chǎn)生的熱量由子彈開火時的能量決定也即:熱量=1+(firepower/5),我們可以利用函數(shù)getGunHeat()得到炮管當時的熱量,只有當getGunHeat恒等于0時,我們才

14、能再次發(fā)射子彈?,F(xiàn)在你明白了為什么有時候我們生命點非零并且有子彈就是不能開火的原因了嗎?炮管過熱了! 冷卻度: 有熱度當然就有冷卻度,不冷卻我們的炮管會永遠不會開火的。系統(tǒng)戰(zhàn)斗設定的默認冷卻速度是0.1/tick(時間周期),我們可通過函數(shù)getGunCoolingRate()得到這個參數(shù)值。 24高級機器人以上介紹的是Robot簡單機器人,編寫時的父類是Robot。還有一種高級機器人AdvancedRobot,前面提到過Robot 是線程阻塞式的,AdvancedRobot是可以使用非阻塞式的調(diào)用。如果要使用高級機器人,必須把父類改成AdvancedRobot。當你調(diào)用Robot 的ahea

15、d(100)時,機器人就立即 移動100個象素。該動作完成后才執(zhí)行下一行代碼。這樣一來就無法實現(xiàn)曲線運動了。在AdvancedRobot中調(diào)用setAhead(100)時,將立即返回,并執(zhí)行下一行的代碼,可以看做是將ahead命令壓入堆棧等待調(diào)用這種異步調(diào)用,可以實現(xiàn)多種操作同時進行,比如在前進的同時拐彎可以達到曲線運動?;贏dvanceRobot的機器人具有更加高級的智商。25高級機器人turnRight() setTurnRight() turnLeft() setTurnLeft() turnGunRight() setTurnGunRight() turnGunLeft() setT

16、urnGunLeft() turnRadarRight() setTurnRadarRight() turnRadarLeft() setTurnRadarLeft() ahead() setAhead() back() setback() 阻塞調(diào)用與非阻塞調(diào)用的對應關系:26探測軍情當發(fā)現(xiàn)對方坦克時如何得到對方的坐標?public void onScannedRobot(ScannedRobotEvent e)double bearing = (getHeading() + e.getBearing() % 360;double distance = e.getDistance();bear

17、ing = Math.toRadians(bearing);double genyX = getX() + Math.sin(bearing) * distance;double genyY = getY() + Math.cos(bearing) * distance;27雷達鎖定如何讓它自己的視野之內(nèi)?雷達鎖定為了鎖定目標,我們可以把雷達往反方向掃描。因為雷達旋轉(zhuǎn)很快,而雷達的方向與對方坦克方向的偏移量不大,機器人是有一定大小的。于是掃描線在目標身上來回掃動,實現(xiàn)了雷達鎖定。double RadarOffset=對方坦克方向-雷達方向setTurnRadarRightRadians( RadarOffset * 1.2 );28躲避攻擊坦克對于周圍環(huán)境的了解非常有限。但是,它看不到子彈。但是由于對方發(fā)射子彈時自身的能量會減少,通過判斷對方的能量等級的變化,還是可以得知對方是否正在發(fā)射子彈。(一般在單挑模式下)public void onScannedRobot(Scanned

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論