🌻 设计文档小农场 · 野花笔记
← 全部文档/食街/玩法

核心玩法

草案 #策划#核心玩法#SLG#新项目#模拟经营 docs/食街/核心玩法.md
这份是什么

《食街》的唯一规则源头。 改任何东西之前先读这一份。 一句话:你从一个小吃摊开始,最后经营出一条街、一座食都。

项目目录是 docs/食街/,游戏名《食街》(工作名,可改),口语里就叫"摆摊"。 这是仓库的第五个产品线,和 小农场 / 野花笔记 / 夜市 / 一帖 并列,题材、玩法、画风都不共享。

和《夜市》的区别见 1.2——这两个最容易撞。

本文只有第四节是实测的,其余是初稿。没有原型、没有经济模拟器。


一、一句话定位#

你从一个小吃摊开始,把摊子一个个摆进街里,最后经营出一条街、一座食都。

三个词:选址、配比、长线。

1.1 为什么这次要 SLG#

增量游戏玩到后期都会撞同一堵墙:曲线是对的,但玩家没有"我做了一个决定"的感觉。 点田、点客人、买设施,全都是"赚够了就买下一个",决策的形状是直线。

SLG 补的正好是这个:版图(地方有限)、配比(东西不够分)、长线(几天才成型)。 它的爽点不是"我变强了",是"我这个地方,是我摆出来的"。

1.2 和《夜市》的区别(最容易撞的一个)#

夜市 食街
你管几个 一个摊 一条街 → 几条街 → 一座食都
核心操作 点客人、递餐 摆摊、升级、选菜
时间结构 实时挂机,随时看 几小时上线一次,每次做 1~3 个决定
深度在哪 流量撮合(λ 和 μ 对不上就堵) 稀缺资源的分配(摊子不够分)
画面主体 一条队列 一条街上的人流
画风 深蓝夜 + 暖黄灯笼 日间市集,原木 + 条纹布棚
两条必须守住的差别

① 食街不点客人。 客人在街上自己走、自己买,玩家不伺候队列。 ② 食街是白天。 夜市已经占了"暖夜灯色",这一套再做成夜色就是自己撞自己。


二、先说结论:SLG 要哪一半#

这一节是本文的重心。没想清楚就往下做,做出来的一定是"江南百景图 + 一个讨人厌的掠夺系统"。

2.1 四个项目都守的三条铁律,SLG 里哪条最容易破#

四条产品线共用同三条:零失败 / 不需要盯着屏幕 / 每次操作必有反馈。

把 SLG 拆开看,它和三条约之间的关系完全不对称:

SLG 的部件 对应哪条铁律 冲突吗
版图扩张(占格子) 不需要盯着 不冲突——格子是慢慢解锁的
建造队列(等时间) 不需要盯着 不冲突——SLG 本来就是这样
兵种 / 武将配比 每次操作有反馈 不冲突——摆下去就出数
长线养成(几个月) 零失败 不冲突
PvP 掠夺 零失败 剧烈冲突——被抢就是损失
战争在线焦虑(怕被偷袭) 不需要盯着 剧烈冲突——它逼你上线
付费买战力 三条都碰 不讨论

结论:SLG 的结构(版图 + 队列 + 配比 + 长线)一样都不用砍,只有"掠夺"和"怕被偷袭"不行。

而这两样,恰好是 SLG 里唯一会产生损失的部分。

所以这不是"要不要做 SLG"的问题

是"SLG 的损失,你打算用什么替代"的问题。 用"什么都不损失"当然最省事——但那就退化成《江南百景图》了,没有"和别人比"的张力。

2.2 掠夺的替代品:三种不产生损失的对抗#

按"零失败"筛一遍,只剩三种形状:

形状 怎么做 赢的拿什么 输的丢什么
影子评比 系统给一个主题分数线,你拿自己最好的摊子去够 限定菜谱 / 摊主 / 装饰 什么都不丢,只是这次没拿到
客场摆摊 去别人街区的空位摆一晚 分成 主场完全不受影响
同业公会 一起完成街区改造目标,共享导流 全公会加成 无惩罚,只是慢

