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


来源:知乎

作者:黄小秋

原文链接: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、当到达目的或者旅行时间耗尽的时候,蛙就会回家。


  1. 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


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


你猜?


— 完 —


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我为什么对TypeScript由黑转粉?

喜欢就关注我们吧!一名曾仅使用 JavaScript 的开发者解释自己为何从反对 TypeScript 到转变为 TypeScript 粉丝。Chirag Swadia 自称曾是 Anti-TypeScript 的 JavaScript 开发者。谈及反对的原因,他以前一直认为给函数/变量添加类型以满足 TypeScript 编…

谈谈关于MVP模式中V-P交互问题

在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面。这是一个基于微软SCSF(Smart Client Software Factory)的项目,客户端是墨尔本一家事业单位。前两周,我奉命负责对某个模块进行Code Review工作&#xf…

ofdm解调算法_OFDM系统中固定频偏算法

加入固定频偏:function berMatrix freqOffsetOFDM(BPS,NS,M,SNR,ifftsize,carriers,N,ep)%标准OFDM系统input_bit_stream sign(randn(1,BPS*NS));input_bit_stream(input_bit_stream -1)0;parallel_data StoP(input_bit_stream ,M);% 串并转换%QAM调制modulated_d…

重磅!阿里开源AI核心技术,95%算法工程师受用

你是否曾有过这样的疑虑:人工智能大热,作为一名传统程序员,该如何转型或学习?网上AI教程、书籍,质量参差不齐,如何找到真正专业的资源?AI理论遍地皆是,但几乎都在纸上谈兵。我们该从…

android 换机 iphone8,最好的换机之选?iPhone8 PLUS众测体验

最好的换机之选?iPhone8 PLUS众测体验2017-11-11 14:29:0034点赞1收藏0评论文章前面说一下,自己水平有限文笔不好,没有相机,开箱图这些都是手头的iPhone6和本次众测的的产品拍摄,再加上最近白天都没空拍照,…

阿里开始招聘.NET,要求WPF!

说到WPF、上位机,很多.NET开发者可能只是听过并不了解,然而随着工业4.0的火爆大势,当下.NET开发者又多了一个高薪选型,在各大招聘网站上都能找到5年经验25k左右的岗位,强烈推荐大家关注一波。这里借用了下阿里影业对.N…

JavaWeb中的Session、SessionListener、在线人数统计

2019独角兽企业重金招聘Python工程师标准>>> JavaWeb中的Session 在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。正在装载数据…… Session的创建(代表会话周期的开始):第一次调用reque…

全球100款大数据工具汇总(51~100款)

上篇(戳标题即可跳转):全球100款大数据工具汇总(前50款)51、Redis是一个高性能的key-value存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串&…

Android手机投屏后没有声音,乐播投屏电视没有声音怎么办_乐播投屏电视没有声音手机有声音解决办法_3DM手游...

乐播投屏是一个非常不错的投屏软件,操作使用简单,最近不少小伙伴都在用。但是在使用乐播投屏的时候,有很多小伙伴出现了电视没有声音手机有声音的情况,这是怎么回事呢?我们一起来看看乐播投屏电视没有声音的解决办法吧…

如何容器化你的 ASP.Net Core

Docker 相比 虚拟机 具有更轻量级,更便捷的特性,为什么这么说呢?虚拟机通常打包了完整的操作系统,而容器只仅仅打包了你的应用程序,运行环境及相关依赖库,Docker 是一种开源的工具包,帮助你更加…

2018年大数据趋势

作者 | Keith D. Foote翻译 | 品觉笔记本电脑、智能手机、传感器,都为物联网带来了大量数据。这是获得竞争优势(或者保持竞争力)的重大机遇,前提是企业足够灵活,可以管理好数据并把数据变成有用的商业智能。人脑能高效…

关于商品分类 商品表和属性表的设计

以前有这样的一个需求,不考虑像京东或者淘宝这样分类下有子分类的情况,只考虑一层分类的情况下,可以随便添加分类,可以任意给商品添加属性,而不需要更 改表的结构. 于是设计了一个这样的结构,实现还是可以实现,一直在用,但是在操作上比较麻烦,大家讨论下有没有更好的方式. ----…

Redis五种数据结构

1、String这是最简单的Redis类型。如果只使用这种类型,Redis就像一个可持久化的Memcached服务器。2、ListRedis的List是基于双向链表实现的,可以支持反向查找和遍历。常用案例:聊天系统、社交网络中获取用户最新发表的帖子、简单的消息队列、…

C# NUnit的安装

前言:NUnit是什么?NUnit 是一个单元测试框架,专门针对于.NET来写的。NUnit是xUnit家族种的第4个主打产品,完全由C#语言来编写,并且编写时充分利用了许多.NET的特性,比如反射,客户属性等等。最重要的一点是它适合于所有…

中国癌症大数据出来了!每年126万例癌症死亡本可避免

01 中国本土大样本数据:癌症真的可预防!2017年,由全国肿瘤登记中心副主任陈万青教授、美国癌症协会Farhad Islami教授牵头的生活方式和感染对中国癌症发病和死亡影响的研究,发表在Annals of Oncology上[1,2]。该研究由美国癌症研究…

android 设置folder类型,正确配置你的 Android 项目

简评:优秀的 Android 项目从配置开始。: )作者在这里介绍了一个 Android 项目应该有的配置,文中讲到的内容大家都可以运用在自己的 Android 模板项目中。gitignore当你新建 Android 项目时,默认会生成 gitignore 文件,但并没有包含…

开发物体识别桌、_【课程总结】AR系统开发“秘籍”大揭秘!

导读:AR技术飞速发展,被广泛应用于游戏、医疗、旅游、电商等行业。那么对于AR系统的整体设计和应用是如何操作的呢?商汤泰坦公开课第006期联合“SLAM技术及应用”暑期学校与研讨会共同推出“移动增强现实系统的设计与应用案例解析”&“AR…

商业项目中最受欢迎的 7 种编程语言

【导读】:Semaphore 是一个国外持续集成/持续部署方案服务商。Semaphore 称自己在过去三年对其开发者用户进行调查,调查他们在开发商业项目时一般都使用哪些语言。这些数据基于成千上万个在 Semaphore 上进行测试和部署的项目的人。所以现在这是迄今为止…

为or、in平反——or、in到底能不能利用索引?

先说一个笑话,作为开场白。俺也换换风格试一试,呵呵。 在以前,有三个书生赶考,在路上遇到了一个算命先生,于是就问算命先生:我们三个人赶考,结果如何呀?算命先生伸出来了一个手指头&…

iNeuOS 工业互联网操作系统,在核工业测控领域的成功应用

注:由于本项目涉及核工业,具体细节保密。1. 前言iNeuOS工业互联网操作系统iNeuOS,公众号:iNeuOS“iNeuOS工业互联操作系统”面向未来,公众号首秀iNeuOS工业互联网操作系统积累了10多年工业领域知识和经验&#xff0…