ARTICLE · 997706
《阿特拉斯铁路》收入计算器 设计文档

一、功能模块划分
miniprogram/├── app.js / app.json / app.wxss全局配置、全局样式、设置持久化├── utils/rules.js★规则引擎(纯函数,全部计算逻辑)├── utils/store.js★ 公司存档 / 营运顺序 / 结算历史└── pages/├── index/「收入结算」 公司设置 → 路线录入 → 分红/留存 → 股东明细 → 股价事件├── companies/ 「公司管理」 多公司存档、营运轮行动顺序视图、已行动翻转、结算历史├── merger/ 「合并·清算」 合并计算、清算了结、强制购车破产判定、终局计分└── reference/ 「规则速查」 火车表、阶段股价区间、起始资金、判定口诀、自定义设置
模块 | 职责 | 对应规则 |
① 公司设置 | 公司类型(小/大)、当前股价(±1 档步进或直输)、国库现金 | 股份结构:小 5 股×20%,大 10 股×10% |
② 路线录入 | 每列火车一条路线;站点价值快捷点选(10–60)或自定义;郊区 +10 开关 | 路线价值 = 站点价值之和,站数 ≤ 火车点数 |
③ 分配结算 | 分红 / 留存切换;自动判定股价 −1 / 不变 / +1 / +2 档 | P.14 分配收入 |
④ 股东明细 | 股东行(姓名、股数 ±、是否国库自持);逐人分红额、占比、合计校验 | 分红按持股比例,自持股入国库 |
⑤ 股价快捷事件 | 卖股 −1 档、全售奖励 +1 档、发行 / 赎回 1 股 | P.13–14 股价轨道 |
⑥ 合并计算 | 两小公司 → 大公司:新股价、国库与火车合并、超限弃置、股东 1:1 换算与新总裁判定 | P.18 合并轮 |
⑦ 清算 | 股价归 0 解散清单生成 | P.11 清算 |
⑧ 破产判定 | 强制购车:国库 → 总裁现金 → 逐股卖股的筹资模拟 | P.16–17 |
⑨ 终局计分 | 个人现金 + 持股按最终股价折算 | P.20 游戏结束 |
⑩ 规则速查/设置 | 火车表、阶段区间、起始资金;自定义股价轨道与变体开关 | 全局 |
⑪ 公司管理 | 多公司状态存档(名称/类型/股价/国库);营运轮行动顺序自动排序(股价降序、同价先进入者先行动);已行动翻转标记;结算结果自动回写与历史流水;每股分红走势图(最近 10 次柱图) | P.11 行动顺序与标记翻转 |
⑫ 玩家资产 | 玩家档案(现金 + 持股),持股直接引用公司存档、股价实时联动;终局资产排名自动计算 | P.20 游戏结束计分 |
⑬ 合并存档联动 | 合并页可从存档选择 A/B 公司自动填入股价国库;「合并并存档」一键生成大公司存档并移除原两家小公司 | P.18 合并轮 |
二、数据输入与展示形式
输入方式(手动录入 + 快速选择并存)
数字直输:股价、国库、站点值、火车价格等均可直接输入。
快捷点选:站点价值提供快捷标签,点一下加一个站点,点已添加的标签即可删除;股数用±按钮步进;股价用±1档按钮沿轨道步进。
开关切换:公司类型、分红/留存、郊区 +10、国库自持、变体规则均为点按开关。
动态行:路线、股东、持股、可卖股票均可增删行。
展示形式(实时联动)
任何输入变化立即重算:总收入大数字、每股分红、股价变动判定(涨红跌绿)、逐股东分红明细、银行池股数提示。
分项明细:每条火车路线单独小计;分红页逐股东列出"股数 · 占比 · 应得";合并页列出均价、取整后新股价、保留/弃置火车、合并后各人持股与新总裁;破产页逐步列出筹资过程。
校验提示:持股总数超限警告、国库不足赎回提示、股价归0弹窗警告。
设置持久化:自定义股价轨道与变体开关存,跨会话保留。
模块 | 职责 | 对应规则 |
① 公司设置 | 公司类型(小/大)、当前股价(±1 档步进或直输)、国库现金 | 股份结构:小 5 股×20%,大 10 股×10% |
② 路线录入 | 每列火车一条路线;站点价值快捷点选(10–60)或自定义;郊区 +10 开关 | 路线价值 = 站点价值之和,站数 ≤ 火车点数 |
③ 分配结算 | 分红 / 留存切换;自动判定股价 −1 / 不变 / +1 / +2 档 | P.14 分配收入 |
④ 股东明细 | 股东行(姓名、股数 ±、是否国库自持);逐人分红额、占比、合计校验 | 分红按持股比例,自持股入国库 |
⑤ 股价快捷事件 | 卖股 −1 档、全售奖励 +1 档、发行 / 赎回 1 股 | P.13–14 股价轨道 |
⑥ 合并计算 | 两小公司 → 大公司:新股价、国库与火车合并、超限弃置、股东 1:1 换算与新总裁判定 | P.18 合并轮 |
⑦ 清算 | 股价归 0 解散清单生成 | P.11 清算 |
⑧ 破产判定 | 强制购车:国库 → 总裁现金 → 逐股卖股的筹资模拟 | P.16–17 |
⑨ 终局计分 | 个人现金 + 持股按最终股价折算 | P.20 游戏结束 |
⑩ 规则速查/设置 | 火车表、阶段区间、起始资金;自定义股价轨道与变体开关 | 全局 |
⑪ 公司管理 | 多公司状态存档(名称/类型/股价/国库);营运轮行动顺序自动排序(股价降序、同价先进入者先行动);已行动翻转标记;结算结果自动回写与历史流水;每股分红走势图(最近 10 次柱图) | P.11 行动顺序与标记翻转 |
⑫ 玩家资产 | 玩家档案(现金 + 持股),持股直接引用公司存档、股价实时联动;终局资产排名自动计算 | P.20 游戏结束计分 |
⑬ 合并存档联动 | 合并页可从存档选择 A/B 公司自动填入股价国库;「合并并存档」一键生成大公司存档并移除原两家小公司 | P.18 合并轮 |

