科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条
科技百科
  • 人气指数: 5342 次
  • 编辑次数: 2 次 历史版本
  • 更新时间: 2009-08-24
方兴东
方兴东
发短消息
方兴东
方兴东
发短消息
相关词条
戴夫·海厄特
戴夫·海厄特
最佳编程语录大全
最佳编程语录大全
程序员笑话大全
程序员笑话大全
下一代程序员
下一代程序员
女程序员
女程序员
彼得·诺维格
彼得·诺维格
Russ Cox
Russ Cox
15名程序员界性感的奇葩
15名程序员界性感的奇葩
Mike Kruzeniski
Mike Kruzeniski
Jeff Fong
Jeff Fong
推荐词条
希拉里二度竞选
希拉里二度竞选
《互联网百科系列》
《互联网百科系列》
《黑客百科》
《黑客百科》
《网络舆情百科》
《网络舆情百科》
《网络治理百科》
《网络治理百科》
《硅谷百科》
《硅谷百科》
2017年特斯拉
2017年特斯拉
MIT黑客全纪录
MIT黑客全纪录
桑达尔·皮查伊
桑达尔·皮查伊
阿里双十一成交额
阿里双十一成交额
最新词条

热门标签

微博侠 数字营销2011年度总结 政务微博元年 2011微博十大事件 美国十大创业孵化器 盘点美国导师型创业孵化器 盘点导师型创业孵化器 TechStars 智能电视大战前夜 竞争型国企 公益型国企 2011央视经济年度人物 Rhianna Pratchett 莱恩娜·普莱契 Zynga与Facebook关系 Zynga盈利危机 2010年手机社交游戏行业分析报告 游戏奖励 主流手机游戏公司运营表现 主流手机游戏公司运营对比数据 创建游戏原型 正反馈现象 易用性设计增强游戏体验 易用性设计 《The Sims Social》社交亮 心理生理学与游戏 Kixeye Storm8 Storm8公司 女性玩家营销策略 休闲游戏的创新性 游戏运营的数据分析 社交游戏分析学常见术语 游戏运营数据解析 iPad风行美国校园 iPad终结传统教科书 游戏平衡性 成长类型及情感元素 鸿蒙国际 云骗钱 2011年政务微博报告 《2011年政务微博报告》 方正产业图谱 方正改制考 通信企业属公益型国企 善用玩家作弊行为 手机游戏传播 每用户平均收入 ARPU值 ARPU 游戏授权三面观 游戏设计所运用的化学原理 iOS应用人性化界面设计原则 硬核游戏 硬核社交游戏 生物测量法研究玩家 全球移动用户 用户研究三部曲 Tagged转型故事 Tagged Instagram火爆的3大原因 全球第四大社交网络Badoo Badoo 2011年最迅猛的20大创业公司 病毒式传播功能支持的游戏设计 病毒式传播功能 美国社交游戏虚拟商品收益 Flipboard改变阅读 盘点10大最难iPhone游戏 移动应用设计7大主流趋势 成功的设计文件十个要点 游戏设计文件 应用内置付费功能 内置付费功能 IAP功能 IAP IAP模式 游戏易用性测试 生理心理游戏评估 游戏化游戏 全美社交游戏规模 美国社交游戏市场 全球平板电脑出货量 Facebook虚拟商品收益 Facebook全球广告营收 Facebook广告营收 失败游戏设计的数宗罪名 休闲游戏设计要点 玩游戏可提高认知能力 玩游戏与认知能力 全球游戏广告 独立开发者提高工作效率的100个要点 Facebook亚洲用户 免费游戏的10种创收模式 人类大脑可下载 2012年最值得期待的20位硅谷企业家 做空中概股的幕后黑手 做空中概股幕后黑手 苹果2013营收 Playfish社交游戏架构

Mat Nelson
(图)Mat Nelson Mat Nelson

Mat Nelson是Robocode创始人,他现在是IBM Internet部门Advanced Technology的软件工程师。早在1995年,也就是开始Mat Nelson在做全职工作之前,他就开始使用Java语言了。Robocode的设计起初是为了自己娱乐,2000年后期Robocode刚开始时只是个人的努力,2001年7月以alphaWorks下载形式把这个项目放到了IBM alphaWorks上。Robocode的主要灵感来源于Brade Schick创建的一个名为Robot Battle的游戏。Mat Nelson在1995年发现了Robot Battle,并花费了无数的时间创建自己的机器人Cleaner,那时主要的挑战是一类被称为seesaw的机器人,它们会来回移动,很难击中。Cleaner在试图击中它时碰到了很多麻烦,但在引用了三角方面的知识估算到seesaw机器人的角度后,Cleaner最终爬上了比赛排行榜的首位。就这样,坦克机器人成功的诞生了。
目录

