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]})
我估计我算法是比较简单,但是这性能没法看……