Robocode教程2——你的第一个robo,取个好名字哦
来源:互联网 发布:php markdown 编辑器 编辑:程序博客网 时间:2024/04/30 02:06
你需要准备的东西:
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 voidonScannedRobot(ScannedRobotEvent e) { //每当雷达扫描到敌人
fire(1);
}
public voidonHitByBullet(HitByBulletEvent e) {//每当被子弹击中
back(10);
}
public voidonHitWall(HitWallEvent e) {//每当撞墙
back(20);
}
}
package为机器人建立包“cm”,以后我这个机器人的源文件就存放在这个包里面了,然后导Robocode.*这是编写机器人必不可少的一句代码。因为所有机器人都是在Robocode平台下运行,Robocode包为我们提供了所有编写机器人的应用程序接口。接下来被注释掉的一句是导入java.awt.Color,当你要为机器人设置颜色的时候:setColors(Color bodyColor,Color gunColor,ColorradarColor),它就必不可少,如果少了导入Color这一句,编译是不会通过的。setColors参数有三个,分别是指定车身,炮,雷达各自的颜色。public classTiny 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!
- Robocode教程2——你的第一个robo,取个好名字哦
- Robocode教程2——你的第一个robo,取个好名字哦
- Robocode教程3——Robo机器剖析
- Robocode教程3——Robo机器剖析
- 建造你的第一个Java Robocode
- 我的第一个Robocode
- Robocode教程4——Robocode的游戏物理
- Robocode教程4——Robocode的游戏物理
- Robocode教程6——用eclipse来写你的机器人!
- Robocode教程6——用eclipse来写你的机器人!
- Robocode教程5——Enemy类
- Robocode教程7——雷达锁定
- Robocode教程8——AdvancedRobot
- Robocode教程5——Enemy类
- Robocode教程7——雷达锁定
- Robocode教程8——AdvancedRobot
- 码出你的第一个Django app——Django官方教程(一)
- Robocode 编写第一个机器人
- 青蛙跳台阶(斐波那契数列应用)
- Android SDK4.2 (API17) 开发环境的搭建
- 水星 MW4530R OpenWrt 安装 GoAgent, 利用Gevent实现GoAgent稳定运行
- Bomb lab
- OpenWrt安装迅雷成功,实现BT emule等多协议下载
- Robocode教程2——你的第一个robo,取个好名字哦
- Android4.0 WiFi 源码解读
- win7 防火墙开启ping
- OpenCV改变图像大小的操作,resize与图像金字塔方法
- Windows 中,显示 USB图标但是点击无效的解决办法
- try-catch-finally 引发的奇怪问题
- ubuntu12.04安装与使用Xilinx_ISE_DS_14.4
- Android初试--熟悉Android工程的目录结构以及相关文件
- Java实现通用组合算法