盒子
盒子
文章目录
  1. 带球好坏的衡量标准
  2. 小问题
  3. 拆后场
  4. 心得体会总结
  5. 策略
  6. 阶段性总结
  7. 鱼球碰撞模型所在位置:
  8. 调试
  9. 点球问题,
  10. 新平台的更改

water robot

带球好坏的衡量标准

  1. 球速度向进攻方向的时间
  2. 我方在球后鱼的个数
  3. 球在进攻半场的时间

    小问题

    当球贴着球门边上的时候,球不会算进。

    拆后场

    后场很复杂,小拆一下
    [x] forbiddendefencestrategy
    [x] strategy45//让4,5号鱼跟着球的z坐标相等
    [x] findbestdribbler //就是简单的鱼球角和球目标点角的差最小的情况
    [x] fishchoose
    [x] fishaction
    [ ] outupstrategy//13
    [ ] outdownstrategy//14
    [ ] interdefence
    [ ] outerdefence
    [ ] updefence
    [ ] downdefence
    [x] qiangduan
    [x] finddangerousfish(intnum1,intnum2)//用于判断对方哪条鱼威胁更大
    [ ] findhitfishpoint
    [x] finddangerousfish(ListOppFishID)
    [ ] dribblescore//貌似是一个粗略估计带球时间的函数,但是怎么出现的呢?
    [ ] hitotherscore//粗略估计撞鱼所需时间的……
    [x] wheelscore//这个函数没用?想做什么?
    [ ] stopball//用鱼去停球
    [ ] isbehindball//判断是否是鱼在球后以及球在鱼的鱼头、鱼尾中间
    [ ] isupball//鱼是不是在球的上面,相对于整个球来说的
    [ ] isdownball//同上,too
    [ ] dribbleaway
    [ ] wheelatgoal
    [ ] wheelatedge//flag为true是从上往下绕,false从下往上绕
    [ ] judgewulong//球在禁区内的乌龙情况判断
    [ ] selectbestwheel
    [x] countbehindball
    /*
  • choose的值
  • 1表示将球带离球门
  • 2表示撞鱼
  • 3表示抢断横鱼
  • 4dribble(2100)
  • 5同6
  • 6球特别靠近球门的情况下,我方要绕到球后
  • 7dribble -80度带球
  • 8dribble 80度带球
  • 9边界从上往下绕
  • 10边界从下往上绕
  • 11后场边界 顺时针走
  • 12后场边界 逆时针走
  • 13上边界 顺时针
  • 14下边界 逆时针
  • 15鱼静止
  • */
    后场里面好多函数在前场、中场里也存在,浪费……

    心得体会总结

  1. 平台特性
    1) 平台具有不对称性,所以设置参数不一定都相同
    2) 坐标都有随机误差,但是对于所有的鱼以及球误差是相同的,点球时可以根据此来消除误差。
    3) 平台具有随机性,调参时要对一个dll进行多次测试。同一个dll在不同的电脑上表现出来的效果也不同,可以多保存一些版本,比赛时根据场地情况,挑选最优的。
    4) 当调试平台打不开的时候,可以将txt文件最前面不对称的数据删除,然后重新开即可。
    5) 鱼靠墙边走,时间长了会被弹开。
    6) 球顶在球门角上不算进球。
    7) 安装reflector可以反编译dll得到代码,用reflexil插件可以对dll直接进行修改。
    8) 该平台函数从上到下运行,中间的会被覆盖,只考虑最后的结果
  2. 代码规范
    1) 不要所有东西堆到主函数里面,要各自封装到自己的类里面
    2) 将常用的判断设为函数
    3) 规范函数、变量命名
    4) 尽量少的使用全局变量
    5) 防止自身循环调用的出现,平时写函数的时候不要乱调用
    6) 复制粘贴模板的时候一定要看好,把所有的有用的都用到
    7) 在编写代码的过程中注意及时添加注释,对于代码修改也要注释怎么修改的并署名。
  3. 函数编写
    1) 具有预测思想,根据此时的速度距离,预测下一拍的速度距离,以对参数进行调整。
    2) 用step来约束某些if语句的执行次数
    3) 带球好坏的衡量标准
    A. 球速度向进攻方向的时间
    B. 我方在球后鱼的个数
    C. 球在进攻半场的时间

    策略

  4. 开场等待是否值得?
  5. 在原后场的基础上增加部分动作即可,不用拆了全部重新写
  6. 开场防守可否不去撞鱼 换为挡球 效果感觉好一些

    阶段性总结

    水球已经告一段落了,暂时不用继续那个扯淡的跑位以及带球了,总结:
  7. 改代码的时候要注意,不要瞎改,注意要有思考,不要一味去改,那样可能越改越烂,就像把刚体中心换成鱼头坐标后,不仅没变好,反而由于距离接近,导致角度出现很大的问题。
  8. 注意多加注释之类的,代码要分块,要清晰,不要多层if嵌套,有些常用判断可以弄成函数。
  9. 有的时候当改正不起作用的时候,不妨清空,重新开始。
  10. 由于平台不对称,所以参数设置也不一定要对称,调参数要多次观察,不要因为一次的偶然情况而胡乱修改。

    鱼球碰撞模型所在位置:

    鱼球碰撞模型所在位置: URWPGSim2D.Core.CollisionResponse
1
public static VelocityAndAngularVelocityResponse CollisionResponseBetweenFishAndBall(Vector3 NormalAxis, ref Vector3 velocityA, ref Vector3 velocityB, Vector3 fishHeadPoint, Vector3 fishMassCenter, Vector3 actionPoint, ref float bodyDirectionRad);

调试

调试的时候 会出现好多千奇百怪的情况,由于随意拖球,有些在比赛中基本不会发生的情况也会出现,所以不要根据那些情况进行策略变化

点球问题,

点球问题,目测分三段,每段大概都是10s。
最原始的点球数据记录

820—9s

1200—–15s

550—–6s

82050515149

120038363535

55030303030

把带球位置改成无限远

82049495051

120034353336

55029292831

感觉看起来鱼尾巴摆的也很厉害,但是貌似速度也都差不多,难道这个鱼游动 的速度,和调角的影响。
然后那个到禁区范围内的时间差不多5s正常,不会再快了。
那个一个小想法:把带球前往的位置 挪到无穷远处……

新平台的更改

  1. 制胜球阶段时间加长为5min(所以那个点球紧急程度可以减一下)
  2. 具体鱼体、场地数据没有对比
  3. 平台略扯 进入点球之后 如果能在一分半之内点进去 那么就是一直点

如果超过一分半 球没有点入就会进入 正常比赛模式 然后过了这一分半 就结束比赛

呼呼呼山(http://code4fun.me)
2019-05-01 09:26:21