SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3793|回复: 0
打印 上一主题 下一主题

[讨论] ai顶层逻辑

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2020-8-24 16:09:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
术语
城市矩形:在已方拥有的所有城市中找出x,y最小值为左上角,最大x,y值为右下角形成的矩形。
思考矩形:以城市矩形为参考,上、下、左、右扩展得到的矩形。它是此次AI集中于思考的区域,AI此次所有行为不会超出这个区域。
军区:AI形成一个目标的区域,它形状上往往也是个矩形。军区有数种属性,像目标,敌我军事力量。

ai逻辑
一、根据城市矩形分隔了军区,得出军区城市矩形

二、在军区内,根据区内城市矩形计算出思考矩形

三、依次计算每个军区中各项数值,确定出该军区在此回合的战略目标
  • consider_rect:军区思考矩形,它是军区城市矩形向国周扩散20坐标得到的矩形。该军区决策不会超过这个矩形。
  • target:军区战略目标。目标分:内政、侵略、守卫。它是根据以下的军区中参数计算出的一个结果。(注1)。

  • own_heros:军区内已方武将数。(包括城中武将、部队中武将)。
  • own_cities:军区内已方城市。(城市分前线城市、后方城市)。
  • own_front_cities:军区内前线城市。在own_cities基础上根据前线/后方判定规则计算得出(注2)。(按重要度排序。必须先于enemy_cities前排序)
  • own_back_cities:军区内后方城市。在own_cities基础上根据前线/后方判定规则计算得出。
  • enemy_cities:军区内敌方城市。(按以own_front_cities[0]为起点排序。(注3))
  • enemy_troops:军区内敌方城外部队。
  • encounterred_sides:军区内遭遇到的敌方势力。


  • 确定军区战略规则。
    内政:军区内没有前线城市。流浪势力没有城市,因而它的战略目标肯定是内政。
    侵略:军区内有敌方城市,并且军区内已方武将数大于“每后方城市保留两个除还能是(前线城市+1)乘上10”。
    守卫:不满足以上两个目标时。
  • 前线、后方城市判断规则。
    前线:城市矩形内或存在敌方城市,或存在三支及以上的敌方部队。
    后方:不满足以上条件的城市。
  • enemy_cities要被以own_front_cities[0]排序。如果不存在own_front_cities[0],意味着军区内就没有已方城市,这也就是说这个势力是流浪势力。对于流浪势力中的enemy_cities不必被排序。


四、对于区内军力已方“小于”敌方的军区执行征兵
目的是使在那个军区内敌、我双方攻击力保持均衡(尽量大于)。对于新征出部队,它们的goto置为此个军区中心点。

五、回防

六、执行攻击
已方城外部队(上回合留下及本回合新出征/征兵)对敌方城外部队/城市;

七、重新计算军区数值
操作和(三)一样。

八、城市间移动武将
根据ordered_holded_cities,把武将向距离该军区中心最近城市移动。
为计算要移多少武将才能达到军事目的,这里要估算一个武将可以产生多少能量。这个能量和“一只部队能量”相关,设定的估值是15000(100(统帅)*150(HP))。

九、内政
建造市场。

十、城外/城内所有未行动部队,执行移动
有goto的执行goto,像此次新征出部队。
没goto的移向1)“最佳”敌方城市;2)没有敌方城市时,则移去军区中心。
部队移动后,goto都置为无效。

什么样城市是“最佳”攻击目标?
1、以上第七步“城市间”移动武将找出的城市。
2、第一个有敌方城市军区内的第一个城市。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 05:23 , Processed in 0.047032 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表