庙算兵棋推演系统 🏛️ 智能军事仿真平台
一个基于C++17和OpenCV的高级兵棋推演系统,集成了地形分析、部队仿真、智能AI决策、后勤补给和可视化展示功能,支持红蓝双方军事对抗的实时推演。
📖 系统概述
庙算兵棋推演系统 是一个用C++17实现的智能军事仿真平台,结合OpenCV可视化、Eigen线性代数库和先进的AI决策算法,模拟真实战场环境下的军事对抗。系统支持多种部队类型、复杂地形影响、动态天气系统、后勤补给网络和智能指挥决策。
🎯 设计目标
提供逼真的战场仿真环境,支持多种战术策略,辅助军事决策分析。
⚙️ 核心能力
地形分析、部队移动、战斗计算、AI决策、后勤补给、指挥体系。
📊 可视化展示
实时战场地图、部队状态监控、战斗特效、数据统计图表。
🏗️ 系统架构
✨ 核心特性
- 多部队类型系统 — 16种部队类型(步兵、装甲、炮兵、空军、海军、特种、工兵、后勤、防空、侦察、医疗、网络战、火箭军、海军陆战队、空降兵、突击队)
- 复杂地形系统 — 16种地形类型,影响移动、防御、视野和攻击效果
- 动态天气系统 — 晴朗、雨天、雾天、雪天、风暴,影响战场态势
- 昼夜循环系统 — 白天、黄昏、夜晚、黎明,影响视野和作战效果
- 智能AI决策引擎 — 威胁评估、地形优势、包围合围、声东击西、战术撤退等多种策略
- 后勤补给网络 — 多级补给节点,补给范围计算,补给流量模拟
- 指挥体系架构 — 多级指挥树,策略下发,目标分配,协同作战
- 实时可视化 — 战场地图渲染,部队图标,状态监控,战斗特效
- 可配置参数系统 — JSON配置文件,战斗参数可调,平衡性可定制
- 历史数据记录 — 战力变化、补给状态、伤亡统计、事件日志
⚡ 快速开始
编译与运行
# 安装依赖
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 | 战斗力 | 攻击力、防御力 |
部队类型优势
装甲 vs 步兵: 1.5倍伤害
炮兵 vs 装甲: 1.3倍伤害
空军 vs 炮兵: 1.4倍伤害
步兵 vs 空军: 1.2倍伤害
防空 vs 空军: 1.6倍伤害
侦察 vs 炮兵: 1.2倍伤害
🗺️ 地形系统
AdvancedTerrainMap 使用分形噪声生成逼真地形,包含高程图、道路网络、河流系统。
地形类型与影响
| 地形 | 移动消耗 | 防御加成 | 视野修正 | 攻击修正 |
|---|---|---|---|---|
| 平原 | 1.0 | 1.0 | 1.0 | 1.0 |
| 森林 | 1.5 | 1.3 | 0.7 | 0.9 |
| 山地 | 2.0 | 1.5 | 0.5 | 0.8 |
| 水域 | 3.0 | 0.8 | 1.2 | 0.7 |
| 城市 | 1.2 | 1.8 | 0.8 | 1.1 |
| 沼泽 | 2.5 | 0.9 | 0.9 | 0.9 |
| 沙漠 | 1.8 | 0.9 | 1.1 | 0.9 |
| 丘陵 | 1.3 | 1.2 | 0.9 | 1.0 |
| 要塞 | 1.2 | 2.0 | 0.8 | 1.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 提供战场补给,影响部队的持续作战能力。
补给节点类型
- Base (基地) — 补给容量800,范围250
- Depot (仓库) — 补给容量500,范围180
- Forward (前进基地) — 补给容量300,范围120
补给影响
补给充足: 战斗力 +50%,弹药和燃料自动补充
补给不足: 战斗力 -50%,移动速度下降,士气降低
补给耗尽: 部队无法攻击和移动,士气快速下降
🧠 智能AI决策引擎
AdvancedAIDecisionMaker 集成了多种战术策略,动态评估战场态势。
策略类型
🎯 威胁评估策略
评估敌方威胁等级,优先攻击高威胁目标。
🏔️ 地形优势策略
占据有利地形,获取防御和视野优势。
🔄 包围合围策略
计算包围点,协同包围敌方部队。
🎭 声东击西策略
佯攻吸引火力,掩护主力行动。
🏃 战术撤退策略
战力不足时主动撤退重组。
决策流程
1. 收集战场态势(敌我位置、战力、补给)
2. 各策略独立评估,生成决策建议
3. 按优先级加权综合
4. 输出最优决策(目标位置、攻击目标、移动指令)
🎖️ 指挥体系
CommandHierarchy 实现多级指挥树,支持策略下发和目标分配。
指挥层级
总指挥部 (Level 0)
├── 集团军 (Level 1)
│ ├── 师级单位 (Level 2)
│ │ ├── 团级单位 (Level 3)
│ │ └── 团级单位
│ └── 师级单位
└── 集团军
战术策略
- 进攻策略 — 优先攻击敌方补给节点和部队重心,攻击性0.9
- 防御策略 — 固守关键位置,攻击性0.3
- 平衡策略 — 攻守兼备,攻击性0.6
- 侧翼策略 — 绕后攻击,攻击性0.75
- 伏击策略 — 选择有利地形设伏,攻击性0.8
📊 可视化系统
BattlefieldVisualizer 使用OpenCV实时渲染战场态势。
可视化元素
- 地形渲染 — 根据地形类型填充不同颜色
- 道路/河流 — 白色道路,蓝色河流
- 部队图标 — 圆形/方形表示,颜色区分阵营
- 补给节点 — 矩形节点,进度条显示补给量
- 战斗特效 — 爆炸光圈,战斗高亮
- UI面板 — 时间、天气、战力统计、操作提示
交互操作
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
特此免费授予任何获得本软件及相关文档文件副本的人无限制使用本软件的权利,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售本软件副本的权利。
本软件按"原样"提供,不提供任何明示或暗示的保证。
🏛️ 庙算兵棋推演系统 · 智能军事仿真平台
夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。