• 「网易官方」极客战记(codecombat)攻略-游戏开发2-标准操作规程-standard-operating-procedure


    对于所有单位类型使用相同的 SOP!

    简介

    事件处理程序获取有关触发它们的事件的信息:

    event.target 属性包含执行事件处理程序的单位。

    # 使用event.target,所有单位都可以使用相同的事件处理函数
    def sayHello(event):
        unit = event.target
        unit.say("Hi!")
    game.setActionFor("soldier", "spawn", sayHello)

    默认代码

    # 事件具有诸如event.target之类的属性
    # 这使您可以为许多不同的单位使用相同的事件处理程序。
    game.addDefeatGoal()
    soldier1 = game.spawnXY("soldier", 50, 30)
    soldier2 = game.spawnXY("soldier", 50, 35)
    soldier3 = game.spawnXY("soldier", 50, 40)
    munchkin1 = game.spawnXY("munchkin", 25, 30)
    munchkin2 = game.spawnXY("munchkin", 25, 35)
    munchkin3 = game.spawnXY("munchkin", 25, 40)
    # 这个函数让兽人1攻击它的敌人。
    # 使用event.target使这个函数适用于所有单位!
    def fightEnemies(event):
        while True:
            # 创建一个单位变量,并将事件对象分配给它

     

            # 现在将下面的行改为使用单元而不是兽人 1。
            enemy = munchkin1.findNearestEnemy() # ∆
            if enemy:
                munchkin1.attack(enemy) # ∆
    # 使用game.setActionFor() 将事件处理程序分配给许多单位。
    game.setActionFor("munchkin", "spawn", fightEnemies)
    game.setActionFor("soldier", "spawn", fightEnemies)

    概览

    在之前的关卡中,你做过这样的事情:

    soldier1 = spawnXY("soldier", 10, 10)
    def fightEnemies(event):
        while True:
            enemy = soldier1.findNearestEnemy()
            if enemy:
                soldier1.attack(enemy)

    但是当我们增加更多的士兵会发生什么?

    soldier1 = spawnXY("soldier", 10, 10)
    soldier2 = spawnXY("soldier", 12, 10)
    soldier3 = spawnXY("soldier", 15, 10)

    因为 soldier1 被硬编码到 fightEnemies() 函数中,所以 soldier2 或 soldier3 不起作用!

    相反,我们应该使用 event.target 来知道哪个士兵正在执行事件处理函数:

    def fightEnemies(event):
        while True:
            unit = event.target
            enemy = unit.findNearestEnemy()
            if enemy:
                unit.attack(enemy)

    现在它适用于所有的士兵,以及任何其他类型的单位,如弓箭手或兽人!

    标准操作规程 解法

    # 事件具有诸如event.target之类的属性
    # 这使您可以为许多不同的单位使用相同的事件处理程序。
    game.addDefeatGoal()
    soldier1 = game.spawnXY("soldier", 50, 30)
    soldier2 = game.spawnXY("soldier", 50, 35)
    soldier3 = game.spawnXY("soldier", 50, 40)
    munchkin1 = game.spawnXY("munchkin", 25, 30)
    munchkin2 = game.spawnXY("munchkin", 25, 35)
    munchkin3 = game.spawnXY("munchkin", 25, 40)
    # 这个函数让兽人1攻击它的敌人。
    # 使用event.target使这个函数适用于所有单位!
    def fightEnemies(event):
        while True:
            # 创建一个单位变量,并将事件对象分配给它
            unit = event.target
            # 现在将下面的行改为使用单元而不是兽人 1。
            enemy = unit.findNearestEnemy() # ∆
            if enemy:
                unit.attack(enemy) # ∆
    # 使用game.setActionFor() 将事件处理程序分配给许多单位。
    game.setActionFor("munchkin", "spawn", fightEnemies)
    game.setActionFor("soldier", "spawn", fightEnemies)
     
     
  • 相关阅读:
    PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径
    PAT甲题题解-1029. Median (25)-求两序列的中位数,题目更新了之后不水了
    PAT甲题题解-1028. List Sorting (25)-水排序
    BZOJ 1492 货币兑换Cash
    Codeforces 276D Little Girl and Maximum XOR
    Codeforces 526E Transmitting Levels
    Codeforces 335B Palindrome
    BZOJ 2527 Meteors
    Codeforces 449D Jzzhu and Numbers
    FJ省队集训DAY4 T3
  • 原文地址:https://www.cnblogs.com/codecombat/p/12736257.html
Copyright © 2020-2023  润新知