投资公司发展物语 V2.0 设计文档

投资公司发展物语 V2.0 设计文档

版本说明

  • 本文在「完整版设计」之上,收入 与 Demo 实现一致的约定(网页文字 UI、先落地股票/期货、资金调拨、表驱动可复现结算等)。
  • 文中 「Demo」 指当前优先实现的子集;未标注则视为长期目标/占位
  • 若旧段落与 「0. 实现约定与变更摘要」 冲突,以 0. 节为准。

0. 实现约定与变更摘要

主题 约定
表现形态 网页文字 UI(菜单/日志为主)。
Demo 可结算业务 股票投资、期货交易;其余业务在界面保留 入口/占位,可不实现。
每员工业务频率 每位 空闲 员工,每月可新开 1 单 月结业务;被培训占用等不可兼任者除外。有锁定/占用多个月 的业务,占用期内该员工不视为空闲。
长周期与操作窗口 房地产等长周期在完整版中仍以「总锁定期」为设计主轴;自签约起满 6 个自然月后,方允许 出售项目或更换负责人(与总周期不矛盾:先锁操作权,后仍可持有至到期)。Demo 可暂不实现。
人事动作互斥性 同一月内 可同时进行多项:招聘、写字楼租赁/退租/购买/出售、培训等 不再「五选一」;仅个别系统保留 每月次数上限(如全公司 培训 1 人次/月 见第五节)。
资金模型 开展业务时从 公司现金 向该笔业务 调拨 起始资金,记入 业务账户;业务账户 允许为负,此时 通报玩家,由玩家选择 自公司续资终止业务、按规则清算(见 3.3、第十一节)。
月结业务与经验 月结业务 成功 时,负责员工 经验 +3失败不增加(与「每自然月任职 +1」可并存,见 4.3)。
股票/期货结算 可复现、表驱动(见 附录 A):景气档、市场类型、能力、指导、确定性噪声均由 表 + 固定算法 得出,不依赖非确定性浮点。
数据与配置 个券与期货品种data/investment-sim/stocks-futures.json(10 行业 ×2 股,共 20 支;期货 4 品种基线表 + 默认杠杆),与 9.3 / 9.4 / 附录 C 一致。
声誉(Demo) 声誉主要影响 大事件/随机(小)事件池/权重(高声誉/低声誉 不同事件集)。贷款额度等经济效果:文案可提及,数值暂不实装(与贷款系统一并后续开放)。

一、游戏概览与核心目标

项目 说明
时间跨度 1990 年 1 月 – 2020 年 12 月,共 372 个回合(每月 1 回合)
胜利条件 2020 年 12 月结束后,公司总资金即为最终分数(越高越好)
失败条件 公司 现金 无法完成必须支付项时游戏结束(如工资、租金/物业税等);业务账户透支由玩家处理,规则见 3.3。
初始状态 1990 年 1 月,资金 80 万,声誉 50,小型办公室(容量 5),初级员工 3 人

二、写字楼与员工容量

公司初始拥有一间小型办公室,基础员工容量为 5 人。玩家必须通过租赁或购买写字楼来提升员工上限。

2.1 写字楼操作

  • 租赁不占用「唯一人事槽位」;选择租赁某一等级办公空间,支付月租金(具体扣费时点见第十一节)。
  • 购买:2010 年后解锁,一次性投入大笔资金,永久获得容量且无月租金,但需支付年物业税(购买价的 1% / 年,扣费月份在实现中固定,例如每年 1 月)。
  • 叠加规则:可同时拥有多个办公空间,总容量为所有已拥有写字楼容量之和。
  • 退租与出售:租赁写字楼可退租(返还部分押金),购买写字楼可按折旧价出售。若退租后员工总数超过剩余容量,必须立即裁员(支付遣散费)。

2.2 写字楼等级参数

等级 增加容量 月租金 购买价格 年物业税 解锁条件
小型办公室 +5 人 0.8 万 初始
标准写字楼 +20 人 3 万 300 万 3 万 1995 年
商务中心 +50 人 8 万 800 万 8 万 2005 年
企业总部 +100 人 20 万 2000 万 20 万 2010 年

