LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1988|回复: 10

Java机器人!体验全球流行的属于自己的Java游戏

[复制链接]
发表于 2005-5-13 17:50:05 | 显示全部楼层 |阅读模式
主页:http://robocode.sourceforge.net/


    如果您一直在关注 developerWorks 和 alphaWorks 的话,您会看到一个名为 Robocode 的小东西的巨大能量:Robocode 是一个比较上瘾的游戏,刚好可以用于 Java 编程教学。Mat Nelson 在过去 18 月内已经付出了一段宝贵的时间来开发 Robocode。起初是为了自己娱乐,后来就成了一份认真的工作,把他心爱的这个项目放到了 IBM alphaWorks 上。现在已经到了他收获的时候。Robocode 的成功用“爆炸性”来描述一点也不过分 — 而这才只是个开头。

    Robocode 是一个很容易使用的机器人战斗仿真器,可以在所有支持 Java 2 的平台上运行。您创建一个机器人,把它放到战场上,然后让它同其他开发者们创建的机器人对手拼死战斗到底。Robocode 里有一些预先做好的机器人对手让你入门,但一旦您不再需要它们,就可以把您自己创建的机器人加入到正在世界范围内形成的某个联盟里去和世界最强手对阵。

    每个 Robocode 参加者都要利用 Java 语言元素创建他或她的机器人,这样就使从初学者到高级黑客的广大开发者都可以参与这一娱乐活动。初级的 Java 的开发者们可以学习一些基础知识:调用 API 代码、阅读 Javadoc、继承、内部类、事件处理等等。高级开发者们可以在构建“最优品种”的软件机器人全球竞赛中提高他们的编程技巧。在本文中,我们将介绍 Robocode,并指导您从构建您平生第一个 Robocode 机器人开始征服世界。我们还将看一下迷人的“后台”机制,正是它使得 Robocode 起作用。
 楼主| 发表于 2005-5-13 17:51:19 | 显示全部楼层
Robocode 的未来
通过 alphaWorks Robocode 站点上的一个讨论组(请参阅参考资料),Mathew Nelson 可以同 Robocode 用户社区保持紧密的反馈联系。许多反馈都并入了真实的代码中。Mathew 已计划即将要进行的一些改进有:

通过不同的物体和障碍来定制战场地图
基于团队的战斗
对联赛或联盟的集成支持
用户可选择坦克车体/炮/雷达/武器的样式
挡不住的 Robocode 风潮
对于一个从 2001 年 7 月 12 日出现在公众面前的项目,Robocode 的出名简直让人吃惊。尽管最新的可用版本还不到 1.0(在写这篇文章时是版本 0.98.2),但它已经是全世界的大学校园以及公司的 PC 机上颇受欢迎的娱乐活动了。Robocode 联盟(或 roboleagues)正如雨后春笋般出现,在这些联盟里,人们通过因特网让自己定制的作品相互较量。大学教授们一直在挖掘 Robocode 的教育特性,并且已经把它纳入了大学里的计算机科学课程。在因特网上,Robocode 用户组、讨论列表、FAQ、教程和 Webring 随处可见。

