在线联机原型全集:第 25 章 市场系统
市场系统(Market System)
- 类别:实时经济模拟 + 自由市场体系 + 资源撮合原型
- 目标:验证自由经济体系下的玩家交易撮合、价格浮动、供需反馈与通货膨胀控制机制。
- 原型代号:
proto-025-market-sim - 依赖模块:
proto-012-team-domination,proto-018-city-async-econ,proto-009-coop-minesweeper - 推荐语言栈:Go / Java / Rust / TypeScript
- 协议栈:WebSocket + RESTful API + EventBus (Redis Pub/Sub / NATS)
一、系统概述(Overview)
市场系统(Market System)是大型 SLG 与 MMO 游戏中核心的“自由经济引擎”。 它连接玩家的资源产出端(生产者)与资源消耗端(消费者),通过一套撮合与价格浮动机制,形成自发性的价格调节与财富流动。
目标是模拟真实市场中的:
- 供需关系(Supply–Demand Relation);
- 价格弹性(Price Elasticity);
- 套利行为(Arbitrage Behavior);
- 通货膨胀与通货紧缩(Inflation / Deflation);
- 货币与信用体系(Currency & Credit System)。
同时确保在游戏中具备:
- 平衡性(不被个体垄断);
- 激励性(鼓励生产与交易);
- 可控性(后台可监控与干预);
- 模拟性(呈现经济波动与趋势)。
二、核心结构(Core Architecture)
市场系统由四层结构组成:
| 层级 | 模块名 | 职责 | 技术实现 |
|---|---|---|---|
| ① | 市场入口层(Market Gateway) | 负责玩家访问、挂单、撤单、成交请求 | WebSocket + REST 接口 |
| ② | 撮合引擎层(Matching Engine) | 按时间与价格优先撮合交易 | 内存撮合队列 + 优先队列(Heap) |
| ③ | 经济调控层(Economic Controller) | 动态调整价格、税率、流通量 | Job Scheduler + Rule Engine |
| ④ | 货币系统层(Monetary System) | 管理金币、代币、税收、通胀模型 | 数据库存储 + Redis 缓存 |
2.1 模块结构示意
graph TD
A[Player Clients] -->|WebSocket/REST| B[Market Gateway]
B --> C[Matching Engine]
C --> D[Order Book]
C --> E[Trade Records]
D --> F[Price Index Service]
F --> G[Economic Controller]
G --> H[Currency System]
H --> I[Bank & Taxation Module]
G -->|Publish| J[Market Events Bus]
J --> K[Analytics & Monitoring Dashboard]
三、经济单位定义(Economic Entities)
3.1 货币(Currency)
type Currency struct {
ID int64
Name string
Type string // Gold, Token, Credit
ExchangeRate float64
InflationRate float64
}
支持多币种模型,例如金币(Gold)、钻石(Gem)、信用点(Credit)。 ExchangeRate 与 InflationRate 可由经济控制器定时调整。
3.2 商品(Commodity)
type Commodity struct {
ID int64
Name string
BasePrice float64
CurrentPrice float64
Stock int64
Category string
}
典型商品:木材、石料、铁矿、粮食、装备、宝石等。
BasePrice代表系统基准价;CurrentPrice由市场供需浮动。
3.3 订单(Order)
type Order struct {
ID int64
PlayerID int64
ItemID int64
Price float64
Quantity int64
Direction string // BUY / SELL
Status string // OPEN / PARTIAL / FILLED / CANCELLED
Timestamp time.Time
}
撮合引擎按价格优先、时间优先原则执行撮合。
四、撮合机制(Matching Mechanism)
4.1 基本原理
-
买单(BUY)与卖单(SELL)进入订单簿;
-
匹配条件:
buy.Price >= sell.Price; -
成交价取中间价或最先下单价;
-
撮合成功后:
- 扣减买方货币;
- 增加卖方货币;
- 转移商品;
- 记录交易日志。
4.2 撮合引擎伪代码
func MatchOrders(buyOrders, sellOrders PriorityQueue) {
for !buyOrders.Empty() && !sellOrders.Empty() {
buy := buyOrders.Peek()
sell := sellOrders.Peek()
if buy.Price < sell.Price {
break
}
qty := min(buy.Quantity, sell.Quantity)
price := (buy.Price + sell.Price) / 2
ExecuteTrade(buy, sell, price, qty)
buy.Quantity -= qty
sell.Quantity -= qty
if buy.Quantity == 0 {
buyOrders.Pop()
}
if sell.Quantity == 0 {
sellOrders.Pop()
}
}
}
五、价格与供需模型(Price & Supply-Demand Model)
价格浮动依据以下逻辑:
[ P_{t+1} = P_t \times (1 + \alpha \cdot \frac{D_t - S_t}{S_t}) ]
- (P_t):当前价格;
- (S_t):供应量;
- (D_t):需求量;
- (\alpha):调节系数(通常为 0.05–0.2)。
系统通过平滑系数 α 控制市场波动幅度。
5.1 通胀控制(Inflation Control)
-
当货币总量持续增长时:
- 自动提高交易税;
- 系统NPC发起逆向收购以吸收流通量;
- 调整奖励产出比;
- 定期执行货币销毁(Burn)。
5.2 价格指数(Price Index)
系统维护多维度指数:
| 指数类型 | 定义 | 作用 |
|---|---|---|
| CPI(Consumer Price Index) | 玩家常用消费品价格加权平均 | 衡量生活成本变化 |
| PPI(Producer Price Index) | 生产材料价格加权平均 | 衡量生产端压力 |
| GDP(Gross Domestic Product) | 产出总价值 | 表示游戏经济活跃度 |
通过时间序列存储(ClickHouse / TimescaleDB)实现历史可视化。
六、税收与手续费系统(Tax & Fee System)
| 项目 | 税率 | 说明 |
|---|---|---|
| 成交税(Trade Tax) | 2%–5% | 双方按成交金额比例缴纳 |
| 过户费(Transfer Fee) | 1% | 物品转移时收取 |
| 系统佣金(System Fee) | 固定0.5% | 保证系统资金平衡 |
所有税费可配置,并动态根据经济状态调整。
七、玩家行为与市场反馈(Player Behavior & Feedback)
7.1 行为类型
| 行为 | 示例 | 对经济影响 |
|---|---|---|
| 投机(Speculation) | 囤货等待涨价 | 放大波动性 |
| 套利(Arbitrage) | 跨区价差买卖 | 平滑价格差异 |
| 产销平衡(Production–Consumption) | 矿工产出 → 工坊消耗 | 稳定物资流通 |
| 黑市交易(Black Market) | 逃避税收 | 破坏公平性 |
系统需设立监控阈值与异常警报。
八、系统调控与AI干预(Economic AI Controller)
AI 控制器可在后台执行动态调控:
| 调控类型 | 示例 | 触发条件 |
|---|---|---|
| 价格干预 | 人为调整物品基价 | 通胀率 > 15% |
| 货币回收 | 系统活动消耗金币 | 流通货币 > 阈值 |
| 供应刺激 | 提升掉落率 | 某类物资短缺 |
| 市场冷却 | 增加税率 | 投机行为过热 |
AI 通过**强化学习(RL)或基于规则(Rule Engine)**实现。
九、交易日志与审计(Trade Logs & Auditing)
所有成交记录必须可追溯:
type TradeLog struct {
TradeID int64
BuyerID int64
SellerID int64
ItemID int64
Quantity int64
Price float64
Timestamp time.Time
Tax float64
}
支持:
- 异常价格警报;
- 玩家盈利统计;
- GM 审计追踪;
- 时序趋势分析。
十、界面与交互(UI & UX)
10.1 玩家端交互流程
sequenceDiagram
Player->>MarketUI: 打开市场
MarketUI->>Gateway: 请求最新行情
Gateway->>MatchingEngine: 查询订单簿
MatchingEngine->>Gateway: 返回买卖盘
Player->>MarketUI: 下单(买/卖)
MarketUI->>Gateway: 提交订单
Gateway->>MatchingEngine: 撮合订单
MatchingEngine-->>Player: 成交通知
Player->>Wallet: 更新余额
10.2 市场界面设计要点
- 实时K线(K-Line Chart)
- 深度图(Order Depth)
- 价格趋势(Trend Graph)
- 玩家持仓(Portfolio)
- 历史成交记录(History)
十一、经济稳定机制(Economic Stability Mechanisms)
-
反通胀手段
- 消耗型活动(活动商店、拍卖行、锻造费用)
- 动态税收策略
- 定期抽税或财富上限机制
-
反通缩手段
- 新货币发放(任务奖励、活动发放)
- 提高掉落率与产出效率
-
系统审计与风险评估
- 定期计算货币总量与商品库存
- 生成季度经济报告(Economic Report)
十二、并发与性能(Concurrency & Performance)
| 场景 | 挑战 | 技术方案 |
|---|---|---|
| 高并发挂单 | 写入热点 | 分区订单簿 + Redis Stream |
| 高频撮合 | 实时计算压力 | Goroutine + 内存撮合引擎 |
| 广播价格变化 | 消息风暴 | EventBus + 带采样广播 |
| 异步结算 | 一致性问题 | Saga Pattern + Outbox Table |
十三、持久化与数据一致性(Persistence & Consistency)
采用CQRS + Event Sourcing模式:
- 写入侧(Command Side):下单、撤单、成交 → EventLog;
- 读取侧(Query Side):按需重建订单簿;
- 异步投递:Kafka / NATS;
- 存储:MySQL(结构化) + Redis(缓存) + ClickHouse(分析)。
十四、经济分析与可视化(Analytics & Visualization)
- 实时交易流量监控(TPS)
- CPI / PPI 曲线可视化
- 财富分布图(Gini 系数计算)
- 行为热力图(Heatmap)
- 经济健康度评分(EHS – Economic Health Score)
十五、扩展与跨服市场(Cross-Server Marketplace)
| 模式 | 描述 | 风险 |
|---|---|---|
| 全局共享市场 | 所有区服共用 | 通货加速 |
| 区域市场(Regional) | 各服务器独立 | 缓冲通胀 |
| 联盟市场(Alliance Market) | 公会/联盟限定 | 可控性高 |
| 黑市(Black Exchange) | 跨服交易 | 高风险高收益 |
支持分层市场结构,以实现经济生态的多样性与稳定性。
十六、总结(Conclusion)
市场系统是整个游戏生态的心脏(Heart of Economy)。 它不仅决定了资源流动与财富差距,还影响了玩家行为、社交结构与战争节奏。
在自由经济的设计中,平衡、反馈、调控三者缺一不可:
- 平衡:让供需自然调节;
- 反馈:让价格成为信号;
- 调控:让系统维持秩序。
最终目标是构建一个:
“自组织、自平衡、自演化”的虚拟经济宇宙。