关于Robocode编辑本段回目录

Robocode 是2001年7月在美国IBM 的Web alphaWorks上公开的机器人(其图形为坦克的形状)战斗仿真引擎。与通常玩的游戏不同的是:参赛者必须利用对机器人进行编程,给机器人设计智能来自动指挥它,而不是由键盘、鼠标简单地直接控制。Robocode是一种有趣的竞赛性编程,使用几行简单的代码,就能够让你创建一个活生生的机器人,一个真正的在屏幕上与其他机器人互相对抗的机器人。你可以看到它在屏幕上四处疾驰,碾碎一切挡道的东西。机器人配有雷达与火炮,选手在躲避对手进攻的同时攻击对手,以此来较量得分的多少。

Robocode 机器人坦克游戏开发环境介绍 
-- 给使用Java的、闲着心慌的软工推荐一款代码游戏工具。这是一款程序员的游戏,可以满足学习语言、发泄好斗情绪、消磨时间的需求。

概况:1995年,Mat Nelson进入IBM,开始接触JAVA。2000年,随着JAVA语言逐渐成熟, Mat Nelson这个狂热的玩家看到了创建这个他一直想玩的游戏的机会,着手开始创建Robocode。
    2001年,IBM以 alphaWorks 下载的形式发布。2008年1月,Robocode1.5.2 最新版本发布。

源代码及安装文件下载:
http://robocode.sourceforge.net/
安装要求
  Java 5.0 or newer(Windows和Unix/Linux平台)。
  注意部分linux操作系统下,由于JSDK的内部BUG,可能无法正确安装运行。

平台参数
    方向 - 整个战场是以屏幕正上角为0度,按顺时针排列,90,180,270...。
    位置 - 整个战场的坐标是以屏幕左下角为原点,高为Y坐标,宽为X坐标。
    距离 - 游戏中规定的距离是以像素(Pixels)点为单位,如果你把屏幕缩小了,那就是以缩小后的像素点为单位,反之就是放大后的像素点为单位。
    时间 - 游戏中规定的时间是以帧(frame)或滴答(ticks)(有点像时钟滴答),或时间周期(turns),或单独的时间片(simply timeslices)为单位。 回合 比赛回合是比赛中由用户自己设置的比赛次数,默认值为10。
    帧速 - 默认为30。
    扫描 - 默认为无。
    声音 - 默认为无。

