码迷,mamicode.com
首页 > 其他好文 > 详细

「网易官方」极客战记(codecombat)攻略-游戏开发2-奔向黄金-run-for-gold

时间:2020-05-06 19:50:59      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:属性   解法   core   def   get   eth   时间   evel   价值   

技术图片
                                                                          (点击图片进入关卡)

最有价值的物品最先消失。

简介

要做这个简单的收集游戏,我们需要掌握时间管理。

使用时间戳追踪何时刷新新的宝藏:

if game.time > game.spawnTime:
    spawnSomething()
    game.spawnTime += spawnInterval

此外,我们可以保存一个时间戳作为一个物品的属性跟踪当它的时间 destroy() 该物品。

默认代码

# 产生随机放置的宝藏,然后销毁它们。
# 这会在随机点生成一个具有生命期的物品。
def spawnValuable(itemType, lifetime):
    x = game.randomInteger(12, 68)
    y = game.randomInteger(12, 56)
    item = game.spawnXY(itemType, x, y)
    item.destroyTime = game.time + lifetime
# 这就产生了宝藏。
def spawnTreasures():
    spawnValuable("bronze-coin", 6)
    spawnValuable("silver-coin", 5)
    spawnValuable("gold-coin", 4)
    spawnValuable("gem", 2)
# 物品的事件处理程序。
def onSpawn(event):
    item = event.target
    while True:
        # 如果游戏时间大于物品销毁时间:
        if item.destroyTime < game.time:
            # 调用item的destroy() 方法:
            item.destroy()

 

game.setActionFor("bronze-coin", "spawn", onSpawn)
game.setActionFor("silver-coin", "spawn", onSpawn)
game.setActionFor("gold-coin", "spawn", onSpawn)
game.setActionFor("gem", "spawn", onSpawn)
# 游戏设置,目标和用户界面。
game.spawnTime = 0
game.spawnInterval = 3
game.score = 0
if not db.get("topScore"):
    db.set("topScore", 0)
ui.track(game, "time")
ui.track(game, "score")
ui.track(db, "topScore")
goal = game.addManualGoal("30秒内收集至少50颗黄金。")
# 球员设置。
player = game.spawnPlayerXY("captain", 40, 34)
player.maxSpeed = 25
def onCollect(event):
    item = event.other
    # 如果物品具有"value"属性:

 

        # 按物品价值增加游戏得分:

 

player.on("collect", onCollect)
# 检查距离宝藏产生的倒计时。
def checkSpawns():
    # 如果game.time大于game.spawnTime:

 

        # 调用SpWaNo珍宝创建更多的物品。

 

        # 通过game.spawnInterval增加game.spawnTime:

 

    pass
# 这检查目标的状态。
def checkGoal():
    if game.score > 50:
        game.setGoalState(goal, True)
    else:
        game.setGoalState(goal, True)
# 这检查游戏状态。
def checkGameOver():
    if game.time > 30:
        checkGoal()
        db.set("topScore", game.score)
while True:
    checkSpawns()
    checkGameOver()

概览

在这个关卡,我们使用 "spawn" 事件来跟踪一个 while-true 循环中每个项的状态。

在循环中,当它 destroy 物品时,不需要中断循环,因为当物品 / 单位被破坏时,事件处理程序也停止。

奔向黄金 解法

# 产生随机放置的宝藏,然后销毁它们。
# 这会在随机点生成一个具有生命期的物品。
def spawnValuable(itemType, lifetime):
    x = game.randomInteger(12, 68)
    y = game.randomInteger(12, 56)
    item = game.spawnXY(itemType, x, y)
    item.destroyTime = game.time + lifetime
# 这就产生了宝藏。
def spawnTreasures():
    spawnValuable("bronze-coin", 6)
    spawnValuable("silver-coin", 5)
    spawnValuable("gold-coin", 4)
    spawnValuable("gem", 2)
# 物品的事件处理程序。
def onSpawn(event):
    item = event.target
    while True:
        # 如果游戏时间大于物品销毁时间:
        if item.destroyTime < game.time:
            # 调用item的destroy() 方法:
            item.destroy()

 

game.setActionFor("bronze-coin", "spawn", onSpawn)
game.setActionFor("silver-coin", "spawn", onSpawn)
game.setActionFor("gold-coin", "spawn", onSpawn)
game.setActionFor("gem", "spawn", onSpawn)
# 游戏设置,目标和用户界面。
game.spawnTime = 0
game.spawnInterval = 3
game.score = 0
if not db.get("topScore"):
    db.set("topScore", 0)
ui.track(game, "time")
ui.track(game, "score")
ui.track(db, "topScore")
goal = game.addManualGoal("30秒内收集至少50颗黄金。")
# 球员设置。
player = game.spawnPlayerXY("captain", 40, 34)
player.maxSpeed = 25
def onCollect(event):
    item = event.other
    # 如果物品具有"value"属性:
    if item.value:
        # 按物品价值增加游戏得分:
        game.score += item.value
player.on("collect", onCollect)
# 检查距离宝藏产生的倒计时。
def checkSpawns():
    # 如果game.time大于game.spawnTime:
    if game.time > game.spawnTime:
        # 调用SpWaNo珍宝创建更多的物品。
        spawnTreasures()
        # 通过game.spawnInterval增加game.spawnTime:
        game.spawnTime += game.spawnInterval
# 这检查目标的状态。
def checkGoal():
    if game.score > 50:
        game.setGoalState(goal, True)
    else:
        game.setGoalState(goal, True)
# 这检查游戏状态。
def checkGameOver():
    if game.time > 30:
        checkGoal()
        db.set("topScore", game.score)
while True:
    checkSpawns()
    checkGameOver()
 

本攻略发于极客战记官方教学栏目,原文地址为:

https://codecombat.163.com/news/jikezhanji-benxianghuangjin

极客战记——学编程,用玩的!

「网易官方」极客战记(codecombat)攻略-游戏开发2-奔向黄金-run-for-gold

标签:属性   解法   core   def   get   eth   时间   evel   价值   

原文地址:https://www.cnblogs.com/codecombat/p/12838220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!