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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

robocode_摇滚,袜子,Robocode!

發(fā)布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 robocode_摇滚,袜子,Robocode! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Robocode是一個易于使用的機器人戰(zhàn)斗模擬器,可在支持Java 2的所有平臺上運行。您可以創(chuàng)建一個機器人,將其放置在戰(zhàn)場上,并使其與其他開發(fā)人員創(chuàng)建的對手機器人進行激烈的戰(zhàn)斗。 Robocode帶有一組預制的對手,可以幫助您入門,但是一旦超出對手,您就可以與世界上最好的聯(lián)盟中的世界上最好的聯(lián)盟對抗,進入自己的創(chuàng)作。

每個Robocode參與者都使用Java語言的元素來創(chuàng)建自己的機器人,從而使各種開發(fā)人員(從高級初學者到高級黑客)都可以參與其中。 入門的Java開發(fā)人員可以學習以下基礎知識:調(diào)用API代碼,閱讀Javadocs,繼承,內(nèi)部類,事件處理等。 高級開發(fā)人員可以在全球性挑戰(zhàn)中調(diào)整其編程技能,以構(gòu)建同類最佳的軟件機器人。 在本文中,我們將介紹Robocode,并通過構(gòu)建您的第一個Robocode機器人開始征服世界。 我們還將窺視使Robocode流行的迷人的“幕后”機制。

下載并安裝Robocode

Robocode是Mathew Nelson(IBM高級技術(shù),Internet部門的軟件工程師)的創(chuàng)意。 首先,進入Robocode頁面。 在這里,您將找到Robocode系統(tǒng)的最新可執(zhí)行文件。 下載完發(fā)行版(位于獨立的安裝文件中)之后,可以使用以下命令來將軟件包安裝在系統(tǒng)上(假設您的計算機上已預先安裝了Java VM(JDK 1.3.x)) , 當然):

java -jar robocode-setup.jar

在安裝過程中,Robocode會詢問您是否要使用此外部Java VM進行機器人編譯。 另一種選擇是作為Robocode發(fā)行版的一部分提供的Jikes編譯器。

安裝后,您可以從外殼程序腳本(robocode.sh),批處理文件(robocode.bat)或桌面上的圖標啟動Robocode系統(tǒng)。 此時,戰(zhàn)場將出現(xiàn)。 在這里,您可以使用菜單調(diào)用機器人編輯器和編譯器。

Robocode系統(tǒng)的組件

激活Robocode時,您將看到兩個相互關(guān)聯(lián)的GUI窗口,它們構(gòu)成Robocode的IDE:

  • 戰(zhàn)場
  • 機器人編輯器

圖1顯示了戰(zhàn)場和實際的機器人編輯器。

圖1. Robocode IDE

戰(zhàn)場是機器人之間進行戰(zhàn)斗的地方。 它包含主要的模擬引擎,并允許您創(chuàng)建,保存和打開新的或現(xiàn)有的戰(zhàn)斗。 您可以使用舞臺上可用的控件來暫停和繼續(xù)戰(zhàn)斗,終止戰(zhàn)斗,銷毀任何單個機器人或獲取任何機器人的統(tǒng)計信息。 此外,您可以從該屏幕激活機器人編輯器。

機械手編輯器是一個自定義的文本編輯器,用于編輯構(gòu)成機械手的Java源文件。 它在菜單中集成了Java編譯器(用于編譯機器人代碼)和自定義的Robot包裝程序。 使用“機器人編輯器”創(chuàng)建并成功編譯的所有機器人都位于戰(zhàn)場上隨時可以部署的位置。

Robocode中的機器人由一個或多個Java類組成。 這些類可以存檔到JAR包中。 Robocode的最新版本提供了一個“ Robot Packager”,可以從戰(zhàn)場GUI窗口中激活它。

Robocode機器人的解剖

在撰寫本文時,Robocode機器人是一個圖形坦克。 圖2說明了典型的Robocode機器人。

圖2. Robocode機器人的解剖