游戏规则:

    生命规则:
      相撞损失:撞到墙时,生命点损伤度=Math.abs (velocity) * 0.5 -1。撞到另一个坦克时,移动停止,生命点损失6点,扣除积分1.2分。
      击中损失:当子弹能量为1时,我们生命点损失=4 * power,如果子弹能量大于1,那么我们的生命损失+= 2 * (power-1)。
      发射损失:如果我们的子弹打中别的坦克,我们可以从子弹那窃取到3*power的能量。

    炮弹规则:
      子弹能量:子弹能量是通过函数getPower()得到的。它大于等于0.1,小于等于 3。
      子弹速度:每一颗子弹有着自身的速度,这在处理敌人向你开炮前的移动策略可是很有帮助的。子弹的速度也和它的能量有关: speed = 20 - 3 * power。由于能量范围在0.1到3之间我们可求得子弹的速度范围:11 <= bullet speed <= 19.7。

    炮管规则:
      旋转速率:炮管在每一个时间周期内旋转速率=20 度/帧(frame)
      炮管热量:当我们开火时,炮管产生的热量由子弹开火时的能量决定。即:热量=1+(firepower/5), 利用函数 getGunHeat()可以得到炮管当时的热量,只有当getGunHeat恒等于0时,我们才能再次发射子弹。
      冷却度:有热度当然就有冷却度,不冷却我们的炮管会永远不会开火的。系统设定的默认冷却速度是0.1/tick(时间周期),我们可通过函数 getGunCoolingRate()得到这个参数值。

    雷达规则:
      旋转速度:雷达以每时间周期45度的速度旋转。也即45 degrees/frame.
      扫描面积: 雷达扫描是呈扇形的,它的开始位置到终止位置的长度大约为1200。只要我们放大屏幕可以通过眼睛估算出这个面积。
      扫描排列:扫描到的数据有墙,目标,子弹等等。这些是按扫描距离来排列,从离雷达最近的物体开始到最后扫描到的物体。

    运行规则:
      前进速度:坦克最大的速度(Velocity)为8,函数getVelocity()返回了坦克当前的速度。
      加/减速度:加速度为 1 像素(pixel)/帧frame ,减速度为 2 pixel/frame。
      参考公式: 设s为距离,Vt为终速度,Vo为初速度,t为时间,a为加速度:
        位移公式 s=Vo*t+a*t*t/2
        速度公式 Vt =Vo +a*t
        平均速度公式 v=(Vt + Vo)/2=s/t
        加速度公式 a=(Vt - Vo)/t
    (这些公式高一大家都学过吧?)

    旋转规则:
      旋转速度:机器人的旋转速度和当前的速度有关即旋转速度=10 - 0.75 * getVelocity()。
      相互作用参数:雷达安装在炮上,炮安装在机器人上,它们会相互影响。如果我们向左转动炮管,而使雷达向右转动,那么雷达只会向右转动(45-20) =25度;如果两者都向右转动,雷达将向右转(45+20)=65度。同样的道理炮和机器人也是方向同相加,方向反相减。

    积分规则:
      Robot Name - 机器人的名字;
      Total Scroe - 为这次比赛你的总共得分;
      Survival - 是你存活率的得分;
      Last Survivor Bonus:你是赢的次数相对对手的分红得分;
      Bullet Dmg:是你的子弹损失得分也即发射的子弹数的得分;
      Bonus:是子弹数的分红得分;
      Ram Dmg *2是你的撞击得分;
      Bonus:是你撞击得分分红;
      最后两项Survival 1sts,是你赢的次数,不算做分数。

      所有分数加起来就是你的总分。记住在联赛并不是总分越高越好,它是算综合平均分的。其中撞击分和子弹损失分就要越少越好。你如果观察两大高手比赛的记分牌,你会发现他们的Ram Dmg 和Ram Dmg中的Bonus一般都为0。

    部分重要的接口函数介绍(全部函数参考安装文件夹下的Javadoc文件夹):
    坦克属性:
    double getBattleFieldHeight() 战场高度
    double getBattleFieldWidth() 战场宽度   
    double getHeight() 坦克高度
    String getName() 坦克名称
    double getWidth() 坦克宽度   
    double getGunHeading() 炮管角度
    double getHeading() 坦克角度
    double getRadarHeading() 雷达角度   
    double getX() 坐标X
    double getY() 坐标Y   
    double getGunHeat() 炮管热量
    double getEnergy() 能量数值
    double getGunCoolingRate() 炮管冷却比例   
    double getVelocity() 坦克速度

    运行控制:
    void ahead(double distance) 前进
    void back(double distance) 后退
    void doNothing() 空
    void fire(double power) 开火   
    void setAdjustGunForRobotTurn(boolean independent) 炮\车同向
    void setAdjustRadarForGunTurn(boolean independent) 炮\雷达同向
    void setAdjustRadarForRobotTurn(boolean independent) 雷达\车同向   
    void turnRadarLeft(double degrees) 雷达左转角度
    void turnRadarRight(double degrees) 雷达右转角度
    void turnGunLeft(double degrees) 炮左转角度
    void turnGunRight(double degrees) 炮右转角度
    void turnLeft(double degrees) 车左转角度
    void turnRight(double degrees) 车右转角度

    战斗事件:
    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 onRobotDeath(RobotDeathEvent event) 坦克死亡
    void onScannedRobot(ScannedRobotEvent event) 扫描到坦克
    void onWin(WinEvent event) 胜利   
    void run() 运行 voidscan() 扫描

    ScannedRobotEvent –雷达扫描:
    double getBearing() 获得相对自己坦克方向的角度
    double getBearingRadians() 获得相对自己坦克方向的弧度
    double getDistance() 获得距离
    double getEnergy() 获得运行能量
    double getHeading() 获得方向角度
    double getHeadingRadians() 获得方向弧度
    String getName() 获得坦克名称
    double getVelocity() 获得运行速度

    构造坦克的方式:
        Robot (常用) –支持较为全面的简单控制逻辑;
        TeamRobot –支持团队作战模式;
        AdvancedRobot –支持自定义事件.

