来源:知乎,作者:黄小秋

原文链接:https://www.zhihu.com/question/68733553/answer/305463907

导语

知乎有位程序员大佬,为了让老母亲老父亲们理解自己的呱究竟在干什么,于是花了五个晚上逆向游戏程序逻辑,提取各种数据。这里相当于动用了上帝视角来解答这些问题。目前点赞已经超过2w。


大佬根据回答的内容,做了一个目录,方便大家按需食用。

  1. 呱真的在旅行么?

  2. 呱是如何选择旅行路径的?

  3. 呱是如何旅行的?

  4. 呱在每条路上的耗时是怎么计算的?

  5. 呱离家出走了怎么办?

  6. 道路有哪些属性?

  7. 每件物品都有什么效果?

  8. 如何科学使用物品?

  9. 旅途中会带回哪些明信片?

  10. 旅途中会带回哪些特产?

  11. 朋友什么时候会来访?

  12. 朋友来访应该投喂什么?

  13. 三叶草多久会长好?

  14. 四叶草获得的概率是?

  15. 抽奖球的概率是?

  16. 如何获得成就?

  17. 有没有免费获得三叶草的方法?

1

呱真的在旅行么?

不得不佩服游戏的设计者,为了追求真实,实现了一套非常完整的旅行模拟系统,有严谨的旅游路线设计。

因为旅行的过程并不展示给用户,我原本以为逻辑会十分简单。发现这套旅行模拟系统的时候,我也有些惊讶,也促使我深入研究这款游戏的逻辑。

下面的解释中间会用到少量计算机图论 (graph theory) 的术语,但应该还是很直观。

2

呱是如何选择旅行路径的?

程序内建东、西、南、北四个区域,呱会选择一个地区旅行,每个区域的设计都是一个连通的无向图 (connected undirected graph),而呱的旅行路线就是在图上某两个点之间走出一条路径 (path)

通过逆向手段,我提取出了程序中的信息,花了一些时间用 Graphviz 生成了每个地图的样子。


东部地区


西部地区


南部地区

北部地区

图上的每个节点 (vertex) 都代表了一个地点。每个地点都有可能被蛙经过,并触发一些事件。

除了普通的地点外,还有四种特殊的地点会影响呱旅行的路线:

  • START 起始点(帽绿色)

  • GOAL 目的地(桃红色)

  • PATH 途径地(橘黄色)

  • DETOUR 绕路地(浅黄色)

连接节点之间的是边 (edge),代表连接地点的路,这些路上也会触发遇上伙伴、拍摄照片等事件。

每次开始旅行的时候,根据老母亲打包的物品,呱都会:

1、选择目的地

携带特点食物或道具可以影响到地区的选择,有些物品可以增加特定地区的被选概率,甚至可以直接确定选择的地区。在一个区域内的目的地的选择同样取决于所携带的道具。具体每件物体效果会在后面提到。

2、选择途径地

途径地由目的地决定,每个地点都有对应的途径地,代码中对此的描述是当地的县府/交通枢纽。

3、选择绕路地

这个很有意思,我猜测作者的目的是为了让旅途更有多样性,每次路途会额外添加几个地区内绕路地点,携带物品对决定绕路地似乎没有影响。

4、生成经过所有地点的旅行路径

运用了图论很经典的连通图找最短路径 Dijkstra 算法,配合途径地和绕路地的逻辑,最终计算出旅行路径。

目的地是怎么选择的?

这里的数值不是绝对概率而是相对的优先级

具体目的地的选择就和携带的道具相关,每个物品对应目的地的优先级与 区域加成 叠加就能获得每个地点被选择的概率。

每个目的地的 区域加成 初始值都为 30,道具的 决定地区 属性值可以提升对应地区内目的地的 区域加成,从而增加区域内所有的目的地被选择的概率。

部分道具可以直接限制选择到规定的地区。

3

呱是如何旅行的?

