[cocos2dx]斗地主制作之洗牌算法
做斗地主项目,洗牌算法是一个很重的一步,怎样“洗”的均匀,“洗”的随机,这是非常考究的,算法的优劣就直接会影响效果的好坏。这里我给出一个算法,将0-53这54个数字直接排序,经测试还挺随机的。这里要感谢@灰太龙的指导!这个算法是服务器端用于返回给客户端牌的算法,主要的思想就是不断的换牌,两牌交换位置,如果循环次数增大的话,随机性也会更强,洗牌的效果更好!
Code:
C#:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 随机排序 { class Program { static void Main(string[] args) { int [] data = new int [54]; for (int i = 0; i < 54; i++) { data[i] = i; } Console.WriteLine("排序前:"); foreach (int i in data) { Console.Write(i + ","); } long tick = DateTime.Now.Ticks; Random random = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32)); //牌交换算法 for (int i = 0; i < 54; i++) { int t1 = random.Next(0, 54); int t2 = random.Next(0, 54); int temp = data[t1]; int data1 = data[t1]; int data2 = data[t2]; data[t1] = data2; data[t2] = temp; } Console.WriteLine("排序后:"); foreach (int i in data) { Console.Write(i + ","); } } } }
运行截图:
C++:
void HelloWorld::xipai() { for (int i=0; i<54; i++) { data[i] = i; } //随机数 //洗牌 for(int i=0;i<54;i++) { int t1 = arc4random()%54; int t2 = arc4random()%54; int temp = data[t1]; int data1 = data[t1]; int data2 = data[t2]; data[t1] = data2; data[t2] = temp; } printf("洗牌之后:\n"); for (int i =0; i<54; i++) { printf("%d ",data[i]); } }
结果:
会发现还是挺随机的,如果将for循环取大一点就更随机了!
本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366165,如需转载请自行联系原作者
[cocos2dx]斗地主制作之洗牌算法相关推荐
- 面试官:会玩牌吧?给我讲讲洗牌算法和它的应用场景吧!
有一次参加面试,面试官问我:"会玩牌吧?" 内心:"咋滴,这是要玩德州扑克(或者炸金花),赢了他就能通过面试么?" 结果-- 没想到面试官的下一句话:" ...
- 洗牌算法具体指的是什么
前言: 这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [洗牌算 ...
- 会排序吗_洗牌算法详解:你会排序,但你会打乱吗?
预计阅读时间: 8 分钟 我知道大家会各种花式排序,但是如果叫你打乱一个数组,你是否能做到胸有成竹?即便你拍脑袋想出一个算法,怎么证明你的算法就是正确的呢?乱序算法不像排序算法,结果唯一可以很容易检验 ...
- python实现洗牌算法_洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章 <扫雷与 ...
- 从洗牌算法谈起--Python的random.shuffle函数实现原理
此文首发于我的个人博客:从洗牌算法谈起–random.shuffle实现原理 - zhang0peter的个人博客 昨天看知乎的时候看到了洗牌算法(Knuth shuffle, 最初版本叫Fisher ...
- 随机洗牌算法 银行家算法
1. 随机洗牌算法 https://blog.csdn.net/qq_26399665/article/details/79831490 Fisher-Yates Shuffle算法 最早提出这个洗牌 ...
- 洗牌算法shuffle
对这个问题的研究始于一次在群里看到朋友发的洗牌面试题.当时也不知道具体的解法如何,于是随口回了一句:每次从剩下的数字中随机一个.过后找相关资料了解了下,洗牌算法大致有3种,按发明时间先后顺序如下: 一 ...
- 我以前用过的一个洗牌算法
前两天和几个做在线棋牌游戏的朋友聚会,聊到了洗牌算法,正好以前写过一些扑克牌的游戏,中间做了一个洗牌算法,就写了个例子给他们做试验. 基本思路很简单,就是交换法,54张牌排好,随机选择两张牌交换,一般 ...
- Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...
最新文章
- python3 学习使用大纲梳理
- winPcap_2_编译环境*注意*
- SAP S/4HANA表结构之变
- hihoCoder1678 版本号排序
- 服务器 .err文件,IIS 关闭HTTPERR(IIS日志)的方法
- leetcode 231. 2 的幂
- 统一沟通_边缘安装及配置之十七_(Windows Server 2008 R2 SP1英文版)
- 中key的用途_Python中的函数定义与参数使用
- js省市二级联动;)
- SQL Developer显示多个工作表
- PIX525-IPSEC-×××配置
- 鲸鱼优化算法_鲸鱼优化算法:一种群体智能最优化方法
- 农夫山泉2面面试经历
- 无线通信与生活-(1)
- Type-C扩展坞支持的手机类型
- 台式计算机虚拟内存怎么设置,教你怎么设置电脑的虚拟内存
- python urllib库获取淘宝主图
- 【ABAP】SE38的一些使用技巧
- 学友新碟private corner迷你音乐会CD/DVD超赞呀
- 电脑上的文件删除不掉,需要管理员权限怎么办?
热门文章
- android socket第三方库,OkSocket 一个Android轻量级Socket通讯框架
- linux执行定时,linux定时执行 - 乄珍惜
- php 变量存活期,php 变量生命周期:PHP源码分析-PHP的生_php
- python压缩文件_Python压缩及解压文件
- c语言谢延红主编答案,C语言程序设计课程改革与实践.doc
- bat窗口大小设置_如何将U盘设置成我们计算机的开机秘钥,对电脑加密。
- 基于python的随机森林回归实现_python实现随机森林
- python 3.8.5 打包_骚操作 | Python 实现在 App 端的人脸识别
- linux系统awk、sed,Linux系统 linux awk sed
- linux c 获取 多个硬盘序列号_veket系统中使用GParted进行硬盘分区