Skip to content

yangce24/world-conqueror

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

世界征服者 - 网页版

一个基于HTML5 Canvas的回合制策略游戏,灵感来自经典游戏《世界征服者2》。

🎮 游戏特性

  • 六边形地图系统 - 策略性更强的地形布局
  • 多种单位类型 - 步兵、坦克、重型坦克、火炮、战斗机、轰炸机
  • 回合制战斗 - 深度策略体验,包含地形加成和反击机制
  • 经济系统 - 控制城市和地形获得收入
  • 城市占领 - 步兵可占领中立或敌方城市
  • 双AI观战模式 - 内置强力AI系统,可观战学习策略
  • 强力AI玩家 - 基于博弈树搜索、影响地图和任务系统的高级AI

🤖 AI系统特性

本游戏提供两套AI系统:

标准AI(规则驱动)

  • 三层战略架构(防守/扩张/进攻/压制)
  • 动作评分系统
  • 智能单位招募

强力AI(高级博弈)

  • Minimax搜索 - 博弈树搜索配合α-β剪枝
  • 影响地图 - 量化分析地图态势和敌我优势区域
  • 任务系统 - 自动生成防守、攻城、消灭、巡逻任务
  • 静态评估 - 综合评估军事力量、经济实力、战略控制和战术态势
  • 智能任务分配 - 为单位分配最适合的任务
  • 动态兵力补充 - 根据战略需求智能招募单位

切换AI系统:在 game.js 第24行修改 useAdvancedAItrue(强力AI)或 false(标准AI)

🚀 快速开始

观战双AI对战

  1. 打开游戏

    • 双击 index.html 或使用本地服务器
    # Python 3
    python -m http.server 8000
    # 访问 http://localhost:8000
  2. 观战控制

    • 暂停/继续:点击⏸️按钮或按空格键
    • 调速:选择速度(极慢/慢速/正常/快速/极速)
    • 快捷键:数字键1-5快速切换速度
  3. 观察学习

    • 观察AI的战略决策(防守/扩张/进攻)
    • 学习单位配合和地形利用
    • 分析经济管理和兵力调配

切换AI难度

game.js 构造函数中修改AI难度:

new AdvancedAI(this, 0, 'hard')  // 可选: easy, normal, hard

启用强力AI

game.js 第24行:

const useAdvancedAI = true;  // true=强力AI, false=标准AI

🎯 游戏玩法

基础操作

  • 左键点击 - 选择地块/单位
  • 结束回合 - 点击右上角"结束回合"按钮

单位行动

  1. 移动 - 点击你的单位,然后点击目标地块
  2. 攻击 - 选择单位后,点击"攻击"按钮,再点击敌方单位
  3. 招募 - 在己方城市中点击"招募单位",选择要招募的单位类型

单位属性

单位 费用 攻击 防御 移动 生命
步兵 100 5 3 2 10
坦克 300 10 8 3 15
火炮 250 12 2 1 8
战斗机 400 15 5 5 12

胜利条件

  • 消灭所有敌方单位
  • 占领所有城市
  • 让敌人无力反击

📁 项目结构

world-conqueror/
├── index.html              # 主HTML文件
├── styles/
│   └── main.css           # 样式文件
├── js/
│   ├── config.js          # 游戏配置和数值
│   ├── utils.js           # 工具函数
│   ├── map.js             # 地图生成系统
│   ├── unit.js            # 单位系统
│   ├── player.js          # 玩家系统
│   ├── combat.js          # 战斗系统
│   ├── ai.js              # 标准AI(规则驱动)
│   ├── ai-advanced.js     # 强力AI(博弈树搜索)
│   ├── ui.js              # UI控制器
│   ├── game.js            # 游戏主循环
│   └── main.js            # 入口文件
└── README.md              # 说明文档

🧠 强力AI系统架构

1. 静态评估器(PositionEvaluator)

综合评估局势,权重分配:

  • 军事力量(40%):单位战斗力×血量×价值
  • 经济实力(30%):收入×3 + 金钱/100
  • 战略控制(20%):基地×500 + 城市×100
  • 战术态势(10%):地形优势 + 支援态势 + 威胁能力

2. 影响地图(InfluenceMap)

  • 量化每个地块的敌我势力对比
  • 单位影响力随距离衰减(衰减系数0.7)
  • 识别薄弱区域(敌方优势)和强势区域(己方优势)
  • 为任务生成提供态势分析