注:阶段「员工总上限」已取消,人数上限完全由写字楼容量决定;可招聘的职级仍受年代阶段限制(见 4.1 节)。


三、员工属性、薪酬与业务资金

3.1 员工属性

属性 说明
能力(1~10) 影响业务结算(见附录 A 表驱动修正)。
忠诚度(1~10) 低于 3 可能离职;高于 8 可减少被挖角概率;影响指导是否听令等(可接表,Demo 可简化)。
经验 见 4.3:用于晋升的 累计月数 + 月结成功时的 +3 规则。

3.2 员工层级与月薪

层级 基础月薪 能力加成 月薪公式(单位:万)
初级员工 0.3 万 能力 × 0.05 万 (0.3 + 能力 \times 0.05)
中级员工 0.8 万 能力 × 0.1 万 (0.8 + 能力 \times 0.1)
高级员工 2.0 万 能力 × 0.2 万 (2.0 + 能力 \times 0.2)

每月月初自动从 公司现金 扣除本员工应发工资;不足则视规则立即结束或进入破产流程(与 Demo 实现一致即可)。

3.3 公司现金与业务账户(调拨制)

  • 公司现金:工资、租买写字楼费用、招聘费、培训费、以及玩家确认的向某笔业务续资等,优先从公司现金出账
  • 每笔业务有独立 业务账户余额;玩家开局投入的金额为 起始调拨款,从公司现金划转到该业务账户。
  • 业务账户允许为负:表示该笔已透支/亏损超过调拨款。此时 须提示玩家 选择:
    • 续资:从公司现金划款填至 约定阈值(至少填平至 ≥ 0,或实装为保证金线);或
    • 终止:按清算规则结清该笔,亏损计入公司/声誉,并释放负责人。
  • 月结时 收益/亏损 先记在该业务账户,再按规则划转回公司或触发透支流程(附录 A 的「结转到公司」一步写死算法)。

四、阶段限制与招聘晋升

4.1 招聘权限

阶段 时间范围 可招聘层级
初创期 1990 ~ 1995 仅初级员工
成长期 1996 ~ 2005 初级、中级员工
扩张期 2006 ~ 2015 初级、中级、高级员工
成熟期 2016 ~ 2020 全层级(可组建事业组)

4.2 晋升条件

晋升路径 累计经验要求 能力要求
初级 → 中级 24 个月 ≥ 5
中级 → 高级 60 个月 ≥ 7

晋升不消耗「人事行动配额」(原「一次人事一次」已废弃为唯一槽位);满足条件后确认即可

4.3 经验增长、招聘与离职

  • 自然任职:每自然月,每位在职员工 累计经验 +1(与晋升表中的「月数」对齐)。
  • 月结业务:该笔业务 成功 时,负责该业务的员工 在当月末 再 +3 经验;失败则 +0(不累加 3)。
  • 成功判定(Demo/月结):该笔月结业务 净收益 > 0 视为成功(单位与现金一致,四舍五入规则在实现中固定)。若需「持平算成功」可改实现,但须唯一。
  • 招聘:支付固定资金(初级 5 万、中级 8 万、高级 15 万),可与其它人事同月;获得随机能力/忠诚度(随机部分亦应用 可复现 RNG,与 附录 A.1 同源)。
  • 离职:忠诚度 < 3 且闲置 ≥ 2 个月时,每月 5% 概率离职;若正负责未结束业务,离职将导致业务按失败/清算处理。

五、培训系统

  • 消耗资金(金额 = 培训后目标能力值 × 1 万)+ 同月不冲突即可;全公司 每月限 1 人次 培训。
  • 效果:指定员工能力 +1。
  • 限制:培训当月该员工不能负责任何业务,不能成为指导对象。

六、玩家指导系统

6.1 指导规则

  • 触发:在 本月业务布署完成 后,可对本月的 某一笔 业务进行一次指导(不占用「五选一」人事槽位,全公司每月共 1 次机会)。
  • 限制:若该员工本月已培训,则不能对其业务进行指导。
  • 低忠诚度可不执行、反向效果等,可用表驱动(Demo 可简化为恒生效以省工)。

6.2 指导选项

