你的蛙到底在干什么?花了5个晚上,我总算摸清了一些规律

发表于:2018-2-01 09:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:黄小秋    来源:知乎

#
it
#
游戏
分享:
  提问:玩《旅行青蛙》(旅かえる)有哪些体验?
  呱呱走火入魔 - 逆向游戏代码 - 终结玄学迷信
  看到很多人对物品的使用上的很多猜测,很多都不是很准确。
  为了理解你们的呱究竟在干什么,花了五个晚上逆向游戏程序逻辑,提取各种数据。
  这里相当于动用了 上帝视角 来解答这些问题。
  答案将会陆续更新,欢迎在评论区提问。
  1.呱真的在旅行么?
  2.呱是如何选择旅行路径的?
  3.呱是如何旅行的?
  4.呱在每条路上的耗时是怎么计算的?
  5.呱离家出走了怎么办?
  6.道路有哪些属性?
  7.每件物品都有什么效果?
  8.如何科学使用物品?
  9.旅途中会带回哪些明信片?
  10.旅途中会带回哪些特产?
  11.朋友什么时候会来访?
  12.朋友来访应该投喂什么?
  13.三叶草多久会长好?
  14.四叶草获得的概率是?
  15.抽奖球的概率是?
  16.如何获得成就?
  17.有没有免费获得三叶草的方法?
  呱真的在旅行么?
  不得不佩服游戏的设计者,为了追求真实,实现了一套非常完整的旅行模拟系统,有严谨的旅游路线设计。
  因为旅行的过程并不展示给用户,我原本以为逻辑会十分简单。发现这套旅行模拟系统的时候,我也有些惊讶,也促使我深入研究这款游戏的逻辑。
  下面的解释中间会用到少量计算机图论 (graph theory) 的术语,但应该还是很直观。
  呱是如何选择旅行路径的?
  程序内建东、西、南、北四个区域,呱会选择一个地区旅行
  每个区域的设计都是一个连通的无向图 (connected undirected graph),而呱的旅行路线就是在图上某两个点之间走出一条路径 (path)。
  通过逆向手段,我提取出了程序中的信息,花了一些时间用 Graphviz 生成了每个地图的样子。
  如果大家有兴趣的话,我可以把原始数据上传到 Github



  图上的每个节点 (vertex) 都代表了一个地点。每个地点都有可能被蛙经过,并触发一些事件。
  除了普通的地点外,还有四种特殊的地点会影响呱旅行的路线:
  START 起始点(帽绿色)
  GOAL 目的地(桃红色)
  PATH 途径地(橘黄色)
  DETOUR 绕路地(浅黄色)
  连接节点之间的是边 (edge),代表连接地点的路,这些路上也会触发遇上伙伴、拍摄照片等事件。
  每次开始旅行的时候,根据老母亲(?)打包的物品,呱都会:
  1.选择目的地
  携带特点食物或道具可以影响到地区的选择,有些物品可以增加特定地区的被选概率,甚至可以直接确定选择的地区。在一个区域内的目的地的选择同样取决于所携带的道具。具体每件物体效果会在后面提到。
  2.选择途径地
  途径地由目的地决定,每个地点都有对应的途径地,代码中对此的描述是当地的县府 / 交通枢纽。
  3.选择绕路地
  这个很有意思,我猜测作者的目的是为了让旅途更有多样性,每次路途会额外添加几个地区内绕路地点,携带物品对决定绕路地似乎没有影响。
  4.生成经过所有地点的旅行路径
  运用了图论很经典的连通图找最短路径 Dijkstra 算法,配合途径地和绕路地的逻辑,最终计算出旅行路径。
  目的地是怎么选择的?
  具体目的地的选择就和携带的道具相关,每个物品对应目的地的优先级与 区域加成 叠加就能获得每个地点被选择的概率。
  每个目的地的 区域加成 初始值都为 30,道具的 决定地区 属性值可以提升对应地区内目的地的 区域加成,从而增加区域内所有的目的地被选择的概率。
  部分道具可以直接限制选择到规定的地区 (D)。
  呱是如何旅行的?
  确定了地点之后,呱会开始旅行:
  1.携带物品会决定蛙最长能旅行多久,6 ~ 72 小时不等。
  2.初始体力由携带物品决定,以 100 为基数提升(物品的具体属性参考下面的图鉴)
  3.经过图上的一条路(边)的时候,道路的地形属性和所携带的物品属性互相作用,会决定呱实际消耗的时间和体力。
  4.路上可能会遇见小伙伴,会在之后的旅行中结伴而行,从而出现在明信片中。
  5.根据路途属性,有一定概率会寄相关的明信片。
  6.当体力不支的时候,蛙必须停下来休息 3 小时,休息完之后体力会恢复到 100。休息时间也算作旅行时间。
  7.当到达目的或者旅行时间耗尽的时候,蛙就会回家。
  回家时会携带三叶草和抽奖券。
  如果在时间耗尽前到达了目的地,蛙会在此基础上带回当地特产和收藏品。
  所以如果你的蛙很久都没回家,回家了也没有带土特产,可能是路途上多次体力不支,晕倒在路边。
  呱在每条路上的耗时是怎么计算的?
  设:
  呱离家出走了怎么办?
  如果长时间没有准备便当,包里和桌上都没有食物,呱会愤然离家出走(どこかへ出かけています)。
  这个时候在桌子上放上吃的,呱就会在 5~30 分钟内回家。
  有趣的是,离家出走也算作成就计算中的旅行次数……emmmm。
  道路有哪些属性?
  连接不同地点之间的每条路 (edge) 都有以下几个属性
  ●地形
  四种地形分别是 普通、大海、山地、洞穴
  ●耗时
  途径这条路的体力和时间损耗,分为基础耗时和地形增加耗时
  呱需要跋山涉水自然会耗时久一点
  ●明信片概率
  明信片上不同元素出现的概率
  据说所有的地图元素都有真实原型
  ●遇见伙伴
  遇见特定伙伴的概率
  具体如下,不能再详细了


上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号