「网易官方」极客战记(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)
 
本攻略发于极客战记官方教学栏目,原文地址为:
 
 
 
原文地址:https://www.cnblogs.com/codecombat/p/13163361.html