請注意,機器人具有旋轉(zhuǎn)槍,并且在槍的頂部是旋轉(zhuǎn)雷達。 機器人車輛,槍支和雷達都可以獨立旋轉(zhuǎn):在任何時候,機器人車輛,槍支和雷達都可以朝不同的方向旋轉(zhuǎn)。 默認情況下,這些項目是面向車輛運動方向?qū)R的。

機器人命令

Robocode機械手的命令集全部記錄在Robocode API的Javadoc中。 您會發(fā)現(xiàn)它們是robocode.Robot類的公共方法。 在本節(jié)中,我們將按類別介紹每個可用的命令。

移動機器人,槍支和雷達

讓我們從移動機器人及其配件的基本命令開始:

  • turnRight(double degree)和turnLeft(double degree)將機器人旋轉(zhuǎn)指定的度數(shù)。
  • ahead(double distance)和back(double distance)將機器人移動指定的像素距離; 如果機器人撞到墻壁或其他機器人,則完成這兩種方法。
  • turnGunRight(double degree)和turnGunLeft(double degree)使噴槍轉(zhuǎn)動,與車輛的方向無關(guān)。
  • turnRadarRight(double degree)和turnRadarLeft(double degree)將雷達置于槍支頂部,與槍支的方向(以及車輛的方向)無關(guān)。

這些命令在完成之前不會將控制權(quán)返回給程序。 此外,當車輛轉(zhuǎn)彎時,槍支(和雷達)的方向也會移動,除非通過調(diào)用以下方法進行另外說明:

  • setAdjustGunForRobotTurn(boolean flag) :如果該標志設置為true,則在車輛轉(zhuǎn)彎時,噴??槍將保持相同方向。
  • setAdjustRadarForRobotTurn(boolean flag) :如果該標志設置為true,則在車輛(和機槍)轉(zhuǎn)彎時,雷達將保持相同方向。
  • setAdjustRadarForGunTurn(boolean flag) :如果該標志設置為true,則在槍支轉(zhuǎn)動時雷達將保持相同方向。 它也將像已調(diào)用setAdjustRadarForRobotTurn(true)一樣起作用。

獲取有關(guān)機器人的信息

存在許多獲取有關(guān)機器人的信息的方法。 以下是常用方法調(diào)用的簡短列表:

  • getX()和getY()獲取機器人的當前坐標。
  • getHeading() , getGunHeading()和getRadarHeading()以度為單位獲取車輛,槍支或雷達的當前航向。
  • getBattleFieldWidth()和getBattleFieldHeight()獲取當前回合的戰(zhàn)場尺寸。

觸發(fā)命令

掌握了如何移動機器人及其相關(guān)武器后,現(xiàn)在就可以考慮發(fā)射和控制傷害的任務了。 每個機器人都以默認的“能量級別”開始,并且當其能量級別降至零時被視為已銷毀。 發(fā)射時,機器人最多可以使用三個單位的能量。 提供給子彈的能量越多,它將對目標機器人造成的傷害越大。 fire(double power)和fireBullet(double power)用于以指定的能量(火力)發(fā)射子彈。 調(diào)用的fireBullet()版本返回對robocode.Bullet對象的引用,該對象可在高級機器人中使用。

大事記

每當機器人移動或轉(zhuǎn)動時,雷達始終處于活動狀態(tài),并且如果檢測到其范圍內(nèi)的任何機器人,都會觸發(fā)事件。 作為機器人的創(chuàng)建者,您可以選擇處理戰(zhàn)斗中可能發(fā)生的各種事件。 基本的Robot類具有所有這些事件的默認處理程序。 但是,您可以覆蓋所有這些“不執(zhí)行任何操作”默認處理程序,并實現(xiàn)自己的自定義操作。 以下是一些更常用的事件:

  • ScannedRobotEvent 。 通過重寫onScannedRobot()方法來處理ScannedRobotEvent ; 當雷達檢測到機器人時,將調(diào)用此方法。
  • HitByBulletEvent 。 通過重寫onHitByBullet()方法來處理HitByBulletEvent ; 當機器人被子彈擊中時,將調(diào)用此方法。
  • HitRobotEvent 。 通過重寫onHitRobot()方法來處理HitRobotEvent ; 當您的機器人撞擊另一個機器人時,將調(diào)用此方法。
  • HitWallEvent 。 通過重寫onHitWall()方法來處理HitWallEvent ; 當您的機器人撞到墻壁時,將調(diào)用此方法。

