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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Robocode教程2——你的第一个robo,取个好名字哦

發布時間:2025/3/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Robocode教程2——你的第一个robo,取个好名字哦 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘自:http://site.douban.com/widget/notes/7736245/note/210029011/

?

?你需要準備的東西:
1.c語言的知識和一點點的java知識,robocode意在學習java,不要要太深的java水平,你只要理解java和c的區別就可以了。
2.robocode API,這個以后會經常用到,幾乎不能離開,相當于方法字典,robocode的所有方法都在里面。下載地址:http://115.com/file/e765xcsb#javadoc.zip
網頁版:http://robocode.sourceforge.net/docs/robocode/

好了,興趣是最好的老師,我們先拋開那些繁瑣的參數、坐標、算法,先建立一個簡單的robo試試。
打開robocode,選擇【Robot】->【Editor】,打開editor后,選擇【new】->【Robot】,給robo取個好名字吧,比如Tiny,那是因為我玩dota游戲喜歡小小,robo也很小,可是功能卻很強大的。

?


下面是輸入機器人的包,包是java中的一個概念,這里我們暫且把它當成文件夾來看吧。我們就輸入自己的名字就ok了。

?


下面我分別對其默認生成的代碼進行解釋:
package cm;
import robocode.*; //cm就是我的包,import是告訴java你要在在你的工程中使用robocode
import java.awt.Color;

public class Tiny extends Robot //告訴java,我寫的這個是一種“Robot”,叫做“Tiny”
{
????????public void run() { //run()方法是戰斗開始時默認調用的,我們在這里寫自己的代碼
????????????????while(true) {
????????????????????????ahead(100);//向前100像素
????????????????????????turnGunRight(360);//把gun向右轉動360度
????????????????????????back(100);//后退100像素
????????????????????????turnGunRight(360);//把gun向右轉動360度
????????????????}
????????}
?/*以on開頭的方法都是事件觸發方法,熟悉單片機的同學可能知道,這相當于單片機里面的中斷,每當程序遇到一個觸發事件時,將停止主方法的運行而運行觸發方法,運行后再返回主方法。
*/
????????public void onScannedRobot(ScannedRobotEvent e) { //每當雷達掃描到敵人
????????????????fire(1);
????????}
????????public void onHitByBullet(HitByBulletEvent e) {//每當被子彈擊中
????????????????back(10);
????????}
????????public void onHitWall(HitWallEvent e) {//每當撞墻
????????????????back(20);
????????}
}

package為機器人建立包“cm”,以后我這個機器人的源文件就存放在這個包里面了,然后導Robocode.* 這是編寫機器人必不可少的一句代碼。因為所有機器人都是在Robocode平臺下運行,Robocode包為我們提供了所有編寫機器人的應用程序接口。接下來被注釋掉的一句是導入java.awt.Color,當你要為機器人設置顏色的時候:setColors(Color bodyColor,Color gunColor,ColorradarColor),它就必不可少,如果少了導入Color這一句,編譯是不會通過的。setColors參數有三個,分別是指定車身,炮,雷達各自的顏色。public class Tiny extends Robot {...}機器人的名字是Tiny,代碼表明建立了一個公有類Tiny繼承Robot,必須建立公有的類,現在的Tiny是一個簡單機器人。而我們將要打造的不僅僅是繼承簡單機器
人,而是高級機器人(AdvancedRobot)。能夠高效率運行的機器人都是繼承的AdvancedRobot,因為Robot是線程阻塞式的,AdvancedRobot是線程非阻塞式的。他們的區別比較明顯,分析while(true){}里面的代碼來理解線程阻塞與非阻塞就比較容易了。

在Robocode中每一個機器人都是一個獨立的線程,我們知道不管是extends Thread還是implementsRunnable 都要實現public void run()方法,這是必不可少的。為了保證機器人不斷的運行自己的程序,所以線程中用了while(true)循環。在每一次循環中,ahead(100)機器人向前運動100象素,接著turnGunRight(360) 右轉炮360度,因為沒有使用setAdjustRadarForGunTurn(true),所以雷達會隨著炮的轉動而同步轉動,雷達在轉動的時候自動掃描周圍的敵人,如果發現敵人,那么ScannedRobotEvent事件發生。系統默認寫好的代碼只有一句:fire(1)發射能量為1的炮彈,如果敵人在炮彈到達時還在原地,恭喜!命中目標了。接下來,機器人就會執行back(100)后退100象素,然后turnGunRight(360)掃描敵人。繼續下一次的循環。

最后這個機器人還寫了一個事件:onHitByBullet(HitByBulletEvent e)機器人被敵人的炮彈擊中后就發生了這個事件。turnLeft(90-e.getBearing())車身左傳一個角度,這個角度的值是90-e.getBearing(),e.getBearing()是獲得炮彈與車身的相對角度,左轉后,車身的角度會與炮彈飛來的直線成直角,這樣有利于躲避下一次的炮彈攻擊。

好了,我們的第一個robo就完成了,是不是很簡單呢?只要移動,掃描,發現目標,fire!

選擇【compiler】->【compile】編譯就ok了。

最后進入戰斗界面,新建一個戰斗,看看我們的Tiny是不是在里面呢?Tiny,its your show time!

?

?

轉載于:https://www.cnblogs.com/KeenLeung/archive/2012/06/18/2553057.html

總結

以上是生活随笔為你收集整理的Robocode教程2——你的第一个robo,取个好名字哦的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。