CodeCombat森林“天启”(Apocalypse)自动跑位回避炮弹

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]})

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 继续添加中。 17.4.16进度: B站土豆搜狐完毕,汤mcbender/mcfassy/fassavoy/xmf...
    千百化一阅读 2,288评论 1 8
  • 嘴角上扬的青春 1.有些路,只能自己一个人走 上了大学,第一堂课上老师说了一句话,至今仍然记忆犹新。“宿舍六个人,...
    朝阳学神阅读 341评论 2 0
  • 今天发生了一件好事 不过我不告诉你,害羞哈哈 开心,激动,肾上腺素分泌增多,白天喝的水也不少,要我跑了好几趟厕所 ...
    Leonor_Z阅读 186评论 0 0
  • 每到山腰总忘还,小村竟在白云间。 当时一聚好消闲。 已见落霞残照里,犹闻醉语月华边。 人间天上共婵娟。
    雪窗_武立之阅读 330评论 0 4