业务类型 指导策略 效果描述(表驱动见附录 A)
股票投资 保守 / 平衡 / 激进 查表调整 期期望修正波动档
期货交易 杠杆倍数 1x / 2x / 3x 有效收益率%净损益同向倍数放大(与附录 A 一致)
房地产项目等 (占位) 后续版本补表

七、业务行动列表

业务 所需层级 占用时间 投入资金范围 结算周期 Demo
股票投资 初级+ 1 个月 1 ~ 100 万 月结 实装
期货交易 初级+ 1 个月 1 ~ 50 万 月结 实装
房地产项目 中级+ 36 个月 30 万起 月结(满 6 个月后可卖/换人) 入口
投资初创公司 中级+ 36 个月 10 ~ 50 万 到期一次性 入口
并购本土公司 高级 3 个月 视目标而定 完成时 入口
海外投资 高级 1 个月 50 ~ 500 万 月结 入口
跨国并购 高级 6 个月 巨额 完成时 入口
  • 长周期项目自签约起第 6 个自然月月初起,方允许卖出项目更换负责人;此前不可(Demo 可不做)。
  • 房地产/初创 的其它细则仍以原文为主;股票/期货唯一数值源附录 A

八、事业组系统(2016 年解锁)

  • 2016 年后,在至少有 1 名高级员工等条件下可组建。
  • 事业组每月可执行一条短期业务线(设计意图与单人并行;与「每空闲员工一单」的叠加关系在实装中写清,Demo 可后置)。
  • 团队加成公式(原文保留):
团队加成 = 组内所有成员能力平均值 × 组员总数 × 3%
最终收益 = 基础收益 × (1 + 团队加成)

九、行情与市场系统

9.1 行业景气度

每月初显示五个行业的当前景气度及下月预测(存在误差,预测可独立表驱动,见实现)。

图标 景气度 编码(附录 A 用)
🔥 繁荣 0
📈 向好 1
➡️ 平稳 2
📉 低迷 3
💀 冰点 4

