Skip to content

jmctsh/open_junqi

Repository files navigation

军棋旗舰

一个可视化的军棋对战与演示程序,支持四方(南/西/北/东)对战、铁路规则、行营/大本营、即时淘汰等核心机制。

安装与运行

  • 依赖安装:
    • Python 3.10+
    • pip install -r requirements.txt
  • 启动程序:
    • python main.py

基本玩法

标准军棋四暗模式的规则。地雷只能工兵挖,其他子撞地雷地雷不会消失。司令阵亡会翻开军旗。当军旗被扛或没有可以移动的子时玩家立即阵亡。对轴为一队,当一队玩家全部阵亡,游戏结束。

AI 代理玩家

接入豆包/ARK API,支持多个 AI 玩家轮流发言与分析。走法由本地算法决定(LLM 不再负责选择走法)。

环境配置(本地模式)

  • 复制根目录 .env.example.env,按注释填写:
    • ARK_API_KEY 与可选的 ARK_MODEL(默认 doubao-seed-1.6-250615)。
    • Doubao TTS 凭据(可选):DOUBAO_TTS_APPIDDOUBAO_TTS_ACCESS_TOKENDOUBAO_TTS_SECRET_KEYDOUBAO_TTS_CLUSTERDOUBAO_TTS_VOICE_TYPE
  • 提示:若配置 ARK_API_KEY,将调用模型生成分析与发言(走法仍由本地算法选出并执行)。未配置时,启用“无模型回退”:AI 玩家仍按本地算法走棋,并广播兜底发言。

近期架构调整

  • 删除了原本的 WebSocket 接口与服务器:改为单进程本地模式,main.py 直接挂接 GameProcessGameWindow。通过 set_ai_action_consumer 执行走子、set_broadcast_consumer 广播聊天/TTS。
  • 决策功能分离:LLM 仅负责生成分析(rationale)与简短发言(utterance),不再选择走法;最佳走法由本地算法提供并作为 planned_move 注入提示词。
  • 引入深度搜索遍历决策树:新增模块 server/strategies/search.py,实现联盟式 Alpha-Beta 剪枝、Beam 排序以及首层风格过滤;并在 server/strategies/scoring.py::choose_best_move_styled 中集成,替代原先的单步打分选择。
  • 反击优先与风格驱动:首层优先考虑“反击位”候选,其次依据玩家风格(防守/进攻/试探)过滤首层候选,再在候选池内进行深度搜索。
  • 广播与日志:模型发言在回合结束后后台合成 TTS 并广播到 UI;完整走子与聊天历史写入 logs/biz.log(JSON快照)。

深度搜索与原评分机制的区别

  • 原评分机制(单步打分):

    • 对每个合法走法计算静态评分(吃子收益、旗安全、推进、风险等),只选择当前步的最高分;不模拟后续回合,不考虑队友/对手的响应链。
    • 优点:极快,稳定可用;缺点:短视,容易被对手“反扑”或陷入交换劣势。
  • 深度搜索机制(多步前瞻):

    • 联盟式 Alpha-Beta:以“起手方所在阵营”为最大化阵营,同轴队友都走“Max”,另轴对手走“Min”,按实际回合顺序轮替并剪枝。
    • Beam 排序与限宽:每层对候选走法打分排序,只保留前 beam_width(默认 8),提高搜索深度下的效率与稳定性。
    • 首层风格过滤:首层可按“防守/进攻/试探”类别过滤候选(默认启用),保持不同玩家偏好;与“反击优先”结合先压制敌方入侵。
    • 叶节点评分:以静态局面评估 _evaluate_state(队友最佳即时得分 − 敌方最佳即时得分),并对每层评分应用衰减 discount(默认 0.95)。
  • 时间预算:time_limit_ms(默认 5000ms)用于控制搜索时长;若在预算内深度搜索无法产生任何走法,则本回合执行“跳过回合”。

  • 参数与默认值:

  • SearchConfig(depth=3, beam_width=8, discount=0.95, time_limit_ms=5000, use_alpha_beta=True, apply_style_filter_first_ply=True)

    • 可在集成点 choose_best_move_styled 中调整搜索深度与时间预算;若需要更强对局前瞻,可适度提升 depth(如 4),并相应增大 time_limit_ms
  • 效果对比:

    • 深度搜索在“交换与反击链条”“多方协同封线”“旗位安全滚动评估”等场景明显更稳健;但计算成本更高,需用 beam_width / time_limit_ms 控制延迟。
    • 单步评分适合超低延迟与资源受限环境;现仅作为分析与解释的轻量打分,不再充当兜底回退路径。

战绩标记(升星)

  • 累计击杀数:每个棋子都记录自身的 击杀数(kill_count)。战斗时,胜者会继承败者的战绩并再加 1:
    • 攻击方胜利:攻击方 kill_count += 防守方.kill_count + 1
    • 防守方胜利:防守方 kill_count += 攻击方.kill_count + 1
  • 显示规则:在棋子右下角绘制战绩标记(洋红色),随棋子移动;棋子死亡则不显示。
    • 1/2 杀:显示"^"形标记(较小号、细线)。
    • 3 杀及以上:显示小五角星(整体缩小一号,贴近右下角)。

自定义标记

  • 右键已有棋子弹出标记菜单,可为该棋子设置一个简短标记,例如:司、军、师、旅、团、营、连、排、工、炸、雷、旗,或选择"清除"删除标记。
  • 允许对自己的棋子使用标记,以记录假炸弹、假令等伪装设定。
  • 标记会跟随棋子移动;当棋子死亡时,其标记会自动清除。

许可证

本作品采用知识共享署名-非商业性使用 4.0 国际许可协议(CC BY-NC 4.0)进行许可。

您可以自由地复制、分发、展示和演绎本作品,但必须遵守以下条件:

  • 署名(BY):您必须适当署名,注明原作者,并提供本许可证的链接。
  • 非商业性使用(NC):您不得将本作品用于任何商业目的,包括但不限于:
    1. 以盈利为目的的直播活动(如带货直播、付费直播等)
    2. 用于商业性质的视频制作(如广告视频、付费课程视频、企业宣传视频等)
    3. 其他任何形式的商业盈利行为

完整许可文本请参见:https://creativecommons.org/licenses/by-nc/4.0/legalcode

贡献与派生使用(Fork)

  • 欢迎 Fork 本仓库用于学习、研究与非商业交流。
  • 在 Fork 基础上进行修改、增加功能、二次开发是允许的,但必须遵守 CC BY-NC 4.0:保留署名、提供许可证链接、不得用于任何商业目的。
  • 发布派生版本时,请在 README 中注明来源链接与原作者;保留本仓库的许可证段落或以醒目位置链接至完整许可文本。
  • 欢迎通过 Pull Request 贡献改进;提交前请确保不包含任何敏感凭据或密钥。
  • 若用于公开演示/教学,请附上协议与来源说明。

About

军棋旗舰

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published