庙算兵棋推演系统 🏛️ 智能军事仿真平台

红方AI 蓝方AI 地形系统 进化策略

一个基于C++17和OpenCV的高级兵棋推演系统,集成了地形分析、部队仿真、智能AI决策、后勤补给和可视化展示功能,支持红蓝双方军事对抗的实时推演。

📖 系统概述

庙算兵棋推演系统 是一个用C++17实现的智能军事仿真平台,结合OpenCV可视化、Eigen线性代数库和先进的AI决策算法,模拟真实战场环境下的军事对抗。系统支持多种部队类型、复杂地形影响、动态天气系统、后勤补给网络和智能指挥决策。

🎯 设计目标

提供逼真的战场仿真环境,支持多种战术策略,辅助军事决策分析。

⚙️ 核心能力

地形分析、部队移动、战斗计算、AI决策、后勤补给、指挥体系。

📊 可视化展示

实时战场地图、部队状态监控、战斗特效、数据统计图表。

🏗️ 系统架构

✨ 核心特性

⚡ 快速开始

编译与运行

# 安装依赖
sudo apt update
sudo apt install build-essential cmake libopencv-dev libeigen3-dev nlohmann-json3-dev

# 克隆仓库
git clone https://github.com/example/temple-calculation.git
cd temple-calculation

# 创建构建目录
mkdir build && cd build

# CMake配置
cmake .. -DCMAKE_BUILD_TYPE=Release

# 编译
make -j4

# 运行推演
./TempleCalculationSystem

基本使用示例

#include "Battlefield.h"
#include "Visualizer.h"
#include "Force.h"

int main() {
    // 创建战场 (1000x800)
    auto battlefield = std::make_shared<AdvancedBattlefield>(1000, 800);
    
    // 创建红方部队
    auto infantry = ForceFactory::createInfantry("红方步兵1营", 
                      Eigen::Vector2d(100, 200), "red");
    battlefield->addForce(infantry, "red");
    
    // 创建蓝方部队
    auto armor = ForceFactory::createArmor("蓝方装甲连",
                  Eigen::Vector2d(800, 600), "blue");
    battlefield->addForce(armor, "blue");
    
    // 添加补给节点
    SupplyNode redBase(Eigen::Vector2d(50, 50), 800, 250, "red", "base");
    battlefield->addSupplyNode(redBase, "red");
    
    // 创建可视化器
    BattlefieldVisualizer visualizer(1400, 900);
    visualizer.setBattlefield(battlefield);
    
    // 主循环
    while (visualizer.isRunning()) {
        battlefield->update(0.5);
        visualizer.update();
    }
    
    return 0;
}

⚔️ 部队系统

AdvancedForce 类实现了完整的部队属性、移动、攻击和状态管理。

部队属性

属性说明影响
Strength战斗力攻击力、防御力
Mobility机动性移动速度 DetectionRange探测范围侦查能力 AttackRange攻击范围射程 Morale士气战斗力修正 SupplyLevel补给水平持续作战能力 Ammunition弹药攻击次数 Fuel燃料移动能力 Experience经验命中率加成

部队类型优势

装甲 vs 步兵: 1.5倍伤害
炮兵 vs 装甲: 1.3倍伤害
空军 vs 炮兵: 1.4倍伤害
步兵 vs 空军: 1.2倍伤害
防空 vs 空军: 1.6倍伤害
侦察 vs 炮兵: 1.2倍伤害

🗺️ 地形系统

AdvancedTerrainMap 使用分形噪声生成逼真地形,包含高程图、道路网络、河流系统。

地形类型与影响

地形移动消耗防御加成视野修正攻击修正
平原1.01.01.01.0
森林1.51.30.70.9
山地2.01.50.50.8
水域3.00.81.20.7
城市1.21.80.81.1
沼泽2.50.90.90.9
沙漠1.80.91.10.9
丘陵1.31.20.91.0
要塞1.22.00.81.2

💥 战斗机制

战斗系统基于部队有效战力、地形影响、距离惩罚和随机因素计算。

命中率计算

基础命中率: 0.65
距离惩罚: 1 - 0.6 × (距离 / 最大射程)
经验加成: 0.8 + 0.15 × 经验值
士气加成: 0.8 + 0.15 × 士气值
最终命中率 = 基础命中率 × 距离惩罚 × 经验加成 × 士气加成

伤害计算

基础伤害 = 攻击方战力 × (0.6 ~ 1.2)
防御加成 = 地形防御加成 × (0.5 + 0.5 × 士气) × (0.5 + 0.5 × 补给水平)
实际伤害 = 基础伤害 / 防御加成
💡 战斗会消耗弹药,命中后获得经验,击败敌人获得额外经验奖励。

