找回密码
 Register
搜索
查看: 176|回复: 2

[介绍] Battle for Moscow页游的AI逻辑

[复制链接]
发表于 2025-2-9 20:19:14 | 显示全部楼层 |阅读模式
今日继续折腾AI。
一直对那个Battle for Moscow页游的AI逻辑很感兴趣,也扒了代码下来看,但javascript的东西看着实在是难受,只看明白了最简单的部分:那个德军初设其实只是在4个预定方案中随机选了一个。
如今又了推理大模型,就干脆让deepseek和kimi们来分析一把。


游戏中,AI的决策逻辑主要集中在以下几个方面:单位移动、战斗宣布、战斗执行、替换和特殊移动等阶段。AI的行为是基于预设的规则和简单的启发式策略,目的是模拟一个合理的对手行为。
以下是AI部分的核心决策逻辑分析:
1. 单位移动
AI在单位移动阶段的决策逻辑主要在movementPhase函数中实现。AI会根据当前回合、单位类型和棋盘状态来决定单位的移动。
决策逻辑
目标选择:
AI会优先考虑移动到关键位置,如莫斯科(Moscow)、图拉(Tula)和梁赞(Ryazan)等城市附近。
如果AI是苏联方,会优先考虑移动到铁路线上,以便利用铁路进行快速部署。
如果AI是德国方,会优先考虑移动坦克单位,以利用其较高的移动能力。
路径规划:
AI会计算每个单位的有效移动范围,并选择最优路径。路径规划考虑了地形(如森林、开阔地)、敌方单位、己方单位等因素。
对于苏联方,AI会优先选择铁路线上的移动路径。
对于德国方,AI会优先选择能够快速接近目标城市的路径。
单位优先级:
AI会根据单位的类型和战斗力来排序,优先移动战斗力较高的单位。
如果AI是苏联方,会优先移动步兵单位;如果是德国方,会优先移动坦克单位。
随机性:
AI的移动决策中包含一定的随机性,以增加游戏的不确定性和趣味性。例如,AI可能会随机选择多个可行路径中的一个。
2. 战斗宣布
AI在战斗宣布阶段的决策逻辑主要在combatAnnouncePhase函数中实现。AI会根据当前回合、单位位置和敌方单位状态来决定是否发动战斗。
决策逻辑
战斗机会识别:
AI会扫描棋盘,寻找己方单位与敌方单位相邻的情况。
对于每个敌方单位,AI会检查其周围是否有己方单位可以发动攻击。
战斗赔率计算:
AI会计算每个潜在战斗的赔率,考虑地形、单位战斗力等因素。
如果战斗赔率较高(如2:1或更高),AI更倾向于发动战斗。
目标优先级:
AI会优先选择攻击敌方的关键单位或城市控制单位。
如果AI是苏联方,会优先攻击接近莫斯科的德国单位;如果是德国方,会优先攻击苏联的城市控制单位。
随机性:
AI在选择战斗时会包含一定的随机性,可能会跳过某些战斗机会,选择其他目标。
3. 战斗执行
AI在战斗执行阶段的决策逻辑主要在combatResolvePhase和resolveNextBattle函数中实现。AI会根据战斗结果来决定如何处理单位的损失和移动。
决策逻辑
战斗结果处理:
如果战斗结果是防守方撤退,AI会计算有效的撤退路径,并选择最优路径。
如果战斗结果是攻击方损失,AI会选择损失哪个单位,优先选择战斗力较低的单位。
单位前进:
如果战斗结果允许攻击方前进,AI会计算前进路径,并选择最优路径。
随机性:
AI在处理战斗结果时会包含一定的随机性,可能会选择不同的路径或单位来执行战斗结果。
4. 替换和增强
AI在替换阶段的决策逻辑主要在replacementPhase函数中实现。AI会根据当前回合和单位状态来决定如何使用替换点数。
决策逻辑
单位选择:
AI会优先选择增强战斗力较低的单位,或者在关键位置放置新的单位。
如果AI是苏联方,会优先选择在莫斯科或铁路线上放置单位;如果是德国方,会优先选择在接近目标城市的区域放置单位。
位置选择:
AI会优先选择在己方控制的城市或铁路线上放置单位。
如果AI是苏联方,会优先选择在莫斯科或其周边区域放置单位;如果是德国方,会优先选择在接近目标城市的区域放置单位。
随机性:
AI在选择单位和位置时会包含一定的随机性,可能会选择不同的单位或位置来执行替换操作。
5. 特殊移动
AI在特殊移动阶段的决策逻辑主要在specialMovementPhase函数中实现。AI会根据当前回合和单位类型来决定如何进行特殊移动。
决策逻辑
目标选择:
如果AI是苏联方,会优先选择在铁路线上移动单位。
如果AI是德国方,会优先选择移动坦克单位。
路径规划:
AI会计算每个单位的有效移动范围,并选择最优路径。
对于苏联方,AI会优先选择铁路线上的移动路径;对于德国方,AI会优先选择能够快速接近目标城市的路径。
单位优先级:
AI会根据单位的类型和战斗力来排序,优先移动战斗力较高的单位。
如果AI是苏联方,会优先移动步兵单位;如果是德国方,会优先移动坦克单位。
随机性:
AI在选择移动路径时会包含一定的随机性,可能会选择不同的路径来执行特殊移动。
总结
AI的决策逻辑基于以下原则:
优先级排序:AI会根据单位类型、战斗力、位置等因素对单位进行排序,优先处理高优先级的单位。
目标导向:AI会优先选择攻击敌方的关键单位或城市控制单位,以及移动到关键位置。
路径规划:AI会计算有效的移动路径,并选择最优路径。
随机性:AI的决策中包含一定的随机性,以增加游戏的不确定性和趣味性。
虽然AI的决策逻辑相对简单,但通过这些规则和启发式策略,AI能够模拟出一个合理的对手行为,为玩家提供具有一定挑战性的游戏体验。