9.2 行业列表(宏观行情,与附录 A 的景气 c

用于 UI 展示与「大盘」类结算线(B_stock / B_fut 默认可视为对应该层的综合读数):

  • 股市综合(对应 股票投资默认宏观线,除非选用「个股+行业 β」后文扩展)
  • 大宗商品(对应 期货综合品种,见 9.4 / 附录 C)
  • 房地产、互联网/科技、海外市场等:Demo 可只展示景气,或与大事件联动;未实装单券前不强制参与结算。

9.3 双分层:宏观线(A)与股票行业(B)

为避免「五个景气图标」与「二十只股票行业」混成同一套 ID,作如下分工:

分层 含义 典型用途
A. 宏观/行情线 2~5 条 大盘情绪(如股市综合、大宗综合、地产温度…),每月有景气档 c∈0..4 驱动附录 A 的 B_stock[c] / B_fut[c] 或行业加成前的基准
B. 股票行业 固定 10 个行业标签,每行业 2 支 股票,全库共 20 支 单券/分散投资、事件定向、后续 sector_beta 与「行业主题」大事件

行业列表(B 层,与数据文件一致)

sectorId 行业
fin 金融
re 地产与基建
cons 消费
tech 科技与通信
health 医疗与生命
ind 工业与制造
ene 能源与材料
trans 交通运输
util 公用与环保
agri 农业与食品原料

个股代码、名称与期货品种参数见根目录数据文件:

data/investment-sim/stocks-futures.json

9.4 大宗期货的规范化(品种与基线表)

  • 宏观大宗景气仍用一条 c(与第九节·大宗展示一致,「一个月一个档」易读)。
  • 玩家开仓时可选 品种 variant_id:在附录 A.2 的 B_fut[c] 上,用 B_fut_variant[variant_id][c](万分比,含义同附录 A)替代单行 B_fut
  • 建议品种composite(大宗综合,与当前附录 A B_fut 表一致)、energy(能源)、metal(金属)、agri(农产品)—— 具体数值以 JSON 配置 为准,便于热更。
  • 指导:期货侧仍以 杠杆 L 为主;若未来增加「套保/减仓」等,单独G_fut 表,勿与 G_stock 混名。
  • 与股票行业ene / 能源股可与 energy 期货共享叙事(大事件同向),数值不强制同表,避免股票与期货像复制粘贴。

十、声誉、大事件与随机事件

10.1 声誉值

  • 初始 50,范围 0 ~ 100。
  • 完整版中可影响并购、上市、贷款利息与额度 等。
  • 实现优先级随机事件/大事件池与权重随声誉分档变化(高/低声誉不同池);贷款额度在贷款系统实装前仅叙事先不实绑数值。

10.2 大事件

定义:影响面广、可 一次性持续多个月 的规则/叙事事件(金融危机、政策、战争外溢、行业剧震等)。与「小随机」区分:不保证每月发生

  • 来源:① 日程表(到指定 year-month 进入窗口或必触发一次);② 低概率从「大事件池」按权重抽取(p 小,独立种子,见下)。
  • 与景气:可修改 某宏观线c、或给 sectorId 附加 贝塔/一次性修正;需在实现里唯一写清是否叠加、持续几月。
  • 可复现H_major = uint32( mix( S, t, "major", slot ) )slot 为当月第几个大事件槽(通常 0);不得用非确定性浮点。
  • 与随机事件同月:默认 允许「本月既有大事件判定又有小事件」;若需简化可规定「大事件月不抽小事件」—— 实现中二选一后写死。

10.3 随机事件(小)

  • 频率每月最多判定 1 次(0 或 1 起事件);需扩展时再开「第二次」的开关与上限。
  • 内容:偏局部——员工生病、小黑天鹅、小政策、小事故、涨薪舆论等。
  • 分池高声誉低声誉 使用不同事件池/权重;中性段可并表或第三池。
  • 可复现H_minor = uint32( mix( S, t, "minor", 0 ) );与 附录 A.1 使用同一 mix 族算法,不同 tag 即可。
  • 可选项event_rollevent_id 随存档记录,便于复盘。

十一、月度流程(与实现一致)

每回合(每月)建议固定顺序如下(结算唯一顺序,避免与「先人事后结息」等歧义):

  1. 月初扣款:员工工资、写字楼月租、(若本月初为年物业税扣费日则扣税)。若公司现金 不足以支付必须项游戏结束(或进入破产,二选一,实现固定)。
  2. 查看行情:显示五行业本月实际景气,以及下月预测(展示用;结算以本月实际为准)。
  3. 大事件(10.2):更新/结算 已有持续中的大 effect;做日程或低概率新触发(本月可无)。
  4. 业务布署每位空闲且可派的员工 可新开 0 或 1 单 月结业务。
    • 从公司现金调拨本金至该单 业务账户;选择是否对该单使用本月唯一一次指导并选项。
    • 股票投资可绑定 stockId(见 data/investment-sim/stocks-futures.json);期货需选 futuresVariantId.
  5. 人事与行政可多项):招聘、培训、晋升确认、事业组、写字楼租购退等;扣费自公司现金。
  6. 月末结算
    • 股票、期货附录 A + 品种/个券表驱动逐单算收益率与划转;
    • 若有业务账户 < 0弹玩家决策(续资 / 终止清算);
    • 月结成功/失败 后更新 4.3 经验。
  7. 随机事件(小)(10.3):从声誉分池抽取 0~1 次并应用。
  8. 下月 或 2020-12 终局计分。

调拨与示例:原「试玩」中 招聘 -5 万 与 投资 -20 万 的先后,以「业务调拨在业务布署时立即从公司划走」为准;不得在现金不足时 silently 允许透支公司(透支仅发生在业务子账户)。


十二、试玩示例(1990 年 1 月,表驱动可复现)

初始状态

  • 公司现金:80 万
  • 声誉:50
  • 小型办公室(容量 5)
  • 员工:
    • 张三(能 5 忠 6 月薪 0.55 万)
    • 李四(能 3 忠 5 月薪 0.45 万)
    • 王五(能 4 忠 7 月薪 0.5 万)

月初扣款

工资 1.5 万 + 租 0.8 万 → 公司现金 77.7 万

行情(本月实际,用于查表)

  • 股市:📈 向好(编码 1)
  • 期货等略