一个比较简单的坦克框架:
(由自动生成的源码改写,可以在RobocodeIDE环境下运行)

package myrobotpackage;

import java.awt.Color;
import robocode.*;

/**
 * AHeader - a robot by (your name here)
 */
public class AHeader extends Robot
{
 /**
  * run: AHeader's default behavior
  */
 public void run() {
  // After trying out your robot, try uncommenting the import at the top, and the next line:
  SetSkin();  //换身衣服
  turnLeft(getHeading());
  while(true) {
   // Replace the next  lines with any behavior you would like
   ahead(100);
   turnGunRight(360);
   scan();
  }
 }

 /**
  * onScannedRobot: What to do when you see another robot,扫描事件
  */
 public void onScannedRobot(ScannedRobotEvent e)
 {
  SmartFire(e.getDistance());
 }

 /**
  * onHitWall:  Handle collision with wall.撞墙事件
  */
 public void onHitWall(HitWallEvent e)
 {
  //
  turnRight(180);
  ahead(2000);
 }

 /**
  * onHitRobot:  Aim at it.  Fire!撞车事件
  */
 public void onHitRobot(HitRobotEvent e)
 {
  double turnGunAmt = normalRelativeAngle(e.getBearing() + getHeading() - getGunHeading());
  turnGunRight(turnGunAmt);
  fire(1);
 }

 /**
  * onHitByBullet: What to do when you're hit by a bullet,被炮弹集中事件
  */
 public void onHitByBullet(HitByBulletEvent e)
 {
  turnLeft(90 - e.getBearing());
 }

 ///自定义函数//////////////////////////////////////////////////////////////////////////////////////////
 /* smartFire:  Custom fire method that determines firepower based on distance */
 public void SmartFire(double robotDistance) {
  if (robotDistance > 200 || getEnergy() < 15) {
   fire(1);
  } else if (robotDistance > 50) {
   fire(2);
  } else {
   fire(3);
  }
 }
 /* Set Robot Colors */
 public void SetSkin()
 {
  setBodyColor(new Color(0, 200, 0));
  setGunColor(Color.black);
  setRadarColor(Color.yellow);
  setBulletColor(Color.red);
  setScanColor(Color.yellow);
 }

 /**
  * normalRelativeAngle:  Returns angle such that -180 < angle <= 180
  */
 public double normalRelativeAngle(double angle)
 {
  if (angle > -180 && angle <= 180) {
   return angle;
  }
  double fixedAngle = angle;

  while (fixedAngle <= -180) {
   fixedAngle += 360;
  }
  while (fixedAngle > 180) {
   fixedAngle -= 360;
  }
  return fixedAngle;
 }

}

对Robocode的创始人Mat Nelson的一次采访编辑本段回目录

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

早在 1995 年,也就是 Mat Nelson 开始在 IBM 做全职工作之前,他就开始使用 Java 语言了。随着这种语言的成熟,这个狂热的玩家看到了创建这个“他一直想玩”的游戏的机会。2000 年后期 Robocode 刚开始时只是个人的努力,2001 年 7 月以 alphaWorks 下载的形式带入 IBM 后就成了一种职业工作。在这个游戏(下载次数超过了 121,000 次)和它的创始人的名声渐大之际,我们请 developerWorks 的通讯记者 Dana Triplett 对 Mat 进行了一次采访,请他谈谈是什么激发了他创建 Robocode 的灵感,以及他对 Robocode 未来发展的看法。

developerWorks:Robocode 背后的中心思想是什么? 

Nelson:Robocode 是一种有趣的竞赛性编程,而“有趣”在这里绝对是关键词。使用几行简单的代码,您就可以看着您的机器人在屏幕上四处疾驰,碾碎一切挡道的东西。在做这件事时,您将学习到一种解决目前真实问题的真实的语言。 

dW:哪些游戏曾经是您最喜欢的,您最喜欢它们的哪些方面? 

