codecombat - hofffmancx/codecombate GitHub Wiki
Welcome to the codecombate wiki! codecombat:
part2- game develop 13/20
# 生成器会随时间生成敌人。
# 骷髅怪害怕发光石。
player = game.spawnPlayerXY("champion", 15, 35)
player.attackDamage = 60
player.maxSpeed = 8
game.addSurviveGoal()
game.addDefeatGoal()
game.spawnXY("x-mark-stone", 60, 35)
# 生成一个"生成器"
generator = game.spawnXY("generator", 20, 20)
# 生成一个"发光石"
generator.spawnType = "lightstone"
# 现在,通关你的游戏!
generator.spawnDelay = 3
Part3 林地小屋
# 通过林地,务必留意危险!
# 这些森林小屋中可能有食人魔!
hero.moveXY(19, 33)
enemy = hero.findNearestEnemy()
# if语句会检查某变量是否有食人魔。
if enemy:
    hero.attack(enemy)
    hero.attack(enemy)
hero.moveXY(49, 51)
enemy = hero.findNearestEnemy()
if enemy:
    # 攻击这里的敌人:
    hero.attack(enemy)
    
    # pass不做任何事情,它只负责结束if语句
    pass
hero.moveXY(58, 14)
enemy = hero.findNearestEnemy()
# 使用if语句检查敌人是否存在:
if enemy:
    # 如果敌人存在,就攻击它:
    hero.attack(enemy)
森林:修骨者
# 拯救盟友的士兵来突围
while True:
    if hero.canCast("regen"):
        bernardDistance = hero.distanceTo("Bernard")
        if bernardDistance < 10:
            # "Bernard"需要治疗!
            hero.cast("regen", "Bernard")
        
        # 使用"if"和"distanceTo"来治疗 "Chandra"
        # 如果她小于10米的距离。
        chandraDistance = hero.distanceTo("Chandra")
        if chandraDistance < 10:
            hero.cast("regen", "Chandra")
        
    else:
        # 如果你没有执行 "regen",使用"if" 和"distanceTo"
        # 来攻击那些小于一定距离的敌人 hero.attackRange.
        enemy = hero.findNearestEnemy()
        if enemy:
            hero.attack(enemy)
        pass
森林:36. 贴身护卫 while True: enemy = hero.findNearestEnemy() distance = hero.distanceTo(enemy) if distance < 10: # 如果他们与农民太近,就攻击他们 hero.attack(enemy) pass # 否则的话,呆在农民旁边!使用else else: hero.moveXY(40,37)
森林:37.
# 摧毁雷区!
# 用`say`说出雷区的范围。
# 使用除法计算范围。
enemy = hero.findNearestEnemy()
distanceToEnemy = hero.distanceTo(enemy)
# 说第一个范围:到敌人的距离除以3
hero.say(distanceToEnemy/3)
hero.say("开火!")
# 说第二个范围:到敌人的距离除以1.5
hero.say(distanceToEnemy/1.5)
hero.say("开火!")
# 说说这些事的诱因。真的?相信我们。
hero.say("哇哦!")
hero.say("我们现在出发!")
hero.say("冲锋!!")
# 现在,使用一个while循环来攻击敌人。
while True:
    hero.attack(enemy)
    enemy2 = hero.findNearestEnemy()
    hero.attack(enemy2)
森林38:矮人蜂拥而至:
while True:
    # 检查与最近敌人的距离
    nearestEnemy = hero.findNearestEnemy()
    distance = hero.distanceTo(nearestEnemy)
    # 如果它接近到10m以内,对它使用cleave!
    if distance < 10:
        hero.cleave(nearestEnemy)
    # 否则,攻击某名字的宝箱("Chest")
    else:
        hero.attack("Chest")
    pass
森林39:发狂的矮人
while True:
    enemy = hero.findNearestEnemy()
    distance = hero.distanceTo(enemy)
    if hero.isReady("cleave"):
        # 如果劈斩就绪,优先使用劈斩:
        hero.cleave(enemy)
        pass
    elif distance < 5:
        # 攻击靠近并离你最近的食人魔矮人
        hero.attack(enemy)
        pass
    else:
        # 否则,尝试打开宝箱:
        # 使用宝箱的名称进行攻击:"Chest"。
        hero.attack("Chest")
        pass
