您的位置:首页 > 编程语言 > C语言/C++

C++下棋牌游戏高性能洗牌算法

2016-08-06 12:27 337 查看
#include <stdlib.h>
#include <stdio.h>
#include <utility>
#include <time.h>
#include <assert.h>

int GCardSrc[54];

void ShuffleCard( int *pDestCard, int PlayerCardCnt, int PlayerCnt )
{
assert( nullptr != pDestCard );

assert( PlayerCardCnt * PlayerCnt <= sizeof( GCardSrc ) / sizeof( GCardSrc[0] ) );

int idx = 0;
for( int i = 0; i < PlayerCardCnt * PlayerCnt; ++i )
{
idx = rand() % ( sizeof( GCardSrc ) / sizeof( GCardSrc[0] ) - i );

pDestCard[ i ] = GCardSrc[ idx ];

std::swap( GCardSrc[ sizeof( GCardSrc ) / sizeof( GCardSrc[0] ) - i - 1 ], GCardSrc[ idx ] );
}
}

int main()
{

srand( time( nullptr ) );
for( int i = 0; i < 54; ++i )
{
GCardSrc[ i ] = i;
}

const int PlayerCnt = 4;
const int PlayerCardCnt = 5;

int DestCard[ PlayerCardCnt * PlayerCnt ] = {};

for( int i = 0; i < 5; ++i )
{
ShuffleCard( DestCard, PlayerCardCnt, PlayerCnt );
for( int i = 0; i < PlayerCnt * PlayerCardCnt; ++i )
{
printf( "player:%d card[%d]=%d\n", i / PlayerCardCnt, i % PlayerCardCnt, DestCard[ i ] );
}
printf( "-----------------------\n" );
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 棋牌 洗牌