Tank (机器人类)

class Tank(data_list, i)

基类:Sprite

机器人功能与属性。 使用 opt.TANK 调用实例。

x

x 坐标

Type

float

y

y 坐标

Type

float

vx

x 方向速度

Type

float

vy

y 方向速度

Type

float

r

朝向的弧度信息,东方向为 0 度,南方向是 -π/2,西方向是 π,北方向为 π/2

Type

Radian

vr

角速度,弧度/秒

Type

Radian

Attributes Summary

angle

机器人朝向角度,东方向为 0 度,南方向是 -90 度,西方向是 180 度,北方向为 90 度

cool_remain

机器人发射技能还需要的冷却时间。每次发射技能后需要 20s 的冷却时间

left_velocity

左履带转动速度

length

机器人长度

radian

机器人朝向弧度,东方向为 0 度,南方向是 -π/2,西方向是 π,北方向为 π/2

radian_velocity

机器人角速度,单位为弧度/秒

right_velocity

右履带转动速度

width

机器人宽度

Methods Summary

angle_to(x, y)

获取机器人与某坐标 (x, y) 的角度

distance_to(x, y)

获取机器人与某坐标 (x, y) 距离

do_fire()

设置发射技能,没有设置时,默认不发射技能。机器人需要 20s 的准备时间才能发射技能,并且每次发射完技能,也需要另外 20s 准备下一次技能的发射。 注意:当赛制的时间小于 20s 时,使用这个函数将不会有任何效果。

face_enemy_door([offset])

判断当前时刻,机器人是否面向对方球门,接受一定程度的偏置处理。

face_my_door([offset])

判断当前时刻,机器人是否面向我方球门,接受一定程度的偏置处理。

is_ball_in_range(distance[, left_view, ...])

判断球是否在自己的 距离范围 和 朝向的角度范围 内。 如果左右视野任意一个为 None,那么只会判断距离范围是否满足。

is_enemy()

判断此机器人是否为对方机器人

is_mine()

判断此机器人是否为我方机器人

is_point_in_range(x, y, distance[, ...])

判断某个点坐标是否在自己的 距离范围 和 朝向的角度范围 内。 如果左右视野任意一个为 None,那么只会判断距离范围是否满足。

is_stuck([slow_speed])

判断是否在短时间内运动缓慢或者卡住不动。

not_fire()

设置不发射技能, 默认不发射技能

observe(left_view, right_view[, include_ball])

获取机器人左右视野内的机器人或球

on_east_of(item[, offset])

判断是否在选定物体的东边

on_north_of(item[, offset])

判断是否在选定物体的北边

on_south_of(item[, offset])

判断是否在选定物体的南边

on_west_of(item[, offset])

判断是否在选定物体的西边

radian_to(x, y)

获取机器人与某坐标 (x, y) 的弧度

Attributes Documentation

angle

机器人朝向角度,东方向为 0 度,南方向是 -90 度,西方向是 180 度,北方向为 90 度

返回

角度

返回类型

Angle

../_images/sprite_angle.png

实际案例

>>> import opt
>>> opt.TANK.r = 1.5707963267948966
>>> print(opt.TANK.angle)
90.0
cool_remain

机器人发射技能还需要的冷却时间。每次发射技能后需要 20s 的冷却时间

返回

还需等待的冷却时间(毫秒)

返回类型

int

left_velocity

左履带转动速度

返回

米/秒

返回类型

float

length

机器人长度

返回

返回类型

float

radian

机器人朝向弧度,东方向为 0 度,南方向是 -π/2,西方向是 π,北方向为 π/2

返回

弧度

返回类型

Radian

../_images/sprite_radian.png

实际案例

>>> import opt
>>> opt.TANK.r = 1.5707963267948966
>>> print(opt.TANK.radian)
1.5707963267948966
radian_velocity

机器人角速度,单位为弧度/秒

返回

角速度

返回类型

Radian

../_images/sprite_radian_velocity.png

实际案例

>>> import opt
>>> opt.TANK.vr = 1.5
>>> print(opt.TANK.radian_velocity)
1.5
right_velocity

右履带转动速度

返回

米/秒

返回类型

float

width

机器人宽度

返回

返回类型

float

Methods Documentation

angle_to(x, y)

