外设天下 - 电脑外设发烧友聚集地

我的人缘1

[游戏讨论] CodeCombat代码战争【Python】更新中……

8 45101
楼主
跳转到指定楼层
发表于 2017-2-20 10:00 只看该作者 倒序浏览 阅读模式
本帖最后由 vividjames 于 2017-2-20 17:14 编辑

最近让家里小朋友学习编程,自己也学学。地址:http://cn.codecombat.com。写的一些通关代码,做个参考。当然,其中有些有疑问,有些可以优化。
---------------------------------------------------------------------------
①kithgard地牢1.KITHGARD地牢。

# 向宝石进发。
# 小心撞墙!
# 在下面输入你的代码。
hero.moveRight()
hero.moveDown()
hero.moveRight()


2.深藏的宝石。

# 利用你的移动命令收集所有宝石。
hero.moveRight()
hero.moveDown()
hero.moveUp()
hero.moveUp()
hero.moveRight()


3.幽灵守卫

# 避开食人魔的视线,夺取宝石。
hero.moveRight()
hero.moveUp()
hero.moveRight()
hero.moveDown()
hero.moveRight()


4.不祥的征兆【这关其实有点问题
# 你的目标是保护地图右边的人存活。
# 你不需要和食人巨怪打,只管逃命!你的盟友会保护你。
hero.moveRight(2)
hero.moveUp()
hero.moveRight(3)
hero.moveDown()
hero.moveRight()
hero.moveDown()
hero.moveRight()
hero.moveUp()

5.真实姓名

# 抵抗Brak and Treg!
# 你必须攻击小食人魔两次。

hero.moveRight()
hero.attack("Brak")
hero.attack("Brak")
hero.moveRight()
hero.moveRight()
hero.attack("Treg")
hero.attack("Treg")
hero.moveRight()


6.高举之剑

# 打败食人魔
# 记住,每个攻击两次。

hero.attack("Rig")
hero.attack("Rig")
hero.attack("Gurt")
hero.attack("Gurt")
hero.attack("Ack")
hero.attack("Ack")


7.注解监牢

hero.say("密码是什么?")
# Use the "say()" function to say the password.
# 密码是: "Achoo"
hero.say("Achoo")
hero.moveUp()
hero.moveUp()


8.Kithgard的图书馆管理员

# 你需要图书馆大门的开门密码!
# 密码就在帮助指导页面中!
# 请点击代码窗口下的蓝色“帮助”按钮来打开关卡的帮助页面。
# 大多数关卡的帮助页面中有详细的帮助信息。如果你在关卡中遇到了困难,请点击“帮助”按钮!

hero.moveRight()
hero.say("我还不知道密码呢!")  # ∆
hero.say("Hush")
hero.moveRight()


9.焰中舞动

# 代码通常按写下的顺序执行
# 循环多次重复一个代码块
# 按Tab或4个空格把移动指令缩进在循环内部

while True:
    hero.moveRight()
    # 以下注释展示如何制造循环
    hero.moveLeft()


10.循环又循环

# 在 while true 里的代码会永远重复!

while True:
    # 走起
    hero.moveRight()
    # 动起来
    hero.moveUp()
    # 左走
    hero.moveLeft()
    # 右走
    hero.moveDown()   


11.闹鬼迷宫

# “loop” 能够让你更轻易地重复一件事

while True:
    # 在这里添加命令来重复。
    hero.moveRight()
    hero.moveRight()
    hero.moveUp()
    hero.moveUp()


12.再次迷宫历险

# 使用loop循环穿越迷宫!

while True:
    hero.moveRight()
    hero.moveUp()
    hero.moveRight()
    hero.moveDown()


13.恐惧之门

# 攻击大门(Door)
# 需要攻击很多次,请使用loop循环
enemy="Door"
while True:
    hero.attack(enemy)



14.已知敌人

# 你可以用名称标签作为变量。

enemy1 = "Kratt"
enemy2 = "Gert"
enemy3 = "Ursa"
while True:
    hero.attack(enemy1)
    hero.attack(enemy2)
    hero.attack(enemy3)


15.名字大师

# 你的英雄不知道这些敌人的名字!
# 这眼镜给了你 “findNearestEnemy” 寻找最近敌人的能力。

enemy1 = hero.findNearestEnemy()
hero.attack(enemy1)
hero.attack(enemy1)

enemy2 = hero.findNearestEnemy()
hero.attack(enemy2)
hero.attack(enemy2)

