CodeCombat代码全记录(Python学习利器)--安息之云山峰(第四章)代码4

花的几何学

变身画家吧!

# 你现在有花环! 你可以做:
# toggleFlowers(true/false) - 打开或关闭鲜花。
# setFlowerColor("random") - 也可以是 "pink", "red", "blue", "purple", "yellow", or "white"。

# 以下是绘制图形的一些函数:
# x,y - 图形的中心
# size - 图形的大小(半径,边长)
def drawCircle(x, y, size):
    angle = 0
    hero.toggleFlowers(False)
    while angle <= Math.PI * 2:
        newX = x + (size * Math.cos(angle))
        newY = y + (size * Math.sin(angle))
        hero.moveXY(newX, newY)
        hero.toggleFlowers(True)
        angle += 0.2

def drawSquare(x, y, size):
    hero.toggleFlowers(False)
    cornerOffset = size / 2
    hero.moveXY(x - cornerOffset, y - cornerOffset)
    hero.toggleFlowers(True)
    hero.moveXY(x + cornerOffset, y - cornerOffset)
    hero.moveXY(x + cornerOffset, y + cornerOffset)
    hero.moveXY(x - cornerOffset, y + cornerOffset)
    hero.moveXY(x - cornerOffset, y - cornerOffset)


redX = {"x": 28, "y": 36}
whiteX = {"x": 44, "y": 36}

# 选择一种颜色。
hero.setFlowerColor("blue")
# 在redX上绘制一个大小为10的圆圈。
drawCircle(28, 36, 10)
# 改变颜色!
hero.setFlowerColor("yellow")
# 在whiteX上绘制一个大小为10的正方形。
drawSquare(44, 36, 10)
# 现在尝试绘制任何你想要的!
hero.setFlowerColor('pink')
drawSquare(35 , 38, 18)

山花林

自行作为艺术家展现你的才艺,我们去偷懒使用上一节的画圈函数。我的代码画出来的不美观,大家可自行创造。

# 这个关卡是为花艺准备的。
# 真正的目标是尝试并获得乐趣!
# 如果你画了至少包含1000朵花的画作,那么你将在这个关卡打上"succeed"的烙印。
#控制我们的人物来画圈圈
# toggleFlowers(true/false) - 打开或关闭鲜花。
# setFlowerColor("random") - 也可以是 "pink", "red", "blue", "purple", "yellow", or "white"。
def drawCircle(x, y, size):
    angle = 0
    hero.toggleFlowers(False)
    while angle <= Math.PI * 2:
        newX = x + (size * Math.cos(angle))
        newY = y + (size * Math.sin(angle))
        hero.moveXY(newX, newY)
        hero.toggleFlowers(True)
        angle += 0.2

while True:
    hero.setFlowerColor("random")
    drawCircle(88, 63, 5)
    drawCircle(87, 62, 5)
    drawCircle(86, 61, 5)
    drawCircle(85, 60, 5)
    drawCircle(84, 59, 5)

猎手和猎物

已我的暴脾气我真不想招那破士兵去打敌人!!怎么也低我亲自上阵。

# 食人魔正试图除掉你的驯鹿!
# 当召唤士兵进攻时,让弓箭手回来。

def pickUpCoin():
    # 收集硬币。
    coin = hero.findNearestItem()
    if coin:
        hero.moveXY(coin.pos.x, coin.pos.y)

def summonTroops():
    # 如果你有黄金就召唤士兵。
    if hero.gold >= hero.costOf("soldier"):
        hero.summon("soldier")

# 这个函数有一个名为士兵的参数。
# 参数就像变量一样。
# 调用函数时确定参数的值。
def commandSoldier(soldier):
    # 士兵要攻击敌人。
    #soldiers = hero.findFriends()
    soldiers = hero.findByType("soldier")
    for soldier in soldiers:
        enemy = soldier.findNearestEnemy()
        if enemy:
            hero.command(soldier, "attack", enemy)

