五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

史上最難小游戲“羊了個羊”深度剖析!玩不過去是智商問題嗎?

2022-09-24 19:07 作者:李永樂老師官方  | 我要投稿

最近有一個小游戲“羊了個羊”,突然爆火。它的游戲規(guī)則很簡單:把堆積在一起的牌從上到下點到臨時卡牌槽里,湊齊一樣的三張就能消掉,如果全部卡牌都消掉游戲就通關(guān)了。臨時卡槽一共有7個位置,如果位置都滿了,游戲就輸了。


圖片
羊了個羊


這個游戲第一關(guān)非常簡單,就像1+1=2一樣。第二關(guān)難度飆升,直接變成考研。盡管通過分享游戲或者看廣告可以有一些輔助道具,但是還是有許多人玩了上百局都沒有通關(guān)。


圖片


有小朋友就問我說:為什么這個游戲這么難玩?它通關(guān)的概率到底有多大呢?經(jīng)過我三四天的研究,今天我就把我的研究成果向大家匯報一下。


一. 游戲的設(shè)計邏輯

在網(wǎng)上有一個大神,把游戲的源代碼找到了。


圖片
b站@碼農(nóng)高天

通過分析源代碼,我們可以發(fā)現(xiàn)這個游戲的設(shè)計大約可以分為三個步驟。


首先:在桌面上設(shè)計一些卡的位置。

如果卡牌一共有15種,每一種有18張,那么應(yīng)該設(shè)計15x18=270個卡位。每一卡位都有一組坐標(biāo)(x?,y?,z?),其中x?和y?表示在桌面上的位置,z?表示堆疊的層數(shù), 角標(biāo)i從1到270。


其次:對卡牌進(jìn)行洗牌。

設(shè)計15種不同的卡牌,每種卡牌18張,調(diào)用“亂序”函數(shù),隨機打亂270張卡的順序。


最后:按順序把每一張卡放進(jìn)對應(yīng)的卡位里。

因為“卡位”和“牌”都已經(jīng)有了順序,只要把序號相同的牌放在相應(yīng)的卡位上,就完成游戲的初始化。

圖片
游戲初始化完成后


在這個過程中,“設(shè)計卡位”的步驟是人工完成的,程序員人為的設(shè)定好每一個卡的位置,并且每一天更換一次。所以,你會發(fā)現(xiàn)卡的排列非常對稱,而且在每一天中固定不變,這就是“每日一關(guān)”的含義。


而“洗牌”的過程是程序隨機完成的,所以如果你在一天中打很多局,卡牌的位置不會變,但是每個位置上的卡牌種類是變化的。


通過分析程序設(shè)計邏輯,我們會發(fā)現(xiàn):游戲設(shè)計者并沒有人為的設(shè)置障礙,讓玩家無法通關(guān)。但是因為它的“隨機洗牌“,造成許多關(guān)卡本身就是無解的。


而且,游戲能夠通關(guān)的概率有多大,和程序員人工設(shè)計卡位的方式很有關(guān)系??梢韵胂螅喝绻绦騿T把所有的卡平鋪在桌面上,那程序100%是有解的。但是如果把所有卡摞成一列,那有解的可能性就微乎其微了。


圖片
這種局面有解的可能性不大


二. 對殘局的數(shù)學(xué)分析

我們不妨來分析一個殘局,看看游戲有解的概率大約有多少。


假設(shè)在某一天的游戲中,游戲設(shè)計師設(shè)計的卡位,最底部的五層是這樣的:

最底層有一張牌:

圖片


在倒數(shù)第二層有4張牌:

圖片


在上面又壓了4張牌

圖片


在上面又壓了4張牌

圖片


最上面又壓了1張牌:

圖片


也就是:從最下方到最上方,是1-4-4-4-1的結(jié)構(gòu),一共有14張牌。


如果這個結(jié)構(gòu)位于整個牌堆的最底部,根據(jù)解鎖的原則,只有點開最上層的1張牌,才能解鎖其他牌,所以要想通關(guān),必須會在某個時刻面對這個殘局。那么,面對這樣的局面,通關(guān)概率大概有多大呢?


我們來計算一下這種牌局通關(guān)的必要條件


假設(shè)在桌面上的最后14張牌,種類一共有N種。顯然,N最小是1(所有卡牌都是同一種類的),最大是14(所有卡牌都是不同的)??梢韵胂螅喝缢械目ǘ际峭环N,一定能夠通關(guān);如果有14種,那一定無法通關(guān)。那么,要想通關(guān),這14張卡的種類N最多是幾呢?


“羊了個羊”是一個三消游戲,要想把N個種類的牌完全消除,牌的個數(shù)至少是3N張。也就是:如果殘局里每一種牌都是3張,一共3N張,就有可能完全消掉。

*如果某種牌有6張,那總的牌數(shù)就需要是3N+3張,才有可能完全消除。


可是,剛剛還說桌面上只有14張牌,現(xiàn)在又說有3N張,這不是矛盾嗎?別忘了:臨時卡槽還有一些位置。如果剛好能夠通關(guān),3N張卡中有14張在桌面上,余下的3N-14張就應(yīng)該在臨時卡槽里。


還有,臨時卡槽一共只有7個位置,而且裝滿了牌游戲就結(jié)束了,所以臨時卡槽里的儲存的牌最多只有6張。


這樣,我們就得到了一個核心不等式:

3N-14≤6


這表示:殘局中如果有N種牌,那么要想通關(guān),牌的數(shù)量至少是3N張,其中有14張在桌面上,余下的牌在臨時卡槽里,而且最多有6張。


圖片