enemy3 = hero.findNearestEnemy()
hero.attack(enemy3)
hero.attack(enemy3)


16.近战

hero.moveRight()

# 通过上一个关卡,你应该能认识这个。
enemy1 = hero.findNearestEnemy()
# 现在,攻击那个变量,
hero.attack(enemy1)
hero.attack(enemy1)
hero.moveRight()
enemy = hero.findNearestEnemy()
hero.attack(enemy)
hero.moveRight()
hero.moveRight()


17.矮人骚乱

# 在 while true循环里,使用 findNearestEnemy() 并攻击!
while True:
    enemy = hero.findNearestEnemy()
    hero.attack(enemy)


18.最后的Kithman族

# 使用loop循环移动并攻击目标
while True:
    hero.moveRight()
    hero.moveUp()
    enemy = hero.findNearestEnemy()
    hero.attack(enemy)
    hero.attack(enemy)
    hero.moveRight()
    hero.moveDown()
    hero.moveDown()
    hero.moveUp()

19.Kithgard之门

# 建造三个栅栏来隔离兽人!

hero.moveDown()
hero.buildXY("fence", 36, 34)
hero.buildXY("fence", 36, 30)
hero.buildXY("fence", 36, 27)
while True:
    hero.moveRight()


20.洞穴求生【打不过,就买点好装备呗】

# 生存时间比敌人的英雄长!
while True:
    # 制定自己的战略。有创意!
    enemy = hero.findNearestEnemy()

    if enemy:
        if hero.isReady("cleave"):
            hero.cleave(enemy)
        else:
            hero.attack(enemy)
    else:
        hero.moveXY(80, 68)

21.kithgard 斗殴

# 在一波波的食人魔攻击中活下来。
# 如果你赢了,本关会变得更难,但给更多的奖励。
# 如果你输了,你必须等一天之后才能重新提交。
# 每次提交都会获得新的随机种子。

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)


22.Kithgard精通【这一关是随机的,每个人不一样。我觉得也有问题,用了hero.say(hero.gold),但是使陷阱失效我做不到啊。
# 使用移动命令到达迷宫的终点。
# 计算你收集到的宝石数量,然后在到达火球陷阱时通过说出当前的宝石数量来使陷阱失效。
# 在起点的地方会有一只乌鸦告诉你一个密码。在门的附近说出该密码来开门。
# 当你靠近食人魔时杀死它。
# 你可以在需要的时候使用loop来重复所有的指令。
# 如果你通过了这个关卡,你就可以直接跳到边远地区的森林!
while True:
    hero.moveUp()
    hero.moveRight(3)
    hero.moveUp()
    hero.moveDown()
    hero.moveRight()
    hero.say("Swordfish")
    hero.moveRight()
    hero.moveUp(3)
    hero.say(hero.gold)
    hero.moveLeft(4)
    hero.moveUp(2)

---------------------------------------------------------------------------
②边远地区的森林

1.森林保卫战

# 建立两个围栏保护村民
# 把鼠标放在地图上得到X,Y坐标
hero.buildXY("fence", 40, 52)
hero.buildXY("fence", 40, 20)

2.羊肠小道

# 到小路的尽头去,并在那儿修一个栅栏。
# 利用你的 moveXY(x, y)坐标移动功能。

# It's the first point of the path.
hero.moveXY(36, 59)
# Move at the next points of the path.
hero.moveXY(37, 13)
# Build a fence to stop the ogre.
hero.moveXY(74, 63)
hero.moveXY(72, 21)
hero.buildXY("fence", 72, 25)


3.丛林里的隔间

# 在丛林里头探索,但务必提高警觉!
# 这些丛林角落隔间可能会藏有ogres!

hero.moveXY(19, 33)
enemy = hero.findNearestEnemy()
# 条件判断式将会检查该变数是否参考到一个ogre
if enemy:
    hero.attack(enemy)
    hero.attack(enemy)

hero.moveXY(49, 51)
enemy = hero.findNearestEnemy()
if enemy:
    # 在这里撰写攻击敌人指令
    hero.attack(enemy)
    hero.attack(enemy)
    # pass没有特别的意思,只是用来协助结束条件判断式,写不写都可以
    pass

hero.moveXY(58, 14)
enemy = hero.findNearestEnemy()
# 使用条件判断式来确认敌人是否存在
if enemy:
    # 如果敌人存在就攻击他
        hero.attack(enemy)
        hero.attack(enemy)


