摘自: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,取个好名字哦相关推荐

  1. SAP UI5 初学者教程之九 - 创建第一个 Component 的试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  2. Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型

    Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型 Building a Visual Robot Model with URDF from Scratc ...

  3. SharePoint 集成PowerApps和Flow教程(二,第一个PowerApps程序)

    SharePoint 集成PowerApps和Flow教程(二,第一个PowerApps程序) 使用Excel 数据创建一个APP. 我的第一个PowerApp使用的Excel文件作为数据源,数据文件 ...

  4. ➢ 微信公众号运营教程(一)申请一个微信公众号

    ➢ 微信公众号运营教程(一)申请一个微信公众号 我们要创建一个个人公众号,首先需要申请一个公众号. 下面详细说说申请过程. 注册地址:https://mp.weixin.qq.com/ 或者直接搜索: ...

  5. Pixhawk无人机扩展教程(4)---使用Dronekit编写一个控制程序

    摘自:https://mp.weixin.qq.com/s/P1EVjYiZ_bS_Mmm9EyEX3g Pixhawk无人机扩展教程(4)---使用Dronekit编写一个控制程序 原创 CJKK ...

  6. Android基础入门教程——2.4.7 构建一个可复用的自定义BaseAdapter

    Android基础入门教程--2.4.7 构建一个可复用的自定义BaseAdapter 标签(空格分隔): Android基础入门教程 本节引言: 如题,本节给大家带来的是构建一个可复用的自定义Bas ...

  7. PR教程:3分钟制作一个简约个性片头文字动画

    PR教程:3分钟制作一个简约个性片头文字动画 简约个性文字动画片头制作,只需3分钟就可以做出来! 微信公众号:知音后期,期待你的加入!

  8. PR教程:1分钟制作一个简约文字小动画视频开场片头

    PR教程:1分钟制作一个简约文字小动画视频开场片头 微信公众号:知音后期,一个简单直接分享干货的公众号!

  9. java全景图片生成_[Java教程]使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果...

    [Java教程]使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果 0 2015-07-23 18:00:14 360度的全景图片效果常常可以用到给客户做产品展示,今天这里我们 ...

最新文章

  1. 三层交换机与路由器的主要区别
  2. mysql配置文件调优
  3. 【数理知识】《矩阵论》方保镕老师-第8章-矩阵在数学内外的应用
  4. png 微软ppt 透明度_用5个技巧教你做出让人眼前一亮的「PPT章节页」,一看就会...
  5. pku 1573 Robot Motion 第一周训练——模拟
  6. 玩转Linux必备知识(一)
  7. Selenium-IDE脚本录制,selenium-side-runner自动化测试教程
  8. html表单提交带后台,form表单提交数据给后台
  9. 999页阿里P7Java学习笔记在互联网上火了,完整版开放下载
  10. 车型代号对照表_车型代号对照表_相关文章专题_写写帮文库
  11. 内部收益率计算公式用计算机,用excel怎么计算内部收益率?
  12. 小游戏1024纯C语言
  13. 方框加对勾怎么输入_Word文档里的□(方框)里怎么加入√(对勾)?
  14. 最牛逼的java代码_分享史上java最牛逼 最简短的代码-Go语言中文社区
  15. html表格左右布局,css table布局大法,解决你大部分居中、多列等高、左右布局的问题...
  16. 计算文本相似度-Word2Vec计算
  17. 筷云解读企业上云:为什么上云?选什么上云?
  18. systemtap工具使用介绍
  19. 计算机丢失quartz.dll什么意思,计算机中丢失quartz.dll解决方法
  20. 那是你的计算机怎么用英语表示,“I potato you”可不是“我土豆你”,那这个potato到底啥意思?...

热门文章

  1. queue double java_一文弄懂java中的Queue家族
  2. requirejs加载顺序_教你5分钟学会用requirejs(必看篇)
  3. irobot擦地机器人故障_33款扫地机器人口碑:售价6350元的戴森口碑垫底,小米、科沃斯谁更好用?...
  4. 蓝桥杯单片机stc15f2k60s2 中断函数代码模板注释
  5. 挑战记忆力-Web前端实现记忆纸牌游戏(JS+CSS)
  6. matlab基础试题,MATLAB基础试题题目及答案,课程2020最新期末考试题库,章节测验答案...
  7. xampp命令行连接MySql数据库
  8. 服务器预装操作系统,服务器预装操作系统吧
  9. python协成_Python协程技术的演进
  10. 自定义键盘码_无线+矮轴≤299?ikbc S200 2.4G 机械键盘测评