确定了地点之后,呱会开始旅行:

  1. 携带物品会决定蛙最长能旅行多久,6 ~ 72 小时不等。

  2. 初始体力由携带物品决定,以 100 为基数提升。(物品的具体属性参考下面的图鉴)

  3. 经过图上的一条路(边)的时候,道路的地形属性和所携带的物品属性互相作用,会决定呱实际消耗的时间和体力。

  4. 路上可能会遇见小伙伴,会在之后的旅行中结伴而行,从而出现在明信片中。

  5. 根据路途属性,有一定概率会寄相关的明信片。

  6. 当体力不支的时候,蛙必须停下来休息 3 小时,休息完之后体力会恢复到 100。休息时间也算作旅行时间。

  7. 当到达目的或者旅行时间耗尽的时候,蛙就会回家。

  8. a、回家时会携带三叶草和抽奖券。

    b、如果在时间耗尽前到达了目的地,蛙会在此基础上带回当地特产和收藏品。

所以如果你的蛙很久都没回家,回家了也没有带土特产,可能是路途上多次体力不支,晕倒在路边。(再也不怪蛙儿不想着给娘带土特产了,原来是娘把你饿着了)


4

呱在每条路上的耗时是怎么计算的?

5

呱离家出走了怎么办?

如果长时间没有准备便当,包里和桌上都没有食物,呱会愤然离家出走(どこかへ出かけています)。

这个时候在桌子上放上吃的,呱就会在 5~30 分钟内回家。

有趣的是,离家出走也算作成就计算中的旅行次数...emmmm。

6

道路有哪些属性?

连接不同地点之间的每条路 (edge) 都有以下几个属性:

  • 地形:四种地形分别是 普通、大海、山地、洞穴

  • 耗时:途径这条路的体力和时间损耗,分为基础耗时和地形增加耗时;呱需要跋山涉水自然会耗时久一点

  • 明信片概率:明信片上不同元素出现的概率。据说所有的地图元素都有真实原型

  • 遇见伙伴:遇见特定伙伴的概率

具体如下,不能再详细了

7

每件物品都有什么效果?

奉上这张吐血整理的物品效果图鉴:

有五类不同的物品:

  • 便当:商店购买或者抽奖获得的食物

  • 幸运符:除了四叶草和可以购买的幸 (tǔ) 运 (háo) 铃之外,都要抽奖获得

  • 道具:商店购买

  • 特产:呱旅游时获得

  • 收藏品:特别的特产,通常在县府获得,无法使用

属性分类

HP

最大时间(小时)

决定蛙的旅行时间

初始体力提升(%)

增加一开始一鼓作气能旅行的距离

随机体力提升(%)

随机额外增加体力提升的最高百分点

物品几率:

  • 三叶草

获得三叶草数量

额外随机三叶草

随机额外获得的最大三叶草数量

  • 抽奖券

奖券数量

物品数量增多

增加获得目的地收藏品的概率

决定地区:对应地区被选中的概率,如果值为 D 则可以直接决定目的地所在区域

移动速度:根据地形不同,提升移动速度,减少途径所耗费的时间,在相同旅行时间内可以走更远

朋友:遇到特定旅行伙伴的概率

遭遇地形:途径特定地形时候获得相应明信片的概率

FLAG 属性:立一些特定的 Flag,主要影响成就系统,下面会写到

8

如何科学使用物品?

这里用几个例子来展示物品和路线结合的效果

1、决定想去的地区

携带的便当和抽奖获得的护身符(お守り)可以提升选择特定地区的概率。 抽奖获得的车票(きっぷ)可以直接决定所去到的地区。
例:想去北方,使用北国きっぷ。

2、影响路途的距离和时间

带 最大时间 值高的食物吃走得远,带 体力提升 值高的食物吃走得快耗时少。

3、快速通过沿途路线的地形

带有地区速度加成的食物或者道具,可以增加特定地形的移动速度。

不同物品的 移动速度 效果可以叠加,详情查看上面的解释。


4、匹配在道路上遇到的伙伴