4.If-stravaganza

# Defeat the ogres from within their own camp!

while True:
    enemy = hero.findNearestEnemy()
    # 使用一个 “if” 语句去检查是否有敌人存在:
    if enemy:
        # Attack the enemy if it exists:
        hero.attack(enemy)


5.背靠背

# 呆在中间防守!

while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 亦或主动出击...
        hero.attack(enemy)
        pass
    else:
        # 亦或回到你的阵地防守。
        hero.moveXY(40, 34)
        hero.say("我的大刀早已饥渴难耐了!")
        pass


6.森林劈裂者

# 尽可能经常使用你的新技能“cleave”

hero.moveXY(23, 23)
while True:
    enemy = hero.findNearestEnemy()
    if hero.isReady("cleave"):
        # “Cleave”掉敌人!
        hero.cleave(enemy)
        pass
    else:
        # 否则(如果“cleave”还没准备好),就用你的普通攻击
        hero.attack(enemy)
        pass


7.边远地区的对峙

# 这些曼切堪食人魔害怕英雄!
# 说些什么,他们会吓得往后退。
# 但是,有足够的曼切堪食人魔,他们将联合起来伏击你!小心!
# 每当`cleave`(横劈)冷却时间完成,立即用它清除敌人。

while True:
    enemy = hero.findNearestEnemy()
    # 使用 ‘isReady’ 中的一个 “if-statement” 的语句来检查 “cleave”
    if hero.isReady("cleave"):
        # 劈斩!
        hero.cleave(enemy)
    # 或者,如果 cleave 还没准备好的话:
    else:
        # 说一点什么来吓走曼切堪食人魔
        hero.say("天灵灵、地灵灵、太上老君显极灵!")
        hero.say("急急如律令!")
    pass


8.测距仪

# 瘦人正在森林里头巡逻!
# 使用distanceTo方法来计算敌人与英雄间的距离
# 说出每个敌人和英雄间的距离以告知大砲要轰炸哪里

enemy1 = "Gort"
distance1 = hero.distanceTo(enemy1)
hero.say(distance1)

enemy2 = "Smasher"
distance2 = hero.distanceTo(enemy2)
# 将distance2变数作为参数,传入say()方法
hero.say(distance2)

# 测量并说出剩余敌人与英雄间的距离
# 不要向你的友军进行射击!
enemy3 = "Charles"
hero.say("穿红衣服的是Charles。")
hero.say("他是友军,不要误伤了。")

enemy4 = "Gorgnub"
distance4 = hero.distanceTo(enemy4)
hero.say(distance4)


9.保护农民

while True:
    enemy = hero.findNearestEnemy()
    distance = hero.distanceTo(enemy)
    if distance < 10:
        # 如果他们与农民太近,就攻击他们
        hero.attack(enemy)
        pass
    # 否则的话,呆在农民旁边!
    else:
        hero.moveXY(40, 40)


10.疯狂的食人魔

# 地上另一个让英雄打开的宝箱!
# 攻击宝箱以打开它
# 有些食人魔可不会呆呆地站着挨打!
# 当食人魔离你太近时,你得学着保护你自己

while True:
    enemy = hero.findNearestEnemy()
    distance = hero.distanceTo(enemy)
    if hero.isReady("cleave"):
        # 首先,定期使用旋风斩(cleave)当技能就绪的时候:
        hero.cleave(enemy)
        pass
    elif distance < 5:
        # 攻击靠近并离你最近的食人魔
        hero.attack(enemy)
        pass
    else:
        # 否则,试着打破宝箱看看:
        hero.attack("Chest")
        pass


11.跃火林中

# 在这关,别碰恶魔石!往其他方向移动避开它们!
while True:
    evilstone = hero.findNearestItem()
    if evilstone:
        pos = evilstone.pos
        if pos.x == 34:
            # 如果恶魔石在右边,走到左边。
            hero.moveXY(46, 22)
            pass
        else:
            # 如果恶魔石在右边,走到左边。
            hero.moveXY(34, 22)
            pass
    else:
        # If there's no evilstone, go to the middle.
        hero.moveXY(40, 22)
        pass


12.村庄漫游者

# This defines a function called findAndAttackEnemy
def findAndAttackEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)

# This code is not part of the function.
while True:
    # Now you can patrol the village using findAndAttackEnemy
    hero.moveXY(35, 34)
    findAndAttackEnemy()

    # Now move to the right entrance.
    hero.moveXY(60, 31)
    # Use findAndAttackEnemy
    findAndAttackEnemy()


13.边远地区交叉口

# 一大波兽人正在到来!
# 使用 checkAndAttack 函数让代码易读。

# 这个函式有一个参数
# 参数是一种给函数传递信息的方式。
def checkAndAttack(target):
    # 'target'参数只是一个变数!
    # 它包含了函数调用时的参数。
    if target:
        hero.attack(target)
    hero.moveXY(43, 34)

while True:
    hero.moveXY(58, 52)
    topEnemy = hero.findNearestEnemy()
    checkAndAttack(topEnemy)

    # 移动到底部的X标记处。
    hero.moveXY(58, 16)
    # 创建名为 bottomEnemy 的变量,寻找最近敌人。
    bottomEnemy = hero.findNearestEnemy()
    # 使用 checkAndAttack 函数,并包括 bottomEnemy 变量。
    checkAndAttack(bottomEnemy)


14.無敵旋風斬

# 這裡顯示如何定義一個稱為cleaveWhenClose的函式
# 函式定義了一個參數稱為target
def cleaveWhenClose(target):
    if hero.distanceTo(target) < 5:
        pass
        # 把你的攻擊程式碼放在這裡
        # 如果旋風斬就緒,對目標施放旋風斬
        if hero.isReady("cleave"):
            hero.cleave(enemy)
        # 否則,直接攻擊目標!
        else:
            hero.attack(enemy)


# 這裡的程式碼不是函式的一部份.
while True:
    enemy = hero.findNearestEnemy()
    if enemy:
        # 記得在cleaveWhenClose函式裡面,我們改用target作為指向敵人的變數.
        cleaveWhenClose(enemy)


15.边远地区小伙伴

# You now have a pet!

def speak(event):
    # 你的宠物应该用pet.say()来回应
    pet.say("巴黎欧莱雅,你值得拥有!")
    pass

# 这告诉你的宠物去执行speak()函式当她听到什么
pet.on("hear", speak)

# 和你的宠物说话!
hero.say("五大受损,一个对策。")



16.朋友与敌人
# 农民和士兵聚集在森林。
# 命令农民战斗,苦工远离!

while True:
    friend = hero.findNearestFriend()
    if friend:
        hero.say("To battle, " + friend.id + "!")
    # 寻找最近的敌人,然后让他们滚蛋
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.say("快滚," + enemy.id + "不然,我们就宰了你!")

17.去接住

# 你被结实的陷阱给困住了!
# 派出你的宠物去拿回治疗药水!

def goFetch():
    # 你可以在事件处理函式里面使用回圈.
    while True:
        potion = hero.findNearestItem()
        if potion:
            # 用 “pet.fetch()” 去让你的宠物捡药水:
            pet.fetch(potion)
            pass

# 当宠物被召唤出来时,会触发 "spawn" 事件。
# 这让你的宠物在关卡开始运行 goFetch()。
pet.on("spawn", goFetch)

18.巫师之门

# 去找Laszlo并取得他的密码数字.
hero.moveXY(30, 13)
las = hero.findNearestFriend().getSecret()

# 向 Laszlo 的数字中加7就能得到 Erzsebet的号码
# 去找Erzsebet并告诉她魔法数字.
erz = las + 7
hero.moveXY(17, 26)
hero.say(erz)

# 将 Erzsebet 的数字除以 4 得到 Simoyi 的数字。
# 去找Simonyi并告诉他数字.
sim = erz / 4
hero.moveXY(30, 39)
hero.say(sim)

# 将 Simonyi 的数字乘以 Laszlo 的数字得到 Agata 的数字。
# 去找Agata并告诉她数字.
aga = sim * las
hero.moveXY(43, 26)
hero.say(aga)


19.宝库追逐战

# 跟随硬币的轨迹来到红色 X 标记的出口

while True:
    # 这能找到最近的敌人。
    item = hero.findNearestItem()
    if item:
        # 这将物品的 pos,就是坐标,存储在变量中。
        itemPosition = item.pos
        # 将物品的 X 和 Y 坐标放进变量。
        itemX = itemPosition.x
        itemY = itemPosition.y
        # 现在,使用moveXY来移动到itemX和itemY:
        hero.moveXY(itemX, itemY)


20.看不见的距离

# 你的任务是告诉他兽人的距离。

