很多人都要在为扑克牌随机函数头痛,主要想在函数的死胡同里。我们要做的是初始化数组,然后随机数组的序数。
本例用八副牌做演示。
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
//随机洗牌函数
void SortCark(char *cark,int len) {
int n;
char k,*p,*p1;
p=cark;
for (int i=0;i<len;i++) {
n=(int)(rand()%len);
k=*p;
p1=cark;
p1+=n;
*p=*p1;
*p1=k;
p++;
}
}
//排序函数
void Sort(char *cark,int len) {
char k,*p,*p1;
int j,i;
for(j=0;j<len-1;j++)
for (i=0;i<len-1-j;i++) {
p1=cark+1+i;
p=cark+i;
if (*p>*p1) {
k=*p;
*p=*p1;
*p1=k;
}
}
}
void main() {
char cark[8][52]={0};
char t[4]={'@','#','*','^'};//八副牌用四种符号表示
int m=0,n=0;
srand((int)time(0));//初始随机函数
//初始牌
for (int i=0;i<8;i++)
for (int l=0;l<52;l++) {
cark[i][l]=l;
}
//洗牌
SortCark(&cark[0][0],8*52);
//查看洗牌的结果
for ( i=0;i<8;i++)
for (int l=0;l<52;l++) {
m=cark[i][l] % 13;
n=l % 13;
if (n==0) printf("\n\r");
n=cark[i][l] / 13;
printf(",%c%d",t[n],m);
}
printf("\n\r");
//查看排序后的结果
Sort(&cark[0][0],8*52);
for ( i=0;i<8;i++)
for (int l=0;l<52;l++) {
n=l % 4;
if (n==0) printf("\n\r");
printf(",%d",cark[i][l]);
}
}
#include<time.h>
#include<stdlib.h>
//随机洗牌函数
void SortCark(char *cark,int len) {
int n;
char k,*p,*p1;
p=cark;
for (int i=0;i<len;i++) {
n=(int)(rand()%len);
k=*p;
p1=cark;
p1+=n;
*p=*p1;
*p1=k;
p++;
}
}
//排序函数
void Sort(char *cark,int len) {
char k,*p,*p1;
int j,i;
for(j=0;j<len-1;j++)
for (i=0;i<len-1-j;i++) {
p1=cark+1+i;
p=cark+i;
if (*p>*p1) {
k=*p;
*p=*p1;
*p1=k;
}
}
}
void main() {
char cark[8][52]={0};
char t[4]={'@','#','*','^'};//八副牌用四种符号表示
int m=0,n=0;
srand((int)time(0));//初始随机函数
//初始牌
for (int i=0;i<8;i++)
for (int l=0;l<52;l++) {
cark[i][l]=l;
}
//洗牌
SortCark(&cark[0][0],8*52);
//查看洗牌的结果
for ( i=0;i<8;i++)
for (int l=0;l<52;l++) {
m=cark[i][l] % 13;
n=l % 13;
if (n==0) printf("\n\r");
n=cark[i][l] / 13;
printf(",%c%d",t[n],m);
}
printf("\n\r");
//查看排序后的结果
Sort(&cark[0][0],8*52);
for ( i=0;i<8;i++)
for (int l=0;l<52;l++) {
n=l % 4;
if (n==0) printf("\n\r");
printf(",%d",cark[i][l]);
}
}