扑克随机发牌
Q:http://zhidao.baidu.com/question/42036677.html
A:
功能:
1、可选是否包含大小王
2、可选发牌列数
3、避免使用大数组,为此付出的代价是多一层循环。
4、便于扩展,比如可以扩展到10种花色的扑克(^_^),两副牌等等。
调试环境:VC6+WinXP,Win-TC2+WinXP
随机算法部分来源于本空间的“猜扑克问题”
代码如下,转载请注明出处(http://hi.baidu.com/crazycola):
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define WITH_JOKER 0 // 是否包含大王、小王
#define COLUMN 4 // 发牌的列(堆)数
void main( void )
{
int i1, j, total;
int *iArr;
int tag = 0;
char* pok_C[] = { "黑桃", "红桃", "梅花", "方块" };
char* pok_N[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
total = (WITH_JOKER)?54:52;
srand( (unsigned)time( NULL ) );
iArr = (int*)malloc(total*sizeof(int));
for( i1=0; i1<total; i1++ )
{
iArr[i1]=rand()%total;
if( i1==0 ) continue;
do {
tag = 0;
for( j=0; j<i1; j++ )
if( iArr[j] == iArr[i1] )
{
iArr[i1]=rand()%total;
tag = 1;
}
} while( tag==1 );
}
for( i1=0; i1<total; i1++ )
{
switch(iArr[i1])
{
case 53: printf("JokerB\t"); break; // 大王
case 52: printf("JokerA\t"); break; // 小王
default: printf("%s%s\t",pok_C[iArr[i1]%4],pok_N[iArr[i1]%13]); break;
}
if(i1%(COLUMN)==((COLUMN)-1)) printf("\n");
}
free(iArr);
}
这里有最甜蜜的幸福,最博大的付出,最深刻的背叛,最强烈的绝望,最勇敢的坚强,最有力的反击!站在是非之外,看红尘最美不过月华清明、百花围簇!备注:在这个道德沦丧的时代,如果你想背弃誓言,轻易转身,那就不用再回头,因为没有人站在原地等你!