微信号:gh_1cb598337696

介绍:Qtest,是360公司唯一的服务端测试团队.我们的理念是做一个会编程的测试工程师,做一个不断思考,全力保证产品质量的测试工程师.

程序员以上帝视角解读"旅行青蛙",你的呱真的在旅行嘛?

2018-02-09 18:26 Qtest之道

来源:知乎

作者:黄小秋

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





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


  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
有没有免费获得三叶草的方法?



你猜?




 
Qtest之道 更多文章 聊一聊TCP协议的TIME_WAIT与性能优化 充电两分钟|shell脚本入门so easy 推荐引擎介绍 Android ANR监测方案解析 jenkins调用webdriver问题详解
猜您喜欢 从比特币到区块链的未来 中国大数据技术大会参后感(二) 唯不安宁者,方可得安宁! Hadley Wickham 采访节选(一) Spotify的机器管理进化之路