获取机器人与某坐标 (x, y) 的角度

参数
  • x (float) – 目标 x 坐标

  • y (float) – 目标 y 坐标

返回

角度

返回类型

Angle

../_images/sprite_angle_to.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y, opt.TANK.r = 0, 0, 0
>>> print(opt.TANK.angle_to(-1, 0))
180.0
distance_to(x, y)

获取机器人与某坐标 (x, y) 距离

参数
  • x (float) – 目标 x 坐标

  • y (float) – 目标 y 坐标

返回

距离

返回类型

float

../_images/sprite_distance_to.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y = 0, 0
>>> print(opt.TANK.distance_to(2, 0))
2.0
static do_fire()

设置发射技能,没有设置时,默认不发射技能。机器人需要 20s 的准备时间才能发射技能,并且每次发射完技能,也需要另外 20s 准备下一次技能的发射。 注意:当赛制的时间小于 20s 时,使用这个函数将不会有任何效果。

实际案例

>>> import opt
>>> opt.TANK.do_fire()
face_enemy_door(offset=0)

判断当前时刻,机器人是否面向对方球门,接受一定程度的偏置处理。

参数

offset (float) – 增加或减少判断的范围。offset 为正,则往球门外两侧增大范围;为负,则往球门内缩小范围。取值需在(-8,+8)之间,默认为 0

返回

True/False

引发

AssertionError – offset must in a range of (-8, +8)

../_images/tank_face_enemy_door.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y, opt.TANK.r = 0, 0, 0
>>> print(opt.TANK.face_enemy_door())
True
face_my_door(offset=0)

判断当前时刻,机器人是否面向我方球门,接受一定程度的偏置处理。

参数

offset (float) – 增加或减少判断的范围。offset 为正,则往球门外两侧增大范围;为负,则往球门内缩小范围。取值需在(-8,+8)之间,默认为 0

返回

True/False

引发

AssertionError – offset must in a range of (-8, +8)

../_images/tank_face_my_door.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y, opt.TANK.r = 0, 0, 0
>>> print(opt.TANK.face_my_door())
False
is_ball_in_range(distance, left_view=None, right_view=None)

判断球是否在自己的 距离范围 和 朝向的角度范围 内。 如果左右视野任意一个为 None,那么只会判断距离范围是否满足。

参数
  • distance (float) – range 范围

  • left_view (Angle, Radian, float, int, None) – 左边界范围,正方向是以朝向为基准的逆时针方向。单位为弧度,如果传入角度,将会自动转换成弧度。默认为 None

  • right_view (Angle, Radian, float, int, None) – 右边界范围,正方向是以朝向为基准的逆时针方向。单位为弧度,如果传入角度,将会自动转换成弧度。默认为 None

返回

True/False

../_images/tank_is_ball_in_range.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y, opt.TANK.r = 0, 0, 0
>>> opt.BALL.x, opt.BALL.y = 1, 0
>>> print(opt.TANK.is_ball_in_range(2))
True
>>> # 如果 right_view 在机器人运动方向的右侧,则为负数,例如:
>>> print(opt.TANK.is_ball_in_range(2, opt.a2r(10), opt.a2r(-10)))
True
>>> # 如果 right_view 在机器人运动方向的左侧,则为正数,例如:
>>> print(opt.TANK.is_ball_in_range(2, opt.a2r(90), opt.a2r(30)))
False
is_enemy()

判断此机器人是否为对方机器人

返回

True/False

is_mine()

判断此机器人是否为我方机器人

返回

True/False

is_point_in_range(x, y, distance, left_view=None, right_view=None)

判断某个点坐标是否在自己的 距离范围 和 朝向的角度范围 内。 如果左右视野任意一个为 None,那么只会判断距离范围是否满足。

参数
  • x (float) – 点的 x 坐标

  • y (float) – 点的 y 坐标

  • distance (float) – range 范围

  • left_view (Angle, Radian, float, int, None) – 左边界范围,正方向是以朝向为基准的逆时针方向。单位为弧度,如果传入角度,将会自动转换成弧度。默认为 None

  • right_view (Angle, Radian, float, int, None) – 右边界范围,正方向是以朝向为基准的逆时针方向。单位为弧度,如果传入角度,将会自动转换成弧度。默认为 None

返回

True/False

引发

