下载 App

开发者日志5

昨天 16:044 浏览
# 开发日志 5
上一篇结尾我挺得意的:取消体型基因上限,让"养出鱼王"从不可达变成可达。
这篇得先认错。
---
## 一、取消上限闯了祸
测试时发现池子里的鱼到了 **26522 吨**,而最高级竿的上限是 100 吨——一条也钓不上来。历史最大记录 195.7 万吨,是游戏名承诺的"百吨"的两千倍。
根因是我上一版理解错了一个关键点。我以为"每代收益递减"是按代算的,实际那个放生加成是**世界级**的——每 45 秒全池每一个繁殖都吃一次加成,不是一代吃一次。按"30 代"设计的曲线,实际快了 2~3 个数量级。
改成 logistic 软顶:一个因子管天花板,一个因子管平滑。标定结果 1 小时 288 公斤,12 小时 18 吨,40 小时 70 吨,80 小时第一次破百吨,软顶 145 吨。
顺带发现鱼竿上限也得跟着重设——最高级竿必须显著高于体重软顶,否则任何曲线都会撞上死锁。现在定成 5 / 30 / 100 / 1000 吨,最高级留了 7 倍余量。
老存档需要迁移:读档时压缩超限基因,并在池塘日记里给个叙事交代,不然玩家打开游戏发现记录没了会懵。
---
## 二、成长曲线标定,走了两次弯路
软顶定下来后,百吨还是够不到。游戏名字就叫《钓上百吨鱼王》,但基础黑鱼的软顶只有 79 吨,百吨得靠 1.8 倍体型的"鱼王"变种才碰得到,普通玩家的池子到不了。
**弯路一**:只抬软顶(26 → 33)。早期手感确实没变,但破百吨仍需 892 模拟小时——阻力不在软顶。
**弯路二**:同时放大增速(0.05 → 0.45)。实测 1 小时就到 936 公斤,3 小时 2.48 吨,比基线快 140 倍,把"慢节奏治愈"直接毁了。
**诊断**:三个参数各管一件事,不能混着调。
| 参数 | 管什么 | 误调后果 |
|---|---|---|
| 软顶 G | 天花板 | 基因远小于它时不构成阻力,调它不影响早期 |
| 递减半程 K | 后期阻力 | K 太小则后期永远长不上去 |
| 增速 base | 直接放大每一步 | 翻一倍,1 小时体重从 5kg 跳到 30kg |
最后一条最危险,因为基因是**立方**映射体重的,微小差异会被立方放大。
最终定在 G=44 / K=20 / base=0.05。实测 1 小时 7.40 公斤(基线 6.76 公斤),早期节奏基本没变。各鱼种软顶拉开梯度:黑鱼 383 吨、鲢鱼 179 吨、鲶鱼 154 吨、草鱼 102 吨、鲫鱼 90 吨。百吨成了黑鱼的长期目标,小草鱼上限自然低得多。
这次数学模型两次预测失准,最多偏差 3 倍,之后放弃依赖模型,全部以实测为准。
---
## 三、"全都是鱼王"——试错六个方案
这是这轮最难的一个问题,也是唯一一个让我连续试错六次都失败的。
反馈是:生态跑久了会**长成全都是鱼王**,不符合"小鱼为主、大鱼为辅"的理念。
### 根因
一开始我们一直在看"体重档位占比",那是二阶结果。改成直接观测基因本身的演化,问题才清楚:
| 模式 | 基因变化 |
|---|---|
| 不放生(纯捕捞) | 1.0 → 0.91(6 小时)—— 自然演化极慢 |
| 放生 | 1.0 → **1.62**(**1 小时**)—— 加成极快 |
两者相差约 **100 倍**——放生加成是唯一的主导力量。
而基因是立方映射体重的:基因涨 62%,体重涨 4.25 倍。加成又直接写进可遗传基因,于是"放生 → 基因涨 → 子代继承 → 再放生再涨",全池被集体抬到软顶,且没有回头路。
### 被实测否决的六个方案
| 方案 | 否决原因 |
|---|---|
| 调大增速 | 早期节奏崩坏,1 小时从 6.8kg 跳到 182kg |
| 基因池衰减 | 衰减作用于每条鱼而加成只给新生,稳态极低,黑鱼只剩 0.4 吨 |
| 加成改单次触发 | 与现状几乎一样,不是关键变量 |
| 加成按概率给部分子代 | 仍右移,4 小时大鱼占 84% |
| 给大鱼加代谢代价 | 硬阈值:要么养不到百吨,要么大鱼全活,形不成金字塔 |
| 基因传代向基线衰减 | 仍右移,1 小时就 25kg |
**共同教训**:六个方案都在"加成之后"做补偿,但加成比自然演化快 100 倍,补偿根本追不上。
### 修法:直接改加成的性质
正确做法是**让加成不进基因**,两条腿:
**① 留种加成只作用于个体当代表现。** 加成记在个体属性上,参与体重换算,但不参与繁殖继承,后代回到基因基线。于是持续放生时,池里累积一批"当代表现大"的鱼,同时新生个体走基线,大小鱼同时存在,天然形成金字塔;停止放生,受益者老死,池子回落。
这也符合 GDD 原本写的——"全群体型加成 60 秒",本来就是暂时效果,是代码把它实现成了对基因池的永久改造。
**② 成长度不再封顶。** 旧版鱼长到 1.0 就停,能长多大完全由基因决定,所以大鱼只能靠基因堆叠,基因池被推高。现在成长度可持续涨到 4.0,体型主要由**活了多久**决定,而不是基因池被集体抬高。
### 实测结果
```
1h  gene 1.00  max 9.33kg   小鱼10% 中鱼50% 大鱼39%
2h  gene 1.00  max 7.88kg   小鱼14% 中鱼59% 大鱼26%
3h  gene 0.97  max 8.92kg   小鱼17% 中鱼70% 大鱼12%
4h  gene 1.05  max 8.58kg   小鱼 8% 中鱼56% 大鱼34%
```
基因稳定在 1.0(修复前 1 小时就到 1.62),分布是中鱼为主、小鱼大鱼为辅的金字塔,最大体重也稳定了(修复前 6 小时全是鱼王)。
---
## 四、包体砍掉 83%
发布前发现包体 73.3MB。根因是 assets 目录混进了**上架物料**,而资源配置用的是全量引用,把 assets 下所有东西都打进玩家下载包了。
三处浪费:
| 项目 | 体积 | 性质 |
|---|---|---|
| 宣传片 mp4 × 4 | 36.6MB | 零运行时引用,做商店物料时的中间产物误留在 assets |
| 上架用图 | 12.0MB | 只被上架配置引用,不是运行时资源 |
| 字体 | 15.4MB | 完整字库(含日文韩文生僻字),游戏只用 1559 个字符 |
处理方式:上架物料**移出** assets 到独立目录(不删除,上架仍需要),同步更新配置路径。字体用 pyftsubset 裁剪,保留 GB2312 全部汉字 + 脚本用字 + ASCII + 常用标点,共 7555 字符,7.7MB → 1.7MB。
裁完逐字校验:脚本用到的 1658 个字符里只有 5 个缺失,且全部只出现在代码注释与日志里,没有任何玩家可见的界面用到。实机截图确认中文渲染无豆腐块。
结果:**73.3MB → 12.5MB**。
---
## 五、换竿终于有仪式感
换竿是这个游戏最贵的一次消费,旧版只弹一行提示加一个通用购买音,玩家感受不到这笔钱花在哪。
改成三段式演出:
```
蓄力 0.00~0.52s   竿收缩后仰 + 上升音,建立预期
冲击 0.52s        全屏闪白 + 震屏 + 重击音 + 过冲弹跳
火花 0.52~1.30s   火花四溅(带重力)+ 光芒 + 竿名砸出 + 闪光音
```
关键在**冲击帧与重击音严格同帧**——差半拍就没有打击感。所以视觉帧与音效落点共用同一组时间常量,改时间轴时音画一起动。
三个实现上的坑:
- 竿是程序化画的(锥形竿身 + 导环 + 顶珠 + 高光),按竿配色。
- **震屏做在演出内容层而非池塘**——渔具铺是全屏弹窗,池塘被完全盖住,摇它等于没摇。
- **背景整屏压暗而非暗角**——渔具铺是亮米黄实心面板、正好占满屏幕中心,暗角最亮处恰恰就是面板所在,压不住。
---
## 六、九个器官的效果是假的
这个查出来挺尴尬的。器官系统累积了九个字段——售价加成、被猎食抗性、放电、威胁感知、卵壳硬度、孵化率、护巢等等——但代码从来不读它们。图鉴里向玩家承诺的效果,**一个都没生效**。比如"金鳞:售价 +25%",卖鱼时一分钱没多。
现在逐个接上。售价加成要同时接到钓获结算和观赏缸,否则鱼一进缸就丢加成,"养起来更值钱"的设计反而变成亏钱。
顺带补上繁殖配置里一个**定义过、注释写过机制、但代码从未读取**的字段:卵生默认需要双亲守护。
---
## 七、竿价重定
探针实测玩家收入约 26000~33000 金/小时,而传说竿只要 5000——15 分钟就能买齐,买竿这个决策毫无分量。
按"竿价 = 它解锁的收益 ÷ 合理回报期"重定:
| 竿 | 原价 | 新价 | 回报期 |
|---|---|---|---|
| 碳素竿 | 300 | 1,200 | 约 3 分钟(第一次升级给即时正反馈) |
| 大师竿 | 1,200 | 18,000 | 约 40 分钟 |
| 传说竿 | 5,000 | 150,000 | 约 5~6 小时(长期目标) |
---
## 八、大数字读不出来
体型放开后,一条鱼能卖 1,012,650 金,手机窄屏根本读不出来。
新增格式化模块,按中文数量级缩写:千 / 万 / 亿 / 万亿。1,012,650 → "101万"。
这里也返工过一次。第一版量级表补了"十万 / 百万 / 十亿"这些档,结果 150,000 被写成"1.5十万"——中文里没人这么说,应该是"15万"。正确做法是量级表保持**稀疏**,只留中文口语真正会说的几档,靠"取整到 4 位数字"保证可读性。
体重也加了万吨 / 亿吨档,10,000,000 公斤显示成"1万吨"。
---
## 九、撤销一个我引入的回归
有个教训值得单独记。
为了消除顶栏显示的"97/81"(种群超出容量),我加了一个容量闸门,到上限就不让繁殖。实测证明这是错的:种群常驻容量线后,闸门把繁殖几乎全挡死,16 模拟小时里最大体重在 128~280 公斤之间反复震荡、**零增长**,基因池彻底停止演化。
而且它违背了配置里写明的设计——"超限时不是硬性阻止繁殖,而是让最弱小的鱼持续掉血"。**超载是有意的选择压力,不是要消除的 bug**。
撤掉闸门后,同参数立刻恢复单调增长。容量改成用界面表达:超出时顶栏显示"拥挤"并标警示色,而不是让玩家看到一个像坏掉的"97/81"。
---
## 十、现状
版本 1.0.15,工作区干净,代码已提交。
游戏是完整的:钓鱼三阶段、生态闭环、池塘日记、图鉴、商店、岸边之家、观赏缸、岸边植物、音频、拖动模式、钓竿升级演出、47 种器官、9 种皮肤变种。终局"养出鱼王"可达,池子也不会再退化成清一色鱼王。
包体 12.5MB。
主代码还有 255 条类型报错(生态世界 90 条、鱼类 48 条),性质仍是**重构中间态**——方法挂到类上之后类型推导跟不上挂载点,不是语法错误,构建一直能过。
---
## 十一、下一篇从哪开始
路线图上剩下的都是内容深度:
- 生态位从 3 个扩到 8 个(先做滤食的鲢鱼、底栖的鲫鱼)
- 钓点系统
- 天气昼夜
明确不做:战斗、塔防、关卡、通用数值成长、抽卡盲盒。
**技术债两条**:
1. 鱼的蜕变换算表是硬编码的生态位映射,加新生态位必须同步改,否则鱼苗没法蜕变成新鱼种。
2. 主代码 255 条类型报错值得专门清一轮——不影响运行,但会掩盖真正的问题。
一条值得写进规范的教:放生加成这类"全局增益",一定要先想清楚它作用于个体还是基因。我们绕了六个方案才发现,问题不在增益的强度,而在它的性质。
联机版本已更新截图
联机版本已更新
兄弟们,联机版本出了,有人要来联机吗?
官方
版本922更新截图
版本922更新
针对性的解决玩家反馈的一些毛病
官方
1 回复
开发日志3,涌现游戏终于发布截图
开发日志3,涌现游戏终于发布
弄了一个完善的钓鱼生态,并且有各种器官,让你们自进化长成百吨巨物。开发日志(三) 抛竿、入水、咬钩、收线、张力、上鱼、逃脱、断竿、巨物、金币、购买、升级、图鉴、种植、收获、撒饵、孵化、失败,加上五个 UI 音。BGM 三首是分层的:白天木吉他民谣,夜晚极简环境音,博弈的时候切紧张律动,按昼夜自动换。 这里有个架构上的坎。这游戏是纯 UI 的,没有任何场景对象,但音源必须挂进场景才会被混音——没场景
官方
官方已入驻截图
官方已入驻
欢迎大家反馈相关问题,我会积极修改与优化
开发者日志4截图
开发者日志4
这是我最想做、也最晚做出来的东西。 三条设计支柱里有一条叫"慢,但有回响",意思是我改变了这片水,这件事得让玩家看见。之前玩家钓半小时,把池子捞瘦了,屏幕上除了水色变灰没有任何提示,他根本不知道自己干了什么。 做法的关键是没挂事件钩子。一开始想的是在生态层每个事件点上插回调,死一条鱼记一条,水草长一株记一条。但这样有两个毛病。一是要在鱼的代码和生态步进里到处插钩子,直接违反"生态层零模式知识"那条
官方
1 赞
涌现,开发日志2,全面转型钓鱼截图
涌现,开发日志2,全面转型钓鱼
《鱼王纪》开发日志 一开始不是这个游戏 这项目是我和一个 AI 一起做的。我不会写代码,代码都是它写的,我负责说方向、看效果、拍板。 最早做的是虫子。想法很朴素:我想做一个能自己进化的生态,虫子在里面吃、繁殖、变异,看着它自己运转。第一个版本做成了塔防——家园、钱包、战斗、战役模式,该有的都有,能玩。但我做完就发现不对,它变成了一款塔防,跟"进化"没什么关系了。后来又转向虫子毁灭工程,做体素破坏和
1 赞
优化了角色大招,和各个技能的平衡性与后期截图
优化了角色大招,和各个技能的平衡性与后期
兄弟们还有人玩吗?能提提意见吗?好迷茫,我自己玩了好几个小时了
官方
1 赞
2 回复
04:03
别笑,你也活不过第2夜截图
别笑,你也活不过第2夜
巨爽巨解压
官方
版本已更新,深度优化数值截图
版本已更新,深度优化数值
拥有更好的体验,无论是新手还是老手,欢迎大家反馈问题
官方
升级页面,提升页面质感截图
升级页面,提升页面质感
正在持续开发中,有玩家玩吗?感觉怎么样?是玩法没意思吗?怎么没玩家呀,呜呜呜
官方
5 回复