三者的共同点:对抗存在,但代价是"少赚"而不是"被拿走"。

为什么"影子评比"要压过"真人排行榜"

真排行榜一旦有排名,玩家就会去优化排名而不是去经营。 而优化排名的最优解永远是"抄前一名"——这恰好是 SLG 最难看的那种玩法。 影子评比让"比"存在(有仪式感、有目标),但对手不会因为你的存在而变差。

2.3 砍掉掠夺之后,SLG 还剩下什么#

剩下三样,而且都是值钱的三样:

  1. 版图感 —— 你有一张会变大的地图,上面每一格是你亲手摆的
  2. 配比焦虑 —— 摊子永远不够分,你必须决定"哪条街先富"
  3. 长线成型 —— 三天后这条街有名字了,因为它全卖甜的
但别指望"单机布阵"能撑起深度

第 4 节会实测证明:布阵的最优解,贪心算法就能拿到 99.7%。 它是表达系统,不是优化系统。把深度押在"玩家算得比我好"上是押错了。


三、三个尺度:摊 / 街 / 城#

整局游戏只有三个东西,每个尺度上只有一个决定。

尺度 单位 你决定什么 频率
摊 一个摊子 卖什么、升到几级、谁来看摊 每次上线都动
街 一条街的 7 个格子 哪个摊摆在哪个格子、和谁挨着 布局定型后很久不动
城 若干条街 解锁哪条街、凑什么城市名片 几小时一次

3.1 摊子#

摊子有四样东西:

属性 含义 怎么变
口味 甜 / 咸 / 辣 / 鲜 换菜会换口味,口味决定它适合哪条街
产能 μ 每分钟能出多少份 升级
单价 p 一份卖多少 升级 / 招牌
摊主 谁在守,带一个加成 招募 / 培养

3.2 街:七个格子#

一条街 7 个格子,每个格子有自己的客群:

     ┌───┬───┬───┬───┬───┬───┬───┐
     │ 甜 │ 甜 │ 咸 │ 甜★│ 咸 │ 鲜 │ 辣 │    ★ = 地标格
     └───┴───┴───┴───┴───┴───┴───┘
     人流 1.3  1.1  1.0  1.55  0.95  1.05  0.8
  • 客群:这个格子走过的人想吃什么。摆对口味,转化率高;摆反,白摆
  • 人流:这个格子有多少人经过
  • 地标格:每街只有一格,放对街区主题,全街加成

3.3 城:街区与名片#

解锁第 2 条街之后,"城"这一层才开始:

  • 每条街有主题(糖水街 / 辣味巷 / 渔港前街)
  • 凑齐某些组合 → 一张城市名片("不夜甜都"、"五味俱全"),全城加成

名片是这个游戏的长线收集目标,也是"我要玩成什么样"的表达出口。


四、布阵到底是不是一道题(实测)#

这一节是本文唯一有数据的地方,也是整个设计最大的一个判断。

工具是 tools/sim/foodstreet.mjs。三次失败、一次成功,全部保留在代码注释里。

4.1 四次模型,三次失败#

判据是"贪心算法(每步选当前边际收益最大的)落后全局最优多少"。 落后越大,说明这个系统越需要玩家动脑;落后接近 0,说明它就是排序题。

版本 改了什么 贪心落后最优 判定
v1 收入 = 人流 × 契合 × 强度 × 邻接(±10%) 3.8% ✗
v2 邻接改成 1.45× / 0.70× 的门槛(同味互抢、互补带客) 0.0% ✗ 更糟
v3 空档格泄流,把格子数量变成资源 0.0% ✗
v4 摊子稀缺,跨街分配(SLG 的"分城") 0.3% ✗

v2 是最反直觉的一次:我把套装加成从 10% 提到 45%,深度反而从 3.8% 掉到 0。 因为套装越强,"拼出那个套装"就越明显,贪心一眼就能看到。

4.2 根因:可分离乘积#

三次同一个现象,说明不是参数问题,是结构问题:

