先知兵圣兵棋大赛初赛思路
先知兵圣兵棋大赛初赛思路
- 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代码的框架类似,不断循环判断当前阶段是否还有动作要执行,若没有则等待进入下一阶段。
其中主要改动为:
- 将wgAI文件中的doAction代码分解为三个部分,分别为doMyMoveAction()对应我方机动环节,doMyFinalShootingHuanJieAction()对应我方最终射击环节,doOpMoveHuanJieAction()对应对方机动环节。
- doMyFinalShootingHuanJieAction()和doOpMoveHuanJieAction()两个部分思路比较简单,就是不断循环判断当前是否可以射击然后执行射击。
- doMyMoveAction()表示我方机动阶段的动作,此中又分为三个部分,分别是doTankMoveAction对应坦克机动阶段动作,doVehicleMoveAction对应战车机动阶段动作,doSoldierMoveAction对应战士机动阶段动作。
- 添加实现上述函数的辅助函数。
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 中的问题,目前胜率还不高,继续调试中。
先知兵圣兵棋大赛初赛思路相关推荐
- HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6670 Mindis Time Limit: 4000/2000 MS (Java/Others) M ...
- 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)
Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- 首届广西网络安全技术大赛初赛通关攻略
首届广西网络安全技术大赛初赛通关攻略 前言 第一次参加安全类比赛(好吧,其实我这种宅男参加的比赛都很少,很多种比赛都是第一次 - -),同组的组员建议我在比赛完写个通关攻略出来.听起来不错,写个通关攻 ...
- 2018 “百度之星”程序设计大赛 - 初赛(A)
hdu6374 度度熊拼三角 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- 超级码力在线编程大赛初赛 第2场 题解
超级码力在线编程大赛初赛 第2场 题解 题目出的对退役老年选手很友好,拿个T恤跑路- 下面的题解仅代表个人观点,出了问题,概不负责. 比赛链接:https://tianchi.aliyun.com/o ...
- hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))
p1m2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Sub ...
- hdu6380(2018 “百度之星”程序设计大赛 - 初赛(B))
degree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- hdu6375(2018 “百度之星”程序设计大赛 - 初赛(A))
度度熊学队列 Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
最新文章
- 解决Oracle clob字段数据过大问题
- <论文阅读>CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation via Global and...
- 今日头条|张一鸣:我遇到的优秀年轻人的5个特质
- BeanUtils工具的使用
- 刷新页面 数组轮播
- 属性定义为 not null unique_Spring Data with MySQL (实体定义)
- Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件
- OracleDBA之数据库管理
- 大数据可视化有哪些优势
- Java的一些基础问题
- Java基础语法练习题
- siamfc代码解读_siamfc-pytorch代码讲解(一):backbonehead
- 节奏旋律音乐制作软件-Native Instruments Maschine 2 v2.14.1 WiN
- npm安装依赖报错:npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\misal\AppData\R
- oracle if else怎么用,oracle if else语句使用介绍
- WHMCS V7.60 新增短信宝短信插件
- PrestaShop 1.7.7.0 Stable 发布了!
- win10 c 语言 全屏,win10所有的视频都不能全屏了,重装了好几次都是这样 ,求助 - Microsoft Community...
- C语言计算圆柱的表面积 体积
- 关注视聊效果!中星微摄像头对比测试