# 编写一个命令弓箭手的函数来告诉你的弓箭手怎么做!
# 它应该有一个参数将表示在被调用时传递给函数的射手。
# 弓箭手应该只攻击距离25米以内的敌人,否则原地待命。
def commandArcher(archer):
    archers = hero.findByType("archer")
    for archer in archers:
        enemy = archer.findNearestEnemy()
        if enemy and archer.distanceTo(enemy) < 25:
            hero.command(archer, "attack", enemy)
        else:
            hero.command(archer, "move", archer.pos)

while True:
    pickUpCoin()
    summonTroops()
    friends = hero.findFriends()
    for friend in friends:
        if friend.type == "soldier":
            # 这位朋友将被分配给commandSoldier函数中的士兵变量
            commandSoldier(friend)
        elif friend.type == "archer":
            # 务必指挥你的弓箭手。
            commandArcher(friend)

图书馆谋士

# Hushbaum已被食人魔伏击!
# 她正在忙着医治她的士兵,你应该命令他们去战斗!
# 如果食人魔认为他们可以攻击到Hushbaum或弓箭手,那么他们会派出更多的部队,所以将他们放在圈子里面!

# 士兵们围成一圈防守起来。
def commandSoldier(soldier, soldierIndex, numSoldiers):
    angle = Math.PI * 2 * soldierIndex / numSoldiers
    defendPos = {"x": 41, "y": 40}
    defendPos.x += 10 * Math.cos(angle)
    defendPos.y += 10 * Math.sin(angle)
    hero.command(soldier, "defend", defendPos);


# 找到最强大的目标(生命值最高)
# 该函数返回一些东西! 当你调用函数时,你会得到一些回报。
def findStrongestTarget():
    mostHealth = 0
    bestTarget = None
    enemies = hero.findEnemies()
    # 找出哪个敌人的生命值最高,并将bestTarget设置为该敌人。
    for enemy in enemies:
        if enemy and enemy.health > mostHealth:
            mostHealth = enemy.health
            bestTarget = enemy
    #return bestTarget

    # 如果有大食人魔的话,只关注弓箭手的火力。
    if bestTarget and bestTarget.health > 15:
        return bestTarget
    else:
        return None


# 如果最强大的目标拥有超过15的生命值,则攻击该目标。 否则,攻击最近的目标。
def commandArcher(archer):
    #archers = hero.findByType("archer")
    #archer = hero.findNearest(archers)
    nearest = archer.findNearestEnemy()
    #archerTarget = findStrongestTarget()
    if archerTarget:
        hero.command(archer, "attack", archerTarget)
    elif nearest:
        hero.command(archer, "attack", nearest)


archerTarget = None

while True:
    # 如果射手目标被击败或不存在,那就找一个新的。
    if not archerTarget or archerTarget.health <= 0:
        # 将archerTarget设置为findStrongestTarget()返回的目标
        archerTarget = findStrongestTarget()

    friends = hero.findFriends()
    soldiers = hero.findByType("soldier")
    # 创建一个包含弓箭手的变量。
    archers = hero.findByType("archer")
    for i in range(len(soldiers)):
        soldier = soldiers[i]
        commandSoldier(soldier, i, len(soldiers));

    # 使用commandArcher()命令你的弓箭手
    for i in range(len(archers)):
        archer = archers[i]
        commandArcher(archer)

我们中间的间谍

# 内门可以撑很长时间。
# 然而,其中一个农民是食人魔的间谍!
# 有一个提示!间谍的名字中有一个字母是"z"。

# 这个函数可以检查单词中的特定字母。
# 一个字符串只是一个数组! 像数组一样循环它。
def letterInWord(word, letter):
    for i in range(len(word)):
        character = word[i]
        # 如果字符等于字母,则返回 True
        if character == letter:
            return True
    # 因为字母不在单词里,所以返回 False
    return False


spyLetter = "z"
friends = hero.findFriends()

for friend in friends:
    friendName = friend.id
    if letterInWord(friendName, spyLetter):
        # 揭露间谍!
        hero.say(friendName + " is a spy!")
    else:
        hero.say(friendName + " is a friend.")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值