這就是我們創(chuàng)建一些非常復雜的機器人所需的全部知識。 您可以在Javadoc中找到其余的Robocode API,可以從戰(zhàn)場的幫助菜單或機器人編輯器的幫助菜單中進行訪問。

現(xiàn)在是時候運用我們的知識了。

創(chuàng)建一個機器人

要創(chuàng)建新的機器人,請啟動機器人編輯器,然后選擇文件 -> 新建 -> 機器人 。 系統(tǒng)將提示您輸入機械手的名稱,該名稱將成為Java類名稱。 在此提示符下輸入DWStraight 。 接下來,系統(tǒng)將提示您輸入一個唯一的縮寫,該名稱將用作機器人(及其相關(guān)Java文件)所在的軟件包的名稱。在此提示符下輸入dw

機器人編輯器將顯示您需要編寫以控制機器人的Java代碼。 清單1是您將看到的代碼示例:

清單1. Robocode生成的機器人代碼
package dw; import robocode.*;/*** DWStraight - a robot by (developerWorks)*/ public class DWStraight extends Robot {... // <<Area 1>>/*** run: DWStraight's default behavior*/public void run() {... // <<Area 2>>while(true) {... // <<Area 3>>}}... // <<Area 4>>public void onScannedRobot(ScannedRobotEvent e) {fire(1);} }

突出顯示的區(qū)域是我們可以添加代碼來控制機器人的地方:

1區(qū)
在此空間中,我們可以聲明類作用域變量并設置其值。 它們將在機器人的run()方法以及您可能創(chuàng)建的任何其他幫助程序方法中可用。

2區(qū)
戰(zhàn)斗管理員調(diào)用run()方法來啟動機器人的生命。 它通常由兩個區(qū)域(清單1中指定為Area 2和Area 3)組成,您可以在其中添加代碼。 在區(qū)域2中,您將放置每個機器人實例僅運行一次的代碼。 它通常用于在開始重復動作之前使機器人進入預定狀態(tài)。

3區(qū)
這是典型的run()方法實現(xiàn)的第二部分。 在這里,在一個無盡的while循環(huán)中,我們將對機器人可能涉及的重復動作進行編程。

4區(qū)
在該區(qū)域中,您可以添加幫助程序方法,以供機器人在其run()邏輯中使用。 您也可以在其中添加任何要覆蓋的事件處理程序。 例如,清單1中的代碼處理ScannedRobot事件,并在雷達檢測到機器人時直接向機器人觸發(fā)。

對于我們的第一個機器人DWStraight,我們將更新清單2中以粗體顯示的代碼。

清單2. DWStraight機器人代碼的添加
package dw; import robocode.*;public class DWStraight extends Robot {public void run() {turnLeft(getHeading());while(true) {ahead(1000);turnRight(90);}}public void onScannedRobot(ScannedRobotEvent e) {fire(1);}public void onHitByBullet(HitByBulletEvent e) {turnLeft(180);}}

這是第一個機器人按區(qū)域進行的操作:

1區(qū)
我們沒有在此機器人中指定任何類范圍變量。

2區(qū)
為了使機器人進入已知狀態(tài),我們使用turnLeft(getHeading())將其旋轉(zhuǎn)為面向0度。

3區(qū)
在此重復部分中,我們使用ahead(1000)將機器人向前移動到盡可能遠的距離。 碰到墻壁或機器人時,它將停止。 然后我們使用turnRight(90)右轉(zhuǎn)。 重復此過程后,機器人將基本上沿順時針方向畫出墻壁。

4區(qū)
在這里,除了處理自動生成的ScannedRobot事件并向直接找到的機器人射擊外,我們還檢測到HitByBullet事件,并在HitByBullet旋轉(zhuǎn)180度(順時針和逆時針交替旋轉(zhuǎn))。

編譯和測試機器人

從“機器人編輯器”菜單中,選擇“ 編譯器” ->“ 編譯”以編譯機器人代碼。 我們現(xiàn)在準備嘗試我們的第一場戰(zhàn)斗。 切換回戰(zhàn)場并選擇菜單Battle- > New,以顯示類似于圖3的對話框。

圖3. New Battle對話框

將我們的機器人dw.DWStraight添加到戰(zhàn)斗中,然后添加一個對手機器人,例如sample.SittingDuck。 點擊完成 ,戰(zhàn)斗將開始。 誠然,與SeatingDuck進行戰(zhàn)斗并不太令人興奮,但是您可以了解DWStraight機器人默認情況下的功能。 與樣本集中的其他機器人進行實驗,并了解DWStraight如何與他們競爭。

當你準備好檢查另一個機器人的編碼,請即與在代碼分發(fā)提供的dw.DWRotater機器人代碼相關(guān)的話題 。 默認情況下,此機器人將:

  • 移到戰(zhàn)場中心
  • 持續(xù)旋轉(zhuǎn)槍支直到檢測到機器人
  • 在檢測到的機器人前方稍稍開火,每次嘗試不同的角度
  • 每當它被另一個機器人撞擊時,來回快速移動。

該代碼很簡單,我們將不在這里進行分析,但是我鼓勵您嘗試一下。 Robocode隨附的示例軟件包也為許多其他機器人提供了代碼。

其他機器人支持課程

隨著您在機器人設計方面的能力越來越強,可以包含在機器人中的代碼量也會大大增加。 處理代碼的模塊化方法是將其分解為單獨的Java類,然后使用打包程序?qū)⑺鼈兝壍揭粋€單獨的程序包(JAR文件)中,以將其包括在您的機器人分發(fā)中。 Robocode將自動在放置在其robots目錄中的程序包中找到機械手類。

