Beam

控制球员上场的位置 位于策略文件中的beam函数,参数为x,y,angle

Strategy.cc

agent的控制结构

Skill----枚举量

常用的就kickBallgotoTarget 少数情况可能会使用到collisionAvoid避免碰撞

如何获取球场上的信息

worldModel

这是一个球场信息获取类,其中有很多封装好的函数可以用来获取球场的信息

worldObject

画点

角色分配方法

SelectSkill整体思路

  1. 对方准备踢球时,冲上去
  2. 如果离球最近的球员摔倒了,队友迅速补位,避免空防
  3. 如果球员角色是离球最近的球员(ON_BALL)
    1. 我方开球,简单策略,向后执行大脚踢
    2. 对方开球,我方不动
    3. 距离球的距离小于一???
      1. 如果是我方开球,
        1. 最前面的球员与我的距离大于五个单位,那我就朝球门踢球??
        2. 最前面的球员与我的距离没有那么大的距离,我就朝射球点函数获取的点位踢球。
      2. 球员号码在3~7的球员
        1. 如果我的位置比较靠近球门或者对方没有离球较近的球员,那就朝球门踢球
        2. 如果我在对方离球最近的球员的左下方,就朝躲避对方球员的方向带球
        3. 其他情况都朝躲避对方球员的方向带球
      3. 如果球里球门很近
        1. 如果对方离球最近的球员的距离小于0.5个单位,继续向球门带球==//这个方向还要改
        2. 其他情况,视为前方无对方球员,进行快踢操作
      4. 或者对方球员离球很近的时候
        1. 我在对方球员的下方,并且距离很近,避障方向带球
        2. 其他情况,则朝着对方球门避障的方向带球
      5. 如果对方离球最近的球员与球的距离适中的话
        1. 如果我的横坐标大于一,执行快踢动作
        2. 如果最前面的球员不为空,则快踢把球踢给队友
        3. 如果没找到最前面的队友,则向最近的球员传球
        4. 其他情况,就靠传球点生成函数生成射球点,并且使用快踢踢到目标点
      6. 如果离球最近的对方球员距离球稍远,并且球在我方场地,并且最前方的球员离我也比较远,那么使用大脚踢传给最前方的球员
      7. 其他情况朝着球门?使用大脚踢。//代码写的是利用落点生成函数进行生成落点。
  4. 如果是对方开球,向着各自的目标点走
  5. 遍历球员角色agentRole
    1. 如果第二个对象是ON_BALL
      1. 令flag=-1
      2. onball_num=第一个对象的号码
      3. 退出循环
  6. 如果获取到的flag的非运算为真,也就是flag为假,即:角色遍历中的第二个角色不为ON_BALL
    1. 令onball_num = 距离球最近的我方球员的编号
  7. 如果角色不为ON_BALL
    1. 如果游戏模式为正常踢球,并且对方距离球最近的球员距离球比较近,并且我距离球的距离也比较近,我在球的左边,就走向球
    2. 定义ON_flag=队友是否在离球最近的对方球员的右边,并且队友也在球的右边?1:0
    3. 一堆条件判断,最后都返回走向球的动作
  8. 返回走向阵型指定的点位