下载 App
1.7.0 更新公告 | 更远、更长、更快
这次更新大概是这个游戏到目前为止改动最大的一次。
全文包含:更新内容、原理、取舍。
希望与各位玩家、开发者交流经验,共同创造更好的游戏!


一、能看到的变化
1. 铁路网
以前可修的铁路只有一小片,现在386 座城市都能通铁路了(对于经理来说)。
八纵八横的主干线成形,加上各省就近连接,全图一共 750 条区段。地图放大看,站与站之间的连线密密麻麻。
2. 经理
以前经理只会一站一站地开短线,现在它会顺着干线一口气接下去,最长能开出二十多段的跨省线路。
而且它的节奏跟你的赚钱速度挂钩:
- 日赚 800 以下:先补一段短线,稳一点
- 日赚几千:开始接三四段
- 日赚上万:敢一次铺十几段
赚得越多,它越敢下手。
3. 规模递减
这是这次的核心改动。
你开的线路越多,后面买车、开新站、铺新线就越贵(最高能到十几倍)。
但有个关键例外:给已经存在的线路加站,不收这笔涨价。
所以最优解从"到处开花"变成了"把一条线越接越长"。
4. 不支持加速
以前开 2 倍速,游戏里的时间是真的在跑 2 倍快,运算量也跟着翻倍。
现在时间永远是 90 秒一个运营日,倍速只是让收入翻倍。
效果是一样的(钱更多了),但运算量完全不变。开 4 倍速也不会多卡几次(没有说几百条线不卡的意思qaq)。
5. UI
顶部切大区的那一条,以前是竖着排的,占地方。现在改成横向滑动,桌面端配了左右箭头和滚轮。
6. 其它小改动
- 收入随机跳字(每趟车到站飘出来的数字),即时反馈
- 铁路能修也能拆
- 地图缩放的城市消失优化
- 公司等级上限从 800 万提到 2000 万
- 新增两个成就:「跨省联通 16 城」「全国干线 32 城」
- 编年史顺序优化


二、避雷!数值策划太难
坑一:为什么倍速不真的加速时间
最早的实现是真时间加速:dt * speedMul 直接喂给模拟。
问题是运算量线性增长。500 座车站、几百条线路的时候,4 倍速意味着每天要算 4 倍的趟次,相当于原来90s卡一次,加速后90秒卡4次。
改法是把两件事拆开:
时间推进 → 固定 90 秒/日,与倍速无关
收入计算 → 结算时乘倍速系数代价是"视觉上时间没变快"/只是钱涨得快,不是钟走得快。
坑二:多区段、高时延
加了全国路网之后,区段数从 28 条涨到 750 条,26 倍。(此功能仅供自动经理使用,不加区段它不知道怎么开线路);日结最初直接飙到 159ms。结算会卡,而且是每天都卡。
改进:
- 邻接索引:预先建好 segmentsByCity,不再每次遍历全部 750 条找相邻段
- 候选剪枝:经理评估线路时,如果没有任何"已建成但未使用"的区段,直接短路返回,不做后续计算
- 候选数 40 → 12:按距离排序后只评估最近的 12 个
结果:159ms → 61ms。
其中经理决策占 44ms,是最大头。再往下压就得把决策拆成跨帧异步,会让日结和经理的时序变复杂,计划后续更新。
坑三:长线?高收益?
改完路网后,经理还是只开单段线。
数小时的代码梳理,改了几层基础限制:
第 1 层:tryMulti 没命中。 查下来是延长函数要求终点站已经开通。但经理经常是先铺路后开站,所以永远接不上第二段。
第 2 层:转弯限制。 原来限制相邻两段的夹角 ≤62°,防止修出 Z 字形的绕路线。但现实里的干线本来就有 80° 以上的弯,62° 把合理的线路也挡了。放到 85°——仍然能挡住 180° 折返。
第 3 层:大区限制。 要求所有区段在同一个大区里。可长干线本来就是跨省的,改成"目标大区已解锁即可"。
第 4 层:bug。 buyTrain 返回的是列车对象,不是 id,我拿它去 table.concat,直接报 invalid value (table) at index 1。
第 5 层:候选扫描范围。 候选城市对按距离排序,但前 20 个里未必有直连的区段(segmentBetween 返回 nil 就跳过)。
第 6 层:真正的根因是钱不够。
前面全修好之后,我打了个日志,发现链路是能建出来的:
姑苏-梁溪 chain=3
沪渎-禾兴 chain=3但最后一步付款过不去。算笔账:
2 段线 = 2 辆车
车价 4000 × 规模系数 1.3 ≈ 5200/辆
两辆 ≈ 10400 + 建造费 6000 = 16400
而经理第 60 天手里只有 6800 块差了 2.4 倍。
更糟的是它每天能开 10 条线,钱全花在单段线上,永远攒不出第二辆车的钱。
改成每天最多开 1 条之后,现金终于能攒住,多段线才出现。
坑四:规模成本和长线
你可能会想:压制扩张=规模赋税?
不行。 实证发现:
| 车价涨幅 | 其他涨幅 | 首条多段线 | 120 天后最长 | 120 天线路数 |
|---|---|---|---|---|
| 6% | 12% | 68 天 | 8 段 | 38 |
| 统一 6% | 6% | 73 天 | 3 段 | 48 |
| 3% | 12% | 64 天 | 10 段 | 50 |
第二行是重点:两个系数一起降,长线反而更短了。
原因在于这两个系数控制的是互相替代的两种行为:
开新线贵 → 只能靠延长现有线省钱 → 线自然变长
车价也贵 → 多段线要配多辆车 → 长线在经济上不成立
两个都便宜 → 直接开新线就行,不需要延长 → 全是短线所以车价(3%)和新线造价(12%)必须分开。现在 120 天能出现 30 条多段线、最长 10 段。
三、存档兼容
改这么多,老存档能读吗?能。
核心原则:只改显示文本,不动任何 id。
| 数据 | 存的是什么 | 动了吗 |
|---|---|---|
| 已建铁路 | tr_c110000_c130200 这类区段 id | 没动 |
| 车辆 | modelId(df1 / cr400af) | 没动 |
| 城市车站 | c110000 | 没动 |
实测:满载存档载入正常,成就 37/37 保留,编年史 10 章保留。


四、下一版可能做什么
- 经理决策拆成跨帧异步,把日结那 61ms 再压一半
- 长线的"规模效应"——目前长线和短线在收益上是纯线性的,想让长线有额外奖励
- 更多城市故事
有想法欢迎在评论区聊,尤其是碰到经理行为奇怪的时候,把当时的截图和现金数量发给我,更方便定位问题。


版本:1.7.0
欢迎大家讨论!
欢迎大家讨论!