3. 任务系统(TaskSystem)

自动生成优先级任务:

  • 防守基地(优先级1000+):基地受威胁时
  • 占领中立城市(优先级600+):扩张经济
  • 攻击敌方城市(优先级500+):己方优势区域
  • 消灭敌军(优先级400+):孤立的敌方单位
  • 巡逻(优先级200+):薄弱区域防守

4. Minimax搜索(MinimaxSearch)

  • 博弈树搜索深度2-3层
  • Alpha-Beta剪枝优化性能
  • 动作预排序提高剪枝效率
  • 限制分支因子(每单位前3个动作)

5. 任务分配算法

  1. 按优先级排序任务
  2. 为每个任务查找合适的单位(类型匹配+距离最近)
  3. 标记已分配单位和任务,避免重复调度
  4. 执行任务:移动到防御位置/占领城市/攻击敌军/巡逻

6. 智能招募策略

根据任务需求动态招募:

  • 基地:优先轰炸机(40%)>重型坦克>战斗机

基地 / 城市 价值一览

下面列出的数值来自代码中的评估与配置(用于AI评估、影响力图与状态评分):

  • 占领敌军空城(占领敌方城市且当前无敌方单位):

    • 终态目标价值(Objective Value):+80 分(拥有城市时由 UnifiedEvaluator 计入)
    • 步兵占领即时奖励:+40 分(UnifiedEvaluator.evaluateAction 中,步兵占领非己方城市时的即时评分)
    • 影响力地图中的城市战略值:敌方城市为 -20,己方城市为 +20(InfluenceMap 扩散时使用)
  • 攻击敌军城市(进攻、削弱或准备占领敌方城市):

    • 战术优先级:攻击城市通常会提高目标优先级(代码中对城市目标有额外权重,策略层在选择攻击/占领目标时会偏好城市)
    • 致胜收益间接体现在占领后的 +80 目标价值与占领即时奖励 +40
  • 占领中立城市(抢占中立点):

    • 终态目标价值:+80 分(同上,拥有城市的 Objective Value)
    • 影响力地图中中立城市基础值:+15(用于局部战略影响扩散)
    • 扩张评估加分:安全的中立城市在 evaluateExpansionOpportunity 中被计为 +25(视威胁情况而定)
  • 防守城市(保住己方城市 / 驱逐威胁):

    • 位置价值(Tile position):城市地块对单位位置价值有 +15 的基本加成(getTilePositionValue
    • 影响力地图中己方城市值:+20(用于控制/威胁判断)
  • 占领基地(Capture Base):

    • 终态目标价值(Objective Value):+150 分(UnifiedEvaluator 中对己方基地计入)
    • 每回合收入:+200 金/回合(CONFIG.INCOME.BASE
    • 地块位置价值:基地在 getTilePositionValue 中对单位位置有 +30 的加成
    • 占领耐久与速率:CAPTURE.BASE_DURABILITY = 20CAPTURE.INFANTRY_CAPTURE_RATE = 5(步兵需 4 次占领动作完成占领)
    • 影响力地图中的基地值:己方基地 +50,敌方基地 -50,中立 +10(用于战略扩散)
  • 防守基地(Defend Base):

    • 基地威胁评估范围:evaluateBaseThreat 返回 0–100 的威胁值;当 >80 时战略层会进入 DEFEND 模式并触发紧急防御逻辑
    • 基地在影响与位置上提供更高价值(位置价值 +30,影响力值 +50),因此防守优先级明显高于普通城市

注:README 中示例性文档可能还包含其它缩放或描绘(例如历史注记 基地×500 + 城市×100),但上面列举均以当前代码实现中的具体数值为准。

  • 需要占领:招募步兵
  • 需要防守:招募火炮
  • 需要进攻:招募坦克/重型坦克

攻击奖励一览

下面列出代码中用于评估攻击动作的评分规则与具体数值(来源:UnifiedEvaluator.evaluateAction 与相关实现):

  • 单位基础价值(UnifiedEvaluator.unitValues):

    • INFANTRY: 30
    • TANK: 60
    • HEAVY_TANK: 90
    • ARTILLERY: 50
    • FIGHTER: 80
    • BOMBER: 120
  • 造成伤害的评分(按比例计入):

    • 公式: (action.damage / defender.stats.health) * defenderValue
    • 含义:对高价值单位造成相同比例伤害会产生更高评分
  • 击杀奖励:

    • 当攻击导致目标死亡时,额外奖励 = defenderValue * 0.3(即目标单位价值的 30%)
  • 远程攻击奖励:

    • 对于远程/无反击的攻击,额外奖励 = +20 分(代码中用于鼓励远程消耗敌方)
  • 反击损失惩罚:

    • 公式:- (action.counterDamage / attacker.stats.health) * attackerValue * epsilon
    • 其中 epsilon = 1.8(UnifiedEvaluator.weights.epsilon),用于放大反击造成的损失惩罚
  • 自身被击毙惩罚:

    • 若攻击导致己方单位死亡,惩罚 = - attackerValue * 1.5

示例:若对一辆价值 60 的坦克造成 30 伤害(坦克最大生命假设为 60),则伤害评分≈(30/60)60 = 30 分;若该次攻击击杀该坦克,则再获得 +600.3 = +18 分;若己方单位在反击中损失血量,则按反击惩罚公式扣分。

注:以上均为当前代码实现使用的评分公式与常数;如果需要我可以把这些数值也显示到游戏 UI 的地块或战斗信息面板中。

🔧 自定义和扩展

修改地图大小

js/config.js 中修改:

MAP_COLS: 20,  // 列数
MAP_ROWS: 12,  // 行数

添加新单位

js/config.jsUNIT_TYPES 中添加:

NEW_UNIT: {
    name: '新单位',
    cost: 500,
    attack: 20,
    defense: 10,
    movement: 4,
    health: 20
}

调整游戏难度

修改 js/config.js 中的:

STARTING_MONEY: 1000,   // 起始金钱
STARTING_INDUSTRY: 50,  // 起始工业
TURN_INCOME: 100        // 每回合收入

🎨 未来功能计划

  • 规则驱动AI
  • 强力博弈树AI
  • 影响地图系统
  • 任务生成与分配
  • 双AI观战模式
  • 玩家对战模式
  • 更多单位类型(海军)
  • 科技树系统
  • 保存/加载游戏
  • 音效和背景音乐
  • 多人在线对战
  • 战役模式
  • 地图编辑器

🔬 技术亮点

AI算法

  • Minimax搜索:经典博弈树搜索算法,适用于零和游戏
  • Alpha-Beta剪枝:显著减少搜索节点,提升性能
  • 影响地图:受RTS游戏AI启发的空间分析技术
  • 任务驱动架构:分层决策系统,战略→战术→行动

游戏机制

  • 六边形坐标系统:轴坐标表示(Axial Coordinates)
  • 战斗公式:平方根效能曲线模拟单位损伤
  • 地形系统:攻击加成+防御加成,丰富战术选择
  • 经济平衡:固定收入生成,避免随机性影响测试

🛠️ 技术栈

  • HTML5 Canvas - 游戏渲染
  • 原生JavaScript - 无框架依赖,纯ES6+
  • CSS3 - 现代化军事风格UI
  • AI算法 - Minimax搜索、影响地图、任务系统

📊 性能优化

强力AI性能

  • 搜索深度限制:2-3层
  • 分支因子控制:每单位前3-5个动作
  • 动作预排序:优先搜索高价值动作
  • Alpha-Beta剪枝:平均减少60-70%节点搜索
  • 采样移动目标:不枚举所有可达格

实测表现

  • 标准AI:200-500ms/回合
  • 强力AI:800-1500ms/回合(困难难度)
  • 地图生成:100-200ms
  • 战斗计算:<1ms

🎓 AI设计参考

博弈树搜索

影响地图

回合制游戏AI

📝 开发笔记

六边形坐标系统

游戏使用轴坐标系统(Axial Coordinates)来表示六边形地图:

  • q - 水平轴
  • r - 对角线轴

战斗系统

  • 攻击伤害 = 攻击力 - 防御力/2
  • 反击伤害 = 攻击力/2 - 防御力/3
  • 所有伤害至少为1

🤝 贡献

欢迎提交问题和改进建议!

📄 许可证

MIT License - 自由使用和修改

🎓 学习资源


享受游戏,征服世界! 🌍⚔️

About

Click the file index.html to get a quick start!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors