|
[游戏讨论]
CodeCombat代码战争【Python】更新中……
8
46172
楼主

本帖最后由 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("我还不知道密码呢!") # 8710;
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)
---------------------------------------------------------------------------
|
|