我遇到了Robocode的創(chuàng)建者Mathew Nelson,并詢問了他創(chuàng)建Robocode的最初動機。 這是Mat必須分享的內(nèi)容:“編寫Robocode的部分動機是向世界證明,'Java速度慢'和'您不能用Java編寫游戲'這樣的說法已不再正確。我想我做到了它。”

其他機器人子類

任何人都可以創(chuàng)建Robot子類,并添加可用于構(gòu)建機器人的新功能。 Robocode提供了Robot的子類AdvancedRobot ,該子類支持異步API調(diào)用。 AdvancedRobot類的描述不在本文討論范圍之內(nèi),但是我建議您在熟悉基本Robot類的操作之后嘗試使用該高級類。

戰(zhàn)斗模擬器的架構(gòu)

通過Robocode的幕后觀察,您可以看到一個復雜的仿真引擎,該引擎既具有高性能(以便以逼真的速度渲染戰(zhàn)斗)又具有靈活性(無需阻礙即可創(chuàng)建復雜的機器人邏輯)。 特別感謝Robocode的創(chuàng)建者Mathew Nelson慷慨地提供了有關(guān)仿真引擎體系結(jié)構(gòu)的內(nèi)部信息。

利用Java平臺的設計

如圖4所示,該仿真引擎利用了大多數(shù)現(xiàn)代Java VM提供的非搶占線程,并將其與JDK GUI和2D圖形庫提供的渲染功能相結(jié)合。

圖4. Robocode仿真引擎架構(gòu)

請注意,每個模擬的機器人都在其自己的Java線程上,并在適當?shù)那闆r下利用VM的本機線程映射。 戰(zhàn)斗管理器線程是系統(tǒng)的控制器:它協(xié)調(diào)模擬并驅(qū)動圖形渲染子系統(tǒng)。 圖形渲染子系統(tǒng)本身基于Java 2D和AWT。