森林40:跃火林中
while True:
    evilstone = hero.findNearestItem()
    if evilstone:
        pos = evilstone.pos
        if pos.x == 34:     # == means "is equal to"
            # 如果恶魔石在左边,走到右边。
            hero.moveXY(46, 22)
            pass
        else:
            # 如果恶魔石在右边,走到左边。
            hero.moveXY(34, 23)
            pass
    else:
        # 如果没有恶魔石,那就去到中间。
        hero.moveXY(40, 22)
        pass
森林41:乡村漫游者
def findAndAttackNearestEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)
        
while True:
    hero.moveXY(35, 34)
    findAndAttackNearestEnemy()
    hero.moveXY(60, 31)
    findAndAttackNearestEnemy()
森林42:以静制动
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            hero.attack(enemy)
        else:
            hero.shield()
        pass
    else:
        hero.moveXY(40,35)
森林43:agrippa保卫战
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            if hero.isReady("cleave"):
                hero.cleave(enemy)
            else:
                hero.attack(enemy)
森林44:村庄守卫
def findAndAttackEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)
        
def findAndCleaveEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        if hero.isReady("cleave"):
            hero.cleave(enemy)
    pass
while True:
    hero.moveXY(35,35)
    findAndCleaveEnemy()
    findAndAttackEnemy()
    
    hero.moveXY(60, 32)
    findAndCleaveEnemy()
    findAndAttackEnemy()
森林45:AGRIPPA守卫战 A
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            if hero.isReady('cleave'):
                hero.cleave(enemy)
            else:
                hero.attack(enemy)
森林46: AGRIPPA守卫战 B
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            if hero.isReady('cleave'):
                hero.cleave(enemy)
            else:
                hero.attack(enemy)
森林47: 边地之叉
def checkAndAttack(target):
    if target:
        hero.attack(target)
    hero.moveXY(43, 34)    
while True:
    hero.moveXY(59, 51)
    topEnemy = hero.findNearestEnemy()
    checkAndAttack(topEnemy)
    
    hero.moveXY(58, 16)
    bottomEnemy = hero.findNearestEnemy()
    checkAndAttack(bottomEnemy)
森林48: 村庄守护神
def cleaveOrAttack():
    ogre = hero.findNearestEnemy()
    if ogre:
        if hero.isReady('cleave'):
            hero.cleave(ogre)
        else:
            hero.attack(ogre)
while True:
    hero.moveXY(35, 34)
    cleaveOrAttack()
    
    hero.moveXY(47, 27)
    cleaveOrAttack()
    
    hero.moveXY(60, 31)
    cleaveOrAttack()
森林48: 造币厂
def pickUpCoin():
    coin = hero.findNearestItem()
    if coin:
        hero.moveXY(coin.pos.x, coin.pos.y)
        
def attackEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)
while True:
    pickUpCoin()
    attackEnemy()
森林49: 盗墓者
# 森林中一座被遗忘的墓地!
# 但是食人魔紧追不舍。
# 在防御矮人的同时破开坟墓
# 这个函数应该在敌人存在时攻击,否则攻击门!
def checkToDefend(target):
    # 检查`target`是否存在
    if target:    
        # 如果是这样,攻击`target`。
        hero.attack(target)
    # 如果没有`target`,使用else去做点别的事
    else:
        # 否则攻击 "Door"
        hero.attack('Door')
    pass
while True:
    enemy = hero.findNearestEnemy()
    checkToDefend(enemy)
51 交给屠夫
# 这里展示了如何定义一个叫作cleaveWhenClose的函数
# 函数定义了一个参数,名为target
def cleaveWhenClose(target):
    if hero.distanceTo(target) < 5:
        pass
        # 将你的攻击代码放到这里。
        # 如果cleave准备就绪,那就劈斩目标
        if hero.isReady('cleave'):
            hero.cleave(target)
        # 否则,使用attack攻击目标!
        else:
            hero.attack(target)
# 这段代码不是函数的一部分。
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 注意在cleaveWhenClose内部,我们用target指向敌人。
        cleaveWhenClose(enemy)
52 基地阴魂
# 唯一的出口被食人魔堵住了。
# 躲着骷髅怪,并一个个击败食人魔
# 这个函数需要攻击敌人并隐藏。
def hitOrHide(target):
    # 如果'target'存在:
    if target:
        # 攻击'target'
        hero.attack(target)
        # 然后移动到红色标记。
        hero.moveXY(32,17)
    pass
while True:
    enemy = hero.findNearestEnemy()
    hitOrHide(enemy)
