游戏中常见的洗牌算法
来源:互联网 发布:我是未来 阿里云 编辑:程序博客网 时间:2024/05/17 04:25
今天把游戏中用到的洗牌算法好好看了看,把自己感觉最易懂的和最经典的一种分享出来,当然,我这个是看过别人之后自己写的。
我们以扑克牌当做例子,一共有54张,如何一次就把排序全部打乱呢?
1、最笨的洗牌算法:
先把54张牌按照顺序排好,每次取一个0-54的随机数,根据随机数取出该牌,放入新的牌序中,这样经过54次大循环就组成了洗过的牌。但是这种办法的缺点就是每次取随机数的时候可能会取到之前已经取过的牌,所以需要做一个比较,如果该牌已经被取过,则重新取随机数。
2、过滤之后的洗牌算法
这种方法就是比第一种算法多加了一个数组,每次从该数组中取一张卡牌,每次取过就少一张,这样就使得循环的次数变得很简单,只是来回取数比较麻烦。
3、单数组取数的洗牌算法
这个算法网上已经有了,我觉得很好,就拿过来说下,不过不知道原作是谁。就是按照顺序或倒序从卡牌中取一张牌,然后从剩下的牌中随机再取,这样做一个循环,代码如下(C#写的):
class Shuffle_algorithm//洗牌算法
{
static void Main(string[] args)
{
int[] card = new int[54];//54张牌
Random random = new Random();//随机数
for (int i = 0; i < card.Length; i++)//把牌按顺序牌好
card[i] = i;
for (int i = 0; i < card.Length; i++)//洗牌
{
//从第0张开始,取顺序为0的牌,从053随机取一张牌放到第0张处
//下一章取顺序为1的牌,从1到53随机取一张牌放到第1张处,以此类推
int j = random.Next(i, card.Length - 1);
int temp = card[i];
card[i] = card[j];
card[j] = temp;
}
for(int i=0;i<card.Length;i++)//安装顺序输出洗过的牌
System.Console.Write(card[i] + " ");
System.Console.ReadLine();//做个停顿
}
}
0 0
- 游戏中常见的洗牌算法
- 游戏Algorithm----洗牌算法----探讨
- 游戏中常见的几种追踪算法
- 游戏算法之——洗牌算法
- 洗牌的一个算法
- 洗牌算法的学问
- 洗牌算法的研究
- 错误的洗牌算法
- 简易的洗牌算法
- C#实现的洗牌算法
- 一个很小的洗牌算法
- 不用随机数的洗牌算法
- 证明洗牌算法的随机性
- 洗牌算法汇总以及测试洗牌程序的正确性
- 开发一款扑克游戏,请给出一套洗牌算法,公平的洗牌并将洗好的牌存储在一个整形数组里
- 开发一款扑克游戏,请给出一套洗牌算法,公平的洗牌并将洗好的牌存储在一个整形数组里
- 洗牌算法
- 洗牌算法
- BouncyCastle产生一个PKCS#12规范的PFX/p12证书【自用笔记】
- ROS_OpenCV_socket传送图像_结果不对
- 机器学习算法-Mean-shift
- unity开发相关环境(vs、MonoDevelop)行结尾符不一致解决办法
- oracle 求两个时间点直接的分钟、小时数
- 游戏中常见的洗牌算法
- SLRequest
- git学习笔记(一)
- UTF-8和GBK互转
- spring巧用继承解决bean的id相同的问题
- Realm简单入门(转载)
- 正则表达式
- Code Convention
- C++技巧之operator操作符