[cocos2dx]斗地主制作之洗牌算法

简介: 做斗地主项目,洗牌算法是一个很重的一步,怎样“洗”的均匀,“洗”的随机,这是非常考究的,算法的优劣就直接会影响效果的好坏。这里我给出一个算法,将0-53这54个数字直接排序,经测试还挺随机的。

做斗地主项目,洗牌算法是一个很重的一步,怎样“洗”的均匀,“洗”的随机,这是非常考究的,算法的优劣就直接会影响效果的好坏。这里我给出一个算法,将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循环取大一点就更随机了!

相关文章
|
8月前
|
存储 人工智能 Python
Python实现坦克大战(TankWar)游戏(上)
Python实现坦克大战(TankWar)游戏
138 0
|
8月前
|
设计模式 测试技术 Python
Python实现坦克大战(TankWar)游戏(下)
Python实现坦克大战(TankWar)游戏
117 0
|
10月前
|
Java
【Java实现小游戏】飞翔的小鸟(源码)
【Java实现小游戏】飞翔的小鸟(源码)
140 0
|
11月前
|
开发者
从零开始制作一个俄罗斯方块游戏
小蚂蚁的游戏目前已经上线,主要面向的是有一定基础的同学。从零开始制作一个经典的俄罗斯方块游戏,理论结合实战,帮助你进一步提升做游戏的技能。
95 0
|
11月前
|
Python
Python实现超级玛丽游戏系列教程01玛丽登场
Python实现超级玛丽游戏系列教程01玛丽登场
95 0
|
算法 Java
Java实现五子棋对战小游戏
Java实现五子棋对战小游戏
Java实现五子棋对战小游戏
|
定位技术
egret微信小游戏扫雷游戏开发基本思路
egret微信小游戏扫雷游戏开发基本思路
|
存储 数据可视化 小程序
Python 制作一副扑克牌,有趣的案例!
之前在 《流畅的 Python 》中看到一个例子比较有趣,所以整理一下通过本文分享给大家, 该案例是通过 Python 类属性创建一幅除去 大王、小王之后的 52 张扑克牌,并实现随机抽牌、排序、洗牌等功能;
Python 制作一副扑克牌,有趣的案例!
|
移动开发 JavaScript 算法
用60行代码实现一个高性能的圣诞抽抽乐H5小游戏(含源码)
今天圣诞节,先预祝大家节日快乐.既然是圣诞节,那我们就来学点有意思的,用几十行代码来实现一个高性能的抽奖小游戏.也基于此,来巩固我们的javascript基础,以及前端一些基本算法的应用.
185 0
java实现斗地主发牌项目
java集合实现斗地主发牌项目