转载 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛? (手机游戏)...
程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?
来源:知乎
作者:黄小秋
原文链接: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、当到达目的或者旅行时间耗尽的时候,蛙就会回家。
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,我从代码中整理了一下触发的条件:
这也是玄学错误迷信的一个地方。使用称呼对游戏其他部分没有任何影响,不会改变获得物品和明信片获得概率,也不会影响出门时长。
转载于:https://www.cnblogs.com/mike-mei/p/8426222.html
转载 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛? (手机游戏)...相关推荐
- 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?
来源:知乎 作者:黄小秋 原文链接:https://www.zhihu.com/question/68733553/answer/305463907 导语:知乎有位程序员大佬,为了让老母亲老父亲们理解 ...
- 转载:程序员的十层楼
转载:程序员的十层楼 By 周伟明@英特尔 程序员的十层楼(1~3层) 自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外.当然现在中国的许多程序员们对此可能有许多不同的意见,有些人 ...
- 好文转载—程序员在工作中会追求什么?
1. 做软件产品.我希望我参与编写的程序成为公司的主要业务.这就排除了 IT 维护工作,因为这种工作只是间接地支持了真正的业务(不管它是什么).我也希望参与系统核心部分的工作,越重要的越好.如果我做的 ...
- 转载-程序员编程技术迅速提高的终极攻略
2019独角兽企业重金招聘Python工程师标准>>> 前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱 ...
- [转载]程序员如何写出杀手级简历
转载自:http://kb.cnblogs.com/page/505583/ 这几年,我在Google工作,是一名软件工程师(之前是在微软做一个开发团队的队长),我曾浏览过成百上千的简历,从中挑选出可 ...
- [转载]程序员的激情其实是一种痛苦
我不是一个"充满激情的程序员".我觉得,固定8小时工作之后,就应该去做点别的事情,比如说看看科幻小说,和我亲爱的妻子聊聊天等等.当别人问起,我会正儿八经地这么回答,"这才 ...
- 好文转载—程序员的禅修之路
早晨,外面下着雨,我发觉自己正坐在办公桌上琢磨有关高效率工作(efficient working)的问题.在我成为自由职业者之前的那些日子,尽管做了许多工作,然而回首往昔,不过是一片狼藉罢了. 回想2 ...
- [转载]程序员咆哮体
今天看了一则程序员的咆哮体,挺搞笑的,不过看了之后也很有感触的,呵呵.具体内容如下,博君一笑~ 这个世界上只有程序员是可以伤的 尼玛程序员也有不是秃顶好不好!!!!! 头发稀疏的也是有的好不好!!! ...
- @程序员,解读 5G 中性命攸关的时延! | 技术头条
作者 | 欧阳琦玮 责编 | 郭芮 「命悬一线」大概是赛车电影最大的high点,主角在影片中无数次躲过一劫,但这种幸运未能在现实中延续. 2015年<速7>上映,依然大卖,而Brain的扮 ...
最新文章
- crt证书linux使用,linux下使用openssl生成https的crt和key证书
- C语言告警warning: missing braces around initializer详解
- 使用getline读入
- java pc计数器_java虚拟机-程序计数器PC Register
- C语言程序设计二期末考试,9第二学期期末考试《C语言程序设计》A
- 我的助理辞职了!——给不听话的下属看看~
- rabbitmq详细入门文档+springboot结合使用
- java中集合的迭代操作
- Mybatis面试题-日更
- [摘抄]隧道尽头的灯
- Java中操作SFTP服务器上的文件下载上传
- Clojure 的 Enlive 库尝试
- 大数据:商业革命与科学革命
- 这几款超好用的协同办公软件,你都get了吗
- Git超详解七 储藏 (看不懂算我输)
- AutoJs学习-截屏器
- CTFshow 击剑杯 部分WP
- OPPO R2017线刷刷机包 可解账户锁 刷机教程
- #进击的贪吃蛇-----将贪吃蛇,飞机大战,坦克大战功能融合形成新的游戏
- 多益网络2015校园招聘第二次笔试题
热门文章
- Android数据库LitePal的存储操作
- 前后端分离中使用基于jwt的token进行身份认证
- MySQL概要——《深究MySQL》
- linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数
- hashcode值一样对象一定相同吗_HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)...
- Linux命令速查表
- file extension php,.php File Extension
- linux运维技巧,Linux运维需要掌握的17个实用技巧
- 冒号运算 java_java 8 双冒号运算符
- oracle中匹配函数怎么用,ORACLE 使用正则表达式的函数