如果在途径会遭遇伙伴的道路,特定物品可以增加实际遭遇概率

例:抽奖抽到的黄色ぼうろ(饼干)可以增加路途中遇到螃蟹的几率。

综合运用(敲黑板!!!)


呱想去秋田県男鹿市看灯塔


  1. 在地图上找到 秋田県(3022) 在北方。

  2. 便当选择 あさつきのピロシキ (葱饼?)可以提升去北方的概率。

  3. 携带  青色のお守り (蓝色护身符)可以提升去北方的概率。

  4. 如果有 北国きっぷ(北方车票?)可以直接决定去北方,上面的便当和护身符可以换别的。

  5. 通过目的地概率表发现携带各类帐篷前往 3022 目的地的概率更高。

  6. 查看可能的路线发现从起始点 3000 到 3022 之间会途径很多山路。

  7. 携带 ハイテクテント (高级帐篷?)增加山地移动速度更显著。

  8. 如果还有空余,可以带上 よつ葉(四叶草)或者 幸運の鈴,提升带回物品的概率。

9

旅途中会带回哪些明信片?

途径每条道路上会遇到的明信片元素都有很明确的概率。

普通的明信片是自动合成的。根据道路元素、所携带道具、遇到的同行小伙伴,程序会选择合适的背景、前景和呱和小伙伴的 pose,合成完整的明信片。粗略计算,有 120 种左右的组合。

几种不同的 pose

有一些带有特定的故事情节明信片是单张绘制的,这里也可以看出游戏制作者的用心:迷路和小伙伴看地图通常出现在地图的边缘,冷清下水道一般出现在四通八达的城市交通枢纽。


迷路的呱呱

路边的排水渠

10

旅途中会带回哪些特产?

上面提到了,成功到达目的地(GOAL)的时候才会获得特产,收藏品的获得概率是 15%,其他物品的概率如下:

游戏代码中有收藏品收集三次必定成功的设定,但是实际上并未启用,可能在之后的版本中会引入。

11

朋友什么时候会来访?

蜗牛、蜜蜂和乌龟会时不时来访。来访停留的时间 180~270 分钟。

蜜蜂需要有至少 3 件收藏品才会出现,乌龟需要有至少 6 件收藏品。

12

朋友来访应该投喂什么?

给来访的朋友投喂会获得三叶草和抽奖券的回礼:

在此基础上,投喂带有稀有 FLAG 属性的物品会多获得 20 根三叶草,多获得 1~4 张抽奖券。

朋友会记住最近三次的食品。连续投喂同一种物品,获得回礼的数量会降低。

为了达到最好效果,最好换四种不同的礼物轮流投喂,具体可以参照下面的喜好表格:

13

三叶草多久会长好?

花坛中总共有 20 根三叶草。


每一根都是独立重生的。最短 5 分钟 (300 秒),最长 4 小时 (14400 秒) 重生。

14

四叶草获得的概率是?

完成教程后会自动诞生第一颗四叶草,除此之外,每一根三叶草重生的时候都有 1% 的概率成为四叶草。

15

抽奖球的概率是?
  • 白:60%

  • 蓝:27%

  • 绿:9%

  • 红:3%

  • 金:1%

16

如何获得成就?

蛙旅行的时候会立一些 Flag,我从代码中整理了一下触发的条件:


这也是玄学错误迷信的一个地方。使用称呼对游戏其他部分没有任何影响,不会改变获得物品和明信片获得概率,也不会影响出门时长。

17

有没有免费获得三叶草的方法?

你猜?