# 这个函数寻找最近的敌人,并返回距离。
# 假如没有敌人,函式会回传0.
def nearestEnemyDistance():
    enemy = hero.findNearestEnemy()
    result = 0
    if enemy:
        result = hero.distanceTo(enemy)
    return result

while True:
    # 呼叫 nearestEnemyDistance() 和
    # 储存结果到 enemyDistance变数里头.
    enemyDistance = nearestEnemyDistance()
    # 假如 enemyDistance 大于0:
    if enemyDistance > 0:
        # 说出 enemyDistance变数的值.
        hero.say(enemyDistance)


21.困兽之斗

# 你掉进陷阱里了!别动!你会受伤的!

# 这个函数检查敌人是否再攻击范围。
def inAttackRange(enemy):
    distance = hero.distanceTo(enemy)
    # 几乎所有的剑攻击距离都是3.
    if distance <= 3:
        return True
    else:
        return False

# 只有兽人在范围内才攻击他们.
while True:
    # 找到最近的敌人,并将其储存在一个变量中。
    enemy = hero.findNearestEnemy()

    # 调用 inAttackRange(enemy),将 enemy 作为参数
    # 把结果保存于 “canAttack” 变量中
    canAttack = inAttackRange(enemy)
    # 假如储存在 canAttack的结果是 True, 然后下手!
    if canAttack:
        hero.attack(enemy)
    pass


22.盐碱地

# 兽人正在攻击附近的殖民地!
# 小心,兽人在地上放了毒药。
# 收集硬币并打败兽人,但是要避开毛怪(burls)和毒药!

while True:
    enemy = hero.findNearestEnemy()
    if enemy.type == "munchkin" or enemy.type == "thrower":
        hero.attack(enemy)
    item = hero.findNearestItem()
    # 检查物品类型,确保英雄不会捡起毒药!
    # 寻找类型:'gem' 和 'coin'
    if item.type == "coin" or item.type == "gem":
        pos = item.pos
        x = pos.x
        y = pos.y
        hero.moveXY(x, y)
        hero.moveXY(34, 40)





---------------------------------------------------------------------------




0
已赞
微信分享 收藏
回复

使用道具 举报

我的人缘3
2
发表于 2017-2-20 11:08 来自手机 只看该作者
佩服佩服!!

点评

一起来玩啊。 编程对以后小朋友发展很有好处的。  详情 回复 发表于 2017-2-20 11:32
回复 支持 反对

使用道具 举报

我的人缘1
3
发表于 2017-2-20 11:32 只看该作者

一起来玩啊。
编程对以后小朋友发展很有好处的。

点评

我到是自己学过几天 后来放弃了  详情 回复 发表于 2017-2-21 21:16
[发帖际遇]: vividjames 和iQunix打架,iQunix奖励 3 元 发烧值. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

我的人缘0
4
发表于 2017-2-20 12:45 只看该作者
没玩过 从入门到入坟
回复 支持 反对

使用道具 举报

我的人缘0
5
发表于 2017-2-20 16:54 只看该作者
测试
请问给自己刷个火箭的代码怎么写?

点评

金克斯到6就OK了吧  详情 回复 发表于 2017-2-20 17:14
[发帖际遇]: 钢琴节奏去东莞不小心被抓,扣除3 元 发烧值 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

我的人缘1
6
发表于 2017-2-20 17:14 只看该作者
钢琴节奏 发表于 2017-2-20 16:54
请问给自己刷个火箭的代码怎么写?

金克斯到6就OK了吧

点评

666666666  详情 回复 发表于 2017-2-20 20:39
[发帖际遇]: vividjames换鼠标微动,6个焊盘全掉,奖励4 元 发烧值安慰一下。 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

我的人缘0
7
发表于 2017-2-20 20:39 只看该作者
vividjames 发表于 2017-2-20 17:14
金克斯到6就OK了吧

666666666
[发帖际遇]: 钢琴节奏拉屎掉茅厕里了,iQunix奖励4 元 发烧值.去洗澡! 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

我的人缘0
8
发表于 2017-2-21 13:44 只看该作者
不懂
回复 支持 反对

使用道具 举报

我的人缘3
9
发表于 2017-2-21 21:16 只看该作者
vividjames 发表于 2017-2-20 11:32
一起来玩啊。
编程对以后小朋友发展很有好处的。

我到是自己学过几天 后来放弃了
[发帖际遇]: 單擺拉屎掉茅厕里了,iQunix奖励5 元 发烧值.去洗澡! 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

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

本版积分规则