Nelson:Worms 的 Commodore 64 版(不要与目前同名的游戏混淆)是我看到的第一个游戏,它让我“教”一些东西在游戏中如何行动,然后看它们玩。我还非常喜欢战略和角色扮演游戏。这几年来令我上瘾的有哪些游戏?Civilization、Master of Orion、Sim City、Command and Conquer 系列、Warcraft/Starcraft 系列、Ultima 系列和 Diablo 系列。当然,我还玩过数百种其它的游戏,但我最喜欢的肯定是那些让我构建一样东西,然后在游戏环境中放开它,看它如何发展的游戏。 

dW:这些游戏中有哪一个是您开始创建 Robocode 时的灵感来源吗? 

Nelson:Worms,肯定是,其它的还有 C64 游戏 Mail Order Monsters。那些经典游戏中的其中一些非常棒。那时还没有图形,所以一切东西都必须可玩。那正是我正设法在 Robocode 中采用的方法:容易开始,玩起来有趣,并且让人很上瘾。 

然而 Robocode 的主要灵感来源于 Brad Schick 创建的一个名为 Robot Battle 的游戏(这个游戏本身的灵感来源于 Robot Wars 的 Apple 2 版)。我在 1995 年发现了 Robot Battle,并花费了无数的时间创建我自己的机器人“The Cleaner”。它实在是太有趣了。我看着其他人创建的机器人把它淘汰出局,然后设计了我自己的战略。那时主要的挑战是一类被称为 seesawbot 的机器人,它们会来回移动,很难击中。 Cleaner 在试图击中它们时碰到了很多麻烦。我的解决办法?我用了一点三角知识来估算 seesaw 的角度,然后向那个角度猛烈开火。我一鼓作气完成了编写,然后开心地看着 Cleaner 3 爬上比赛排行榜。 

dW:当您开始开发 Robocode 时,您心目中的观众是谁? 

Nelson:开始时,只是我自己。Robocode 是我一直想玩的游戏,所以我写了它。 

我希望即使您什么也不知道也可以玩 Robocode,而当您了解得更多时它可以与您一起成长。学起来简单,但很难精通,就象国际象棋。我把 API 设计得尽可能简单,并提供了几个样本机器人说明如何使用它。我希望任何人,从建筑师到中学生到动物园管理员,都能够让一个简单的机器人运行,并说“嗨,我写了一个 Java 程序!”。另一方面,高级用户很快意识到他们可以使用 Java 编程语言的整套功能,随心所欲地使用它为自己的机器人构建行为。

dW:现实生活中玩 Robocode 的人们让您感到过惊讶吗? 

Nelson:最大的惊讶是成功本身。我很有把握人们会有兴趣玩它,因为我 ...... 但我没想到有 那么多人!现在的下载次数超过了 100,000,真让我大吃一惊。我一直能够很惊奇(高兴)地看到人们用不同的方式使用 Robocode,而社区也一直让我感到惊喜。 

dW:Robocode 玩家建立了哪些具独创性的机器人示例? 

Nelson:有很多种,包括预测目标(不是直接向机器人开火,而是向机器人即将到达的地方开火)、跟踪和记录敌人的行为、多线程控制机器人的不同方面、即时(just-in-time)算法、躲避子弹、僵持、最优化的雷达跟踪 ......,还有很多很多。其中最优秀的机器人简直让人吃惊。我最近引入了一个全新型的战略,也就是组,所以我非常期待看到接下来还会有什么东西出现。 

dW:您想为 Robocode 添加些什么功能? 

Nelson:我想做的第一件事是把 API 重新构建为更简单、更面向对象、更具扩展性和更开放的 API。例如,我更希望看到 radar.setTurn() 而非 setTurnRadarRight() 。一旦 Radar 成了一个对象,我们就可以拥有不同类型的 Radar: setRadar(new Radar(range,speed)) 。 

作为 API 重设计的一部分,我准备解决两个突出的大问题:度数对弧度和单位圆数学(Unit circle math)。机器人将有一个单独的调用,该调用确定它们是想使用度数,还是使用弧度,而另一个调用在单位圆数学或罗盘数学(Compass math)间切换。单位圆数学用于 Java 中的所有三角方法,它的 0 度指向右,逆时针方向为正。而罗盘数学的 0 度指向上,顺时针为正。不同的程序员喜欢不同的东西,我希望在使 API 简单的同时支持它们中的全部。