业务布署

  • 股票投资:自公司调拨 20 万 至该单;指派张三。
  • 指导(全公司 1 次):该单选「激进」→ 见附录 A G_stock 行。
  • 使用固定 game_seed附录 A.1确定性 月收益率,例如得 +14%;则该单本月末 业务侧收回 22.8 万 等价(以公式为准),再划回公司。

人事(同月可并行)

  • 招聘初级 -5 万,获得赵六。

经验

  • 若该单净收益 > 0,张三 经验 +3(且每人自然月 +1 在月序末结算)。

与旧示例数字的关系

  • 「+14%」在完整规则下须等于 附录 A 的查表+噪声结果;若旧文数字与表不一致,以表为准(便于 Debug)。

十三、数值平衡建议

  • 初期压力:招聘/培训与调拨并存时,更应注意公司现金对工资与租的覆盖。
  • 中期挑战:早扩写字楼,否则有职级也招不进。
  • 表驱动调参:优先改 附录 AB_stock/B_futNOISE 表,少改代码。

附录 A:股票 / 期货可复现表驱动结算

A.1 随机子种子与噪声表(可复现)

  • 主种子 S:正整数,开局可选或从存档读。
  • t、第 i当月内新开业务(i=0,1,…),业务类型 kind ∈ {stock, fut}。定义:
    • H = uint32( mix(S, t, i, kind, tag) )
    • mix 为任意固定的确定性混合(如 32 位 FNV-1a、SplitMix、或 H = S * 0x9E3779B9U ^ (t+1) * 0x85EBCA6BU ^ (i+1) * 0xC2B2AE3DU 再折叠)。实现中一旦选定不得改,否则存档位不同。
  • 取噪声noise_bp = NOISE[ H % 256 ],其中 NOISE[k]固定 256 个整数,单位为 0.01 百分点(即 1 = 0.01%),范围如 [-250, +250] 对应 [-2.5%, +2.5%]
  • 本文 示例 NOISE[0…255] 可用脚本生成,但发行版固化为常量数组(不可每局随机生成表)。

A.2 输入与表

  • 景气编码 c ∈ {0,1,2,3,4}(与第九节表一致,以本月实际行情为准)。
  • 能力 a ∈ [1,10]
  • 市场类型:股票用 B_stock;期货用 B_fut能力修正 共用 A指导G_stock杠杆 L(期货)。

B_stock[c] — 基线期望收益率,单位百分点/100(即 500 = 5.00%;实现可用万分比存储)。

c 景气 B_stock(万分比,表示 %×100)
0 繁荣 1200
1 向好 500
2 平稳 100
3 低迷 -300
4 冰点 -800

B_fut[c] — 基线期望略更波动(万分比):

c 景气 B_fut(万分比)
0 繁荣 1500
1 向好 600
2 平稳 0
3 低迷 -400
4 冰点 -1000

A[a] — 能力加算(万分比;线性对称示例,可后调):

a 1 2 3 4 5 6 7 8 9 10
A[a] -200 -150 -100 -50 0 50 100 150 200 250

G_stock[mode] — 股票指导mode:0=保守,1=平衡,2=激进;万分比)

mode 名称 期望加算 noise 系数的额外乘子(可简单取 0/100/200 表示 0/1.0/2.0)
0 保守 -200 0(噪声×0.8 可选)
1 平衡 0 100
2 激进 400 200

(Demo 可只用「期望加算」列,噪声倍率 列简化忽略,全部噪声用同一 NOISE 以省表。)

期货杠杆 L ∈ {1,2,3}:对中间结果万分比在合成后乘以 L见 A.3,即「同比例放大」)。

A.3 合成公式(与实现逐字一致)

设所有中间量用整数万分比 P 表示收益率 P/10000(例如 500=5%)。

  1. 股票大盘,未选个券):
    P = B_stock[c] + A[a] + G_stock[mode].期望加算 + noise_bp
  2. 股票指定 stockId,可选实装):在 1. 的 P 上再叠加个券/行业额外万分比:
    P = P + betaExtraBpbetaExtraBp 见 JSON;默认 0 则与 1. 相同)。
  3. 期货
    • 未指定品种时:B = B_fut[c]B_fut 上表)。
    • 指定 futuresVariantId 时:Bdata/investment-sim/stocks-futures.jsonfutures.variants[id].B_fut_bp_by_c[c](万分比,下标 c=0..4 对应景气 繁荣→冰点;composite 与上表一致)。
    • P0 = B + A[a] + noise_bp;期货指导以杠杆为主(若未来加 G_fut 再叠加进 P0)。
    • P = P0 * LL∈{1,2,3})。
  4. 本单月净现金流(万元,舍入规则实现固定):