AssertionError – left_view must >= right_view

../_images/tank_is_point_in_range.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y, opt.TANK.r = 0, 0, 0
>>> print(opt.TANK.is_point_in_range(1, 0, 2))
True
>>> # 如果 right_view 在机器人运动方向的右侧,则为负数,例如:
>>> print(opt.TANK.is_point_in_range(1, 0, 2, opt.a2r(10), opt.a2r(-10)))
True
>>> # 如果 right_view 在机器人运动方向的左侧,则为正数,例如:
>>> print(opt.TANK.is_point_in_range(1, 0, 2, opt.a2r(90), opt.a2r(30)))
False
is_stuck(slow_speed=0.2)

判断是否在短时间内运动缓慢或者卡住不动。

参数

slow_speed (float) – 自定义的缓慢速度量,如果横纵轴速度有一个超出这个量级,就没有卡住。默认为 0.2

返回

True/False

实际案例

>>> # 当程序运行了多个 step,并且机器人都没有移动
>>> import opt
>>> print(opt.TANK.is_stuck())
True
static not_fire()

设置不发射技能, 默认不发射技能

实际案例

>>> import opt
>>> opt.TANK.not_fire()
observe(left_view, right_view, include_ball=False)

获取机器人左右视野内的机器人或球

参数
  • left_view (Angle, Radian, float, int, None) – 左边界范围,正方向是以朝向为基准的逆时针方向。单位为弧度,如果传入角度,将会自动转换成弧度。

  • right_view (Angle, Radian, float, int, None) – 右边界范围,正方向是以朝向为基准的逆时针方向。单位为弧度,如果传入角度,将会自动转换成弧度。

  • include_ball (bool) – 是否需要观测球,默认为 False

返回

在这个观测范围内的物体列表

../_images/tank_observe.png
引发

AssertionError – left_view must >= right_view

实际案例

>>> # 如果 right_view 在机器人运动方向的左侧,则为正数,例如:
>>> import opt
>>> tanks = opt.TANK.observe(opt.a2r(20), opt.a2r(10))
>>> # 如果 right_view 在机器人运动方向的右侧,则为负数,例如:
>>> tanks = opt.TANK.observe(opt.a2r(10), opt.a2r(-10))
on_east_of(item, offset=0)

判断是否在选定物体的东边

参数
  • item (Tank, Ball) – 其他机器人或者球

  • offset (int) – 额外距离

返回

True/False

../_images/tank_on_east_of.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y = 0, 0
>>> opt.BALL.x, opt.BALL.y = 1, 0
>>> print(opt.TANK.on_east_of(opt.BALL))
False
on_north_of(item, offset=0)

判断是否在选定物体的北边

参数
  • item (Tank, Ball) – 其他机器人或者球

  • offset (int) – 额外距离

返回

True/False

../_images/tank_on_north_of.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y = 0, 0
>>> opt.BALL.x, opt.BALL.y = 1, 0
>>> print(opt.TANK.on_north_of(opt.BALL))
False
on_south_of(item, offset=0)

判断是否在选定物体的南边

参数
  • item (Tank, Ball) – 其他机器人或者球

  • offset (int) – 额外距离

返回

True/False

../_images/tank_on_south_of.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y = 0, 0
>>> opt.BALL.x, opt.BALL.y = 1, 1
>>> print(opt.TANK.on_south_of(opt.BALL))
True
on_west_of(item, offset=0)

判断是否在选定物体的西边

参数
  • item (Tank, Ball) – 其他机器人或者球

  • offset (int) – 额外距离

返回

True/False

../_images/tank_on_west_of.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y = 0, 0
>>> opt.BALL.x, opt.BALL.y = 1, 0
>>> print(opt.TANK.on_west_of(opt.BALL))
True
>>> print(opt.TANK.on_west_of(opt.BALL, 2))
False
radian_to(x, y)

获取机器人与某坐标 (x, y) 的弧度

参数
  • x (float) – 目标 x 坐标

  • y (float) – 目标 y 坐标

返回

弧度

返回类型

Angle

../_images/sprite_angle_to.png

实际案例

>>> import opt
>>> opt.TANK.x, opt.TANK.y, opt.TANK.r = 0, 0, 0
>>> print(opt.TANK.radian_to(-1, 0))
180.0