? ? ? ?如果你要問游戲行業(yè)什么游戲開發(fā)起來難度小,周期短?是RPG,MMORPG,Moba?亦或是FPS,賽車游戲?其實都不是!棋牌游戲才是開發(fā)難度小,周期短的游戲項目。是不是有人不服了?沒關(guān)系,聽我說完。首先用unity開發(fā)棋牌游戲的話,諸如斗地主之類的,難點就只有一個,那就是棋牌游戲游戲算法了,比如洗牌,出牌邏輯,比牌邏輯,其他的就沒什么了。至少它邏輯沒有很復(fù)雜。像FPS,Moba,MMORPG等就不同了,有熟悉內(nèi)容多,難度大。賽車游戲就更不用說了,如果你要非常真實的,那么各種和物理相關(guān)的參數(shù)計算,你必須得會,不然做不出高質(zhì)量的賽車游戲。所以,棋牌游戲難度比較小。我做了一個斗地主的洗牌發(fā)牌算法的Demo,這個面試也是會問的。應(yīng)該有點用處。先上效果圖。

? ? ? ?OK,那么我們來看看怎么來實現(xiàn)這個功能!先來梳理下這個Demo具有的功能:創(chuàng)建牌,洗牌,發(fā)牌(連同發(fā)牌效果),排序,就差打牌了,哈哈。好,首先我們來看看這幾步怎么搞定,首先是創(chuàng)建牌,這個的話呢,不是很難。但是我們先要有整體思維,牌的話,我們有花色,大小(權(quán)值),等。然后它是很有規(guī)律的,發(fā)現(xiàn)每月:四色牌各13張,然后大小王各一張。所以,這個時候我們就可以用循環(huán)來做了。直接就是按順序創(chuàng)建就可以。黑紅梅方各13張,然后每13張牌就切換一下花色。這樣52張牌就出來了。大小王再另外寫邏輯就可以了(方法多種,不一定要用我這種)。這里原理說的應(yīng)該比較清楚了,上代碼:

這是創(chuàng)建牌邏輯。然后牌是創(chuàng)建好了,但是它是按順序的,有規(guī)律的,我們不希望它是這樣的,我們希望它是無需的,隨機的。那么這個時候就需要洗牌了。洗牌邏輯呢也很簡單。原理就是:我們創(chuàng)建的牌是放在一個集合里面了。然后大家應(yīng)該知道我們打牌的時候,是一張一張的發(fā),或者摸的。對吧,所以我們就要有一個概念,那就是洗好的牌,我們也需要放在一個集合里面,這個集合的話,它比較特殊,它應(yīng)該是這樣的,一張一張的出來拍,然后我們一張一張的摸。那么在數(shù)據(jù)結(jié)構(gòu)里面就有這樣的一個集合,它就是隊列,它的特點就是先進先出。所以我們把牌打亂洗好了就放它里面,然后發(fā)牌就從這里發(fā)。好了,那么洗牌原理是什么呢?我們新建一個臨時列表,然后我們就隨機打亂下標(biāo),再插入到它里面去。因為新的列表我們的大小是0,然后我們要不斷循環(huán)來把元素插入到這個新列表去,那么它的大小就會不斷增加,至于循環(huán)多少次,很明顯,牌庫有多少牌,就循環(huán)多少次。
最后再把這個臨時列表一齊賦值給隊列,進入下一步發(fā)牌。OK,上代碼:

發(fā)牌就更簡單了。直接瘋狂出隊列就對了。我就不多說,沒得什么難度,唯一一個點,就是發(fā)牌的動畫(其實也算不算是動畫,或者可以叫它效果),我這里呢,是用的協(xié)程來做的。直接上代碼:

OK,最后一個就是牌發(fā)完需要排序,這個需要用到排序算法,排序算法很多種:諸如冒泡,快牌,插入,選擇...等。這些算法我們都可以用。效果一樣,我這里就直接用冒泡,因為它最簡單,對初學(xué)者最友好。也最容易理解。話不多說,上代碼:

好了,四個模塊都已經(jīng)搞定,當(dāng)然這是四個核心的部分,并不是全的。還有一些其他的不是很重要的東西,同時又比較簡單的,我就沒說。所以如果大家對這個demo感興趣的話,你可以聯(lián)系我,我給你整個Demo。
好了,這節(jié)就到這里了,發(fā)文不易,不喜勿噴哦!點擊鏈接加入群聊【Unity/Cocos交流群】