作者KiminoKnife (君之匕首)
看板PokemonGO
標題[討論] 從程式效能觀點論乘龍消失
時間Tue Nov 15 01:52:11 2016
一直以來,這個遊戲的生怪機制有多種猜測
大致上,對於生怪機制的猜測最直覺可以想到的有下面兩種
(本文只討論野生怪,不討論櫻花、薰香)
1、每個生怪點都有一支(或是多個點共用)的程式在運作,每隔固定的時間決定生什麼怪
2、每一種怪都有一支或多支程式在負責生怪,生完成後,再查表依權重隨機分配出現地
由這次的乘龍事件和上次的萬聖節活動
幾乎可以確定N社用的是偏向第二種的方式實作生怪系統
而從程式的角度,第二種方式也比較合理一點
以下會一一分析為什麼第二種方式會優於第一種
而乘龍和萬聖節的活動就是這篇文論點有力的旁證
首先來看第一種方式
以第一種方式,那麼會有一種紀錄出怪機率的表存在
比方說南竂的表大概會長這樣:乘龍: 1%,波波:1%
而一般道路上的表大概是這樣:乘龍: 0%,波波:15%
稍微有這個概念後,來看一下程式的流程:
查表生怪→每隔一定的時間重複
OK,超簡單的,接著看第二種
第二種一樣是會有一種表,但是個表是紀錄出怪點的權重
基本上表只有142張,一種怪一張表
表大概長成這樣:
乘龍用的表:南寮: 1%,台北市中心: 0%
波波用的表:南竂: 2%,台北市中心:15%
而程式的流程會長這樣
生怪→查表決定要把這隻怪丟到哪個點→每隔一定的時間重複
接下來來看幾個可以在遊戲設計之時必然就會想到的問題
第一種方法 第二種方法
調整巢穴 需調整所有和巢穴有關的表, 將某一類的點交換,最懶可以
每張表怪的權重要重新寫過 將兩張表對調
註:我猜最初換巢的INDEX規律
就是這樣來的
增加出怪點 兩種方法,讓新的點和舊點共 將新的點寫到表裡
用程式,或是開新的程式
調整出怪比率 調整相關表所紀錄的權重 調整每支生物的程式數量
(EX:萬聖節) EX:波波平常5支程式,鬼斯1支
萬聖節時波波1支,鬼斯5支
重生點 需有支程式負責重生 就只是那個點在表裡的權重較高
稍微列舉幾個比較單純且和這幾次的現象相關的問題
會發現第二種實作幾乎都比第一種優秀
比較的基準點在於第二種的實作不需要去頻繁地調整表
調整表意味著需要去大規模地改動資料庫
而改動資料庫這件事是非常耗成本、沒有效率的
能避免才應該避免
特別是像pokemon GO 這種全球性的遊戲
刷資料庫這種事耗的資源鐵定非常巨大
第二種實作方式必然是比較好的選擇
那麼現在來回答大家最關心的問題吧
Q:為什麼日本出現一堆乘龍,台灣的乘龍就消失了?
A:表中的權重為這次活動,全部集中到那個地區,其它地區的權重都被調很低
而且以這次活動帶來的現象來看,負責生產乘龍的程式很有可能全球就只有不到五支
甚至可以考慮只有一支程式在運作的可能性…畢竟乘龍真的很少
可以確定的是,至少台灣和日本共用同一支生乘龍的程式
Q:萬聖節的機制是?
A:我個人猜測只是將平常波波使用的表與程式的運作數量和鬼斯對調而已
可以完美的解釋為什麼鬼斯一出波波就死光了
Q:如果這個機制是真的,那對攻略遊戲有什麼幫助?
A:如果資料量夠大,也許可以反推出哪些點在表裡的權重
可以用期望值的方式去估算稀有怪的重生時地
並且對那種「某某地常出沙瓦郎,可以考慮去蹲看看」一類的意見給予正面肯定
依碼農的惰性,表是不會太常改的,有出過某一種怪的點(及附近)
必有機會再出一樣的怪
因此,預報是有可能成為現實的,比方說
「A地出現卡比獸的機率
明天下午三點到四點間的機率為68%
下午兩點到五點間的機率為95%
下午一點到六點間的機率為99%
」
之類的預報可能會出現
甚至我覺得如果雷__的製作者有將數據全部留下的話
應該是已經可以做了,只是要不要花力氣去解析數據而已
如果預報出現,將會大大提升收集稀有種的效率
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.185.128.17
※ 文章網址: https://www.ptt.cc/bbs/PokemonGO/M.1479145934.A.8A0.html
※ 編輯: KiminoKnife (111.185.128.17), 11/15/2016 01:54:05
推 alexscafe: 開張六給他 讓他贏莊家一百塊 11/15 01:57
推 lantan: 分析推 11/15 01:57
推 Nern: 快推不然 ... 好像蠻好懂的 11/15 01:58
→ birdy590: 過去已知的生怪點紀錄並不支持這樣的假設 11/15 02:03
求詳細?
※ 編輯: KiminoKnife (111.185.128.17), 11/15/2016 02:05:42
推 o1579o: 可是第二種,怪的數量應該會先有一次權重分配吧?? 生乘龍 11/15 02:17
→ o1579o: 的數量比波波低很多 11/15 02:17
我在文章裡有稍提到,就是用來生怪的程式數量不同
生乘龍的程式全世界加起來可能沒幾支,但是生波波的程式可能有成千上萬支
※ 編輯: KiminoKnife (111.185.128.17), 11/15/2016 02:20:08
推 nadoka: 我覺得重生點的分布可能有所謂的種子參數(類似地圖種子碼) 11/15 02:42
推 nogoodid: 全世界乘龍量是固定的 那真的算是台灣乘龍出差支援了 11/15 02:43
→ nadoka: 據我所知重生點的分布就至少改了兩次 11/15 02:43
→ nadoka: 要達成這種規模的改動應該是利用固定數據再用一個數字去搭 11/15 02:44
→ nadoka: 除非真正破解背後的固定模式不然每次改動後只能重掃QQ 11/15 02:44
推 nogoodid: 剛剛去看日本雷達 石卷的乘龍消失了 11/15 02:45
推 nadoka: 我看日本雷達也還有啊0.0 11/15 02:56
推 o1579o: 但是生怪點不是改來改去,如果是用點來填寫第2表格,怎麼 11/15 02:57
→ o1579o: 抓點 11/15 02:57
→ o1579o: 可能就點A點B點C點D這樣,再看要指定點A是哪個點? 11/15 02:58
推 ateng: 只有石卷有出嗎?這三個縣其他城市沒有? 11/15 03:00
推 nadoka: 石卷特多 11/15 03:01
推 nogoodid: 我剛看pokemap石卷是沒有的 剛開goradar就有看到了 11/15 03:04
推 HommyDragon: 推 11/15 05:12
推 GOOGLEISGOD: 推認真 11/15 07:42
推 arcslam: 推 11/15 08:48
推 JCC: 請問日本三縣以外的地方乘龍也消失了嗎? 11/15 09:10
推 andy69151: 推推 很有趣~ 11/15 10:01
推 Dorapedia: 推 11/15 10:10
推 aim: 推findings 長見識了 11/15 10:54
推 HeaDisBiG: 可以教我統計嗎 QQ 11/15 21:22