花的几何学
变身画家吧!
# 你现在有花环! 你可以做:
# 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.")