美文网首页
CodeCombat森林“天启”(Apocalypse)自动跑位

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

作者: 碳头 | 来源:发表于2016-09-12 11:06 被阅读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]})
    

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

    相关文章

      网友评论

          本文标题:CodeCombat森林“天启”(Apocalypse)自动跑位

          本文链接:https://www.haomeiwen.com/subject/tjjpettx.html