作者:黃小秋鏈接:https://www.zhihu.com/question/68733553/answer/305463907來源:知乎著作權(quán)歸作者所有拙毫。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)瘦材,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處度帮。
原文是知乎的一個(gè)分享帖近速,涉及算法逆向工程。和彥斌同學(xué)饒有興致地聊了兩句。以下是摘要
1. 路線設(shè)計(jì)
設(shè)計(jì)者损俭,為了追求真實(shí),實(shí)現(xiàn)了一套非常完整的旅行模擬系統(tǒng)潘酗,有嚴(yán)謹(jǐn)?shù)穆糜温肪€設(shè)計(jì)杆兵。
程序內(nèi)建東、西仔夺、南琐脏、北四個(gè)區(qū)域,呱會(huì)選擇一個(gè)地區(qū)旅行
每個(gè)區(qū)域的設(shè)計(jì)都是一個(gè)連通的無向圖 (connected undirected graph)缸兔,而呱的旅行路線就是在圖上某兩個(gè)點(diǎn)之間走出一條路徑 (path)日裙。
通過逆向手段,原文作者提取出了程序中的信息惰蜜,花了一些時(shí)間用 Graphviz 生成了每個(gè)地圖的樣子昂拂。??
圖上的每個(gè)節(jié)點(diǎn) (vertex)都代表了一個(gè)地點(diǎn)蝎抽。每個(gè)地點(diǎn)都有可能被蛙經(jīng)過政钟,并觸發(fā)一些事件(想起了口袋妖怪的鯉魚王養(yǎng)殖游戲)。
除了普通的地點(diǎn)外樟结,還有四種特殊的地點(diǎn)會(huì)影響呱旅行的路線:
START 起始點(diǎn)(帽綠色)
GOAL 目的地(桃紅色)
PATH 途徑地(橘黃色)
DETOUR 繞路地(淺黃色)
連接節(jié)點(diǎn)之間的是邊 (edge)养交,代表連接地點(diǎn)的路,這些路上也會(huì)觸發(fā) 遇上伙伴瓢宦、拍攝照片 等事件碎连。
每次開始旅行的時(shí)候,根據(jù)老母親(驮履?)打包的物品鱼辙,呱都會(huì):
1. 選擇目的地
攜帶特點(diǎn)食物或道具可以影響到地區(qū)的選擇廉嚼,有些物品可以增加特定地區(qū)的被選概率,甚至可以直接確定選擇的地區(qū)倒戏。在一個(gè)區(qū)域內(nèi)的目的地的選擇同樣取決于所攜帶的道具怠噪。具體每件物體效果會(huì)在后面提到。
2. 選擇途徑地
途徑地由目的地決定杜跷,每個(gè)地點(diǎn)都有對(duì)應(yīng)的途徑地傍念,代碼中對(duì)此的描述是當(dāng)?shù)氐目h府/交通樞紐。
3. 選擇繞路地
這個(gè)很有意思葛闷,我猜測(cè)作者的目的是為了讓旅途更有多樣性憋槐,每次路途會(huì)額外添加幾個(gè)地區(qū)內(nèi)繞路地點(diǎn),攜帶物品對(duì)決定繞路地似乎沒有影響淑趾。
4. 生成經(jīng)過所有地點(diǎn)的旅行路徑
目的地是怎么選擇的阳仔?
具體目的地的選擇就和攜帶的道具相關(guān),每個(gè)物品對(duì)應(yīng)目的地的優(yōu)先級(jí)與區(qū)域加成疊加就能獲得每個(gè)地點(diǎn)被選擇的概率扣泊。
每個(gè)目的地的區(qū)域加成 初始值都為 30近范,道具的決定地區(qū)屬性值可以提升對(duì)應(yīng)地區(qū)內(nèi)目的地的 區(qū)域加成,從而增加區(qū)域內(nèi)所有的目的地被選擇的概率延蟹。
部分道具可以直接限制選擇到規(guī)定的地區(qū) (D)顺又。
呱是如何旅行的?
確定了地點(diǎn)之后等孵,呱會(huì)開始旅行:
1. 攜帶物品會(huì)決定蛙最長(zhǎng)能旅行多久稚照,6 ~ 72 小時(shí)不等。
2. 初始體力由攜帶物品決定俯萌,以 100 為基數(shù)提升果录。
*物品的具體屬性參考下面的圖鑒
3. 經(jīng)過圖上的一條路(邊)的時(shí)候,道路的地形屬性和所攜帶的物品屬性互相作用咐熙,會(huì)決定呱實(shí)際消耗的時(shí)間和體力弱恒。
4. 路上可能會(huì)遇見小伙伴,會(huì)在之后的旅行中結(jié)伴而行棋恼,從而出現(xiàn)在明信片中返弹。
5. 根據(jù)路途屬性,有一定概率會(huì)寄相關(guān)的明信片爪飘。
6. 當(dāng)體力不支的時(shí)候义起,蛙必須停下來休息 3 小時(shí),休息完之后體力會(huì)恢復(fù)到 100师崎。休息時(shí)間也算作旅行時(shí)間默终。
7. 當(dāng)?shù)竭_(dá)目的或者旅行時(shí)間耗盡的時(shí)候,蛙就會(huì)回家。
? ? 7.1 回家時(shí)會(huì)攜帶三葉草和抽獎(jiǎng)券齐蔽。
? ? 7.2 如果在時(shí)間耗盡前到達(dá)了目的地两疚,蛙會(huì)在此基礎(chǔ)上帶回當(dāng)?shù)靥禺a(chǎn)和收藏品。
所以如果你的蛙很久都沒回家含滴,回家了也沒有帶土特產(chǎn)诱渤,可能是路途上多次體力不支,暈倒在路邊谈况。
呱在每條路上的耗時(shí)是怎么計(jì)算的源哩?
呱離家出走了怎么辦?(這算是個(gè)旅行系統(tǒng)的設(shè)計(jì)彩蛋吧)
如果長(zhǎng)時(shí)間沒有準(zhǔn)備便當(dāng)鸦做,包里和桌上都沒有食物,呱會(huì)憤然離家出走(どこかへ出かけています)谓着。
這個(gè)時(shí)候在桌子上放上吃的泼诱,呱就會(huì)在 5~30 分鐘內(nèi)回家。
有趣的是赊锚,離家出走也算作成就計(jì)算中的旅行次數(shù)...emmmm治筒。
道路有哪些屬性?
連接不同地點(diǎn)之間的每條路 (edge) 都有以下幾個(gè)屬性
1.地形
四種地形分別是普通舷蒲、大海耸袜、山地、洞穴
經(jīng)典的SLG地形影響行動(dòng)的設(shè)計(jì)牲平,從當(dāng)年“”霸王的大陸“”開始
2.耗時(shí)
途徑這條路的體力和時(shí)間損耗堤框,分為基礎(chǔ)耗時(shí)和地形增加耗時(shí)
呱需要跋山涉水自然會(huì)耗時(shí)久一點(diǎn)
3.明信片概率
明信片上不同元素出現(xiàn)的概率
據(jù)說所有的地圖元素都有真實(shí)原型
4.遇見伙伴
遇見特定伙伴的概率
收藏品有點(diǎn)敗筆,太少了纵柿。像GAGEX Co推出的那幾款“昭和雜貨店”蜈抓,“昭和盛夏祭典”就相當(dāng)成功。
屬性分類
? ??HP
? ??????最大時(shí)間(小時(shí))
????????決定蛙的旅行時(shí)間
? ??????初始體力提升(%)
????????增加一開始一鼓作氣能旅行的距離
? ??????隨機(jī)體力提升(%)
????????隨機(jī)額外增加體力提升的最高百分點(diǎn)
物品幾率
? ??????三葉草
????????獲得三葉草數(shù)量
? ??????額外隨機(jī)三葉草
????????隨機(jī)額外獲得的最大三葉草數(shù)量
? ??????抽獎(jiǎng)券
????????獎(jiǎng)券數(shù)量
? ??????物品收集阻力
????????減少收集阻力昂儒,增加獲得目的地收藏品的概率
決定地區(qū)
????對(duì)應(yīng)地區(qū)被選中的概率沟使,如果值為 D 則可以直接決定目的地所在區(qū)域
移動(dòng)速度
????根據(jù)地形不同,提升移動(dòng)速度渊跋,減少途徑所耗費(fèi)的時(shí)間腊嗡,在相同旅行時(shí)間內(nèi)可以走更遠(yuǎn)
朋友
????遇到特定旅行伙伴的概率
遭遇地形
????途徑特定地形時(shí)候獲得相應(yīng)明信片的概率
FLAG 屬性
????立一些特定的 Flag,主要影響成就系統(tǒng)拾酝,下面會(huì)寫到
實(shí)例: 幾個(gè)例子來展示物品和路線結(jié)合的效果
1.?決定想去的地區(qū)
攜帶的便當(dāng)和抽獎(jiǎng)獲得的護(hù)身符(お守り)可以提升選擇特定地區(qū)的概率燕少。 抽獎(jiǎng)獲得的車票(きっぷ)可以直接決定所去到的地區(qū)。
例:想去北方蒿囤,使用北國(guó)きっぷ棺亭。
2. 影響路途的距離和時(shí)間
帶最大時(shí)間 值高的食物吃走得遠(yuǎn),帶體力提升值高的食物吃走得快耗時(shí)少。
3. 快速通過沿途路線的地形
帶有地區(qū)速度加成的食物或者道具镶摘,可以增加特定地形的移動(dòng)速度嗽桩。
不同物品的移動(dòng)速度效果可以疊加,詳情查看上面的解釋凄敢。
4. 匹配在道路上遇到的伙伴
如果在途徑會(huì)遭遇伙伴的道路碌冶,特定物品可以增加實(shí)際遭遇概率
例:
抽獎(jiǎng)抽到的黃色ぼうろ(餅干)可以增加路途中遇到螃蟹的幾率。
綜合運(yùn)用(敲黑板@苑臁F伺印!)
呱想去秋田県男鹿市看燈塔
在地圖上找到 秋田県(3022) 在北方拒逮。
便當(dāng)選擇あさつきのヒ?ロシキ (蔥餅罐氨?)可以提升去北方的概率。
攜帶青色のお守り (藍(lán)色護(hù)身符)可以提升去北方的概率滩援。
如果有北國(guó)きっぷ(北方車票栅隐?)可以直接決定去北方,上面的便當(dāng)和護(hù)身符可以換別的玩徊。
通過目的地概率表發(fā)現(xiàn)攜帶各類帳篷前往 3022 目的地的概率更高租悄。
查看可能的路線發(fā)現(xiàn)從起始點(diǎn) 3000 到 3022 之間會(huì)途徑很多山路。
攜帶ハイテクテント (高級(jí)帳篷恩袱?)增加山地移動(dòng)速度更顯著泣棋。
如果還有空余,可以帶上よつ葉(四葉草)或者幸運(yùn)の鈴畔塔,提升帶回物品的概率潭辈。
旅途中會(huì)帶回哪些明信片?
途徑每條道路上會(huì)遇到的明信片元素都有很明確的概率澈吨。
普通的明信片是自動(dòng)合成的萎胰。根據(jù)道路元素、所攜帶道具棚辽、遇到的同行小伙伴技竟,程序會(huì)選擇合適的背景、前景和呱和小伙伴的 pose屈藐,合成完整的明信片榔组。粗略計(jì)算,有 120 種左右的組合联逻。
有一些帶有特定的故事情節(jié)明信片是單張繪制的搓扯,這里也可以看出游戲制作者的用心:迷路和小伙伴看地圖通常出現(xiàn)在地圖的邊緣,冷清下水道一般出現(xiàn)在四通八達(dá)的城市交通樞紐包归。
旅途中會(huì)帶回哪些特產(chǎn)锨推?
上面提到了,成功到達(dá)目的地(GOAL)的時(shí)候才會(huì)獲得特產(chǎn),收藏品的獲得的基礎(chǔ)概率是 15%换可,使用四葉草或者幸運(yùn)鈴鐺可以減少收集收藏品的阻力椎椰,增加獲得概率成洗。
游戲代碼中有收藏品收集三次必定成功的設(shè)定档叔,但是實(shí)際上并未啟用静暂,可能在之后的版本中會(huì)引入
但是很可能是為了提高收藏的難度(因?yàn)榉N類太少)而故意放棄的
朋友什么時(shí)候會(huì)來訪痴鳄?
蝸牛、蜜蜂和烏龜會(huì)時(shí)不時(shí)來訪背犯。來訪停留的時(shí)間 180~270 分鐘玻墅。
蜜蜂需要有至少 3 件收藏品才會(huì)出現(xiàn)装诡,烏龜需要有至少 6 件收藏品吞歼。
朋友來訪應(yīng)該投喂什么圈膏?
給來訪的朋友投喂會(huì)獲得三葉草和抽獎(jiǎng)券的回禮:
在此基礎(chǔ)上,投喂帶有稀有 FLAG 屬性的物品會(huì)多獲得 20 根三葉草篙骡,多獲得 1~4 張抽獎(jiǎng)券稽坤。
朋友會(huì)記住最近三次的食品。連續(xù)投喂同一種物品医增,獲得回禮的數(shù)量會(huì)降低。
我去老虫!這個(gè)真是太人性了叶骨。連續(xù)三次會(huì)吃膩!怪不得每次給蝸牛米它回饋極少
為了達(dá)到最好效果祈匙,最好換四種不同的禮物輪流投喂忽刽,具體可以參照下面的喜好表格:
四葉草獲得的概率是?
完成教程后會(huì)自動(dòng)誕生第一顆四葉草夺欲,除此之外跪帝,每一根三葉草重生的時(shí)候都有1%的概率成為四葉草。
抽獎(jiǎng)球的概率是些阅?
白:60%
藍(lán):27%
綠:9%
紅:3%
金:1%
如何獲得成就伞剑?
蛙旅行的時(shí)候會(huì)立一些 Flag,從代碼中整理了一下觸發(fā)的條件:
end