zoukankan      html  css  js  c++  java
  • 「网易官方」极客战记(codecombat)攻略-沙漠-沙漠核心-crux-of-the-desert

    (点击图片进入关卡)

    食人魔们从非主要方向进攻!放置灭火器来教他们不要再次逆火而行。

    简介

    兽人从对角线方向攻来。

    首先,找到敌人是 isAbove (在上面) 还是 isBelow (在下面) 。

    然后找出敌人是 isLeft (在左边) 还是 isRight (在右边)

    然后,综合所有条件在正确的 X 标记处建造 "fire-trap" 。

    默认代码

    # 找出食人魔是来自哪个方向的
    while True:
        enemy = hero.findNearestEnemy()
        if enemy:
            # 左边:enemy.pos.x小于hero.pos.x
            isLeft = hero.pos.x > enemy.pos.x
            # 上方:enemy.pos.y大于hero.pos.y
            isAbove = hero.pos.y < enemy.pos.y
            # 右边:enemy.pos.x大于hero.pos.x

     

            # 下方:enemy.pos.y小于hero.pos.y

     

            # 如果敌人在上方 (isAbove) 和 左边 (isLeft):
            # buildXY()是X标记处的一个"fire-trap"。
            if isLeft and isAbove:
                hero.buildXY("fire-trap", 20, 51)
            # 如果敌人在上方 (isAbove) 和右边 (isRight):
            # buildXY()是X标记处的一个"fire-trap"。

     

            # 如果敌人在下方 (isBelow) 和左边 (isLeft):
            # buildXY()是X标记处的一个"fire-trap"。

     

            # 如果敌人在下方 (isBelow) 和右边 (isRight):
            # buildXY()是X标记处的一个"fire-trap"。

     

            hero.moveXY(40, 34)
        else:
            hero.moveXY(40, 34)

    概览

    在这关,兽人从对角线方向进攻!

    在 左边 的敌人的 pos.x 会小于英雄的 pos.x 。

    在 右边 的敌人的 pos.x 会大于英雄的 `pos.x'。

    在 上边 的敌人的 pos.y 会大于英雄的 pos.y 。

    在 下边 的敌人的 pos.y 会小于英雄的 pos.y 。

    检查敌人是否在左上角,大概这样做:

    enemy = hero.findNearestEnemy()
    if enemy:
        if enemy.pos.x < hero.pos.x and enemy.pos.y > hero.pos.y:
            # 在左上角建造陷阱。

    不过有更加清晰的写法:

    enemy = hero.findNearestEnemy()
    if enemy:
        isAbove = enemy.pos.y > hero.pos.y
        isLeft = enemy.pos.x < hero.pos.x
        if isAbove and isLeft:
            # 在左上角建造陷阱。

    不仅方便补全其他方向的代码,还容易看懂!

    沙漠核心 解法

    # 找出食人魔是来自哪个方向的
    while True:
        enemy = hero.findNearestEnemy()
        if enemy:
            # 左边:enemy.pos.x小于hero.pos.x
            isLeft = hero.pos.x > enemy.pos.x
            # 上方:enemy.pos.y大于hero.pos.y
            isAbove = hero.pos.y < enemy.pos.y
            # 右边:enemy.pos.x大于hero.pos.x
            isRight = hero.pos.x < enemy.pos.x
            # 下方:enemy.pos.y小于hero.pos.y
            isBelow = hero.pos.y > enemy.pos.y
            # 如果敌人在上方 (isAbove) 和 左边 (isLeft):
            # buildXY()是X标记处的一个"fire-trap"。
            if isLeft and isAbove:
                hero.buildXY("fire-trap", 20, 51)
            # 如果敌人在上方 (isAbove) 和右边 (isRight):
            # buildXY()是X标记处的一个"fire-trap"。
            if isRight and isAbove:
                hero.buildXY("fire-trap", 60, 51)
            # 如果敌人在下方 (isBelow) 和左边 (isLeft):
            # buildXY()是X标记处的一个"fire-trap"。
            if isLeft and isBelow:
                hero.buildXY("fire-trap", 20, 17)
            # 如果敌人在下方 (isBelow) 和右边 (isRight):
            # buildXY()是X标记处的一个"fire-trap"。
            if isRight and isBelow:
                hero.buildXY("fire-trap", 60, 17)
            hero.moveXY(40, 34)
        else:
            hero.moveXY(40, 34)
     
    本攻略发于极客战记官方教学栏目,原文地址为:
     
     
     
  • 相关阅读:
    linux设置tomcat开机自启动
    搭建本地的git仓库
    Linux安装配置JDK
    关于HTTP GET请求的url中文参数编码
    [dataTables.js error] Uncaught TypeError: myTable.row is not a function
    DataTables warning : Requested unknown parameter '5' from the data source for row 0
    取消mod_sofia的呼叫鉴权
    TCP服务器不回复SYN的问题
    volley7--NetworkDispatcher从网络中获取数据
    volley4--RequestQueue
  • 原文地址:https://www.cnblogs.com/codecombat/p/13163361.html
Copyright © 2011-2022 走看看