📦 后勤补给系统

SupplyNode 提供战场补给,影响部队的持续作战能力。

补给节点类型

补给影响

补给充足: 战斗力 +50%,弹药和燃料自动补充
补给不足: 战斗力 -50%,移动速度下降,士气降低
补给耗尽: 部队无法攻击和移动,士气快速下降

🧠 智能AI决策引擎

AdvancedAIDecisionMaker 集成了多种战术策略,动态评估战场态势。

策略类型

🎯 威胁评估策略

评估敌方威胁等级,优先攻击高威胁目标。

🏔️ 地形优势策略

占据有利地形,获取防御和视野优势。

🔄 包围合围策略

计算包围点,协同包围敌方部队。

🎭 声东击西策略

佯攻吸引火力,掩护主力行动。

🏃 战术撤退策略

战力不足时主动撤退重组。

决策流程

1. 收集战场态势(敌我位置、战力、补给)
2. 各策略独立评估,生成决策建议
3. 按优先级加权综合
4. 输出最优决策(目标位置、攻击目标、移动指令)

🎖️ 指挥体系

CommandHierarchy 实现多级指挥树,支持策略下发和目标分配。

指挥层级

总指挥部 (Level 0)
├── 集团军 (Level 1)
│   ├── 师级单位 (Level 2)
│   │   ├── 团级单位 (Level 3)
│   │   └── 团级单位
│   └── 师级单位
└── 集团军

战术策略

📊 可视化系统

BattlefieldVisualizer 使用OpenCV实时渲染战场态势。

可视化元素

交互操作

ESC    - 退出推演
S      - 截图保存
R      - 开始/停止录像

⚙️ 配置系统 (config.json)

{
    "baseHitChance": 0.65,           // 基础命中率
    "distancePenaltyFactor": 0.6,    // 距离惩罚系数
    "experienceHitBonus": 0.15,      // 经验命中加成
    "moraleHitBonus": 0.15,          // 士气命中加成
    "supplyConsumption": 0.12,       // 补给消耗率
    "supplyReplenishRate": 0.04,     // 补给恢复率
    "moraleGainRate": 0.012,         // 士气恢复率
    "fuelConsumptionFactor": 0.008,  // 燃料消耗系数
    "weatherChangeProbability": 0.02, // 天气变化概率
    "timeChangeInterval": 50,        // 时间变化间隔
    "forceTypeAdvantages": {         // 兵种克制关系
        "ARMOR_vs_INFANTRY": 1.5,
        "ARTILLERY_vs_ARMOR": 1.3
    }
}

📚 API 参考

AdvancedBattlefield

class AdvancedBattlefield {
public:
    AdvancedBattlefield(int width, int height);
    
    // 添加元素
    void addForce(std::shared_ptr<AdvancedForce> force, const std::string& side);
    void addSupplyNode(const SupplyNode& node, const std::string& side);
    
    // 更新战场
    void update(double timeStep = 1.0);
    
    // 查询
    double getRedStrength() const;
    double getBlueStrength() const;
    Statistics getStatistics() const;
    std::string getStatusReport() const;
};

AdvancedForce

class AdvancedForce {
public:
    double getEffectiveStrength(AdvancedTerrainMap* terrainMap) const;
    double moveToward(const Eigen::Vector2d& targetPos, double maxDistance,
                      AdvancedTerrainMap* terrainMap);
    bool canAttack(const AdvancedForce& other, AdvancedTerrainMap* terrainMap) const;
    CombatResult attack(AdvancedForce& other, AdvancedTerrainMap* terrainMap);
    void updateSupply(const std::vector<SupplyNode>& supplyNodes);
    void addOrder(const Order& order);
};

AdvancedTerrainMap

class AdvancedTerrainMap {
public:
    void generateAdvancedTerrain();
    const Terrain* getTerrainAt(int x, int y) const;
    double getMovementCost(int x, int y, ForceType forceType) const;
    double getDefenseBonus(int x, int y) const;
    bool hasRoad(int x, int y) const;
    bool hasRiver(int x, int y) const;
};

⚖️ 许可证

MIT License

Copyright (c) 2025 庙算兵棋推演系统 Contributors

特此免费授予任何获得本软件及相关文档文件副本的人无限制使用本软件的权利,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售本软件副本的权利。

本软件按"原样"提供,不提供任何明示或暗示的保证。

🏛️ 庙算兵棋推演系统 · 智能军事仿真平台

夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。