三、不同规则情景下的计算规则
1. 营运收入
路线价值 = 该火车经过的所有站点(城市 + 远方目的地)价值之和,站数 ≤ 火车点数;可少跑(Local 本地路线只计枢纽城一站)。
总收入 = 各列火车路线价值之和。
公司技能修正(录入时体现):Suburban 郊区城市每列经过的火车 +10(路线上的"郊区+10"开关);Express 仅一列火车时 +1 站(多录一个站点即可);远方目的地价值随阶段变化(按收入卡面值录入)。
2. 分红(Pay out)
每股分红:小型公司 = 总收入 × 20%;大型公司 = 总收入 × 10%。
每位股东应得 = 每股分红 × 持股数(总裁证按 2 股计)。
公司国库中自持的股同样分红,金额进入国库;银行池中的股不分红。
股价判定(比较分红总额与当前股价): 0 < 总额 < 股价 → 不变,标记移到该列底部 总额 ≥ 股价 → +1 档 总额 ≥ 2× 股价 → +2 档(双跳)
3. 留存(Withhold)
总收入全额入国库;股价−1 档。
无火车公司收入视为 0,分配时股价 −1 档。
4. 股票轮价格事件
玩家卖股:每次出售动作 −1 档(无论卖几股;变体可切为每股 −1 档)。
股票轮结束时股份全部由玩家持有:+1 档。
发行1股:国库 +当前股价,股价−1档;赎回1股:国库−当前股价,股价不变。
持股约束提示:单人 ≤ 60%;银行池 ≤ 50%。
5. 合并(Merger Round)
前提:两家小型公司总裁同意(变体:敌意合并按持股投票),且一方能沿路线 trace 到对方至少一个 hub。
新股价 = 两家股价平均值,向下取整到票面档位。
股份 1:1 兑换为大公司股份(小总裁证 2 股 → 大公司 2 股);持股最多者任新总裁,并列时归营运顺序靠前公司的总裁。
国库、火车合并;超出当前上限的火车由总裁选 1 列放入银行池。
小公司技能在合并后保留。
6. 清算(股价归 0)
全部股份移出游戏(无补偿);国库现金归还银行;火车入银行池;地图上 hub 标记移除。
7. 强制购车与破产
无火车公司必须购车:国库出资 → 总裁个人现金 → 逐股卖股(卖股不得导致本公司总裁易主、不得使银行池 >50%;每个被卖公司只降 1 档)。
仍不足 → 总裁破产,通常立即结束游戏;继续游戏时按规则移除其公司及资产,其他玩家持股按最终股价兑现。
8. 终局计分
短局 4 循环 / 长局 6 循环后结束:玩家总分 = 个人现金 + Σ(持股 × 最终股价);公司国库不计分。

四、视觉主题
规则书元素 | 小程序映射 |
封面深蓝织物底 + 铜橙新艺术装饰字体与双线框 | 每页顶部横幅(深蓝渐变 + 铜色双线内框)、Tab 栏深蓝底铜色选中 |
内页羊皮纸底色 | 页面背景 |
内页卡片式版心与细线框 | 卡片羊皮纸白 + 铜色双线内框(双层 inset box-shadow 模拟) |
铁路六边形板块(hex tiles) | 卡片标题前缀铜色 ⬢ 六边形符号,标题后铜色延展线 |
黄/绿/紫/灰四阶段板块色 | 火车表与阶段区间的阶段色标签(tag-phase-*) |
衬线字体排版 | 全局 Palatino/Georgia/宋体系衬线栈 |

五、实现方案
5.1 技术选型
原生微信小程序,无第三方框架依赖。
全部计算收敛在utils/rules.js纯函数规则引擎中,页面只负责录入与渲染。
preview.html为同逻辑单文件浏览器版,便于无开发者工具时演示核对。
5.2 目录与数据流
用户输入 → Page.data(routes/holders/price/…)→ recalc() 调 rules.js 纯函数→ setData 渲染结果区(明细 + 判定 + 警告)"应用结算结果" → 把 newPrice / 国库变化写回 data,完成一次结算闭环设置 → app.globalData + wx.setStorageSync('atlas_settin
5.3 关键设计
股价轨道抽象:所有"±N 档"通过 moveOnLadder(price, steps, ladder)在可配置轨道上移动解决,天然支持"向下取票面"(floorToLadder)与归 0 清算检测。
变体开关:卖股按股/按次、股价轨道档位均可在设置页修改并持久化。
金额精度:分红采用 ×100 取整再除回的两步处理,避免浮点误差;非整数分红如实显示(物理游戏中以零钱支付)。
5.5 更新
收入板模式:每股分红走势已实现基础柱图,可升级为曲线图与多公司对比。
玩家分红自动入账:结算页股东与玩家档案关联后,应用结算时自动累加各玩家现金。