显然,Robocode 已经填补了大众化的寓教于乐领域的空白 — 它为学生们和熬夜的工程师们提供简便、有趣、非胁迫却富竞争力的方式,释放他们的创造力,而且有可能实现他们征服世界的梦想。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-13 17:56:40 | 显示全部楼层
给大家看一张截图,学习娱乐两不误的经典范例.
编写自己的机器人,让它征服世界!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2005-5-15 02:06:35 | 显示全部楼层
不错,自己编机器人来打仗,正在看他的javadoc。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-15 10:37:14 | 显示全部楼层
我的机器人已经能够精确定目标的坐标了
我的机器人的源代码:
  1. package rw;
  2. import robocode.*;
  3. //import java.awt.Color;

  4. /**
  5. * RWTrack - a robot by (your name here)
  6. */
  7. public class RWTrack extends Robot
  8. {
  9.         /**
  10.          * run: RWTrack's default behavior
  11.          */
  12.         public void run() {
  13.                 // After trying out your robot, try uncommenting the import at the top,
  14.                 // and the next line:
  15.                 //setColors(Color.red,Color.blue,Color.green);
  16.                 while(true) {
  17.                         // Replace the next 4 lines with any behavior you would like
  18.                         ahead(100);
  19.                         turnRight(90);
  20.                         ahead(100);
  21.                     turnRadarRight(360);
  22.                        
  23.                         //turnRadarRight(360);
  24.                         //turnRight(100);
  25.                         //turnRadarRight(360);
  26.                 }
  27.         }

  28.         /**
  29.          * onScannedRobot: What to do when you see another robot
  30.          */
  31.         public void onScannedRobot(ScannedRobotEvent e)
  32.     {
  33.                 System.out.println("heading  "+getHeading());
  34.                 System.out.println("getBearing  "+e.getBearing());

  35.                 turnGunRight(e.getBearing());
  36.                 fire(1);
  37.                 ahead(50);
  38.                 turnRight(60);
  39.                 turnGunRight( 360 - e.getBearing());
  40.                
  41.                 double heading = e.getBearing() + getHeading();
  42.                 double distance = e.getDistance();
  43.                 double ager_bearing = Math.toRadians(heading % 360);
  44.                 double genyX = getX() + Math.sin(ager_bearing) * distance;
  45.                 double genyY = getY() + Math.cos(ager_bearing) * distance;
  46.                
  47.                
  48.                
  49.                 int LEFT = -1;
  50.                 int RIGHT =        1;
  51.                
  52.                 out.println("genyX:" + Math.round(genyX));
  53.                 out.println("genyY:" + Math.round(genyY));
  54.                
  55.                 if (heading >= 360)
  56.                         heading = heading - 360;
  57.                 if (heading < 0)
  58.                         heading = heading + 360;
  59.                 double bearing = getRadarHeading() - heading;
  60.                 double radar_direction;
  61.                 if (0 <= bearing && bearing <= 180)
  62.                 {
  63.                         radar_direction = LEFT;
  64.                 }
  65.                 else if (bearing <= -180)
  66.                 {
  67.                         radar_direction = LEFT;
  68.                         bearing = (360 + bearing);
  69.                 }
  70.                 else if (bearing < 0)
  71.                 {
  72.                         radar_direction = RIGHT;
  73.                         bearing = (-bearing);
  74.                 }
  75.                 else
  76.                 {
  77.                         radar_direction = RIGHT;
  78.                         bearing = (360 - bearing);
  79.                 }
  80.                 double radar_degree = bearing * 1.3;
  81.                 if (radar_direction == RIGHT)
  82.                 {
  83.                         turnRadarRight (radar_degree);
  84.                         //execute();
  85.                 }
  86.                 else
  87.                 {
  88.                         turnRadarLeft(radar_degree);
  89.                         //execute();
  90.                 }

  91.     }
  92.         /**
  93.          * onHitByBullet: What to do when you're hit by a bullet
  94.          */
  95.         //public void onHitByBullet(HitByBulletEvent e) {
  96.                 //turnLeft(90 - e.getBearing());
  97.         //}
  98.        
  99. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-15 11:37:53 | 显示全部楼层
以前程序员上有一期做过比较详细的介绍的。
回复 支持 反对

使用道具 举报

发表于 2005-8-15 18:47:06 | 显示全部楼层
偶也想学
回复 支持 反对

使用道具 举报

发表于 2005-8-16 10:14:46 | 显示全部楼层
以前还真不知道,谢谢  现在就去。
回复 支持 反对

使用道具 举报

发表于 2005-9-17 01:17:49 | 显示全部楼层
看起来不错,目前最新版本是1.0.7
顶一下
回复 支持 反对

使用道具 举报

发表于 2005-9-19 12:25:22 | 显示全部楼层
只能用java么,太郁闷了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表