只要  摊子收入 = f(它所在的格子) × g(它自己)

成立,那么每个 (格子, 摊子) 二元组的边际贡献就是可加的, 贪心必然最优。加多少套装、加多少内耗,都只是把这个可加结构搅匀, 不会改变它的可加性。

这一条值得单独记下来

"摆位置"这种事,只要收益能拆成"格子的属性 × 摊子的属性",它数学上就是排序题。 想让布阵真的成为一道题,收益必须不可分离—— 也就是必须存在 f(a, b) ≠ f(a) + f(b) 的项(真正的套装、真正的互斥)。 而一旦套装做强到能改变最优解,贪心也会跟着学会它。这是个死循环。

4.3 但分布数据说明了另一件事#

v4 里 90 种分法,收入分布是这样的:

摆法 收入 相对最优
最优 15.466 100%
P75 11.255 72.8%
中位(随便摆) 9.733 62.9%
P25 8.995 58.2%
最差(全摆反) 6.454 41.7%

翻译成人话:

  • 摆对风格 → 拿到 100%;摆反风格 → 只剩 42%。差 1.58 倍。
  • 但"理解规则"的贪心就能拿 99.7%。

所以布阵不是一道要算的题,是一道要懂的题。

4.4 于是把它定成"表达系统"#

这是本文最重要的一条设计决定:

布阵在《食街》里不是优化系统,是表达系统。

不要的东西 换成什么
精确解、最优解提示 街景自己说话:甜口街上摆满辣摊,人流明显绕开
让玩家做数学 让玩家"看一眼就知道该摆什么"
排行榜式的效率比较 街的性格:这条街是甜食街,那条是深夜食堂

判据也跟着换掉了,从"深度"换成"容差":

判据 目标 实测
容差 随便摆不低于最优的 60% 62.9% ✓ 刚好卡住
回报 看懂规则能拿到 ≥95% 99.7% ✓
无通吃 换个街景,最优摆法必须跟着变 ✓(改街景后分组从 AF|BC|DE 变成 BE|CF|AD)
这三条判据和"零失败"是同一个东西

容差守住了"摆错不至于归零",回报守住了"懂了有好处",无通吃守住了"不能一招通吃"。 零失败的游戏里,布阵的正确形状就是这个。


五、核心循环与时间结构#

SLG 的时间结构本来就是"低频决策 + 长时间产出"——这一条和你"不需要盯着屏幕"是天然一致的。

5.1 一次上线做什么#

步 做什么 花多久
① 看钱(离线攒的) 2 秒
② 升级 1~2 个摊子 10 秒
③ 如果解锁了新摊 / 新街 → 重摆一次 30~60 秒
④ 如果有食评会 → 挑摊子参赛 30 秒
⑤ 下线 —

一次 12 分钟,一天 35 次。 这是设计目标,不是估计。

5.2 为什么这样是对的#

  • ② 是增量的部分:升级让数字涨,爽点即时
  • ③ 是SLG 的部分:低频、高价值、可以反复想
  • ④ 是对抗的部分:有仪式感,但输了什么都不丢
关键:③ 不该每天都有

如果玩家每次上线都要重摆,那就变成"回来上班"了。 重摆只在"有新东西"时发生——解锁一个新摊、一条新街、一个地标。 其余时候,摆好的街自己运转。


六、竞争:食评会与客场#

6.1 食评会(影子评比)#

每 12 小时一次,系统给一个主题:

本周主题:深夜食堂 分数线:2,400 分(=你上周水平的 1.15 倍)

  • 你用符合主题的摊子摆一组去参赛,按"契合度 × 等级 × 套装"算分
  • 过了线拿奖励;没过线什么都不丢,下次再来
  • 分数线是针对你自己的历史算的,不是别人的排名

6.2 客场摆摊#

  • 别人的街区上有"空摊位",你可以去摆一晚
  • 你赚分成,主人拿"人气加成"(因为有人流来了)
  • 主场完全不受影响——不去也不亏,去了双方都赚

