0


AI创想家,AI足球(黄金可以打一打)

import opt

import math

def move_to(x,y):

radian = opt.TANK.radian_to(x, y)

vs = math.cos(radian)

hs = -1 * math.sin(radian)

return vs, hs

def smart_fire():

tank_ball_angle = opt.TANK.angle_to(opt.BALL.x,opt.BALL.y)

if opt.TANK.face_enemy_door() and (0 <= tank_ball_angle < 3 or 357 < tank_ball_angle <360):

    opt.TANK.do_fire()

def striker():

if opt.BALL.x > 45 and -8 < opt.BALL.y < 8 :

    vs , hs = move_to(opt.BALL.x+1 , opt.BALL.y)

elif opt.BALL.y > 0 :

    vs , hs = move_to(45 , 5)

else:

    vs , hs = move_to(45 , -5)

return vs , hs

def midfield():

smart_fire()

t_x=opt.TANK.x

if opt.BALL.vx < -0.5:

    if opt.BALL.y > 0 :

        if t_x<opt.BALL.x:#此时处于有利局势,并且在球后,正常追球

            vs , hs = move_to(opt.BALL.x+5 , opt.BALL.y-2)

        else:#此时处于有利局势,但在球前,需要绕到后面再正常追球

            vs , hs = move_to(opt.BALL.x-5 , opt.BALL.y-2)

    else:

        if t_x<opt.BALL.x:

            vs , hs = move_to(opt.BALL.x+5 , opt.BALL.y+2)

        else:

            vs , hs = move_to(opt.BALL.x-5 , opt.BALL.y+2)

else:

    if opt.BALL.y > 0 :

        if t_x<opt.BALL.x:#此时处于被动局势,并且在球后,正常防守

            vs , hs = move_to(opt.BALL.x+4.5 , opt.BALL.y-1.5)

        else:#此时处于被动局势,而且在球前,需要绕到后面再正常防守

            vs , hs = move_to(opt.BALL.x-4.5 , opt.BALL.y-1.5)

    else:

        if t_x<opt.BALL.x:

            vs , hs = move_to(opt.BALL.x+4.5 , opt.BALL.y+1.5)

        else:

            vs , hs = move_to(opt.BALL.x-4.5 , opt.BALL.y+1.5)

return vs, hs

def defence():

vs, hs = 0, 0

# 如果足球的x坐标小于-40,进入防守范围,机器人追击足球

if opt.BALL.x < -40:

    angle = opt.TANK.angle_to(opt.BALL.x, opt.BALL.y)

    if angle > 0 and angle <= 90:

        vs, hs = 0.8, -0.3

    elif angle > 90 and angle <= 180:

        vs, hs = -0.8, -0.3

    elif angle > 180 and angle <= 270:

        vs, hs = -0.8, 0.3

    elif angle > 270 and angle <= 360:

        vs, hs = 0.8, 0.3

# 否则,超出防守范围,机器人驶向并停在(-48,0)坐标附近

else:

    if opt.TANK.is_point_in_range(-48, 0, 2):

        vs, hs = 0, 0

    else:

        angle = opt.TANK.angle_to(-48, 0)

        if angle > 0 and angle <= 90:

            vs, hs = 0.8, -0.3

        elif angle > 90 and angle <= 180:

            vs, hs = -0.8, -0.3

        elif angle > 180 and angle <= 270:

            vs, hs = -0.8, 0.3

        elif angle > 270 and angle <= 360:

            vs, hs = 0.8, 0.3

# 当defence()被tank_update()调用时,每一帧都会执行以上策略,并返回vs,hs值

return vs, hs

定义机器人attack( )进攻策略的方法

def attack():

vs, hs = 0, 0

# 控制机器人移动的唯一方法是设置速度vs的值[-1,+1]和转动方向hs的值[-1,+1]

# 首先,获取足球相对于机器人的角度,并储存在变量angle中

angle = opt.TANK.angle_to(opt.BALL.x, opt.BALL.y)

# 如果足球在机器人0-90度范围内,设置机器人速度vs为前进0.8,转动方向hs为左转-0.3

if angle > 0 and angle <= 90:

    vs, hs = 0.8, -0.3

# 如果足球在机器人90-180度范围内,设置机器人速度vs为后退-0.8,转动方向hs为左转-0.3

elif angle > 90 and angle <= 180:

    vs, hs = -0.8, -0.3

# 如果足球在机器人180-270度范围内,设置机器人速度vs为后退-0.8,转动方向hs为右转0.3

elif angle > 180 and angle <= 270:

    vs, hs = -0.8, 0.3

# 如果足球在机器人270-360度范围内,设置机器人速度vs为前进0.8,转动方向hs为右转0.3

elif angle > 270 and angle <= 360:

    vs, hs = 0.8, 0.3

# 当attack()被tank_update()调用时,每一帧都会执行以上策略,并返回vs,hs值

return vs, hs

定义机器人goalkeeper( )门将策略的方法

def goalkeeper():

if opt.BALL.x < -35:

    vs , hs = move_to(opt.BALL.x-3 , opt.BALL.y)

elif opt.BALL.y >= 0 :

    vs , hs = move_to(-49 , 5)

else:

    vs , hs = move_to(-49 , -5)          

return vs, hs

#主循环

def tank1_update():

smart_fire()

return striker()

#return attack()

#return midfield()

#return defence()

#return goalkeeper()

def tank2_update():

smart_fire()

#return striker()

#return attack()

return midfield()

#return defence()

#return goalkeeper()

def tank3_update():

smart_fire()

#return striker()

#return attack()

return midfield()

#return defence()

#return goalkeeper()

def tank4_update():

smart_fire()

#return striker()

#return attack()

#return midfield()

return defence()

#return goalkeeper()

def tank5_update():

smart_fire()

#return striker()

#return attack()

#return midfield()

#return defence()

return goalkeeper()
标签: python

本文转载自: https://blog.csdn.net/qq_35738121/article/details/139812082
版权归原作者 lqk30875 所有, 如有侵权,请联系我们删除。

“AI创想家,AI足球(黄金可以打一打)”的评论:

还没有评论