另一个大问题是物理学问题。目前 Robocode 的物理学原理极其简单。为增加真实感,我准备引入力矢量。例如,加速度将会被空气阻力和滚动摩擦力抵消一部分,而不只受到“最大速率”的限制。根据摩擦力和半弹性碰撞原理,机器人撞到另一个机器人的一侧时会把它推到一边去。我以前对这些的试验使游戏比以前“酷”了许多。猛烈地撞向一个机器人并使其发出尖利的声音滑向一边,这是很有趣的。另外,前后加速将会更改;机器人向前移动时速度可以更快。

目前,撞击(Ramming)还未被充分利用,所以,我想引入机器人各部分不同的装甲力量 ― 仍然是可配置的。击中机器人的一侧将会造成更大的伤害。

我还想在竞技场中引入墙和障碍物,以及不同形状的竞技场、这将产生许多全新的战略。

因为这些更改要引入一些复杂的编程,我计划使它更容易扩充机器人。一个专家可以写一个查找墙附近路径的可重用的机器人类,而一个新手可以只使用它来快速创建一个不错的机器人(同时学习如何重用代码)。

dW:您认为将来 Robocode 会变成一个由 alphaWorks 主持的分布式游戏吗? 

Nelson:现在我主要关心简单性;引入一定程度的复杂性却不能使游戏玩起来更有趣是没有必要的。Robocode 在分布式环境中会比现在更有趣吗(现在的 Robocode 只是一种单机游戏,可以从中下载其它的机器人)?我还不确信。我的确认为有一个空间可以容纳一个趣味无穷的分布式 Java 编程游戏...... 但我认为那就是一个新游戏,不是 Robocode。 

dW:为什么您选择用 Java 编写 Robocode? 

Nelson:当我在 1995 年发现 Java 时,我马上就被迷住了。它是一种简洁、优雅的语言。使用 Java 可以比用其它语言节省一半的时间,并且做出来的东西可以在完全不同的系统上运行。 例如,Robocode 可以在 Mac OS X 上运行,而我甚至从来没接触过 Mac。 

目前,Java 速度很 快,尽管许多人仍没有意识到这一点。计算机的处理速度正以惊人的速度增长,JVM 的速度比以前任何时候都快,Java 已经成熟了,我们甚至可以用硬件加速生成图形。Java 现在已经用于客户机了,我希望 Robocode 可以帮忙促进这一点。 

dW:是什么使您想使用自己的编程技巧为程序员创建一个教育性游戏而不是创建只用于娱乐的浮华的游戏? 

Nelson:没有任何东西。我的确只是为了好玩而编写了一个浮华的游戏。我们是后来才发现它的教学用途的。 

在 25 年的玩游戏生涯中,我已经花费了无数的时间来学习如何玩游戏。我阅读手册、看帮助菜单、查阅游戏参考资料、还在 Web 上看技巧和提示。当然,与任何其它游戏一样,对 Robocode 也要做相同的事。但有一点很大的不同:手册是关于 Java 的。参考资料是 Javadoc。帮助菜单是 Java 教程。学习玩 Robocode 就是学习 Java,刚开始时我没有意识到这一点。 

我希望担任编程入门课程的教授和教师能够发现 Robocode 是一种使学习变得很有趣的好方法,并推广 Java,使人们选择使用 Java。使用几篇教程(游戏内部和外部皆可),我相信我们可以使 Robocode 成为一个更好的自学工具。我将尝试用几个简单的任务来完成我们的游戏内教程(就象“完成这 10 个任务您就能够很好地理解 Java 一样”)。稍微利用些指导,任何人都可以成为 Java 程序员。

回头看一下,很明显;它当然是一个教育工具。但 Robocode 是从一个全新的角度达到了现在的程度。Robocode 是一个游戏。但在您学习玩 Robocode 时,哦,哇唔!您学会了 Java。我的确是把 Robocode 作为一个有趣的游戏而不是教育工具来写的,而且我还将继续以这种精神开发它。但如果您在得到乐趣的同时又学会了 Java,那就太妙了!

参考文献编辑本段回目录

http://www.ibm.com/developerworks/cn/java/j-nelson/index.html
http://www.einit.com/user1/257/archives/2008/9003.html
http://cn.happycampus.com/docs/983267821901@hc06/80664/


→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: Mat Nelson 迈特·内尔森

收藏到: Favorites  

同义词: 暂无同义词

关于本词条的评论 (共0条)发表评论>>

对词条发表评论

评论长度最大为200个字符。