评分

参与人数 1金币 +10 收起 理由
无趣无聊 + 10

查看全部评分

 楼主| 发表于 2025-2-9 20:19:54 | 显示全部楼层
在代码中,AI的目标选择逻辑是AI决策的核心部分之一,尤其是在战斗宣布和单位移动阶段。目标选择的目的是确定AI应该攻击或移动到哪些位置,以最大化其战略优势。以下是AI目标选择逻辑的详细分析:
1. 目标选择的主要场景
目标选择主要出现在以下两个阶段:
单位移动阶段:AI需要决定将单位移动到哪些位置。
战斗宣布阶段:AI需要决定攻击哪些敌方单位。
2. 目标选择的核心逻辑
AI的目标选择逻辑基于以下几个关键因素:
战略位置:优先选择关键位置,如城市、铁路线等。
敌方单位状态:优先攻击敌方的关键单位或战斗力较高的单位。
己方单位状态:优先移动战斗力较高的单位或处于危险位置的单位。
随机性:在多个可行目标中引入随机性,以增加游戏的不确定性和趣味性。
3. 单位移动阶段的目标选择
在单位移动阶段,AI的目标选择逻辑主要集中在以下几个方面:
3.1 关键位置优先
城市和战略区域:
AI会优先将单位移动到关键城市(如莫斯科、图拉、梁赞)或其周边区域。
例如,在movementPhase函数中,AI会优先选择移动到莫斯科或图拉附近的位置。
3.2 铁路线优先
苏联方的铁路移动:
如果AI是苏联方,会优先选择铁路线上的位置进行移动。
铁路线可以提供更快的移动速度,有助于快速部署单位。
3.3 敌方单位威胁
避免敌方单位:
AI会尽量避免移动到敌方单位的攻击范围内(EZOC)。
如果必须进入EZOC,AI会优先选择战斗力较高的单位。
3.4 随机性
随机选择路径:
在多个可行路径中,AI会随机选择一个路径,以增加游戏的不确定性。
4. 战斗宣布阶段的目标选择
在战斗宣布阶段,AI的目标选择逻辑主要集中在以下几个方面:
4.1 战斗机会识别
扫描敌方单位:
AI会扫描棋盘,寻找己方单位与敌方单位相邻的情况。
例如,在combatAnnouncePhase函数中,AI会检查每个敌方单位周围是否有己方单位可以发动攻击。
4.2 战斗赔率计算
优先攻击高赔率目标:
AI会计算每个潜在战斗的赔率,考虑地形、单位战斗力等因素。
如果战斗赔率较高(如2:1或更高),AI更倾向于发动战斗。
4.3 关键单位优先
优先攻击敌方关键单位:
AI会优先选择攻击敌方的关键单位或城市控制单位。
例如,如果AI是苏联方,会优先攻击接近莫斯科的德国单位;如果是德国方,会优先攻击苏联的城市控制单位。
4.4 随机性
随机选择战斗:
在多个可行的战斗机会中,AI会随机选择一个战斗,以增加游戏的不确定性。
5. 总结
AI的目标选择逻辑是基于战略位置、敌方单位状态、己方单位状态和随机性来决定单位的移动和战斗目标。具体来说:
单位移动阶段:
优先选择关键位置(如城市、铁路线)。
避免进入敌方单位的攻击范围(EZOC)。
随机选择路径以增加不确定性。
战斗宣布阶段:
优先攻击敌方的关键单位或城市控制单位。
计算战斗赔率,优先选择高赔率的战斗。
随机选择战斗目标以增加不确定性。
通过这些逻辑,AI能够在单位移动和战斗宣布阶段做出合理的决策,为玩家提供具有一定挑战性的游戏体验。

 楼主| 发表于 2025-2-9 20:21:10 | 显示全部楼层