程序员以上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?相关推荐

  1. 转载 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛? (手机游戏)...

    程序员上帝视角解读"旅行青蛙",你的呱真的在旅行嘛? 2018-02-05 黄小秋 数据与算法之美 来源:知乎 作者:黄小秋 原文链接:https://www.zhihu.com/ ...

  2. 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?

    来源:知乎 作者:黄小秋 原文链接:https://www.zhihu.com/question/68733553/answer/305463907 导语:知乎有位程序员大佬,为了让老母亲老父亲们理解 ...

  3. java web swing 教程_好程序员Java教程解读什么是swing

    原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...

  4. OSChina 周四乱弹 ——程序员的角度解读地震

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @OSC_JajGgv :分享轨风的单曲<拂晓车站>: &l ...

  5. 好程序员Java教程解读什么是swing

    好程序员 Java教程解读什么是 swing , swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java环境,这一点不太现实也不方便.现在的jav ...

  6. 程序员没对象,是不想找还是真的找不到?

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 图片源自:Humans Season 2 回答引自微博 编者按:「程序员找对象」已 ...

  7. java程序员_Java和Python的区别 好程序员帮大家解读

    Java和Python的区别 好程序员今天先来解读Java编程语言的优势,人工智能和大数据火爆一时,随之而来,引起了编程语言的人气暴涨.而Java和Python作为最炙手可热的编程语言从一开始便赢得了 ...

  8. 【转载】不再纠结:从程序员的角度解读苹果为什么坚持使用1G内存

    转载自:http://bbs.feng.com/read-htm-tid-8305194.html 原作者:deathpain 文章开头更新一下,此篇文章并非为苹果洗地,个人观点苹果坚持使用1G内存的 ...

  9. 程序员的上帝视角(4)——视角

    对于开发人员来说,工作都是从评估一个需求开始.我们第一个要解决的问题就是看待需求的视角.视角的不同,得到的设计方案可能是完全不同的.作为一个程序员,不能单单从个人视角来看待问题.而是要尝试从不同角色出 ...

  10. 程序员的上帝视角(3)-纯粹

    方法/函数,是编程中最常见的概念.我们几乎对其已经熟悉到不能再熟悉了.但是,由于承载了大部分的业务逻辑,大多数的bug都出现在的方法体/函数体的定义中. 我们先看如下实例代码: // 根据权限过滤相册 ...

最新文章

  1. Docker基本命令与使用 —— Docker容器(一)
  2. 回归分析假设_回归分析假设的最简单指南
  3. java怎么检测代码安全_foritfy代码安全审计、foritfy代码检测服务、java代码安全审计检测、C/C++语言代码安全审计检测...
  4. java 递归_两篇文章带你了解java基础算法之递归和折半查找
  5. SpringBoot | 第三十二章:事件的发布和监听
  6. 泰山站和泰安站怎么区分?
  7. 《SQL高级应用和数据仓库基础(MySQL版)》作业 ·004
  8. MVC一个action对应多个视图的写法
  9. python数据分析天气预报_数据分析----天气预报走向(pygal)
  10. java 引用类快捷键_Java数据类型及其转换经常用到的快捷键
  11. 开发LED屏幕页面遇到的问题
  12. linux man中文手册
  13. win10任务栏透明_Win10 美化软件(简洁篇)
  14. 20210726:FLAC刻录音乐CD教程05-总结
  15. IDM试用到期怎么办
  16. 卖动感单车能帮助keep走出变现困境吗?
  17. oracle asm登陆实例,Oracle ASM实例介绍
  18. labelme标注结果可视化(持续补充)
  19. 计算机二级信息管理,2021年上半年全国计算机等级考试[信息管理技术]精选模拟试题及答案解析...
  20. MTK的flash tool

热门文章

  1. C#基础知识五之abstract virtual关键字
  2. bq24075 锂电池 充电电路分析
  3. hdu 1864 最大报销额 模型为简单的01背包
  4. 如何在 Mac 上查找路由器 IP 地址?
  5. 如何在iPhone、iPad和Mac上查看照片的EXIF数据?
  6. Agisoft Metashape Professional for Mac(三维建模软件)
  7. WingPro 8 for Mac(专业Python IDE开发工具)
  8. Zbrush 2022 for Mac(数字雕刻和绘画程序)
  9. mac系统怎么获取最高权限删除顽固文件?
  10. 设计模式之Facade---外观模式