六合彩

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    六合彩 - Presentation Transcript

    1. 第一部分:安装与简介
      • Robocode 是一个教你 java 编程 的 游戏 ,你可以充分发挥你的创造力,用 java 编写你自己的 tank killer ,你的最终目标是摧毁其他的 tank.
      • Robocode 是一种 有趣 的竞赛性编程,而“有趣”在这里绝对是关键词。使用几行简单的代码,您就可以看着您的机器人在屏幕上四处疾驰,碾碎一切挡道的东西。在做这件事时, 您将学习到一种解决目前真实问题的真实的语言。
      Robocode 创始人 : Mat Nelson
    2. 1.Robocode 初体验
      • 1. 比赛官方网站下载 : http://www.robocodechina.com/
      • 2. 蓝杰网下载中文平台及资料 : http:// robocode.NetJava.cn
      • 3. 安装及启动:要求 jdk1.5 及其以上版本 , 双击 RoboCode.jar
      • 4. 安装目录结构
      • robots : 编译过后的机器人及源代码
      • robocode_src: IBM Robocode 平台源码
      • robocode_doc: 机器人开发 java 文档
      • 5. 进入战斗 !
    3. 2.Robocode 是什么?
      • Robocode 是一个游戏开发平台? Java 学习工具?教学软件 ?
      • 有可能在闪躲炮弹和执行精确攻击的演练中学会 调用 API 代码、阅读 Javadoc 、继承、内部类、事件处理等等。高级开发者们可以在构建“最优品种”的软件机器人全球竞赛中提高他们的编程技巧。 ?
      • Robocode 这个游戏为全世界的 Java 开发者实现这个愿望,它寓教于乐 , 把游戏风潮变成了学习工具,现在我们就开始着手建造属于自己的、定制的、小而精悍的战斗机器。
      • Robocode 的创建者 Mathew Nelson ,向世人宣布了他教创建 Robocode 最初的设计目的。 Mat 所说的是:“编写 Robocode 的一部分目的是为了向世界证明:象‘ Java 比较慢’以及‘ Java 不可以用来写游戏’之类的论断不再正确。我认为我证明了这一点。
    4. 3.IBM Robocode 平台玩法说明
      • 1. 主窗体组成: 战场:机器人战斗区域
      • Robot Info: 查看己投入机器人信息及调试信息
      • Main Control: 对战局中的机器人进行控制,如调整时间
      • 2. 主要菜单功能: 添加机器人、系统配置、查看机器人信、比赛规则
      • 3. 坦克机器人的结构:
      • 之所以加上机器人三字,是你可以通过编程(由一个或多个 Java 类构成)的方法,将你的智慧赋于你所创建的小坦克 , 这个小坦克的生死成败是你决定的 --- 其实你就可以让为它是你在战争中的化身!
      • 机器人坦克车( Vehicle )、炮( Gun )以及雷达( Radar )都可以单独旋转,也 就是说,在任何时刻,机器人坦克车、炮以及雷达都可以转向不同的方向。缺省情况下,这些方向是一致的,都指向坦克车运动的方向。
    5. 4. 十分钟 , 编写你的机器人 !
      • 现在 , 该我们动手打造自己的机器人了
      • 1. 在 Eclipse( www.Eclipse.org ) 中创建新项目
      • 2. 将 robocode.jar 加入项目类库
      • 3. 编写一个继承自 robocode.Robot 的 java 类 --- 这就是我们的机器人 .
      • 4. 将 robocode 平台的开发者目录指向 ec 编译后的目录 .
      • 5. 在 robocode 平台中 , 选择”战争”菜单 , 即可将我们的机器人投入战场 --- 当然 , 这是一个什么也不做 , 只会等着 挨打 的机器人 . 
    6. 第二部分:开发自己的机器人
      • 一个机器人 , 就是一个 java 对象 , 实际上,每个机器人都是一个独立的 Java 线程,同时 run() 方法内包含了每个线程上将要执行的逻辑。
    7. 1. 平台的方向及坐标系统
      • 坐标系: Robocode 整个坐标系都是战场屏幕以左下角为原点
      • 绝对方向系: Robocode 中不管机器人在哪个方向都是以静态战场屏幕为参照的绝对角度(也即大家说的 Heading ) , 正上方为 0 度角。也即不管是 Robot,Gun,Radar 向北为 0 ,向东为 90 ,向南为 180 ,向西为 270 。
    8. 2. 机器人基类 Robot 介绍
      • 1. 通常的情况下,我们的每个机器人都是继承自 robocode.Robot 类的一个对象;事实人,每个机器人会做为一个独立线程被游戏平台来运行。这意味着,我们自己的机器人所执行的动作的起点就是 run() 方法。
      • 2. 查看平台自带的机器人源码示例
      java.lang.Runnable.java robocode.Robot.java YourRobotImp.java
    9. 3.Robot 详解 : 之动作命令
      • ahead(double distance) 和 back(double distance) 使机器人移动指定的像素点距离;这两个方法在机器人碰到墙或另外一个机器人时即告完成。
      • turnRight(double degree) 和 turnLeft(double degree) 使机器人转过一个指定的角度。
      • turnGunRight(double degree) 和 turnGunLeft(double degree) 使炮可以独立于坦克车的方向转动。
      • turnRadarRight(double degree) 和 turnRadarLeft(double degree) 使炮上面的雷达转动,转动的方向也独立于炮的方向(以及坦克车的方向)。这些命令都是在执行完毕后才把控制权交还给程序。此外,转动坦克车的时候,除非通过调用下列方法分别指明炮(和雷达)的方向,否则炮(和雷达)的指向也将移动。
      • setAdjustGunForRobotTurn(boolean flag) :如果 flag 被设置成 true ,那么坦克车转动时,炮保持原来的方向。
      • setAdjustRadarForRobotTurn(boolean flag) :如果 flag 被设置成 true ,那么坦克车(和炮)转动时,雷达会保持原来的方向。
      • setAdjustRadarForGunTurn(boolean flag) :如果 flag 被设置成 true ,那么炮转动时,雷达会保持原来的方向。而且,它执行的动作如同调用了 setAdjustRadarForRobotTurn(true)
      • scan () 调用雷达扫描其它机器人,一但扫到,即调用 onScannedRobot 方法.
    10. 4.Robot 详解 : 获取机器人信息
      • getX() 和 getY() 可以捕捉到机器人当前的坐标。
      • getHeading() 、 getGunHeading() 和 getRadarHeading() 可以得出坦克车、炮或雷达当前的方向,该方向是以角度表示的。
      • getBattleFieldWidth() 和 getBattleFieldHeight() 可以得到当前这一回合的战场尺寸。
      •   getEnergy () 返回当前机器人的能量值 .
      • getHeading () 机器人的正面角度值 .
      • getGunHeading () 炮筒的正面角度值
      • getRadarHeading () 雷达的正前方角度值
      • 注意 , 机器人在移动时 , 基于如下位置参数标准 :
      • heading: 是机器人方向与屏幕正上方的角度差 , 方向在 0 到 360 之间 .
      • bearing :是机器人的某个部件如雷达发现的目标与方向的角度差,顺时针为正角度在 -180 到 180 之间 .
      • 系统坐标使用 X.Y 来表示 . 坐标原点 (0,0) 在屏幕的左下角 . X 的右边为正 . Y 的上面为正 .
    11. 5.Robot 详解 :Robocode 平台的事件
      • void onScannedRobot (ScannedRobotEvent event)           你的雷达扫描到另个一个机器人时 , 这个方法被调用 . 当然,这个方法最有用了!
      •  
      •   void onPaint (Graphics2D g) 每次在屏上重绘机器人时 , 这个方法被调用 .( 如果你需要在战场上绘制一些特别的东东,就写到这个方法里 )
      • void onBulletHit ( BulletHitEvent  event) 当你击中另外一个机器人时被用 . 
      • void onBulletHitBullet ( BulletHitBulletEvent  event) 当你的炮弹与与其它机器人的炮弹碰到一起时 . 
      • void onBulletMissed ( BulletMissedEvent  event) 你的炮弹消失 ( 未击中 ) 时调用
      • void onDeath ( DeathEvent  event) 你完蛋时被调用的方法 . 
      • void onHitByBullet ( HitByBulletEvent  event) 中弹时被调用 .
      •   void onHitRobot ( HitRobotEvent  event) 撞到另个一个机器人时被调用 . 
      • void onHitWall ( HitWallEvent  event) 撞到墙时被调用 .
      • void onWin ( WinEvent  event) 如果你赢得本局时 , 这个方法将被调用 .
    12. 6.Robot 详解 :java 平台的事件支持
      • 如果你要开发一个由鼠标或键盘控制的机器人,实现以下事件就是必不可少了!
      • void onKeyPressed (KeyEvent e) 键盘按键被按下时调用的事件 . 
      • void onKeyReleased (KeyEvent e) 键盘按键释放时调用的事件 . 
      • void onKeyTyped (KeyEvent e) 键盘按键事件发生时调用的事件
      • void onMouseClicked (MouseEvent e) 鼠标点击时调用的事件 (pressed and released). 
      • void onMouseDragged (MouseEvent e) 鼠标按住拖动时调用的事件 . 
      • void onMouseEntered (MouseEvent e) 鼠标进入战区域时调用的事件 .
      • void onMouseExited (MouseEvent e) 鼠标离开战区域时调用的事件 . 
      • void onMouseMoved (MouseEvent e) 鼠标移动时调用的事件 . 
      • void onMousePressed (MouseEvent e) 鼠标按下时调用的事件 . 
      • void onMouseReleased (MouseEvent e) 鼠标按键释放时调用的事件 . 
      • void onMouseWheelMoved (MouseWheelEvent e) 鼠标滚动时调用的事件 :  
    13. 7.Robot 详解 : 射击命令!
      • 必要的情况下,如在 void onScannedRobot (ScannedRobotEvent event) 方法内部,一般就是开火了;
      • 很简单,调用 fire(double power) 用来发射指定能量(火力)的炮弹就OK了。
      • 能量消耗规则 : 每个机器人在开始时都有一个缺省的“能量级别” (100) ,当它的能量级别减 小到零的时候,我们就认为这个机器人已经被消灭了。射击的时候,机器人最多可以用掉三个能量单位 ( 即 fire 方法参数值最大为 3) 。提供给炮弹的能量越多,对目标机器人所造成的损害也就越 大。炮弹威可分为力 1 、 2 、 3 级,造成的伤害为 4 、 6 、 8 。发射时减少自己相应能量,击中后自己的 energy 增加 3*power 。
    14. 8. 开发自己的机器人!
      • 1. 在 Eclipse 中新建项目
      • 2. 将 Robocode.jar 加入到项目类库
      • 3. 编写一个继承 robocode.Robot 的类
      • 4. 在 run() 方法中实现机器人的控制;
      • 5. 实现相关需要调用的事件处理编码.
    15. 9. 代码示例:
      • 清单 2. MyRobot 机器人代码的增加部分
      • public void run() {
      • // 为了使机器人处于已知状态,我们通过 turnLeft(getHeading()) 使它转到 0 度的方向。
      • turnLeft(getHeading());
      • /* 在这个重复性的部分,我们使用语句 ahead(1000) 让机器人尽其所能向前移动到最远的地方。当机器人撞到墙或其他机器人时,就会停下来。接着,我们通过 turnRight(90) 使它向右转。在重复执行这一行为时,机器人基本上是在沿着墙按 // 顺时针方向移动。 */
      • while(true) {
      • ahead(1000);
      • turnRight(90);
      • }
      • }
      • // 重写 ScannedRobot 事件,当发现的机器人时直接射击。
      • public void onScannedRobot(ScannedRobotEvent e) {
      • fire(1);
      • }
      • // 我们还会检测 HitByBullet 事件,被击中的时候转过 180 度(沿顺时针方向或逆时针方向)。
      • public void onHitByBullet(HitByBulletEvent e) {
      • turnLeft(180);
      • }
    16. 10. 将它投入战场!
      • 1. 在 robocode 平台上配置机器人类库
      • 2. 与 Eclipse 联调机器人
      • 3. 更多功能示例:
      • 调试机器人
      • 走方框的机器人实现
      • 在战场上绘制出机器人的坐标 . . .
    17. 11. 提高部分
      • 挑战你永无止境的智慧!还需要 :
      • 预测目标(不是直接向机器人开火,而是向机器人即将到达的地方开火)、跟踪和记录敌人的行为、多线程控制机器人的不同方面、即时( just-in-time )算法、躲避子弹、僵持、最优化的雷达跟踪 ......
      • 1. 更复杂的机器人控制,需要编写 robocode. AdvancedRobot 类实现.
      • 2. 需要进一步学习相关数据知识乃至人工智能方面的知识 .
      • 更多资源,请登陆 http://robocode.NetJava.cn

    + 香港六合彩 香港六合彩 , 2 years ago

    custom

    438 views, 0 favs, 0 embeds more stats

    冯琳哈六合彩哈的笑着抱着欣欣看也没 more

    More Info

    © All Rights Reserved

    Go to text version
    • Total Views 438
      • 438 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as innappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel

    Categories

    Tags