先知兵圣兵棋大赛初赛思路

  • 1. 战术思路
    • 1.1 战场环境
    • 1.2 行进方法
    • 1.3 进攻思路
  • 2.代码结构
    • 2.1 整体思路
    • 2.2 doSoldierMoveAction函数
    • 2.3 doVehicleMoveAction函数
    • 2.4 doTankMoveAction函数
      • 2.4.1 doMoveShootAction(self,att_bop,obj_bop)函数
    • 2.4.2 genMoveShootTarget函数
    • 2.4.3 genMoveShootBackTarget函数
    • 2.5 其它函数
      • 2.5.1 wgAI中的doMove函数
      • 2.5.2 wgsdata中的mainCity和secondarCity函数
      • 2.5.3 common.getAroundPos(pos) 函数
      • 2.5.4 common.getAllBopByPos函数
    • 2.6 其它改动
      • 2.6.1 禁止射击同格状态的敌方棋子
  • 3.当前问题
    • 3.1 是否能够最终射击的判断可能出错
    • 3.2 坦克行进间射击的位置选择有点问题
    • 3.3 可能依然会射击同格状态的敌方棋子
    • 3.4 对射击函数的调用优点问题,可能重复调用
    • 3.5 坦克行进间射击的动作顺序和设计的有点区别
    • 3.6 控制接口的调用延迟较大,可能也是上一条问题的原因,状态刷新有时候有问题
  • 4. 当前效果

1. 战术思路

1.1 战场环境

整个战场地图比较大,但是比较关注的是两个目标点周围的地形,其它地方的影响不大。

1.2 行进方法

行军实现起来太过麻烦,目前只调用给出的机动接口。

1.3 进攻思路

目前的进攻思路较为简单。考虑到主要目标点的分值是80,次要目标点的是50,因此主要思路就是攻占主要目标点。

最开始所有的战车和坦克的目标点都是主要目标点,到达主要目标点周围时

  • 若主要目标点未被攻占,则派遣其中一个战车进行占领,另一个战车和坦克分布在周围的居民区内,战士下车。
  • 若主要目标点已经被攻占,坦克进行行进间射击,射击之后往后退。战车若能被观察到则下车,否则选择附近高地或居民区。
  • 之后若主要目标点空出则择机进行占领,否则消灭可见的敌方棋子。

2.代码结构

2.1 整体思路

和demo代码的框架类似,不断循环判断当前阶段是否还有动作要执行,若没有则等待进入下一阶段。
其中主要改动为:

  1. 将wgAI文件中的doAction代码分解为三个部分,分别为doMyMoveAction()对应我方机动环节,doMyFinalShootingHuanJieAction()对应我方最终射击环节,doOpMoveHuanJieAction()对应对方机动环节。
  2. doMyFinalShootingHuanJieAction()和doOpMoveHuanJieAction()两个部分思路比较简单,就是不断循环判断当前是否可以射击然后执行射击。
  3. doMyMoveAction()表示我方机动阶段的动作,此中又分为三个部分,分别是doTankMoveAction对应坦克机动阶段动作,doVehicleMoveAction对应战车机动阶段动作,doSoldierMoveAction对应战士机动阶段动作。
  4. 添加实现上述函数的辅助函数。

2.2 doSoldierMoveAction函数

战士在机动阶段的动作。
因为战士不能行进间射击,且移动两个及以上会疲劳。因此尽量避免移动战士。
实现思路为,若当前主要目标点被敌方占领,且没有我方棋子目标位置是它,且没有可见的敌方棋子,那么战士向其移动一格。

2.3 doVehicleMoveAction函数

战车在机动阶段的动作。

  • 首先当可见范围内没有敌方棋子,其中一个设定目标为主要目标点并移动,另一个设定目标为主要目标点附近的一个居民区。
  • 若到达设定的目标点则下车并停止移动。
  • 若到达目标点以前见到敌方棋子且距离较近时,停止移动并下车。
  • 之后若视线内没有敌方棋子且没有其它棋子的目标点是主要目标点,则往它移动。
  • 如果周围有需要帮忙的同格的己方棋子,移动到该棋子位置。

2.4 doTankMoveAction函数

坦克在机动阶段的动作。

  • 刚开始距离较远时,坦克直接设定目标点为主要目标点。
  • 主要目标点被敌方占领,且所有敌方棋子都不可见时,目标也为主要目标点。
  • 如果有可见的敌方棋子,选择最近的一个进行行进间射击。
  • 如果主要目标点被己方占领,且没有可见的敌方棋子,那么选择周围的居民区为目标位置。

2.4.1 doMoveShootAction(self,att_bop,obj_bop)函数

坦克对敌方某个棋子进行行进间射击,射击之后往后退。判断当前位置是否能够射击,如果可以直接射击之后后退,否则移动到该棋子周围6格中最近的没有敌方棋子的位置,射击之后后退。

