羊了個羊在線版
大家好,我是建哥。
前幾天我的朋友圈突然被一個小游戲“羊換羊”刷屏了。出于好奇,我也打算試一試,但沒想到會登頂…
游戲很簡單,類似于“消樂”。你可以從一堆方塊中找出3個相同圖案的方塊,然后消除它們。
但沒想到,就是這個簡單的小游戲難倒了所有人,很多同學(xué)無論如何也過不了第二關(guān)?。ó?dāng)然包括我??)
但是,作為一個程序員,玩了幾次就發(fā)現(xiàn)不對勁…
方塊的生成是完全隨機的,玩的越多,方塊的范圍就越小,可以選擇的方塊就越少。在這兩個條件下,很難說這個游戲是否真的有解,真的變成了一個運氣的游戲(據(jù)說通關(guān)率不到0.1%)。
不過作者很良心,給了大家改變?nèi)松臋C會??磸V告可以用道具和復(fù)活。
唉,明知道通關(guān)概率渺茫,還是按捺不住,又打了幾十個,因為總覺得自己可能是“天之驕子”。這款游戲之所以能爆紅,除了營銷套路,最重要的是抓住了用戶的心理。
但是,在玩游戲的過程中,我也沒閑著。我在想游戲是怎么開發(fā)的,可能會用什么算法等等。
厭倦了被游戲虐,決定自己做一個“羊換羊”,叫“魚換魚”!
經(jīng)過幾個小時的熬夜,游戲原型制作完成。正式上線前這兩天又打磨了一遍,所有代碼完全開源!
游戲地址:http://cgxln.xyz/y/
轉(zhuǎn)到主頁,你可以選擇各種不同的難度等級:
還可以自定義難度,比如設(shè)置槽數(shù),設(shè)置每層的塊數(shù)等等:
游戲和羊差不多,不過這里我加了4種道具,每種都可以無限使用(無廣告哈哈):
因為時間有限,整個服務(wù)都是一個人完成的,不是很精致,但也足夠滿足通關(guān)的欲望了,哈哈。
最后簡單說一下這個游戲的實現(xiàn)原理。主要有四點:
游戲全局參數(shù):玩游戲的同學(xué)都知道游戲會涉及到很多參數(shù),比如槽數(shù),層數(shù)等等。我們將把這些參數(shù)提取到一個統(tǒng)一的全局變量中,用于其他變量。從而修改一處,自動適配游戲。還可以提供頁面讓用戶自定義這些參數(shù),提高游戲的可玩性。
網(wǎng)格:為了讓方塊的分布相對有規(guī)律,方便坐標(biāo)的計算,我把整個游戲畫布分成了一個24 x 24的虛擬網(wǎng)格,類似于棋盤。一個區(qū)塊占據(jù)一個3 x 3的網(wǎng)格。
隨機生成塊:包括隨機生成塊的圖案和坐標(biāo)。我先根據(jù)全局參數(shù)計算出總的塊數(shù),然后用shuffle函數(shù)對存儲所有動物圖案的數(shù)組進行加擾,再將數(shù)組中的圖案依次填充到塊中。生成坐標(biāo)的原理是在坐標(biāo)范圍內(nèi)隨機選取點,坐標(biāo)范圍可以隨著等級的增加而減小,即生成的圖案越來越擁擠,從而達到逐級增加難度的效果。
區(qū)塊覆蓋關(guān)系:如何先點擊上面的區(qū)塊,才能點擊下面的區(qū)塊?首先,給每個塊分配一個層次屬性。那么有兩個想法。第一種是逐層生成塊,然后依次判斷每個網(wǎng)格中級別最高的塊周圍網(wǎng)格中是否有級別更高的塊。二是在隨機生成塊時將層次關(guān)系綁定到重疊塊上(也就是誰覆蓋了我?我掩護了誰?)。這里我選擇了第二種方法,效率會更高。
當(dāng)然,以上只是我的實現(xiàn)方法,可能不是最好的,但完全可以滿足游戲的功能訴求。