CodeCombat 财富密码

Event: "collect" (收集事件)

LEVEL 15

会计部 (Accounting Department)

审计师手册

欢迎来到王家会计部!这里的每一枚金币、每一颗宝石都需要登记在册。 我们的任务是:当英雄捡起东西时,自动计算它的价值。

谁捡的?(Target)

event.target = 收集者(英雄)。
我们要给他加血、加分。

捡了啥?(Other)

event.other = 被收集的物品(金币/宝石)。
我们通过 item.value 来知道它值多少钱。
铜币=1,金币=3,宝石=10(举例)。


Value: 1

Value: 3

Value: 10
+
Total: 220
accountant.py
1
# 计算收集物品的价值,并用其计分。
2
player = game.spawnPlayerXY("captain", 40, 34)
生成玩家
3
player.maxSpeed = 20
4
game.spawnXY("chest", 68, 56)
生成宝箱(大奖)
5
game.spawnXY("chest", 14, 14)
6
7
def spawnRandomItem():
随机生成物品的函数
8
itemNumber = game.randomInteger(1, 3)
随机选一种物品
9
x = game.randomInteger(12, 68)
随机X坐标
10
y = game.randomInteger(12, 56)
随机Y坐标
11
if itemNumber == 1:
12
game.spawnXY("bronze-coin", x, y)
生成铜币
13
elif itemNumber == 2:
14
game.spawnXY("gold-coin", x, y)
生成金币
15
elif itemNumber == 3:
16
game.spawnXY("gem", x, y)
生成宝石
17
18
itemInterval = 1
生成间隔1秒
19
itemSpawnTime = 0
20
def checkSpawnTimer():
检查生成时间的函数
21
if game.time >= itemSpawnTime:
22
# 调用spawnRandomItem函数。
23
spawnRandomItem()
执行生成
24
itemSpawnTime += itemInterval
更新下次生成时间
25
26
game.score = 0
初始化分数
27
def onCollect(event):
定义收集事件
28
# event.target存放收集者。
29
collector = event.target
也就是玩家
30
# event.other存放收集的物品。
31
item = event.other
被捡起的金币或宝石
32
if item.value:
如果这个东西有价值
33
# 将收集物品的价值(value)增加到收集者的生命值上
34
collector.health += item.value
加血
35
# 将收集物品的价值(value)增加到游戏分数(game.score)上
36
game.score += item.value
加分
37
player.on("collect", onCollect)
将事件绑定给玩家
38
39
endTime = 20
40
requiredScore = 220
目标分数220
41
goldGoal = game.addManualGoal('在20秒内收集至少220金。')
42
ui.track(game, "score")
在屏幕显示分数
43
def checkGoals():
检查目标的函数
44
if game.score >= requiredScore:
45
game.setGoalState(goldGoal, True)
达成目标
46
47
while True:
48
checkSpawnTimer()
49
checkGoals()
LEVEL 16

烫手的宝石 (Hot Gems)

危险的贪婪

这个关卡有点反直觉:宝石是坏的! 它们被诅咒了,捡起来会烫手(扣血)。 反而是普通的金币可以治愈你。

金币 (Gold Coin)

item.type == "gold-coin"
Effect: + Health (加血)

宝石 (Gem)

item.type == "gem"
Effect: - Health (扣血!)

HP: -25
不要捡宝石!
cursed_treasure.py
1
# 黄金会治愈你,宝石会伤害你。
2
player = game.spawnPlayerXY("captain", 40, 34)
3
player.maxSpeed = 20
4
# 我们对宝石和硬币使用相对生命值。
5
healthValue = player.maxHealth / 4
每次加/扣 1/4 血量
6
7
def spawnRandomPlaced(type):
辅助函数:随机位置生成
8
x = game.randomInteger(12, 68)
9
y = game.randomInteger(12, 56)
10
game.spawnXY(type, x, y)
11
12
itemInterval = 2
13
itemSpawnTime = 0
14
game.collected = 0
15
ui.track(game, "time")
16
ui.track(game, "collected")
17
ui.track(player, "health")
一定要盯着血量!
18
game.addCollectGoal(10)
目标:收集10个任意物品
19
game.addSurviveGoal()
目标:别死
20
21
def onSpawn(event):
22
unit = event.target
23
unit.behavior = "AttacksNearest"
24
game.setActionFor("munchkin", "spawn", onSpawn)
25
26
def onCollect(event):
收集事件处理器
27
collector = event.target
玩家
28
item = event.other
物品
29
game.collected += 1
计数 + 1
30
# 如果 item.type 是"gold-coin":
31
if item.type == "gold-coin":
32
# 玩家的健康值 collector.health 增加 healthValue
33
collector.health += healthValue
加血
34
# 如果 item.type 是"gem":
35
if item.type == "gem":
36
# 玩家的健康值collector.health 减少 healthValue
37
collector.health -= healthValue
扣血!
38
39
player.on("collect", onCollect)
绑定收集事件
40
41
def checkSpawnTimer():
42
if game.time >= itemSpawnTime:
43
spawnRandomPlaced("gem")
44
spawnRandomPlaced("gold-coin")
45
spawnRandomPlaced("munchkin")
46
itemSpawnTime += itemInterval
47
48
while True:
49
checkSpawnTimer()