2.4.2 genMoveShootTarget函数

选择行进间射击的目标棋子周围的一个合适位置,移动到该位置。在射击之前调用。

2.4.3 genMoveShootBackTarget函数

选择行进间射击之后的后退位置,射击之后调用。往远离当前目标敌方棋子的方向移动。

2.5 其它函数

2.5.1 wgAI中的doMove函数

根据self.dic_targets(新添加的)字典得到每个棋子的目标位置,key是每个棋子的Identity。调用common.getSpecifiedBopById函数得到。之后产生路径进行移动。每个棋子移动后都要刷新态势。

2.5.2 wgsdata中的mainCity和secondarCity函数

分别返回主要目标点和次要目标点的目标

2.5.3 common.getAroundPos(pos) 函数

返回某个位置周围的6个格子位置,用在得到行进间射击第一个目标位置的时候。

2.5.4 common.getAllBopByPos函数

得到某个位置上所有的列表中的棋子。

2.6 其它改动

2.6.1 禁止射击同格状态的敌方棋子

在判断是否能够射击的函数wgruler.shooting函数中多加了一个判断。

3.当前问题

3.1 是否能够最终射击的判断可能出错

3.2 坦克行进间射击的位置选择有点问题

3.3 可能依然会射击同格状态的敌方棋子

3.4 对射击函数的调用优点问题,可能重复调用

3.5 坦克行进间射击的动作顺序和设计的有点区别

3.6 控制接口的调用延迟较大,可能也是上一条问题的原因,状态刷新有时候有问题

4. 当前效果

目前使用红方胜率较大,使用蓝方,若不出逻辑上的bug也还行,但有时候会出现#3 中的问题,目前胜率还不高,继续调试中。

先知兵圣兵棋大赛初赛思路相关推荐

  1. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6670 Mindis Time Limit: 4000/2000 MS (Java/Others) M ...

  3. 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)

    Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  4. 首届广西网络安全技术大赛初赛通关攻略

    首届广西网络安全技术大赛初赛通关攻略 前言 第一次参加安全类比赛(好吧,其实我这种宅男参加的比赛都很少,很多种比赛都是第一次 - -),同组的组员建议我在比赛完写个通关攻略出来.听起来不错,写个通关攻 ...

  5. 2018 “百度之星”程序设计大赛 - 初赛(A)

    hdu6374                         度度熊拼三角 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536 ...

  6. 超级码力在线编程大赛初赛 第2场 题解

    超级码力在线编程大赛初赛 第2场 题解 题目出的对退役老年选手很友好,拿个T恤跑路- 下面的题解仅代表个人观点,出了问题,概不负责. 比赛链接:https://tianchi.aliyun.com/o ...

  7. hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))

    p1m2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  8. hdu6380(2018 “百度之星”程序设计大赛 - 初赛(B))

    degree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  9. hdu6375(2018 “百度之星”程序设计大赛 - 初赛(A))

    度度熊学队列 Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

最新文章

  1. 解决Oracle clob字段数据过大问题
  2. <论文阅读>CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation via Global and...
  3. 今日头条|张一鸣:我遇到的优秀年轻人的5个特质
  4. BeanUtils工具的使用
  5. 刷新页面 数组轮播
  6. 属性定义为 not null unique_Spring Data with MySQL (实体定义)
  7. Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件
  8. OracleDBA之数据库管理
  9. 大数据可视化有哪些优势
  10. Java的一些基础问题
  11. Java基础语法练习题
  12. siamfc代码解读_siamfc-pytorch代码讲解(一):backbonehead
  13. 节奏旋律音乐制作软件-Native Instruments Maschine 2 v2.14.1 WiN
  14. npm安装依赖报错:npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\misal\AppData\R
  15. oracle if else怎么用,oracle if else语句使用介绍
  16. WHMCS V7.60 新增短信宝短信插件
  17. PrestaShop 1.7.7.0 Stable 发布了!
  18. win10 c 语言 全屏,win10所有的视频都不能全屏了,重装了好几次都是这样 ,求助 - Microsoft Community...
  19. C语言计算圆柱的表面积 体积
  20. 关注视聊效果!中星微摄像头对比测试

热门文章

  1. 微信小程序wx.showToast的总结
  2. 学习JAVA的基础和知识点总结
  3. Sitecore本地安装详细介绍
  4. 日K蜡烛图(2021-10-15)
  5. 1504DE SDK怎样使用,如何用汉邦高科解码卡SDK开发
  6. WPF字体模糊解决方案
  7. 前程无忧网数据分析报告
  8. CEO们吃肉前是怎么挨打的?(徐志斌) zz
  9. 锐图软件集团公司年会
  10. 淘客返利机器人无限制版本