unity斗地主洗牌发牌算法实现

       如果你要问游戏行业什么游戏开发起来难度小,周期短?是RPG,MMORPG,Moba?亦或是FPS,赛车游戏?其实都不是!棋牌游戏才是开发难度小,周期短的游戏项目。是不是有人不服了?没关系,听我说完。首先用unity开发棋牌游戏的话,诸如斗地主之类的,难点就只有一个,那就是棋牌游戏游戏算法了,比如洗牌,出牌逻辑,比牌逻辑,其他的就没什么了。至少它逻辑没有很复杂。像FPS,Moba,MMORPG等就不同了,有熟悉内容多,难度大。赛车游戏就更不用说了,如果你要非常真实的,那么各种和物理相关的参数计算,你必须得会,不然做不出高质量的赛车游戏。所以,棋牌游戏难度比较小。我做了一个斗地主的洗牌发牌算法的Demo,这个面试也是会问的。应该有点用处。先上效果图。

       OK,那么我们来看看怎么来实现这个功能!先来梳理下这个Demo具有的功能:创建牌,洗牌,发牌(连同发牌效果),排序,就差打牌了,哈哈。好,首先我们来看看这几步怎么搞定,首先是创建牌,这个的话呢,不是很难。但是我们先要有整体思维,牌的话,我们有花色,大小(权值),等。然后它是很有规律的,发现每月:四色牌各13张,然后大小王各一张。所以,这个时候我们就可以用循环来做了。直接就是按顺序创建就可以。黑红梅方各13张,然后每13张牌就切换一下花色。这样52张牌就出来了。大小王再另外写逻辑就可以了(方法多种,不一定要用我这种)。这里原理说的应该比较清楚了,上代码:


这是创建牌逻辑。然后牌是创建好了,但是它是按顺序的,有规律的,我们不希望它是这样的,我们希望它是无需的,随机的。那么这个时候就需要洗牌了。洗牌逻辑呢也很简单。原理就是:我们创建的牌是放在一个集合里面了。然后大家应该知道我们打牌的时候,是一张一张的发,或者摸的。对吧,所以我们就要有一个概念,那就是洗好的牌,我们也需要放在一个集合里面,这个集合的话,它比较特殊,它应该是这样的,一张一张的出来拍,然后我们一张一张的摸。那么在数据结构里面就有这样的一个集合,它就是队列,它的特点就是先进先出。所以我们把牌打乱洗好了就放它里面,然后发牌就从这里发。好了,那么洗牌原理是什么呢?我们新建一个临时列表,然后我们就随机打乱下标,再插入到它里面去。因为新的列表我们的大小是0,然后我们要不断循环来把元素插入到这个新列表去,那么它的大小就会不断增加,至于循环多少次,很明显,牌库有多少牌,就循环多少次。

最后再把这个临时列表一齐赋值给队列,进入下一步发牌。OK,上代码:

发牌就更简单了。直接疯狂出队列就对了。我就不多说,没得什么难度,唯一一个点,就是发牌的动画(其实也算不算是动画,或者可以叫它效果),我这里呢,是用的协程来做的。直接上代码:

OK,最后一个就是牌发完需要排序,这个需要用到排序算法,排序算法很多种:诸如冒泡,快牌,插入,选择...等。这些算法我们都可以用。效果一样,我这里就直接用冒泡,因为它最简单,对初学者最友好。也最容易理解。话不多说,上代码:

好了,四个模块都已经搞定,当然这是四个核心的部分,并不是全的。还有一些其他的不是很重要的东西,同时又比较简单的,我就没说。所以如果大家对这个demo感兴趣的话,你可以联系我,我给你整个Demo。

好了,这节就到这里了,发文不易,不喜勿喷哦!点击链接加入群聊【Unity/Cocos交流群】

你可能感兴趣的:(unity斗地主洗牌发牌算法实现)