下载 App

开发者日志 03 · 以水定绿

前天 03:174 浏览综合
《绿洲涌现》开发日志 · 第 3 篇

让"有限"真的有限

"以水定绿"是治沙领域的一句行话:绿化的规模,要适应当地水资源的承载力。种得多不等于种得好——水供不上,苗全得死。
设计上最难的一点是:怎么让玩家真的感到水是有限的?
如果水只是一个缓慢增长的进度条,玩家很快就会忽略它。我们试过几种方案:
方案问题
水无限,只限制种植速度失去了"定绿"的核心张力
水会枯竭,用完就 Game Over太惩罚,玩家不敢做任何决策
水有限但可购买变成了资源管理,不是生态模拟
最终方案是:水有三个约束,互相咬合。

约束一:供需缺口

供水来自滴灌站(0.55 + 等级 × 0.35 / 秒),需求来自植被——而且随季节变化。
风沙季(第 2 季)的需求倍率最高,这就是为什么"全年预算"比"当前季余额"更重要:
lua复制
lua
-- 全年净额 = (供水 - 四季平均需求 - 生产负荷) × 55秒 × 4季 annualNet = (supply - total / 4 - production) * Config.SEASON_SECONDS * 4
玩家很容易踩的坑:当前季度盈余,但全年赤字。 因为风沙季那一下会吃掉大半缓冲。所以第一章验收里,我们用的是全年口径,不是瞬时口径。

约束二:养护储备

水库存不是越大越好。我们有"未来 55 秒最低水"这个指标——按当前布局和已知天气事件推演,未来一季里水库最低会掉到多少。
如果这个最低点低于储备线(12),就判定为"养护储备不足"。玩家必须先停下来回蓄,而不是继续扩种。
这条规则制造了一个反直觉的体验:有时候最好的操作是什么都不做。 这正是我们想要的——真实治沙里,很多时候就是要等。

约束三:承载边界

第三章做第二章时,我们加了"承载边界"这个概念。它回答一个具体问题:
以现在的水,最多能养活多少块地?
算法很朴素——把每块地的年需求排序,从最小的开始装,装到预算用完为止:
lua复制
lua
table.sort(demands) -- 从最省水的开始 local budget = supply * SEASON_SECONDS * 4 for _, annual in ipairs(demands) do if used + annual > budget then break end used = used + annual capacity = capacity + 1 end
这个数字直接展示在界面上,玩家能清楚看到:“我现在的水,最多撑 87 块地,已经用了 40 块。”
性能上踩过坑:这个计算最初每帧全图扫描,帧时间飙到 11.7 秒。加了签名缓存——只有关键状态变化时才重算——才压回正常。

洪水:水多也是问题

有意思的是,沙漠边缘不只是缺水,还会有上游来水。
洪水是一笔独立的水账:它不进入生态库,不能用来浇灌。玩家可以选择花 120 资金建调蓄沉淀池,截留一部分、沉淀后受控下泄。
这个设计的意图是打破"水越多越好"的直觉:洪水是压力,不是资源。 处理它需要成本,不处理它会淹掉低洼地块。

这一篇的教训

"有限"不是把数字调小,而是让玩家在多个约束之间做取舍。
如果只有一条规则(水会耗尽),玩家只需要"省着用"。有了三条互相咬合的规则(供需缺口 + 储备底线 + 承载上限),玩家才需要真正思考:“我这块地该不该种?现在种还是等一季?
开发者日志 05 · 六天之后 《绿洲涌现》
交出来的东西 GameJam 结束时,《绿洲涌现》的规模: 数量 游戏逻辑代码 约 6,300 行 Lua 模块数 20 个(含 4 个联网后台模块) 测试文件 24 个 断言调用点 867 处(运行时按数据展开为上万条检查) 已开放章节 2 章(锁住流沙 / 以水定绿) 功能上,玩家可以做这些事: 铺草方格固定流沙,种梭梭、柽柳等乡土灌木 让植被连成上风向防护带(2 格链 = 强防护,1 格 =
官方
开发者日志 04 · 把玩法藏起来
《绿洲涌现》开发日志 · 第 4 篇 一个反直觉的决定:不做教程 游戏有固沙、种植、防护链、水预算、天气、洪水、养殖、章节验收……一套下来十来个系统。常规做法是做一个教程关,一条条教。 我们没做。原因是:治沙本身就是"慢慢发现规律"的过程。 如果开局就把所有规则糊在玩家脸上,那种探索感就没了。 替代方案是章节引导 + 逐层揭示。 引导系统:只推下一步 界面上永远只显示"现在该做什么",而不是"全部
官方
开发者日志 02 · 把一千行拆开
警报:Simulation.lua 到 1000 行了 第 1 篇结尾提到,D6 结束时核心模拟文件已经超过一千行。当时的 Simulation.lua 什么都管:地块状态、水资源预算、天气推进、洪水、养殖试点、章节验收、存档校验——全塞在一个文件里。 这不是"能跑就行"的问题。真正的问题是:改任何一处都可能踩到别处。 举个当时真实发生过的 bug:我调整了水预算的计算顺序,结果章节验收的"全年非
官方
开发者日志 01 · 从一块草方格开始
治沙功在当代利在千秋,我认为值得做一个游戏让更多的人知道。 它慢。一块草方格铺下去,要等风沙停下来,等灌木扎下根,等一个季节过去,才能看到一点点变化。它也不爽——没有一击必杀的快感,没有数值暴涨的反馈,甚至连"赢"都很难定义:把沙漠变绿不是目标,守住绿洲的边缘才是。 但正因为这样,它才值得做。GameJam 开始时我们定的第一条设计原则就是:不做"征服沙漠"的爽游,做"守住一条线"的经营模拟。 这
官方