53 邮件截停
# 拦截埋伏所有食人魔信使。
def ambushAttack(target):
    #  如果目标存在,则攻击目标并返回标记。
    # 编写函数:
    if target:
        hero.attack(target)
        hero.moveXY(52,35)
    pass
while True:
    ogre = hero.findNearestEnemy()
    ambushAttack(ogre)
54 捉迷藏
def checkTakeHide(item):
    if item:
        # 物品在此,拿着它。
        hero.moveXY(item.pos.x, item.pos.y)
        # 然后移动到营地中央(40, 34)
        hero.moveXY(40, 34)
while True:
    # 移动到右上的X标记。
    hero.moveXY(68, 56)
    # 在那里搜索一块发光石。
    lightstone = hero.findNearestItem()
    # 调用checkTakeHide,并使用参数:lightstone
    checkTakeHide(lightstone)
    
    # 移动到左上角的标记。
    hero.moveXY(12, 56)
    # 搜索发光石。
    lightstone2 = hero.findNearestItem()
    # 调用checkTakeHide函数。
    # 将搜索的结果作为参数传入。
    checkTakeHide(lightstone2)
55 forest miner
# 检查工人们是否能安全通过雷区。
def checkEnemyOrSafe(target):
    # 如果`target`(参数)存在:
    if target:
        # 然后攻击目标
        hero.attack(target)
        hero.attack(target)
    # 否则:
    else:
        # 使用say()来叫农民。
        hero.say("farmer")
    pass
while True:
    # 移动到并检查右上的X标记。
    hero.moveXY(64, 54)
    enemy1 = hero.findNearestEnemy()
    checkEnemyOrSafe(enemy1)
    
    # 移动到左下的X标记处。
    hero.moveXY(16, 14)
    # 将findNearestEnemy()的结果存到一个变量中。
    enemy2 = hero.findNearestEnemy();
    # 调用checkEnemyOrSafe,并传递
    # findNearestEnemy的结果作为参数
    checkEnemyOrSafe(enemy2)
56.short-sighted burl
# The function allows your hero take an item.
def takeItem(item):
    hero.moveXY(item.pos.x, item.pos.y)
# Write the function "checkTakeRun" with one parameter.
# If the item exists, use "takeItem" function to take it.
# Move to the start point (the green mark) whether the item or no.
def checkTakeRun(item):
    if item:
        takeItem(item)
        hero.moveXY(39, 12)
    else:
        hero.moveXY(39, 12)
# Don't change this code.
while True:
    hero.moveXY(16, 56)
    coin = hero.findNearestItem()
    checkTakeRun(coin)
    
    hero.moveXY(64, 56)
    coin = hero.findNearestItem()
    checkTakeRun(coin)
57.Agrippa refacted
这一关要注意,选择装备的时候,要选择isRead('cleave')工具,否则,会报错。
def cleaveOrAttack(enemy):
    # If "cleave" is ready, cleave; otherwise, attack.
    if hero.isReady("cleave"):
        hero.cleave(enemy)
    else:
        hero.attack(enemy)
    pass
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            # Call the "cleaveOrAttack" function, defined above.
            cleaveOrAttack(enemy)
58. BACKWOODS AMBUSH A
# In this level you will use functions with two parameters.
# Look at the structure below, notice how there are two arguments.
# These are both accessible within the function. 
def checkAndAttack(x, y):
    # First move to the coordinates provided by the parameters.
    hero.moveXY(x, y)
    # Then check for an enemy.
    enemy = hero.findNearestEnemy()
    if enemy:
        # If there is one, attack it!
        hero.attack(enemy)
    pass
checkAndAttack(24, 42)
checkAndAttack(27, 60)
# Navigate to the last 3 x-marks and defeat any remaining munchkins.
checkAndAttack(42, 50)
checkAndAttack(39, 24)
checkAndAttack(55, 29)
59.Agrippa returned
def enemyInRange(enemy):
    # Return true if the enemy is less than 5 units away.
    enemy = hero.findNearestEnemy()
    if enemy:
        distance = hero.distanceTo(enemy)
        if distance < 5:
            return True
    # else:    
        #return False
def cleaveOrAttack(enemy):
    if hero.isReady('cleave'):
        hero.cleave(enemy)
    else:
        hero.attack(enemy)
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # Check the distance of the enemy by calling enemyInRange.
        if enemyInRange(enemy):
            cleaveOrAttack(enemy)
62. Go fetch
def goFetch():
    while True:
        potion = hero.findNearestItem()
        if potion:
            pet.fetch(potion)
            
pet.on('spawn',goFetch)