欢迎来到 CodeTank 的世界,将会带你进入一个神奇充满挑战的代码机器人的世界!

CodeTank(代码坦克)是全世界首个 Javascript 程序员的在线编程对战游戏,是由 腾讯 AlloyTeam 和 HTML5 梦工场联合出品的在线坦克仿真游戏平台,CodeTank 采用 HTML5、Javascript、CSS3、NodeJS、MongoDB 等全新 Web 技术来构建一个基于互联网的在线智能坦克机器人战斗仿真引擎(所以需要支持 HTML5 的浏览器来运行)。

{编程游戏} 也叫 {代码游戏},有许多软件是基于这种思想的,著名的 Robocode 就是来源于机器人大战 Robot Battle 这款软件。Robocode 是 2001 年 7 月在美国 IBM 的 Web alphaWorks 上发布的坦克机器人战斗仿真引擎。不过随时互联网的飞速发展,Robocode 已经开始变得落后。所以,现在有了 Javascript 语言的基于互联网的在线编程对战游戏——CodeTank 代码坦克!

相信每一个男人的内心深处,都有一份对坦克的特殊情结,而用 Javascript 代码来直接控制坦克进行战斗更是会让广大程序员热血沸腾的事情!欢迎大家访问我们的游戏网址:Http://CodeTank.AlloyTeam.com

CodeTank 代码坦克介绍

CodeTank 是一个非常有趣的竞赛性编程游戏平台,通过几行简单的 Javascript 代码和 CodeTank API,每个人都可以方便的构建属于自己富有智能和个性的坦克(Tank)机器人,并通过互联网进行在线互动和竞赛!因为 CodeTank 是纯正的 HTML5 的游戏,所以需要支持 HTML5 的浏览器来运行,经过测试通过的浏览器有 Chrome、Safari、Opera、Firefox、IE9+。

CodeTank 是 Code Game(代码游戏,也叫编程游戏)的一种,可以让你在娱乐的同时学习和提高 Javascript 编程水平以及进行人工智能的研究。它使用 HTML5、CSS3 等 Web 新技术构建的在线平台,天然的基于互联网,Tank 机器人的代码不需要人工上传下载,可以直接在线运行与其他选手进行战斗。

 

与通常玩的游戏不同的是:玩家需要使用 Javascript 对坦克机器人进行编程,通过给机器人设计智能的代码逻辑来指挥它探测敌人、发动攻击、躲避炮弹等等,而不是由键盘、鼠标直接控制。使用几行简单的代码,就能够让你创建一个活生生的坦克机器人(TankRobot),一个真正的在屏幕上与其他机器人互相对抗的机器人。

Tank 机器人除了可以灵活行走的 Tank 车身(Body)外,还配有雷达(Radar)火炮(Gun),玩家在探测对手、攻击对手的时候,还需要躲避对手的进攻,在有限的能量消耗殆尽前看谁先把对方消灭,最终以击中目标和未被对手击中的次数来衡量得分的多少。

全世界 Javascript 程序员的游戏

Javascript 是目前世界上最精彩的语言,也是最被误解、最受争议的语言。Javascript 被数百万计的网页用来改进设计、验证表单、检测浏览器、创建 cookies,以及更多的应用,是属于网络的脚本语言,是目前互联网上最流行的脚本语言。

TIOBE 近日公布了 2012 年 3 月份的编程兵器谱排行榜,本月的排行榜最大的看点莫过于 Javascript 连升 2 名重新回到了第 8 名的位置,超越了 Perl 和 Python。

Javascript 的复苏使一些业界领袖人物也不得不开始重新审视这种编程语言。Stuart Halloway 曾经在一次 JS 的分享上说过:“在不久的将来,Javascript 将被公认为是一种拥有开发现代应用程序所需的一整套新特性的语言” 。他继而介绍说 Javascript 程序要比类似的 Java 程序紧密十倍。

目前 HTML5 和 NodeJs 受到了不少开发者的火热追捧预计,Javascript 的普及不久将会得到进一步的提升,Javascript 从过去装饰性的一种脚本语言转变为主流的编程语言,人们用它来开发更大更复杂的程序,这就需要 Web 开发人员更深入的了解 Javascript,了解它的过去、现在和未来。

所以 CodeTank 提供给广大初学 Javascript 的开发者一个新选择,通过 CodeTank 可以非常有趣的开始学习 Javascript。

