Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
暗线战争:明暗牌博弈与立体战场。离线人机对战和同机双人对战。
Translation pending
GamesHTML · JavaScriptGitHub @lordstoneOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
战略卡牌游戏
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
独立实现的 Three.js 网页卡牌战场游戏。所有运行资源均已包含,运行时不需要互联网,也无需 npm install。 首选:直接双击 暗线战争.html,无需安装任何依赖,也无需终端。单文件和服务器版使用不同浏览器来源,因此存档彼此独立。修改源码后执行 node build.mjs 重建单文件。 也可以在 Windows 双击 启动游戏.cmd。它会寻找系统 Node.js 或本机 Codex 自带的 Node.js,在服务器就绪后打开浏览器。 其他平台:安装 Node.js 20+,在本目录运行 node server.mjs,打开 http://127.0.0.1:4173 。关闭终端即停止服务。端口被占用时可设置环境变量 PORT。 • 正式版(v1.19.3 tag):https://lordstone.github.io/shadowline-war/ —— 稳定版本,推荐玩家使用。 • 预览版(main 分支):https://lordstone.github.io/shadowline-war/preview/ —— 最新开发版,用于测试未发布的新功能,可能不稳定。 推送到 main 会触发统一的 GitHub Actions workflow,并按 deploy/channels.json 组装正式版、预览版和历史版本。Read the full README ↗
▶ 正式版在线游玩 · v1.19.3 · ▶ 预览版在线游玩 · v1.26.2 · ▶ 历史版本
独立实现的 Three.js 网页卡牌战场游戏。所有运行资源均已包含,运行时不需要互联网,也无需 npm install。
首选:直接双击 暗线战争.html,无需安装任何依赖,也无需终端。单文件和服务器版使用不同浏览器来源,因此存档彼此独立。修改源码后执行 node build.mjs 重建单文件。
也可以在 Windows 双击 启动游戏.cmd。它会寻找系统 Node.js 或本机 Codex 自带的 Node.js,在服务器就绪后打开浏览器。
其他平台:安装 Node.js 20+,在本目录运行 node server.mjs,打开 http://127.0.0.1:4173 。关闭终端即停止服务。端口被占用时可设置环境变量 PORT。
v1.19.3 tag):https://lordstone.github.io/shadowline-war/ —— 稳定版本,推荐玩家使用。main 分支):https://lordstone.github.io/shadowline-war/preview/ —— 最新开发版,用于测试未发布的新功能,可能不稳定。推送到 main 会触发统一的 GitHub Actions workflow,并按 deploy/channels.json 组装正式版、预览版和历史版本。
地图阶段:点击目标据点。普通据点容量 3,强化据点容量 4,首都容量 5;非首都至少一张明牌。主要行动用于占领、进攻或整编全部驻军,完成后仍可补牌、采购、使用策略和轮换部分驻军,点击“结束行动”才交接对手。部分轮换每张花 1 补给;撤下的明牌进入公开牌堆,暗牌返回手牌。
部署阶段:点击手牌依次循环 明牌 → 暗牌 → 取消。经典防守和所有进攻战线最多三张,至少一张明牌;战役防守直接使用据点内已经固定的驻军。首都可全暗,其他据点至少保留一张明牌。进攻方的已翻开牌必须严格压过防守方。
对抗阶段:点击自己战线上的暗牌,选择翻开 1 或 2 张,或撤退。防守方平手即可赢,进攻方必须严格压过。详细规则和扩展说明均在游戏内“规则”。
仅参考用户指定的三个文件,没有读取或复用原仓库的其他逻辑或界面:
交锋采用持续翻牌循环:首次进攻部署不会立即获胜。翻牌反超后,若对方仍有战线暗牌,轮到对方反击;仍被压制且有暗牌时继续翻牌或撤退。被压制方没有战线暗牌或撤退时才结算。平手由防守方占优,但不跳过另一方剩余暗牌的反击机会。闪电战与停火按各自效果结束交锋。
两张或三张明牌中出现两张同点数即为对子;三张同点数为三条。大小王是万能牌,会自动替代成能组成最强合法牌型的点数和花色。相同牌型与点数时天然组合胜万能牌组合;都使用一张王时大王胜小王。单张大王胜单张小王,但完整牌型仍优先于王的身份。A 不能环绕为 Q-K-A。
原 MVP 不定义地图、资源或特殊能力。战役模式扩展:每方标准开局仅控制首都,首都部署三张暗牌,手中保留九张;五张历史战场也可选择带初始控制区与分级驻军的史实态势。史实配置固定各据点的强度档位、数量和明暗比例,具体牌面仍随随机种子变化。普通据点容量三张,强化据点四张,首都五张,非首都至少一张明牌,首都可全暗。驻军固定,守住后留守,攻下后由进攻战线接防。战役交锋不再自动把双方补至 12 张;新暗牌来自补给、征召或医疗。主要行动完成后保留当前玩家,由玩家完成其他操作并明确点击结束行动。完整细则见游戏手册。
node tests/engine.test.mjs 或 npm test。
已通过 68 组规则测试与 9 组事件测试:
已在 Chrome 中完成真实浏览器交互回归:AI 入侵与计时暂停、新牌展示、策略目标选择、驻军查看、同机交接保密、闪电战窗口、AI 反超后玩家继续翻牌、商店收展与策略悬停;覆盖桌面、390×600/659/844 iPhone、430×700 手机与 834×1112 iPad 视口,并验证手牌和战术栏始终保留在屏幕内。测试覆盖这些场景,不代表绝对没有其他 bug。
浏览器测试导出 tests/browser.test.mjs 的 browserChecks(browser, url),传入 Playwright 的 Chromium Browser 实例即可运行;需先启动本地服务器。独立 HTML 校验:npm run test:bundle。
src/engine.js:纯状态机、牌力、策略、AI;非法行动不改变原状态。config/maps.yaml:地图据点、坐标、拓扑、史实态势与地图专属策略的唯一人工维护入口。config/tutorial-scenario.yaml:教学战役的固定牌序、驻军、AI 行动与引导步骤;生成 src/tutorial-config.js,由 src/tutorial-campaign.js 执行合法行动。src/data.js:把生成的地图/数值配置适配为运行时数据。src/app.js:界面、选牌、暂停、计时、存档。src/battlefield.js:Three.js立体战区,故障时降级。src/style.css:战术界面与自适应布局。vendor/:Three.js r180官方构建及MIT许可证。server.mjs:仅监听127.0.0.1的无依赖静态服务器。tests/engine.test.mjs:规则与完整对局测试。tests/events.test.mjs:事件快报与隐藏信息测试。tests/browser.test.mjs:桌面、手机和平板的浏览器交互与布局回归。docs/STRATEGY-CARDS.md:全部策略牌的图标、价格、效果和使用条件。docs/ONLINE-MULTIPLAYER-PLAN.md:在线大厅与双人联机的后续设计方案。Three.js来源:https://github.com/mrdoob/three.js/tree/r180/build 。许可证保留于 vendor/THREE-LICENSE.txt。无遥测,无远程资源,无外部字体。存档属于本机浏览器的数据;更换端口或浏览器会使用独立存档。
历史战区底图由 Natural Earth 1:50m 公共领域数据离线生成,使用国家轮廓、湖泊和河流数据;游戏运行时不会请求地图服务。生成说明与来源记录见 tools/natural-earth/README.md。
本项目原创代码、界面和游戏内容采用 PolyForm Noncommercial License 1.0.0:允许个人及其他非商业目的使用、修改和再分发,但必须随副本保留许可证及其中的 Required Notice 来源声明。任何商业使用需要取得版权所有者的另行书面授权。
这是一份限制商业用途的源码可用许可证,不属于 OSI 定义的开源许可证。vendor/ 中的 Three.js 继续适用其自身的 MIT 许可证,不受本项目许可证替代。
config/tutorial-scenario.yaml,生成器校验牌面唯一性、驻军容量与策略候选;补齐中英文文本和确定性回归测试。config/maps.yaml,全局档位阈值集中在 config/game-balance.yaml;生成器会拒绝漏配、非法档位、超容量、非法明牌数和牌库不足。config/maps.yaml。(fixes #137)docs/STRATEGY-CARDS.md 补齐到 17 张策略:新增和平谈判、经济间谍、焦土政策、迁都;修正医疗分队为自选最多 2 张;新增确认窗口、相关据点提示与史实模式初始策略说明。.target-actions .danger),与代表危险操作的 --orange 配色统一,提醒玩家谨慎选择(fixes #131)。supply-action 类),在常用操作中更显眼,与「结束行动」按钮的高亮风格统一(fixes #130)。v1.19.3 tag,避免部署随分支历史整理而改变。release 分支对齐到 main 已有提交,不再包含 main 没有的独有提交或旧部署 workflow。deploy/channels.json 独立指定 branch、tag 或 commit,也可从 Actions 手动临时覆盖。/versions/ 历史版本选择页,保留 1.16–1.21 各 minor 版本的独立可玩快照。config/game-balance.yaml,集中管理默认对局、发牌、战役经济、驻军/战线限制与全部策略牌参数。game-shell,修复短屏溢出、策略提示越界和密集历史地图据点遮挡。AI 模式下玩家二(AI)的名字从"Player 2"改为"AI Commander"(中文"AI 指挥官"), 不再与双人模式的玩家二混淆。
修复 v1.20.0 i18n 重构误删 perform() 导致的严重 bug:act() 返回新 state 而不原地修改,缺少 perform() 做 s=res.state 状态提交后,玩家和 AI 的所有行动都被丢弃,游戏卡在"AI 正在选择策略…"。恢复 perform()(含状态提交、事件、保存、render),AI draft/campaign 改为 perform(aiAction(...)),draft 阶段选策略改为 perform({type:'draft',id})。浏览器完整对局 e2e 验证通过。
<img> 增加 onerror fallback,图片加载失败时自动隐藏,避免 iOS 布局错乱导致顶栏不可见。修复点击「开始作战」后报错无法进入游戏的严重 bug:game() 在 draft 阶段错误调用 battleView()(此时 s.battle 为 null 导致崩溃),现 draft 阶段正确渲染 draft() 选牌界面。另修复 upgradeState() 旧存档阵营名称未转为 side index 的问题,以及移除不存在的 hero SVG 引用(404)。
新增完整英文版本。Setup 界面右上角顶栏加入"中|EN"语言切换按钮,可随时切换中英文;所有界面文字、策略牌、地图、事件日志均提供中英双语。语言包(src/i18n/zh.js / en.js)与业务逻辑解耦,业务代码仅通过 t() 接口取词;语言选择持久化到本地存储。
README 顶部移除失效的旧 Pages badge,改为 release/preview 双分支的部署状态 badge, 以及分别标注正式版(v1.19.1)和预览版(v1.19.3)版本号的 badge。
README 新增"在线版本"说明:正式版(release 分支)与预览版(main 分支)的两个 GitHub Pages 地址,以及分支推送自动部署的机制。
在 iPhone、iPad 等紧凑布局的战术栏加入“记录”入口,点击后以可滚动弹窗显示本局完整日志;桌面端继续保留侧栏最近记录,避免移动端因压缩布局而无法查看。
医疗分队效果从"自动回收点数最高的 1 张"改为"从自己的公开牌堆自选最多 2 张牌回到暗牌手牌"。使用时弹出选牌窗口,玩家从公开牌堆中挑选(最多选 2 张,不足 2 张时有多少选多少)。AI 未指定时默认拿点数最高的两张。费用保持 3 补给不变。
检查所有地图的港口连接:山河决战的上海港与天津港陆地不直连,按地理逻辑应有黄海/渤海水路连通。新增 seaLinks: [['shanghai','tianjin']](同时加入双方 links 使其可通行,跨海进攻适用登陆限制)。其他地图的港口已有海路或已在陆地连通集群内,暂不调整。
海船不再常驻航行:只有当选中港口据点时,才在该港口及其"只能经水路到达"的其他港口上显示静态船标记,用于清晰指示水路连接;focus 移开后标记消失。移除了 rAF 驱动的航行动画与相关 CSS。
修复目标栏按钮布局 bug:在 ≤1200px 宽度(及触屏)的"稳定战场"布局下,目标栏被锁死 96px 高、按钮区被锁死 78px 并 overflow:hidden,而选中对手据点时 4 个按钮(发动进攻 / 围城 / 补充暗牌 / 结束行动)在 320px 宽下必然换行两行,"结束行动"按钮被裁掉一半。改为目标栏按内容自动增高(地图相应收缩),按钮区不再限高裁剪;桌面端 971px 与己方/中立据点均验证按钮完整可见。
修复海港小船动画的 bug:之前用 SMIL animateMotion 驱动,但每次点选据点都会重建整个 SVG,小船就被重置回航线起点,看起来永远卡在起点附近抖动。改为 requestAnimationFrame 按墙钟时间在航线上定位(getPointAtLength),重渲染/点选不再打断航行;prefers-reduced-motion 下仍隐藏小船。
与首都之间没有经己方据点连通的通路(补给线被切断)的据点受到补给减益(fixes #51):正产出无法送达、按 0 结算;产出为负时每回合额外折损 1 张随机明牌,直到没有明牌或产出转非负。地图上此类据点标注"补给线断",补给流水与战地手册同步说明该规则。
海港之间的海上连接不再画成容易误读为陆路的直线(fixes #45):改为虚线弧形海路,一艘小帆船沿航线来回航行(靠岸小动画),曲线自动避开其他据点、偏向开阔水域;选中海港时海路高亮为金色。与 prefers-reduced-motion 兼容(此时隐藏小船、保留虚线海路)。
顶部导航栏“暗线战争”左侧的 ⟐ 符号替换为游戏官方图标(assets/icons/shadowline-32.png,#44 引入的资源);离线单文件版内嵌该图标,图标随顶栏尺寸(桌面 42px/移动 34px/对局中 25px)自适应。
主要行动完成后的提示(“主要行动已完成 · 完成后请点击'结束行动'”)从目标栏左侧移至右侧按钮区上方,右对齐独立成行:桌面端不再被手牌区裁剪,手机/平板窄屏下自动换行不断裂。
采用经确认的盾牌图标:青橙双方战线、三节点进军路线与一明两暗三张扑克牌组合成统一标志。新增浏览器 favicon、iPhone/iPad 主屏图标、192/512 像素 Web App 图标和 Manifest,并在 README 展示正式图标。
游戏内规则窗口逐张列出全部 13 张策略的图标、价格、阶段、效果和准确使用条件。仓库新增独立策略牌手册,说明市场限制、解锁时机、目标选择和容易混淆的侦察差异。
公开牌堆窗口新增“点数/花色”切换,排序规则与底部手牌一致;排序只改变显示顺序,不修改战局状态。手机窗口采用纵向标题与切换栏,避免挤压。
驻军调整收敛为两个明确操作:“整编全部驻军”消耗主要行动并替换整支驻军;“轮换部分驻军”按每张 1 补给等量换入换出、每回合一次且不消耗主要行动。移除功能重叠的“整队快换”,同步更新规则、教程、事件说明和浏览器回归。
验证完整 384 局、38,063 次合法行动能够结束,没有发现死循环。牌型计算缓存增加 32,768 项容量上限,长时间矩阵不再无限累积;测试按规则和地图持续输出进度与耗时,便于区分正常运算和真正卡局。
交锋双方牌型名称相同但点数不同时,中央状态会说明实际比较到最高牌、对子单牌或第几张明牌。补充截图场景回归测试,确认 9 晋升为 J 后仍由第二张 9 正确压过只有单张 J 的防线。
修复策略事件页面与内部策略卡共用样式名导致窗口被压缩、内容错位的问题。全部 13 张策略牌已在手机、iPad 和桌面视口逐张验证其事件、战术坞、悬浮提示和市场布局。
霍尔木兹海峡此前没有史实模式(issue #28),和其他历史地图不一致。新增"2026年 · 美伊战争爆发"史实开局:海峡联合舰队控制马斯喀特指挥部、苏哈尔港、穆桑代姆、外海锚地和内陆沙漠;波斯湾卫队控制波斯湾指挥部、沿岸山口、阿巴斯油港、格什姆港和海峡中岛。选图界面、开局态势默认史实、史实标签均自动生效。
仓库此前缺少统一的开发规则(issue #30)。新增 AGENTS.md,固化 7 条全局规则:commit message 必须有意义、按意群组织 commit、任何改动走 PR 由 lordstone 审核 merge、PR 附浏览器实测截图、PR 加 label、README changelog 倒序、semver 版本规则(小 fix→patch、玩法变动→minor、架构变动→major)。同时记录了每个 PR 的标准动作(bump version 三处一致、README changelog、重建离线单文件)与构建/测试命令。
1.16.6 的地图边界用固定边距限制相机:放大后(超过 2.15x)据点分布的实际像素宽度远超屏幕,18% 边距不够把边缘据点拉回来——苏德战争放大后最北边的列宁格勒会被"焊"死在屏幕外。改为分两种情况钳制:内容未超出屏幕时保持原来的边距带限制(初始视角不受影响);内容超出屏幕时(放大态)保证每个据点都能被完整拖进视野(加 24px 过滚),同时依然拖不进无尽空白。已在本地用无头浏览器走真实流程实测:手机 390px 与桌面 1280px 下苏德战争最大放大 3.5x 时 14 个据点全部可达,边界粘滞;无限拖拽依然被拦住。
战术地图之前可以无限往边上拖:相机偏移没有任何约束,一口气拖几千像素后地形背景完全飞出屏幕,只剩一片空白。新增 clampMapViewport(),在每次更新相机(拖拽、缩放、重置)时把偏移限制在"所有据点投影保持在屏幕内+18% 边距"的范围内;据点分布宽于屏幕时则允许在两端之间平移、但不许拖过头。初始适配视角本身就在范围内,不受影响。
手机窄屏下目标栏按钮区被固定高度+超出隐藏,按钮换行到三行时上下都被裁掉、挤成一团。改为按钮区按内容自然增高、目标栏同步增高;同时把战场网格的目标栏行从固定 76px 改为 auto(地图区相应收缩),否则多出的按钮仍会被战场容器裁掉。已在本地用无头浏览器走完整开局流程实测:390px 下选中己方据点时 5 个按钮换三行全部完整可见。
前三次修复在线上验证都没过:这次先在本地用无头浏览器实际渲染确认。根因是之前依赖的 cqw 相对单位和超小字号(2-5px)在部分手机浏览器上不可靠——旧浏览器不支持 cqw 会回退到 14px 继承字号,另一些浏览器有最小字号或自动放大。
改法:卡背小字不再用 HTML 文字排印,改用内联 SVG <text> 并加 textLength="114" lengthAdjust="spacingAndGlyphs",把 "SHADOWLINE" 十个字母强制压进固定宽度,随卡片百分比缩放(58/69/73/85px 都实测不溢出),不再依赖 cqw、container-type 和超小字号;S 恢复固定 32px。
公开牌堆弹窗里的小尺寸卡背(58px)上,"SHADOWLINE" 小字本身比卡背还宽,之前几次都没修到这层。这次把卡背图案改成相对单位(cqw):S 和小字都按卡片宽度等比缩放,大卡小卡都正好装下。
1.16.1 把小字改成 5px 长写后,在部分手机浏览器上还是巨大——原因是这类浏览器会自动放大过小的文字(text-size-adjust),CSS 写对了但渲染时被改掉。这次给卡背小字加上 -webkit-text-size-adjust:100%;text-size-adjust:100%,不让浏览器自作主张。
修复卡背“SHADOWLINE”小字因 font 简写声明失效而以 32px 巨大字号溢出卡牌的问题:改用 font-size / font-family 逐项声明,确保小字按 5px 渲染并始终收在卡牌内。
战役交锋取消双方自动补至 12 张,普通补牌、征召令和医疗重新成为稀缺牌源。征召令改为补 2 张;医疗稳定回收最高点数公开牌;战地晋升提高 2 点;国际援助固定获得 6 补给;经济封锁固定持续 3 回合。其余策略同步降价到 3–7 补给,降低“攒很久仍不值得买”的问题。
占领、进攻和整编完成后不再自动交接,当前玩家可以继续普通补牌、策略采购与使用、快速轮换,最后点击醒目的“结束行动”交接。未选择驻军时,部署、整编和整队快换按钮保持可点击并提供悬停说明;点击后会给出具体选牌提示。
快速换防拆分为按张局部轮换和整队快换:局部轮换每张 1 补给,整队为 3 补给,每回合共享一次快速换防机会。撤下的明牌进入己方公开牌堆,暗牌返回手牌,已公开信息不会通过换防重新隐藏。
东线纵深、半岛拉锯、法德西线和山河决战在高级选项中新增“标准/史实”开局,默认标准。史实开局按标注的战争时间点分配控制区;普通据点随机部署一明两暗,首都保留三张暗牌。双方控制的据点盒子使用对应势力的完整边框、色调和侧边标记。
战役地图目标栏的「结束行动」按钮从低调文字链改为金色描边按钮,不再淹没在操作栏里。悬停提示说明:点击跳过主要行动并结束本回合,购买策略、补充暗牌等其他行动请在此之前完成。
主菜单“规则”旁新增“教程”入口。八步引导使用游戏真实界面截图讲解地图连接与占领、驻军明暗部署、攻防与连续翻牌、补给收支、普通牌与策略牌购买、策略使用时机,以及首都和其他胜负条件。教程支持前后切换、进度提示和随时关闭,并针对 390px iPhone 窄屏提供单列阅读布局。
服务器版直接加载本地教程图片;构建离线单文件时,八张截图会转换为内嵌数据,因此双击 暗线战争.html 时仍然完整可用且不产生网络请求。
历史战区加入本地内嵌的淡化地理底图,继续叠加 Three.js 地标、拓扑路线和据点图标;修正朝鲜半岛与法德西线两方首都、势力名称及地理方向的对应关系。窄屏据点会被约束在战场边界内,iPhone 交锋界面改用明确的标题、敌我战线、比较状态和操作区网格,避免卡牌与文字、按钮互相覆盖。
战斗和据点内的可见牌会按当前最强牌型编队。顺子、同花与同花顺从小到大排列,超过三张的守军优先显示最强三张组合;敌方暗牌仍保持牌背和稳定位置,不泄露排序信息。
补给新增驻军维护:据点有 0–1 张明牌时正常产出,2 张明牌时停产,3 张以上明牌时倒扣该据点原产出。全军本回合据点净产出为负时,公开随机弃置一张暗牌;补给保持最低为 0,不产生债务或连续弃牌。顶栏补给数字可在鼠标悬停时预览,也可点击打开逐项收支窗口,手机与触控设备使用同一窗口。
删除手绘多边形底图,改为 Natural Earth 1:50m 的真实国界、海岸、湖泊和河流轮廓。东线、朝鲜半岛、法德西线、霍尔木兹和中国战区的据点坐标按城市真实经纬度重新投影,地理名称与地图位置保持一致。
历史地图隐藏 Three.js 装饰网格,并删除 WebGL 与 SVG 重复绘制的路线。缩放时路线层不再被重复变换;仅保留一套低对比度据点连线,而且始终位于据点卡片后方。
所有地图改用按战区范围自动取景的默认视角。历史地图采用与屏幕宽高比一致的俯视投影,不再把东西方向压缩到画面中央;进入战场时会按据点实际跨度自动居中并放大,视角复位也会返回该地图的最佳取景,最大放大倍率提高到 3.5 倍。
据点标签保持原生像素清晰度,并在地图边界内执行碰撞避让。密集地图统一使用顶部锚点,桌面、iPhone 短屏和 iPad 上都不会因自动排布而重叠或被裁切。霍尔木兹战区的东西间距同时扩大,海峡两岸在游戏视角中更容易辨认。
地图在未选择目标时持续显示完整据点连接网络。选择任一据点后,其直接相邻路线会变为高亮脉冲线,相邻据点同步出现扩散光环;其他路线降低亮度,让玩家立即看清从当前位置能够到达哪里。路线端点继续跟随据点的自适应排布、拖动和缩放。
iPhone Chrome 采用更紧凑的顶栏、军团状态、目标操作区、手牌扇面和底部战术坞;窄屏底部不再留下无用途的右侧空位。浏览器回归覆盖 390×600/659/844、430×700 和 834×1112 等视口。本版本同时把 README、战地手册、测试报告和联机规划状态同步到当前八地图、固定驻军、地形、双牌库及策略市场规则。
手机和平板的游戏界面改为依据浏览器实际可见高度分配顶栏、战场、手牌和战术坞,避免浏览器地址栏变化或事件提示累积后把手牌挤出屏幕。README 增加 GitHub Pages 部署状态、在线版本和许可证说明,所有界面持续显示版本号。
顶栏玩家身份改为可点击的名字与徽记模块,在弹窗中统一修改。战役高级选项可为每张地图选择两个既定势力;玩家选择一方后,双方名称、徽记、颜色和首都归属同步交换。新增霍尔木兹海峡与山河决战,总地图数增至八张。
沼泽的攻守与驻军上限为 1 张,林地为 2 张;山地仍允许三张牌,但进攻方必须至少亮出两张。可通航港口之间新增跨海路线:登陆进攻不得组成三条,且进攻牌型不能低于防守方;普通陆路攻击与港口的陆上相邻路线不受此限制。
高级选项新增“公共牌库”:可以跟随地图,或固定为 1 副/2 副。跟随地图时,5–11 个据点使用 54 张牌,12 个以上据点使用 106 张牌。两副模式包含两套普通牌但只保留唯一一对大小王,避免万能牌数量翻倍;第二套普通牌与策略生成牌均使用独立 ID,牌数守恒校验覆盖两种规模。
小王使用银色金属牌面,大王使用金色牌面和暖色辉光;微型驻军牌同样显示对应金银等级。敌方未揭示的王牌仍保持统一牌背,不会泄露隐藏信息。
所有界面的右下角固定显示低对比度版本号,并适配 iPad 安全区域。版本标识不接收点击,也不会随菜单、事件、暂停或结算界面切换而消失。
策略市场从地图下方的整行栏位移动到右侧“战术指令”旁的小型商店按钮。按钮显示当前市场的三张牌数量,点击后仍打开原有的策略市场窗口并保留购买、补货、限制和解锁规则,战场地图因此获得完整高度。
反击阶段明确显示当前只比较已翻开的明牌;若双方高牌相同,第二、第三张明牌仍依次比较。暗牌只有点击翻开并确认后才参与牌型和胜负计算。新增这一精确比较的规则回归测试。
对 320–390px 宽度进一步压缩了行动栏、战线牌、据点按钮、菜单和弹窗边距,保留单屏作战结构并适配 iPhone SE 到标准 iPhone 宽度。
朝鲜半岛等南北跨度明显大于东西跨度的地图自动启用更接近垂直俯视的专用相机,并适当扩大东西方向间距,完整保留南北两端边距。复杂地图隐藏据点上的重复容量文字,将空间留给名称和军情。
地图据点现在直接展示微型驻军牌:明牌显示牌面,自己的暗牌显示带暗部署质感的牌面,敌方暗牌只显示统一牌背。放大地图时据点面板和微型牌执行反向缩放,地形与路线被放大的同时,操作目标维持稳定尺寸,减少相互遮挡。
据点面板从地图的 GPU 缩放层中独立出来。地形和路线继续平移缩放,据点则根据相同视图参数重新计算屏幕坐标并始终以原生像素渲染,避免反向缩放造成文字和牌面二次采样模糊。
修复带新牌展示的策略事件因卡牌容器未闭合而破坏整个快报布局的问题。游戏界面改用固定三行视口结构,浏览器工具栏改变可用高度时,地图自动收缩并始终为底部手牌和战术栏预留空间;已实测 iPad 横屏 1024×768 与竖屏 768×1024 均无页面溢出。
战役顶栏明确显示每轮剩余的 1 点主要行动。占领、进攻、整编或结束行动消耗该点;购买策略、补充暗牌和快速换防继续按各自限制执行。地图新增鼠标、触控拖动、滚轮与双指缩放,以及放大、缩小、复位按钮。Three.js 地标、拓扑线路和可交互据点统一使用最终投影坐标,并作为同一个视图同步平移缩放。
手牌区新增“点数/花色”切换。点数模式按牌点从小到大排列,同点数按花色排列;花色模式先按黑桃、红桃、梅花、方片分组,各组内按点数从小到大排列,大小王列在最后。排序只改变显示,不修改战局状态或存档中的牌序。
新增三张以真实战区地理关系为灵感的复杂地图:14 点“东线纵深”沿北部港口、中部铁路枢纽和南部油区展开;11 点“半岛拉锯”由狭长海岸、山地走廊与首尔枢纽连接;12 点“法德西线”提供低地迂回、阿登突破和南部山地路线。港口、山地、工业油区、强化城市与首都使用不同图标和 3D 地标。地图用于抽象策略玩法,不按具体历史时间点复刻兵力或国界。
大小王改为万能牌,会自动寻找当前可组成的最强合法牌型。例如两张 3 加小王组成三条 3,同花 10、J 加王组成 Q 高同花顺。相同牌型与点数时天然组合优先;双方都依赖一张王时大王优先。单张大王仍胜单张小王,牌型等级始终优先。
普通据点容量 3,三处强化据点容量 4,首都容量 5。超过三张的防守战线按已翻开牌中的最强三张计算,暗牌仍通过反击逐步翻开。进攻方可花费 3 补给发动围城,随机封锁一张第 4/5 位预备守军;守军守住后被封锁牌返回原驻军,攻方取胜时该牌回到防守方暗牌手中。
普通牌操作由容易误读的“补给 · 2 点”改为“补充暗牌 · 2 补给”,并明确说明会消耗 2 点补给、从公共牌库随机抽取 1 张暗牌。策略商店的按钮同时直接显示购买价格、补给不足、已持有或本回合已购状态。
修复应用窗口在中等逻辑宽度下把目标栏改成纵向排列、又被固定高度裁切的问题。占领、整编驻军、快速换防、补给和结束行动按钮现在始终完整显示在目标栏内。
该版本当时将所有据点设为最多三张固定驻军;容量后来已由 1.4.0 的纵深防御规则取代。普通据点至少一张明牌,首都允许三张全暗;开局双方首都各有三张暗牌。驻军被攻击时直接成为防守战线,守住后原地保留且已经翻开的牌维持公开;进攻胜利后,进攻战线成为新驻军。玩家可以消耗地图行动整编,或每回合花 3 点补给快速换防一次并继续行动。
战术商店改为可展开模块,持有策略改成图标坞,鼠标悬停或键盘聚焦时显示详情与可用原因。手牌改成重叠扇形牌桌布局;战场、手牌和情报栏在桌面与手机上固定于单个视口内。
战役模式新增三张公开策略市场。每个地图回合可购买一张,不消耗占领或进攻行动;购买后立即补充市场空位,每三轮整体刷新。普通支援价格为 4–5 点补给,强力战术为 6–8 点。每方最多持有三张,不能同时持有同名牌;新购策略在购买者下一个地图回合解锁,防止购买后立即爆发。已使用和被刷新的策略进入弃牌区,牌库耗尽时重新洗入。AI 会根据手牌、补给和局势采购,并通常保留至少 2 点补给。旧版本存档会自动补全市场状态。
修复两张同点数明牌被错误显示为高牌的问题。两张明牌同点数现在直接组成对子;第三张相同暗牌只有在正式翻开后才把对子升级为三条。
己方可以看到暗牌牌面,但暗牌在翻开前不计入当前牌型。反击阶段,可翻开的战线暗牌现在带脉冲边框并标注“点击翻开”;选择后立即预览将形成的牌型,再点击确认。以两张明 K 加一张暗 K 为例,当前是“对子”,选择暗 K 后会预览“三条”,确认翻开后才正式反超。
修复对手翻牌反超后立即判负的问题。有战线暗牌的一方会获得反击机会,双方可以连续反超;晋升、增援与侦察后的比较也使用相同流程。只有被压制方没有战线暗牌、撤退,或使用立即结算的策略时才结束交锋。
入侵、占领、部署、翻牌、结算、补给和新牌均逐条展示,默认每条 3 秒;高级选项可改为 1 或 5 秒,也可点击继续。动画和暂停期间不消耗行动时限,AI 等待展示结束。新牌加入手牌后标记「新」。
进攻部署成功后,如持有交锋策略,会进入战术窗口,可先使用策略再让防守方反击。闪电战只允许己方占优时使用,修复原先只能被压制时使用、反而让对手获胜的问题。
驻军独立于手牌和公开牌堆计数。点击军团面板可查看各据点驻军;战斗动画会说明固定驻军进入防线及战后驻防结果。