解上述不等式,同時注意N是一個整數(shù),得到

? N≤6


即:如果牌局的最底層14張牌如我假設(shè)排列,那么牌局有解的必要條件是最后14張牌的種類小于等于6種。


必須注意:即使?jié)M足這個條件,牌局依然不一定有解。但是不滿足這個條件,牌局一定是無解的。

*在我講到這個問題時,很多朋友說我做錯了,因為一共270張牌一定是3個一組消去的,所以最后不可能剩余不成組的14張牌。其實,這種說法是沒有理解我的設(shè)計意圖。因為程序員的隨機亂序,最后14張牌是什么都有可能。但是,如果最后14張牌的種類數(shù)多余6種,那么就必然無法通過消去達(dá)到這個殘局,也就是無解的。如果要有解,首先要達(dá)到這個殘局,那就必須滿足N≤6的條件。


三. 蒙特卡羅方法

一共15種牌,每種18張,隨機排列在270個位置上,在最后14個位置上牌的種類數(shù)小于6種,概率有多大呢?顯然這不是一個好算的數(shù)學(xué)問題。


不過幸好,我們有了計算機,可以通過蒙特卡羅方法得到問題的估計值。即讓計算機隨機嘗試10000次,看看有多少次滿足條件,就能估算這個概率了。


具體的模擬方法是這樣的:

圖片

模擬程序代碼如下:

圖片

通過實驗,我發(fā)現(xiàn)在10000次統(tǒng)計中,底層14張牌的種類小于等于6種的次數(shù)大約在40在70次之間。我又把以上的程序循環(huán)執(zhí)行了1000次,得到了在一萬局中,“可能有解”的局?jǐn)?shù)的分布關(guān)系如下:

圖片
1000次、10000局中“可能有解”的局?jǐn)?shù)統(tǒng)計分布

你會發(fā)現(xiàn):一萬局中,可能有解的局?jǐn)?shù)大約成正態(tài)分布,期望數(shù)53,標(biāo)準(zhǔn)差7,也就是我們得出了以下結(jié)論:


如果游戲最底部的五層如我的設(shè)計,那么游戲有解的概率上限平均值為0.5%。我們有95%的把握說:游戲有解的概率上限不超過0.7%。


也就是說,玩1000把,最多也就只有5到7局是“有可能有解”的。實際上,我還只是考慮了14張牌的一個殘局,真實的游戲牌局比我設(shè)計的更坑,有解的概率很有可能再低10到100倍,即0.1%甚至0.01%!


游戲之所以不能通關(guān),不是我們的智商問題,而是因為程序員偷懶做了個大隨機,造成關(guān)卡本身無解。


圖片


四. 如何改進(jìn)程序

如果我設(shè)計這個游戲,肯定不會允許無解的情況發(fā)生。我會按照這樣的思路設(shè)計游戲:


第一步:設(shè)計卡位順序:

1. 人為設(shè)定270個卡位。

*在沒有放卡之前,這些卡位都是空的。


2. 按照“從上到下“的解鎖條件,隨機生成一條解鎖路徑。

*因為同一層卡牌有很多張,解鎖的路徑也非常多。我們在這非常多的路徑中,讓程序隨機尋找一條符合規(guī)定的路徑即可。


3. 把解鎖路徑倒過來,作為卡位的順序。


第二步:設(shè)計卡牌順序

15種卡牌,每種6組,每組3張,按照同組三張在一起的原則,進(jìn)行組間亂序排列。

*和原來程序的區(qū)別在于:在我們的設(shè)計中,亂序后的卡牌依然是三張一樣的牌連在一起的。


第三步:將所有卡牌按序放回桌面的對應(yīng)卡位上

反復(fù)隨機執(zhí)行下列操作之一:

1. 取出卡牌序列中一組牌,2張放在臨時卡槽中,另1張按序放在桌面卡位上。

圖片

2. 將臨時卡槽中隨機的一張牌按序放到桌面卡位上。

圖片

*其實,這兩個步驟就是把消除卡片的順序倒過來。注意,在臨時卡槽空的時候只能做第一步,臨時卡槽的牌超過4張時只能做第二個步驟,而且做第一步驟時要保證卡槽內(nèi)不能已經(jīng)有相同的牌。


這樣,我設(shè)計了一條消除路徑(第一步),又按照消除的規(guī)則把卡牌一個個倒著放回到路徑上(第二步和第三步),所以最終一定是有解的,而且,這也并不會降低游戲的可玩性。怎么樣,我這個游戲設(shè)計師還不錯吧!


據(jù)說這兩天“羊了個羊”因為鋪天蓋地的批評,已經(jīng)把游戲難度調(diào)低了。我看它采用的方法貌似是增加某幾種牌的比例,減少另外幾種牌的比例。可是這樣做就大大降低了游戲性。


我依然建議他們,用我的方法修改一下游戲。



史上最難小游戲“羊了個羊”深度剖析!玩不過去是智商問題嗎?的評論 (共 條)

分享到微博請遵守國家法律
乾安县| 金山区| 贺兰县| 新泰市| 清苑县| 如皋市| 云阳县| 佛山市| 汤阴县| 枣阳市| 彰化市| 阿瓦提县| 馆陶县| 固安县| 翁牛特旗| 沅江市| 福海县| 南康市| 广灵县| 田林县| 盖州市| 普陀区| 将乐县| 盐津县| 明星| 承德县| 东光县| 曲周县| 阿克| 巴里| 贵州省| 丹阳市| 梁河县| 体育| 合作市| 香港| 天台县| 潞西市| 大港区| 温州市| 舞阳县|