Tank (机器人类)
- class Tank(data_list, i)
基类:
Sprite
机器人功能与属性。 使用 opt.TANK 调用实例。
- r
朝向的弧度信息,东方向为 0 度,南方向是 -π/2,西方向是 π,北方向为 π/2
- Type
Radian
- vr
角速度,弧度/秒
- Type
Radian
Attributes Summary
机器人朝向角度,东方向为 0 度,南方向是 -90 度,西方向是 180 度,北方向为 90 度
机器人发射技能还需要的冷却时间。每次发射技能后需要 20s 的冷却时间
左履带转动速度
机器人长度
机器人朝向弧度,东方向为 0 度,南方向是 -π/2,西方向是 π,北方向为 π/2
机器人角速度,单位为弧度/秒
右履带转动速度
机器人宽度
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
实际案例
>>> import opt >>> opt.TANK.r = 1.5707963267948966 >>> print(opt.TANK.angle) 90.0
- radian
机器人朝向弧度,东方向为 0 度,南方向是 -π/2,西方向是 π,北方向为 π/2
- 返回
弧度
- 返回类型
Radian
实际案例
>>> import opt >>> opt.TANK.r = 1.5707963267948966 >>> print(opt.TANK.radian) 1.5707963267948966
- radian_velocity
机器人角速度,单位为弧度/秒
- 返回
角速度
- 返回类型
Radian
实际案例
>>> import opt >>> opt.TANK.vr = 1.5 >>> print(opt.TANK.radian_velocity) 1.5
Methods Documentation
- angle_to(x, y)
获取机器人与某坐标 (x, y) 的角度
实际案例
>>> 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) 距离
实际案例
>>> 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)
实际案例
>>> 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)
实际案例
>>> 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,那么只会判断距离范围是否满足。
- 参数
- 返回
True/False
实际案例
>>> 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,那么只会判断距离范围是否满足。
- 参数
- 返回
True/False
- 引发
AssertionError – left_view must >= right_view
实际案例
>>> 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)
获取机器人左右视野内的机器人或球
- 参数
- 返回
在这个观测范围内的物体列表
- 引发
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)
判断是否在选定物体的东边
实际案例
>>> 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)
判断是否在选定物体的北边
实际案例
>>> 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)
判断是否在选定物体的南边
实际案例
>>> 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)
判断是否在选定物体的西边
实际案例
>>> 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