zoukankan      html  css  js  c++  java
  • 「网易官方」极客战记(codecombat)攻略-游戏开发2-奔向黄金-run-for-gold

                                                                              (点击图片进入关卡)

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

    简介

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

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

    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

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

  • 相关阅读:
    Android测试AsyncTask下载图片
    Android DatePickerDialog TimepickerDialog
    Android AlertDialog
    Android activity的回传数据
    Android Handler简单使用
    Java Switch(String)
    JAVA测试装饰者模式
    Java实现数组按数值大小排序
    Java参数按值传递?按引用传递
    Spring cloud之断路器hystrix包问题
  • 原文地址:https://www.cnblogs.com/codecombat/p/12838220.html
Copyright © 2011-2022 走看看