婚外情的痛苦:如何编写扑克游戏分牌函数?

来源:百度文库 编辑:神马品牌网 时间:2024/05/05 00:51:45
编写扑克牌游戏的分牌函数.用数组保存54张牌,然后分发给n个人,
n作为参数.

取当时的时间作为伪随机数的种子。
初始化状态数组 int sta[54], 全给-1。
初始化排序数组 int order[54],全给-1。
初始化已取得的随机数的个数变量,int NN=0。
初始化54张牌数组 card[54]

while ( NN < 54 ){
产生0到53范围的随机正整数R。
if ( sta[R] == -1) {sta[R] = 1;
order[NN] = R;
NN = NN + 1;
}
}

for (i=0;i<54;i=i+n){
打印发的牌 card[order[i]];
}
========================================
下面程序,用52张牌,(无大小百搭),4人play
黑桃 SA,S2,S3...SJ,SQ,SK
红桃 HA,H2,...
方块 DA,D2,D3...
梅花 CA,C2,C3...
每局发到手的牌是随机变化的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
main(int argc, char *argv[] )
{
int i,j,k,n, R;
int sta[52];
int order[52];
int NN = 0;
char *card[52];

for (i=0;i<52;i++) card[i] = (char *) malloc ( 3 * sizeof(char));
for (i=1;i<10;i++) {
sprintf( card[i],"S%d",i+1);
sprintf( card[i+13],"H%d",i+1);
sprintf( card[i+26],"D%d",i+1);
sprintf( card[i+39],"C%d",i+1);
}
strcpy(card[0],"SA");strcpy(card[10],"SJ");strcpy(card[11],"SQ");strcpy(card[12],"SK");
strcpy(card[13],"HA");strcpy(card[23],"HJ");strcpy(card[24],"HQ");strcpy(card[25],"HK");
strcpy(card[26],"DA");strcpy(card[36],"DJ");strcpy(card[37],"DQ");strcpy(card[38],"DK");
strcpy(card[39],"CA");strcpy(card[49],"CJ");strcpy(card[50],"CQ");strcpy(card[51],"CK");

for (i=0;i<52;i++) {
sta[i] = -1;
order[i] = -1;
}
srand( (unsigned)time( NULL ) ); // seed

while (NN < 52) {
R = (int) ( (double) rand() * 53.0 / (double) RAND_MAX );
if (R < 0 || R > 52) goto Lab1;
if(sta[R] == -1)
{
sta[R] = 1;
order[NN] = R;
NN = NN + 1;
}
Lab1:;
}

// n = 4 people
n = 4;
printf("people1:\n");
for (i=0;i<52;i=i+n) printf("%s ,", card[order[i]]);
printf("\npeople2:\n");
for (i=1;i<52;i=i+n) printf("%s ,", card[order[i]]);
printf("\npeople3:\n");
for (i=2;i<52;i=i+n) printf("%s ,", card[order[i]]);
printf("\npeople4:\n");
for (i=3;i<52;i=i+n) printf("%s ,", card[order[i]]);
exit(0);
}