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)