[ \text{profit_wan} = \text{round}\Big( \text{alloc_wan} \times \frac{P}{10000} \Big) ]

其中 alloc_wan 为调拨到该单的起始万元本金。

  1. 业务账户 更新:
    balance = balance + profit_wanbalance 初值为 -alloc_wan 或等价记账方式;实现须只选一种,但可复现要求下 profit_wan 计算唯一

推荐易解释的一种:调拨时 公司 -= alloc,业务 += alloc;月结时 业务 += profit_wan;若全部划回公司,则 公司 += 业务全部余额,业务=0。若允许业务账户表示垫资,则月结profit_wan 加在业务上, balance < 0 弹窗

  1. 成功判定profit_wan &gt; 0 则该笔 成功(4.3)。

说明:上述常数为** v0.1 默认,可仅改表不调代码;noise_bp 使每月略有摆动,同 seed 同 t 同 i 同 kind** 必得同 P。试玩中「+14%」应对应固定 seed 下某组 (c=1,a=5,mode=2)P=1400 左右,若偏差请调 NOISE[ ? ] 单点或调 B_stock[1]


附录 B:与仅文档旧版(初稿)的主要差异

  • 人事 从五选一 改为 同月可多项
  • 业务 从全公司一动作 改为 每空闲员工每月一单(+ 多个月占用时不可重复派)。
  • 资金 从单一公司账 扩为 公司现金 + 业务账户透支/续资/终止流程。
  • 经验 增加 月结成功 +3 / 失败 +0(与「自然月+1」并存)。
  • 股票/期货可复现表驱动(附录 A)。
  • 长周期 增加 6 个自然月后 可卖/换人(与 36 月总期并存;Demo 可不做)。
  • 声誉贷款:完整版有额度;Demo 仅事件分池。
  • 新增 大事件 / 随机(小)事件 分层、9.3 双分层 行业与 期货品种 表(见 9.4、附录 C)。

附录 C:外部数据文件 stocks-futures.json 说明

  • 路径(相对仓库根):data/investment-sim/stocks-futures.json
  • 内容
    • schemaVersion:数据格式版本。
    • sectors:10 个 sectorIdfinagri)与中文名。
    • stocks20 条;每行业 2 支。字段含 idSTK0001…)、nameshortNamesectorIdlistingYearMonth虚构上市窗口,便于做时间线)、betaExtraBp万分比,叠加在 B_stock 结果上;默认多为 0)、isFictional 等。
    • futuresdefaultVariantIdleverageOptionsvariants — 各品种 B_fut_bp_by_c 为长度 5 的数组,下标 0=繁荣…4=冰点,与第九节/附录 A 的 c 一致。composite 必须 与附录 A 当前 B_fut 行同值。
  • 热更:调平衡时优先改本 JSON 与附录 A 公共表,避免硬编码散落于脚本。
  • 可复现:基线只读表;noise 仍由 附录 A.1 决定。

Latest Posts

Introducing some new layouts to Bulma Clean Theme
Introducing some new layouts to Bulma Clean Theme

I’ve been meaning to write about some of the new features I have been rolling out to my Jekyll theme, Bulma Clean Theme, for a while but I have only just managed to push the update for the landing page layout last weekend. This article provides some of the thinking behind the updates, as well as a brief introduction to how to get started.

Getting started with Bulma Clean Theme for Jekyll
Getting started with Bulma Clean Theme for Jekyll

I have made a theme for Jekyll which is based on the Bulma frontend framework. It might look familiar, because I am also using it for this site. If you like the look of this theme then I thought I would write a little blog post about how to use it for your own site and how you can use it with GitHub Pages.

Why use a static site generator
Why use a static site generator

There are many ways to make a website and many different CMS platforms you can use, such as WordPress and Joomla, as well as site builder tools that offer you drag and drop interfaces, but what about static site generators?