游戏中常见的洗牌算法
今天把游戏中用到的洗牌算法好好看了看,把自己感觉最易懂的和最经典的一种分享出来,当然,我这个是看过别人之后自己写的。
我们以扑克牌当做例子,一共有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();//做个停顿
}
}
游戏中常见的洗牌算法相关推荐
- VB通过洗牌算法生成随机数ID
Visual Basis开发语言通过洗牌算法生成UUID. 1.在Visual Studio中创建一个桌面应用程序用于代码的测试,点击"洗牌算法"按钮式触发算法运算,并将运算结果回 ...
- python实现洗牌算法_洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章 <扫雷与 ...
- 扑克游戏的洗牌算法及简单测试
2019独角兽企业重金招聘Python工程师标准>>> 我在学习<写给大家看的C语言书>这本书时,对书后面附录的一个扑克游戏程序非常感兴趣.源代码在帖子最后. PS:这本 ...
- 随机洗牌算法+matlab,洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章<扫雷与算 ...
- 游戏洗牌算法——常用+详解最优Knuth_Durstenfeld算法
目录 前言 基于Unity的洗牌算法代码实现 内容 抽牌洗牌 原理 复杂度 优缺点 Fisher_Yates算法 原理 复杂度 代码实现 优缺点 Knuth_Durstenfeld算法(最佳洗牌算法) ...
- 微信小游戏开发-麻将洗牌算法(二)
麻将一组有1-9筒,1-9条,1-9万,中发白,东南西北,34张牌,共有四组,共136张牌. 可以通过一个数组来表示则一组牌,代码如下: private final static String[] m ...
- 面试官:会玩牌吧?给我讲讲洗牌算法和它的应用场景吧!
有一次参加面试,面试官问我:"会玩牌吧?" 内心:"咋滴,这是要玩德州扑克(或者炸金花),赢了他就能通过面试么?" 结果-- 没想到面试官的下一句话:" ...
- c++随机打乱数组_【洗牌算法】你确定这样的抽奖算法是随机的?
洗牌算法在实际应用中使用的比较广泛,比如抽奖.三国杀游戏等等.由于要完全理解洗牌算法存在一定的难度,所以洗牌算法也经常被拿来做算法笔试题.例如以下两个常见的笔试题:在n个不同的数中随机取出不重复的m个 ...
- 洗牌算法具体指的是什么
前言: 这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [洗牌算 ...
最新文章
- 华为云大数据存储的冗余方式是三副本_大数据入门:HDFS数据副本存放策略
- 解读 | 2019 年 10 篇计算机视觉精选论文(上)
- postman 请求 页面出现 Could not get any response 解决方法
- Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架
- 【docker】修改docker容器配置,设置/修改端口映射
- Ubuntu分别用ibus和scim安装五笔
- RabbitMQ入门(五)-Topics(主题)
- python期末知识点_史上最全的Python知识点整理之基本语法
- javafx由浅到深的 认识(一)
- MongoDB性能测试
- maven安装 maven上传jar包到库里面
- 使用C#在应用程序间发送消息
- java实验报告2013_java实验报告4
- 【论文翻译】CenterNet: Objects as Points
- vue 日历插件ele-calendar
- 地铁里的广播语和广告语
- java espresso车架_Espresso UI自动化测试框架
- 不重视需求过程的项目队伍将自食其果
- 白屏时间first paint 和可交互时间dom ready的关系
- FPGA学习之串口篇