大家好,我是麒麟子。
不得不说,我第一次写麻将的时候,对于洗牌算法,也是很纠结的。纠结的点并不在于能不能写出来,而是无法确定,自己写的这个洗牌算法,是否符合标准。
不止一次在QQ群里,微信中,以及论坛中,被人问起棋牌的洗牌算法。
幼麟棋牌的服务器是采用NodeJS来写的,所以,下面的代码,都是基于JS来演示。如果是使用其它语言的朋友,自己作一些调整即可。
1、幼麟棋牌中的洗牌算法
在Java标准库中,有一个洗牌算法,大概的逻辑就是,依次拿出一张牌,然后再随机挑选一张与这一张的位置互换。幼麟棋牌采用了这套算法,因为Java的市场占有率太高了,不得不相信。
二话不说,上代码。反正你们要的是代码。
//标准洗牌算法
function shuffle(arr){
for(var i = 0; i < arr.length; ++i){
var index = Math.floor(Math.random() * arr.length);
var t = arr[index];
arr[index] = arr[i];
arr[i] = t;
}
}
2、网狐洗牌算法
网狐洗牌算法,有点像来搞笑的,但是挺实用。 至于它与标准洗牌算法有多少差异,麒麟子没有去推算过。写出来,只是为大家提供了一些参考。
function shuffle(arr){
arr.sort(function(a,b){
return Math.random() > 0.5? -1:1;
});
}