? ? ? ?如果你要問游戲行業(yè)什么游戲開發(fā)起來難度小酬姆,周期短嗜桌?是RPG,MMORPG辞色,Moba骨宠?亦或是FPS,賽車游戲?其實(shí)都不是相满!棋牌游戲才是開發(fā)難度小层亿,周期短的游戲項(xiàng)目。是不是有人不服了立美?沒關(guān)系匿又,聽我說完。首先用unity開發(fā)棋牌游戲的話建蹄,諸如斗地主之類的碌更,難點(diǎn)就只有一個,那就是棋牌游戲游戲算法了洞慎,比如洗牌痛单,出牌邏輯,比牌邏輯劲腿,其他的就沒什么了旭绒。至少它邏輯沒有很復(fù)雜。像FPS,Moba谆棱,MMORPG等就不同了快压,有熟悉內(nèi)容多,難度大垃瞧。賽車游戲就更不用說了蔫劣,如果你要非常真實(shí)的,那么各種和物理相關(guān)的參數(shù)計(jì)算个从,你必須得會脉幢,不然做不出高質(zhì)量的賽車游戲歪沃。所以,棋牌游戲難度比較小嫌松。我做了一個斗地主的洗牌發(fā)牌算法的Demo沪曙,這個面試也是會問的。應(yīng)該有點(diǎn)用處萎羔。先上效果圖液走。
? ? ? ?OK,那么我們來看看怎么來實(shí)現(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ī)律的秸抚,我們不希望它是這樣的速和,我們希望它是無需的歹垫,隨機(jī)的。那么這個時候就需要洗牌了颠放。洗牌邏輯呢也很簡單排惨。原理就是:我們創(chuàng)建的牌是放在一個集合里面了。然后大家應(yīng)該知道我們打牌的時候碰凶,是一張一張的發(fā)暮芭,或者摸的。對吧痒留,所以我們就要有一個概念谴麦,那就是洗好的牌蠢沿,我們也需要放在一個集合里面伸头,這個集合的話,它比較特殊舷蟀,它應(yīng)該是這樣的恤磷,一張一張的出來拍,然后我們一張一張的摸野宜。那么在數(shù)據(jù)結(jié)構(gòu)里面就有這樣的一個集合扫步,它就是隊(duì)列,它的特點(diǎn)就是先進(jìn)先出匈子。所以我們把牌打亂洗好了就放它里面河胎,然后發(fā)牌就從這里發(fā)。好了虎敦,那么洗牌原理是什么呢游岳?我們新建一個臨時列表,然后我們就隨機(jī)打亂下標(biāo)其徙,再插入到它里面去胚迫。因?yàn)樾碌牧斜砦覀兊拇笮∈?,然后我們要不斷循環(huán)來把元素插入到這個新列表去唾那,那么它的大小就會不斷增加访锻,至于循環(huán)多少次,很明顯闹获,牌庫有多少牌期犬,就循環(huán)多少次。
最后再把這個臨時列表一齊賦值給隊(duì)列避诽,進(jìn)入下一步發(fā)牌龟虎。OK,上代碼:
發(fā)牌就更簡單了茎用。直接瘋狂出隊(duì)列就對了遣总。我就不多說睬罗,沒得什么難度,唯一一個點(diǎn)旭斥,就是發(fā)牌的動畫(其實(shí)也算不算是動畫容达,或者可以叫它效果),我這里呢,是用的協(xié)程來做的垂券。直接上代碼:
OK花盐,最后一個就是牌發(fā)完需要排序,這個需要用到排序算法菇爪,排序算法很多種:諸如冒泡算芯,快牌,插入凳宙,選擇...等熙揍。這些算法我們都可以用。效果一樣氏涩,我這里就直接用冒泡届囚,因?yàn)樗詈唵危瑢Τ鯇W(xué)者最友好是尖。也最容易理解意系。話不多說,上代碼:
好了饺汹,四個模塊都已經(jīng)搞定蛔添,當(dāng)然這是四個核心的部分,并不是全的兜辞。還有一些其他的不是很重要的東西迎瞧,同時又比較簡單的,我就沒說弦疮。所以如果大家對這個demo感興趣的話夹攒,你可以聯(lián)系我,我給你整個Demo胁塞。
好了咏尝,這節(jié)就到這里了,發(fā)文不易啸罢,不喜勿噴哦编检!點(diǎn)擊鏈接加入群聊【Unity/Cocos交流群】