在代码中,路径规划是AI决策逻辑中的一个关键部分,尤其是在单位移动和战斗撤退阶段。路径规划的目标是为单位找到从当前位置到目标位置的有效路径,同时考虑地形、敌方单位、己方单位等因素。以下是路径规划逻辑的详细分析:
1. 路径规划的主要函数
路径规划主要通过以下函数实现:
getValidNormalDestinations:计算单位在普通移动阶段的有效目的地。
getValidRailDestinations:计算单位在特殊移动阶段(如苏联的铁路移动)的有效目的地。
getValidPanzerDestinations:计算德国坦克单位在特殊移动阶段的有效目的地。
2. 路径规划的核心逻辑
路径规划的核心逻辑是基于**广度优先搜索(BFS)**算法,结合特定的规则和限制条件来计算有效路径。
2.1 广度优先搜索(BFS)
初始化:
将起始位置(当前单位所在位置)加入队列。
设置起始位置的“信用值”(credit),表示单位剩余的移动能力。
设置起始位置的路径(path),初始为空。
搜索过程:
从队列中取出一个位置(当前节点)。
检查当前节点的所有邻居节点(即相邻的六边形格子)。
对于每个邻居节点:
检查该节点是否有效(如是否超出棋盘范围、是否为“off”地形等)。
检查该节点是否被敌方单位占据(除非是撤退路径规划)。
检查该节点是否在敌方的“战斗区域”(EZOC,即敌方单位的攻击范围内)。
根据地形和规则调整该节点的“信用值”(如森林地形会减少移动能力)。
如果该节点的“信用值”大于0,将其加入队列,并更新其路径。
结束条件:
当队列为空时,搜索结束。
所有可达的节点都被访问过,并且每个节点的路径和“信用值”都被计算出来。
3. 路径规划的具体规则
3.1 普通移动(getValidNormalDestinations)
移动能力:
单位的初始移动能力由其类型和当前回合决定。例如,苏联单位在泥泞季节(第3、4回合)的移动能力会减少。
地形影响:
森林地形会减少单位的移动能力(除非是特殊移动阶段)。
敌方单位:
如果邻居节点被敌方单位占据,则该节点不可达。
EZOC规则:
如果单位进入敌方单位的攻击范围(EZOC),会根据规则减少移动能力或阻止进入。
路径记录:
每个节点的路径记录了从起始位置到达该节点的路径,用于后续的移动执行。
3.2 铁路移动(getValidRailDestinations)
铁路规则:
只有苏联单位可以使用铁路移动。
单位只能沿着铁路线移动。
移动能力:
铁路移动的单位有固定的移动能力(如4个移动点)。
敌方单位和EZOC:
与普通移动类似,铁路移动也会考虑敌方单位和EZOC规则。
路径记录:
路径记录与普通移动类似,但只沿着铁路线计算。
3.3 坦克移动(getValidPanzerDestinations)
坦克规则:
只有德国坦克单位可以使用特殊移动。
移动能力:
坦克单位的移动能力通常较高,但会受到地形和敌方单位的影响。
路径记录:
路径记录与普通移动类似,但优先考虑坦克单位的高移动能力。
4. 路径规划的优化
路径排序:
在路径规划完成后,AI会对所有可达的节点进行排序,优先选择距离目标位置更近的节点。
随机性:
在多个可行路径中,AI会随机选择一个路径,以增加游戏的不确定性和趣味性。
5. 路径规划的执行
单位移动:
在单位移动阶段,AI会根据路径规划的结果,将单位从当前位置移动到目标位置。
移动过程中会逐步更新单位的位置,并在界面上显示移动效果。
战斗撤退:
在战斗撤退阶段,AI会根据路径规划的结果,为防守方单位找到有效的撤退路径。
如果没有有效的撤退路径,单位可能会被消灭或减少战斗力。

您需要登录后才可以回帖 登录 | Register

本版积分规则

QQ|Archiver|手机版|小黑屋|Velonica

GMT+8, 2025-2-22 21:49 , Processed in 0.022120 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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