6.3 同业公会#

  • 一起完成"街区改造"(比如公会合计卖出 10 万份)
  • 完成后全公会解锁一个新装饰 / 新摊主
  • 不做捐献竞速,不做排名

七、成长线#

系统 买什么 有什么用 要回来管吗
摊子 升级 产能、单价 否
菜谱 解锁 换口味、开新分支 否
摊主 招募 / 培养 守摊加成 否
街 解锁格子 能摆更多摊 否
街区 解锁新街 版图扩张 否
城市名片 凑组合 全城加成 否
摊主绝不代劳核心决策

摊主只加数,不替你决定摆哪儿。 这和夜市「手点只拿小费」、一帖「学徒不代抓药」是同一条规矩: 自动化只能外包最不想做的那部分,永远不能外包核心操作。


八、数值(初稿,未跑模拟器)#

这一节全是初稿。 增量部分必须跑模拟器,见第十一节。

项 初稿
初始摊子 1 个(糖水铺),1 条街的前 2 格
单格收入 人流 × 契合度 × 产能 × 单价
摊子升级 每级 ×1.25,价格 ×2.2
解锁下一格 前 4 格之后,每格涨 3 倍
解锁下一条街 当前街摆满 5 个摊

参考夜市踩过的坑:涨价倍率 ÷ 增益倍率 < 2 时,最优解会变成"永远只买最便宜的那个"。 这里摊子升级是 ×2.2 / ×1.25 ≈ 1.76,偏低,需要模拟器复核。


九、画风基调(提案,未量过)#

市集的日间暖色。 和现有四套都不撞:

层 色系 用在哪
木 原木 / 浅胡桃 推车、招牌、棚架
布 条纹布(红白 / 蓝白) 遮阳棚——这是这套画风的记忆点
白 搪瓷白 锅、碗、招牌底
亮 果酱红 / 芥末黄 招牌字、点缀
灰 铁皮灰 烟囱、水桶、推车轮

和另外四套的关系:比夜市亮(白天)、比一帖艳(市集)、比小农场杂(东西多)、比野花笔记暖。

这只是基调,不是规范,**不能拿去对另外四个项目的判据**

真正定下来要单独写 美术风格.md,并且必须重新量化取色。 现在一条阈值都没有。


十、明确砍掉,不许加回来#

砍掉的东西 理由
PvP 掠夺 / 被抢资源 直接破零失败
被偷袭 / 离线会被打 逼玩家上线
客人等太久生气走掉 制造焦虑(夜市也砍过)
体力 / 门票 / 冷却 / 签到 破"不需要盯着"
真人排行榜 / 好友比数值 把"经营"变成"冲榜"
摊子会倒闭 / 亏本 零失败
付费买战力 不讨论
布阵最优解提示 / 效益对比条 一旦有,玩家就会去解方程,表达系统当场变成作业
摊主代摆摊子 核心决策被自动化

十一、待验证(都没验证)#

三条假设,按风险排序#

  1. "看街下菜"玩家能不能一眼看懂。 这是"表达系统"能不能成立的前提。如果玩家看不出"这条街适合甜摊", 布阵就变成瞎试,表达就没了。需要做单街原型,摆五个摊看会不会自己反应过来。

  2. 增量节奏。 第一个摊几秒买得起、什么时候能解锁第二条街、第二天还在不在玩。 必须跑模拟器,不能估。

  3. 食评会会不会变成焦虑源。 "12 小时一次、过不了线就没了"——这已经在**制造"错过"**了。 如果实测玩家会因为怕错过而强迫自己上线,就得改成"随时可以交卷"。

下一步#

  • 单街原型:一页 HTML,7 个格子、6 个摊子,能拖能摆,收入实时变
  • 经济模拟器:tools/sim/foodstreet-econ.mjs,跑 72 小时看解锁节奏
  • 美术风格.md:量化取色
  • 食评会的替代设计(如果第 3 条假设挂了)
这个游戏需要的不是"更深的布阵"

是更清楚的反馈。玩家看不懂自己摆错了,再深的系统也没用。