CodeCombat森林“天启”(Apocalypse)自动跑位

2016-09-12  本文已影响82人  碳头

codecombat的森林那关“天启”(英文:Apocalypse),原本的题目要求是用插旗跑,但是觉得可以用用代码自动判断之后跑。

github上面倒是有全部的攻略,但是这关也是插旗跑的。

新学Python3,慢慢地给写出来了。

但是我用的数组方式计算量太大,最后卡到死很难运行。

要么就是取点少取一些,第一行找全部可跑的点的时候,别用range(,,1),用range(,,10)倒是卡着卡着能跑完一分钟,但是取点太远,常常会乱跑。

中间要是加几个wait命令,也会没那么卡,但是人物会打滑,危险度也增加。

# 全部可以跑的点,想要少计算一些,就把range的steps变大
points =[[a, b] for a in range(11,52,1) for b in range(10, 58, 1)]

while 1:
    shells = hero.findEnemyMissiles() #炮弹直接用内置的函数找到全部炮弹的数列
    mPs = [shell.targetPos for shell in shells] #再找到落点的集合,targetPos也是游戏内置函数
    #找到全部炮弹伤害区域,半径是10,我直接让小于11  
    dangerPs = [points[i] for j in range(len(mPs)) for i in range(len(points)) if Math.sqrt((mPs[j]['x'] - points[i][0]) ** 2 + (mPs[j]['y'] - points[i][1]) ** 2) < 11]
    savePs = [saveP for saveP in points if saveP not in dangerPs] #安全点就是全部点not in伤害点

    #找到离英雄最近的一个安全点
    bestD = 99
    for n in range(len(savePs)):
        distD = Math.sqrt((savePs[n][0] - hero.pos.x) ** 2 + (savePs[n][1] - hero.pos.y) ** 2)
        if distD < bestD:
            bestD = distD
            godP = savePs[n]

    #跑向最近的安全点
    hero.move({'x':godP[0], 'y':godP[1]})

我估计我算法是比较简单,但是这性能没法看……

上一篇下一篇

猜你喜欢

热点阅读