螺紋聯(lián)軸器松動

為了緩解共享資源的潛在問題(從而可能導致模擬引擎死鎖或阻塞),戰(zhàn)斗管理器線程和機器人線程之間需要非常松散的耦合。 為了實現(xiàn)這種松散耦合,每個機械手線程都有自己的事件隊列。 然后,在機器人自己的線程中提取并處理每個機器人的事件。 這種按線程排隊有效地消除了戰(zhàn)斗管理器線程與機器人線程之間或機器人線程本身之間的任何潛在爭用。

Robocode內(nèi)部

您可以將Robocode仿真器引擎視為一個仿真器程序,該程序在運行時需要一組插件(自定義機械手)。 這套插件可以利用提供的API( robocode.Robot類的方法)。 從物理上講,每個機械手是一個獨立的Java線程,并且run()方法包含將在該線程上執(zhí)行的邏輯。

機械手線程可以隨時調(diào)用其父級robocoode.Robot類提供的API。 通常,這將通過Object.wait()調(diào)用來阻塞機器人線程。

戰(zhàn)斗經(jīng)理線程

戰(zhàn)斗管理器線程管理戰(zhàn)場上的機器人,子彈和渲染。 模擬“時鐘”由戰(zhàn)場上渲染的幀數(shù)標記。 實際幀頻可由用戶調(diào)整。

在典型的回合中,戰(zhàn)斗管理器線程會喚醒每個機器人線程,然后等待機器人完成其回合(即再次調(diào)用阻塞API)。 該等待間隔通常為數(shù)十毫秒,即使是最復雜的機器人也往往僅以1或2毫秒的速度來使用當今典型的系統(tǒng)速度進行策略和計算。

這是戰(zhàn)斗管理器線程執(zhí)行的邏輯的偽代碼:

清單3.戰(zhàn)斗管理器的偽代碼邏輯
while (round is not over) docall the rendering subsystem to draw robots, bullets, explosionsfor each robot dowake up the robotwait for it to make a blocking call, up to a max time intervalend forclear all robot event queuemove bullets, and generate event into robots' event queue if applicablemove robots, and generate event into robots' event queue if applicabledo battle housekeeping and generate event into robots' event queueif applicabledelay for frame rate if necessary end do

請注意,在內(nèi)部for循環(huán)中,戰(zhàn)斗管理器線程將不會等待超過最大時間間隔。 如果機器人線程未及時調(diào)用阻塞API(通常由于某些應用程序邏輯錯誤或無窮循環(huán)),它將繼續(xù)戰(zhàn)斗。 SkippedTurnEvent會生成到機器人的事件隊列中,以通知高級機器人。

可替換的渲染子系統(tǒng)

當前實現(xiàn)中的渲染子系統(tǒng)只是一個AWT和Java 2D線程,它從戰(zhàn)役管理器獲取命令并渲染戰(zhàn)場。 它已與系統(tǒng)的其余部分充分分離。 可以預見,可以在以后的版本中替換它(例如使用3-D渲染器)。 在當前的實現(xiàn)中,只要將Robocode應用程序最小化,就將禁用渲染,從而使仿真以更快的速度進行。

Robocode的未來

馬修·納爾遜是通過在alphaWorks上的Robocode站點承載的討論組的Robocode用戶社區(qū)緊密的反饋回路(參見相關(guān)主題 )。 許多反饋已合并到實際代碼中。 Mathew已計劃一些即將到來的增強功能:

  • 具有不同對象和障礙物的自定義戰(zhàn)場地圖
  • 基于團隊的戰(zhàn)斗
  • 對比賽或聯(lián)賽的綜合支持
  • 用戶可選的坦克主體/槍支/雷達/武器樣式

Robocode勢不可擋

