codecombat中国游戏网址:
http://www.codecombat.cn/
 
所有代码为javascript代码分享
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
1、峭壁追逐
 
 
// 抓住 Pender Spellbane 去了解她的秘密。
 
loop {
 
    // Pender是这里唯一的朋友,所以她总是在最近的位置。
 
    pender = this.findNearest(this.findFriends());
 
    if (pender) {
 
        // moveXY()将移动到 Pender 在的位置,
 
        // 但是她会向远离你的位置移动。
 
        //this.moveXY(pender.pos.x, pender.pos.y);
 
        // move()只一次移动一步。
 
        // 所以你可以用它来追踪你的目标。
 
        this.move(pender.pos);
 
    }
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
2、激流回旋
 
 
// 使用对象枚举来走安全的路,并收集宝石。
 
// 在本关你不能够使用 moveXY()方法!使用 move()来移动
 
gems = this.findItems();
 
 
while (this.pos.x < 20) {
 
// move()移动物体通过 x 和 y 的属性,不仅仅是数字。
 
this.move({‘x‘: 20, ‘y‘: 35});
 
}
 
while (this.pos.x < 25) {
 
// 一个宝石的位置是一个对象,有 x 和 y 属性。
 
gem0 = gems[0];
 
this.move(gem0.pos);
 
}
 
while (this.pos.x < 30) {
 
// 当你的 x 小于30的时候,
 
// 使用物体移动到30,35位置
 
    this.move({‘x‘: 30, ‘y‘: 35});
 
}
 
while (this.pos.x < 35) {
 
// 当你的 x 小于35的时候
 
// 移动到宝石[1]的位置
 
    gem1 = gems[1] ;
 
    this.move(gem1.pos);
 
}
 
// 拿到最后一对宝石!
 
while (this.pos.x < 40) {
 
    this.move({‘x‘: 40, ‘y‘: 35});
 
}
 
while (this.pos.x < 45) {
 
    gem2 = gems[2] ;
 
    this.move(gem2.pos);
 
}
 
while (this.pos.x < 50) {
 
    this.move({‘x‘: 50, ‘y‘: 35});
 
}
 
while (this.pos.x < 55) {
 
    gem3 = gems[3] ;
 
    this.move(gem3.pos);
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
3、食人魔山谷挖宝
 
 
// 一大群食人魔来之前你只有20秒时间!
 
// 尽可能去捡金币,然后你撤退到你栅栏后面的基地里!
 
while(this.now() < 20) {
 
    // 收集金币
 
    var gold = this.findItems();
 
    var values = 99999 ;
 
    var golds = 0 ;
 
    var mostval = null ;
 
    while (golds < gold.length) {
 
        var g = gold[golds] ;
 
        var v = this.distanceTo(g)/g.value ;
 
        if ( v < values) {
 
            values = v; 
 
            mostval = g ;
 
        }
 
        golds ++ ;
 
    }
 
    this.moveXY(mostval.pos.x, mostval.pos.y);
 
}
 
 
while(this.pos.x > 16) {
 
    // 撤退到栅栏后面
 
    this.say("我应该撤退");
 
    this.moveXY(16, 38);
 
}
 
// 建立栅栏挡住食人魔
 
this.buildXY("fence", 21, 36);
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
4、黑钻石
 
 
loop {
 
    var gem = this.findNearest(this.findItems());
 
    if (gem) {
 
        var clear = this.isPathClear(this.pos, gem.pos);
 
        // isPathClear 方法告诉你是否有障碍物在路上
 
        // 如果是通畅的,move()到 gem.pos (宝石的位置)
 
        if (clear) {
 
            this.move(gem.pos);
 
        }
 
        // 否则的话,回到中心点。
 
        else {
 
            this.move({x:40, y:35});
 
        }
 
    }
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
5、宝藏洞穴
 
 
// 比起立即杀死食人魔,更好的选择是只躲避雪人。
 
// 5秒后我们会攻击你的火焰陷阱。
 
// 清空北面的地区,将会是一个很好的爆炸引诱的地点。
 
// 雪人不会一直被引开,所以快点偷金币!
 
loop {
 
     var flagg = this.findFlag("green");
 
     var flagb = this.findFlag("black");
 
     if (flagb) {
 
         this.buildXY("fire-trap", flagb.pos.x, flagb.pos.y);
 
         this.pickUpFlag(flagb);
 
         
 
     }
 
     if (flagg) {
 
         this.pickUpFlag(flagg);
 
     }
 
    var item = this.findNearest(this.findItems());
 
    if (item) {
 
        this.move(item.pos);
 
    }
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
6、跳舞人生
 
 
// 和你的舞伴同步移动让 Pender Spellbane 印象深刻。
 
var nearest = this.findNearest(this.findFriends());
 
var disx = this.pos.x - nearest.pos.x ;
 
var disy = this.pos.y - nearest.pos.y ;
 
loop {
 
    var x = nearest.pos.x + disx ;
 
    var y = nearest.pos.y + disy ;
 
    this.moveXY(x, y);
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
7、安息之云指挥官
 
 
// 召唤一些士兵,然后引导他们去你的基地。
 
// 每个士兵消耗20金币。
 
while (this.gold > this.costOf("soldier")) {
 
    this.summon("soldier");
 
}    
 
// 添加一个while 循环来命令所有的士兵。
 
soldiers = this.findFriends();
 
soldierIndex = 0;
 
while (soldierIndex < soldiers.length) {
 
    soldier = soldiers[soldierIndex];
 
    this.command(soldier, "move", {x: 50, y: 40});
 
    soldierIndex ++ ;
 
}
 
// 去加入你的朋友!
 
this.moveXY(44, 42);
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
8、高山拉力
 
 
//购买帮助中指定的法师和带haste的二级法典
 
// 逃离右边的地图
 
// 为了逃脱的雪人,你必须让自己更快。
 
// 使用resetCooldown来施法更频繁
 
// manaBlast能帮我们清理道路
 
this.cast("haste", this);
 
this.resetCooldown("haste");
 
this.moveXY(109, 36);
 
this.manaBlast();
 
this.moveXY(155, 37);
 
this.cast("haste", this);
 
this.moveXY(273, 37);
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
9、唯利是图山
 
 
// 收集金币召唤士兵,让他们攻击敌人。
 
this.cast("shrink", this);
 
loop {
 
    // 移动到最近的金币处。
 
    // 使用 move 取代 moveXY,以便于你可以不断发出命令。
 
   var item = this.findNearest(this.findItems());
 
   if (item) {
 
        this.move(item.pos);       
 
   }
 
    // 如果你有足够的资金召唤士兵,就召唤一个。
 
    if (this.gold > this.costOf("soldier")) {
 
        this.summon("soldier");
 
    }    
 
    var enemy = this.findNearest(this.findEnemies());
 
    if (enemy) {
 
        // 遍历你所有的士兵,命令他们攻击。
 
        var soldiers = this.findFriends();
 
        var soldierIndex = 0;        
 
        while (soldierIndex < soldiers.length) {
 
            var soldier = soldiers[soldierIndex];
 
                this.command(soldier, "attack", enemy);  
 
            soldierIndex ++ ;          
 
        }
 
        // 使用 attack 命令让你的士兵们攻击。
 
    }
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
10、木材守卫
 
 
loop {
 
    // 收集金子
 
    var golds = this.findNearest(this.findItems());
 
    if (golds) {
 
        this.move(golds.pos);        
 
    }
 
    // 如果你有足够的金币,召唤一个士兵。
 
    if (this.gold > this.costOf("soldier")) {
 
        this.summon("soldier");
 
    }
 
    // 使用 for 循环来命令每个士兵。
 
    var friends = this.findFriends();
 
    // for 循环用三个部分,用分号分隔开。
 
    // for(初始化;条件;表达式)
 
    // 初始化是在第一次循环开始时完成的。
 
    // 当条件为真的时候,循环继续
 
    for(var friendIndex = 0; friendIndex < friends.length; friendIndex++)     {
 
        var friend = friends[friendIndex];
 
        if(friend.type == "soldier") {
 
            var enemy = friend.findNearestEnemy();
 
            // 如果这有一个敌人,命令她攻击。
 
            // 否则的话,移动她到地图的右边。
 
            if (enemy) {
 
                this.command(friend, "attack", enemy);
 
            }
 
            else {
 
                this.command(friend, "move", {x: 80, y: 45});
 
            }
 
        }
 
    }
 
}
 
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
番外篇:森林47关-博尔德森林
 
 
// 使用 isPathClear 命令来在随机位置的巨石周围移动
 
// 自动寻路不能在本关使用
 
loop {
 
    var angle = Math.PI / 2 - Math.PI / 16;
 
    while (angle >= -Math.PI / 2) {
 
        var targetX = this.pos.x + 5 * Math.cos(angle);
 
        var targetY = this.pos.y + 5 * Math.sin(angle);
 
        // 使用 isPathClear 命令在你当前的位置和目标中间
 
        // 如果道路是干净的,可以移动到目标
 
if (this.isPathClear(this.pos, {x: targetX, y:targetY})) {
 
            this.moveXY(targetX, targetY);
 
        }
 
        else {
 
         // 否则的话,转一个角度再尝试。
 
        angle -= Math.PI / 16;
 
        }
 
    }
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
番外篇:森林48关-超级大的小食人魔 攻击
 
 
// That‘s a big‘un! With some clever thinking, Ivy should be able to take care of this situation single-handedly.
 
var x1 = 44 ;
 
var y1 = 34 ;
 
loop {
 
    // Find the archer.
 
    var friend = this.findNearest(this.findFriends());
 
    var enemy = this.findNearest(this.findEnemies());
 
    // Tell the archer to attack the enemy!
 
    if(friend && enemy) {
 
        this.command(friend, "attack", enemy);
 
    }
 
    // Wait, no, that doesn‘t work that well. Maybe try something else?
 
    // The munchkin is awfully slow...
 
    if (enemy) {
 
        if (friend.distanceTo(enemy) < 15) {
 
            this.command(friend, "move", {x: x1, y: y1});
 
        }        
 
    }
 
 
    x1 -= 10 ;
 
    y1 -= 10 ;
 
}
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~codecombat安息之云山峰1-10关及森林47/48关代码分享
原文:http://my.oschina.net/comA/blog/499722