CodeTank 使用 HTML5 的 Canvas 特性来渲染游戏画面,使用了 Javascript 的 OOP(面向对象编程)技术,通过这个编程游戏,初学 Javascript 的开发者会很容易上手写出一个可以在屏幕自由运动的坦克,可以大大提高对 Javascript 的编程兴趣,让你在娱乐的同时学习与提高 Javascript 知识和编程能力。

CodeTank 的微博:

CodeTank 官方 QQ 群:260709915

腾讯 AlloyTeam 荣誉出品

 

参见

文档手册

教程

主页

原创文章转载请注明:

转载自AlloyTeam:http://www.alloyteam.com/2012/08/welcome-to-codetank/

  1. 匿名 2012 年 9 月 4 日

    有木有被其他坦克撞的事件?

    • TAT.Kinvix

      TAT.Kinvix 2012 年 9 月 5 日

      有这个事件,请参见 API 文档:http://codetank.alloyteam.com/doc/

  2. 匿名 2012 年 9 月 4 日

    自己的 tank 源码对所有人都是公开的?

    • TAT.Kinvix

      TAT.Kinvix 2012 年 9 月 5 日

      目前是这样的,不过后续我们会加上选择闭源的开关,如果不想他人看到就可以闭源!

  3. 匿名 2012 年 9 月 3 日

    下面的代码跑到 target.heading = e.getHeading(); 就不动啦!
    /**
    *看到其他 robot 的处理程序
    **/
    onScannedRobot:function(e){
    if ((e.getDistance() < target.distance) ||
    (target.name == e.getName())) {
    target.name = e.getName();
    target.energy = e.getEnergy();
    target.bearing = e.getBearing();
    target.distance = e.getDistance();
    target.heading = e.getHeading();
    target.speed = e.getSpeed();
    var absBearing_rad = a2r(this.getHeading() + target.bearing);
    target.x = this.getX() + Math.cos(absBearing_rad) * target.distance;
    target.y = this.getY() + Math.sin(absBearing_rad) * target.distance;
    target.ctime = turnTime;
    }
    },

    • 匿名 2012 年 9 月 3 日

      无语啊,用 e.heading 居然可以了,这个之前不是封装的么。。。

      • TAT.Cson

        csonlai1989 2012 年 9 月 12 日

        这个问题已经修复~

  4. @Life 2012 年 9 月 3 日

    我把上下左右移动写键盘事件不是可以移动啦,哈哈

    • TAT.Cson

      csonlai1989 2012 年 9 月 3 日

      嗯 可以
      不过还是推荐使用代码控制坦克

  5. stephen 2012 年 9 月 1 日

    行进速度是固定的吗?

    • 匿名 2012 年 9 月 3 日

      在快到达终点的时候行进速度会越来越慢 作一个缓动

    • TAT.Cson

      csonlai1989 2012 年 9 月 3 日

      在坦克快到达终点的时候会有一个速度逐渐减慢的缓动

  6. zhenghui 2012 年 8 月 31 日

    我想问的是键盘事件应该怎么写?
    比如按 w 键就 this.head(100);
    /**
    *键盘事件
    **/
    onKeyDown:function(e){

    },

    • TAT.Cson

      csonlai1989 2012 年 9 月 3 日

      /**
      *键盘事件
      **/
      onKeyDown:function(e){
      if(e.isPressed(“w”)){
      this.ahead(100);
      }
      },

      Rep

  7. 大圣之家 2012 年 8 月 30 日

    创建战队目前问题比较大啊,我的坦克和列表里的数据不符啊,另外保存一直会提示 “保存失败,请重试!”,也不知道是什么错误

    • TAT.Cson

      csonlai1989 2012 年 9 月 3 日

      该问题已修复~谢谢反馈

  8. siminami 2012 年 8 月 30 日

    教育网表示鸭梨很大,能否用一个教育网友好的 IP?

  9. lh 2012 年 8 月 30 日

    每次 Ctrl+s 的时候,能不能不弹 alert(); 用户体验不好

    • TAT.Cson

      csonlai1989 2012 年 9 月 12 日

      你好 现在已修改为弹出层

  10. eddix 2012 年 8 月 29 日

    说一下现在已经遇到的两个问题:

    1. 我看了一下,排名不是按 Tank 的唯一 ID 来排的,而是按名称,所以有很多小白用户从别人那里拷过来的代码,而别人用了 setName,排名就排到别人名下了。建议还是首先让用户决定是否开放自己的源代码,倒不是说小气,主要是大家都这样拷来拷去,没什么可玩性了;其次排名还是按照 Tank 的唯一 ID 而不是 Name 来排吧,现在这个排名太乱了。

    2. 有些坦克的作者在代码里把 tank.Robot.prototype.fire 这个方法给覆盖了,导致玩起来大家都不能开火了,就看到一堆坦克傻了吧叽地把互相盯着。这些方法是不是应该想办法屏蔽掉?或者做下代码检查先。

    • TAT.Kinvix

      TAT.Kinvix 2012 年 8 月 30 日

      嗯,这两个反馈意见都非常好,第二个我们已经开始在做了,因为开发比较敏捷,所以很多安全策略还没有加完善,谢谢反馈,继续关注我们,我们会努力做的更好!

  11. wystan 2012 年 8 月 29 日

    IE8 都不支持,太坑哥了吧。

    • TAT.Cson

      csonlai1989 2012 年 8 月 29 日

      忘了说,我们是 HTML5 游戏,目前支持 IE9 及以上,以及所有其他支持 HTML5 的浏览器

  12. blee 2012 年 8 月 29 日

    雷达扫描不到子弹? 我怎么没看到对应的 api 啊?如果雷达扫不到子弹怎么躲?

    • Ivan 2012 年 8 月 29 日

      雷达扫描子弹?哥哥,这个不是导弹防御系统。。你不能用导弹轰导弹啊。子弹速度多快,坦克多快啊,不在一个速度量级。你可以先确定对方的位置,然后往前后左右移动吧。

      • TAT.Johnny

        johnny 2012 年 8 月 30 日

        如果能躲炮弹就不用玩了..

  13. Ivan 2012 年 8 月 29 日

    觉得做的好差劲
    刚尝试了下遇到的问题:
    1. 登陆之后,如果重新刷新页面需要另外登陆?搞错没
    2.Ctrl + S 保存之后,不觉得弹个框很差劲么。改次代码,还得鼠标点下框。
    3. 开发模式下,添加坦克没有 button 吗? 直接点击坦克还不行,必须是点击的同时选中坦克才添加成功。而且有 50% 的时间不工作,必须刷新然后又重新登录。。FK
    4. 排行榜竟然不能直接收藏,而且按照名字去搜索你会发现根本没有这个肉巴特。。。
    5. 好吧,竟然全部都是开源,人人都可以看你的代码。那么是不是我可以直接把你的代码卡皮过来,然后乖乖的建立一个我的肉巴特呢?好吧,这就是传说中的自我PK吗???
    6.API。。。该死的API,打开我以为是广告呢。结果我就找我的方法啊,找啊找啊找方法,找了半天找不到。。。
    。。。
    讯哥儿,东西可以不那么浮华,但是得经得起推敲额

    • Ivan 2012 年 8 月 29 日

      而且我记得这个坦克程序的理念很早就有了,我N年前在大学里就听说过这个类似的游戏。不过语言不确定,但是讯哥儿你绝对不是头一个。

      • luren 2012 年 8 月 29 日

        无力吐槽,连 API 都没听过就理直气壮了。。。
        弹框不会按回车啊,只懂按鼠标?
        开源又不是给你抄袭,是给你思路啊。。。
        排行榜为啥要收藏?

      • Ivan 2012 年 8 月 29 日

        不是跟你口水仗,如果觉得有道理则采用。
        a. API 风格的确迥异,是不是广告风自行讨论。
        b. 我不但可以按鼠标,还可以按回车,还可以 Esc。但是框还是在哪里,不跑步移。
        c. 我没有开出这个哪里是开源?是平台吧?你们 node.js 的 app 代码公布了?
        d. 不可以直接收藏,我看不出你整个排行榜的意义在哪里? 我跑哪里去看它的 code?

      • TAT.Kinvix

        TAT.Kinvix 2012 年 8 月 30 日

        之前编程游戏都是 c、Java 的,Js 的绝对是第一个,请深入理解全球首个 Javascript 程序员的编程游戏,我们不会睁眼说瞎话的,我们不是 GCD Party,谢谢!
        另外,程序是敏捷开发出来的,可能有些不够完善的地方,但是我们会快速补齐的,谢谢多给反馈意见^_^

    • TAT.Cson

      csonlai1989 2012 年 8 月 29 日

      hi~
      1. 登录后刷新的问题现在已经解决,很快会更新到外网上。
      2. 保存成功还是出现提示好,如果觉得鼠标麻烦那可以直接按下回车。
      3. 只要点击坦克栏就可以添加坦克,不一定需要点击选择框的。
      4. 排行榜暂时没有提供收藏功能,只是作为一个分数的展示。
      5. 开源可以方便大家互相的学习,该游戏最主要的目的还是让玩家通过有趣的方式学习 js。
      6. 你找的是哪个 API?请提供,如果确实是文档里面的疏漏我们会尽快补上~

      感谢你的留言~

      • Ivan 2012 年 8 月 29 日

        2. 个人感觉可以颜色鲜亮的在某个 head 以一段闪亮的文字提示: Save succeed!, 2 秒后消失。弹框感觉怪异。
        3. 这个请你们试下,当复选框由选中-> 不选中的点击后,坦克并不能添加进来。而且,有时候无论点击多少次都无法添加成功。
        4. 只是想多观瞻优秀代码,但是最终没找到排行榜第一的代码。。。
        6. API 打开感觉比较诡异,没有头尾,找起来不是很方便。而且也没办法和哪个 cheatsheet 联系起来。 另外, API 其实可以更详细些,这样使用起来更方便。

      • only 2012 年 8 月 30 日

        Ctrl+S 弹框非常不合理,大家都是程序员,没见过其他 IDE 在每次 Ctrl+S 弹框的,要把人烦死,
        javascript 弹框极度影响用户体验
        API 文档不够详细

    • lh 2012 年 8 月 30 日

      Ctrl+s 的 alert 确非常烦人,找个地方提示就行了,用户体验不好
      API 文档不够详细
      在扫描到对方的情况下,没有对方开炮的事件

    • only 2012 年 8 月 30 日

      10 年前都有了
      http://robocode.sourceforge.net/

      • tuoxie 2012 年 9 月 3 日

        上面说了,语言不同就不一样。。

  14. 小小的太阳 2012 年 8 月 29 日

    登录的时候,没有忘记密码的链接呀。。。

    • TAT.Cson

      csonlai1989 2012 年 8 月 29 日

      这个之后会补上的,因为开发时间有限,见谅!

  15. 2012 年 8 月 29 日

    Stuart Halloway 的话觉得真心毫无意义,非要将 Java 和 JavaScript 两种不同方向的语言拉到一起比较,各自有各自的只能,两种语言明显不是竞争的关系而是合作的关系。

  16. 2012 年 8 月 29 日

    Stuart Halloway 的话觉得真心毫无意义,非要将 Java 和 JavaScript 两种不同方向的语言拉到一起比较,各自有各自的只能,两种语言明显不是竞争的关系而是合作的关系。

  17. 袁源 2012 年 8 月 29 日

    据说这个创意很酷,所以决定收藏一下

    • TAT.Kinvix

      TAT.Kinvix 2012 年 8 月 29 日

      好东西要和大家分享,你也可以微博分享给朋友,呵呵

  18. superadun 2012 年 8 月 29 日

    官方坦克库那里能不能做个打包下载按钮, 一个个打开看有点麻烦.

    • TAT.Kinvix

      TAT.Kinvix 2012 年 8 月 29 日

      我们是基于在线的理念,你直接在线看就可以,即使下载了之后也要一个一个点开看的啊^_^

  19. AKFish 2012 年 8 月 29 日

    最好能让每个开发者有一个自己的 common.js,可以把自己要用的一些通用的算法、base class 放在里面。应该有很多和我一样的懒人,追求代码复用。

    • TAT.Cson

      csonlai1989 2012 年 8 月 29 日

      谢谢提这么好的一个建议,后续会考虑~
      不过现在如果想代码复用,自己封装一个类并保存下来也是很快的~ :)

    • TAT.Cson

      csonlai1989 2012 年 8 月 29 日

      这个后续可以考虑~
      不过现在如果想代码复用,自己封装一个类并保存下来也是很快的~ :)

  20. HALLELUMOE 2012 年 8 月 28 日

    希望 AlloyTeam 能把这玩意也扔到 GitHub 上

    • TAT.Kinvix

      TAT.Kinvix 2012 年 8 月 28 日

      会的,不过这个需要时间来整理

发表评论到 小李