對于最近于2001年7月12日首次亮相的項目,Robocode的成名之舉簡直是驚人的。 盡管可用的最新版本尚未達到1.0(在撰寫本文時為0.98.2版),但它已成為全世界大學校園和公司計算機上非常流行的消遣方式。 Robocode聯(lián)盟(或roboleagues聯(lián)盟) Swift崛起 ,人們在此通過互聯(lián)網(wǎng)相互交流自己的定制創(chuàng)作。 大學教授正在利用Robocode的教育特性,并將其納入計算機科學課程中。 Robocode用戶組,討論列表,常見問題解答,教程和Webrings遍布整個Internet。

顯然,Robocode填補了流行的游戲和教育領(lǐng)域的空白-為學生和午夜工程師提供了一種簡單,有趣,無威脅,但具有競爭性的方式,以釋放他們的創(chuàng)造力,并有可能實現(xiàn)他們的幻想來征服世界。


翻譯自: https://www.ibm.com/developerworks/java/library/j-robocode/index.html

總結(jié)

以上是生活随笔為你收集整理的robocode_摇滚,袜子,Robocode!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91夜色视频 | 伊人伊人伊人伊人 | 麻豆一区二区三区在线观看 | 中文字幕偷拍 | 色婷婷精品视频 | 久久精品网址 | 伦在线 | av天天草 | 中文字幕日韩一级 | 日韩日日夜夜 | 超碰人人超碰 | 欧美成人一区二区视频 | 大肉大捧一进一出好爽mba | 91嫩草欧美久久久九九九 | 中文字幕久久一区 | 草草屁屁影院 | 国产男女视频在线观看 | 黄色免费网站 | 久久久国产一区 | 国产又爽又黄无码无遮挡在线观看 | 狠狠撸视频 | 久久人人爽爽人人爽人人片av | 免费看91| 亚洲一区二区电影 | 免费看黄色三级三级 | 国产亚洲自拍一区 | 国产精品自拍视频一区 | 日韩欧美中文字幕在线播放 | 中文字幕在线视频一区二区三区 | 国产黄色自拍 | 辟里啪啦国语版免费观看 | 悟空影视大全免费高清观看在线 | 日韩网站在线观看 | 日日干日日操 | 欧美色图在线播放 | 国产第一页视频 | 女教师痴汉调教hd中字 | 精品国产一区二区三区av性色 | 性感美女在线观看 | 国产日韩激情 | 日韩国产区 | 美女上床网站 | 羞羞答答一区 | 91在线网址 | 冲田杏梨 在线 | 欧美男同又粗又长又大 | 国产香蕉97碰碰碰视频在线观看 | 色网站免费在线观看 | 日本高清视频一区二区 | 人人天天夜夜 | 七月婷婷综合 | 伊人久久一区二区 | 福利视频免费 | 国产黄在线免费观看 | 日日操天天操夜夜操 | 精品一区二区三区中文字幕 | 国产www精品 | 成人性生生活性生交全黄 | 日韩人妻精品无码一区二区三区 | 噼里啪啦国语高清 | 波多野结衣调教 | 青青草免费公开视频 | 西欧毛片| 成人免费在线看片 | 国产一级特黄毛片 | 成人午夜影片 | 夜夜高潮夜夜爽国产伦精品 | 黑人巨大xxxxx性猛交 | 午夜精品久久久久久久久久久久 | 伊人久久青青草 | 国产精品伦一区二区三级视频 | 欧美一区二区三区四区在线 | 亚洲涩涩| 天堂色区 | 一级免费av| 日韩精品一区二区三区国语自制 | 美女国产精品 | 91l九色lporny| 不卡一区二区在线视频 | 五月天丁香视频 | 伊人草| 四虎影视免费看 | 青草伊人网 | 国产毛片久久久久久久 | 天天色天天爱 | 日在线视频 | av综合网站 | 日韩精品1区2区 | 另类欧美亚洲 | 张柏芝亚洲一区二区三区 | 青青草中文字幕 | 国产热99 | 亚洲国产成人精品女人久久 | 国产熟女高潮一区二区三区 | 日韩激情视频在线观看 | 永久免费无码av网站在线观看 | 中文字幕永久在线视频 | 正在播放木下凛凛88av | 中文字幕激情视频 |