发牌c语言
❶ 54张扑克牌,留5张底牌,其它分给四个人,求代码实现我图片上的内容
我这里有个模拟发牌52张的代码,稍微改改就可以了,供你参考
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
intmain(void)
{
intaim,i;
intpoker[52]={0};/*已发的牌在数组中,初始状态为0,表示没发过,置为1表示已发过,避免重复发放*/
srand((unsigned)time(NULL));/*随机数初始化*/
/*产生一个随机数0-51,并保存到aim变量中*/
aim=rand()%52;
/*模拟发不含大小王牌的扑克牌,
将生成的随机数映射为每张扑克牌。
按照花色(梅花、方块、红桃、黑桃)和大小(2~10、J、Q、K、A)顺序进行映射。
映射规则如下:
梅花:0-12
方块:13-25
红桃:26-38
黑桃:39-51
*/
/*以下模拟发52张牌,可以根据需要修改循环次数发任意张*/
for(i=1;i<=52;i++)
{
aim=rand()%52;
/*已发的牌在数组中置为1,避免重复发放*/
while(poker[aim]==1)
{
aim=rand()%52;
}
poker[aim]=1;
printf(" 第%2d张牌:",i);
switch(aim/13)
{
case0:
printf("梅花");
break;
case1:
printf("方块");
break;
case2:
printf("红桃");
break;
case3:
printf("黑桃");
break;
default:break;
}
switch(aim%13+1)
{
case2:
case3:
case4:
case5:
case6:
case7:
case8:
case9:
case10:
printf("%2d",aim%13+1);
break;
case1:
printf("A");
break;
case11:
printf("J");
break;
case12:
printf("Q");
break;
case13:
printf("K");
break;
default:break;
}
}
return0;
}
❷ C语言,扑克牌发牌程序。要求运用结构体。多谢帮忙^o^
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
structPOKE
{
intnum;//小王-1,大王-2,A:1,J:11,Q:12,K:13
intcolor;//黑1,红2,梅3,方4,小王5,大王6
}s[54];
intmain()
{
inti,num,color;
memset(s,0,sizeof(structPOKE)*54);
srand((unsigned)time(0));
i=rand()%54;
s[i].num=-1;//小王
s[i].color=5;
while(1)
{
i=rand()%54;
if(s[i].num==0)
{
s[i].num=-2;//大王
s[i].color=6;
break;
}
}
intcount=2;
while(1)
{
num=rand()%13+1;
color=rand()%4+1;
i=rand()%54;
if(s[i].num==0)
{
s[i].num=num;
s[i].color=color;
count++;
if(count>=54)
{
break;
}
}
}
printf("
顺序为:
");
for(i=0;i<54;i++)
{
switch(s[i].num)
{
case-1:putchar(1);break;
case-2:putchar(2);break;
case1:putchar('A');break;
case11:putchar('J');break;
case12:putchar('Q');break;
case13:putchar('K');break;
default:printf("%d",s[i].num);
}
switch(s[i].color)
{
case1: putchar(6);break;
case2:putchar(3);break;
case3:putchar(5);break;
case4:putchar(4);break;
default:printf("");
}
printf("");
}
return0;
}
❸ 如何求C语言扑克牌洗牌发牌,发的牌要从大到小排序,每个部分都要用
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 52 //牌张总数
#define M 13 //每花色张数
char hs[4]={5,4,3,6}; //花色数组:梅花、红心、方块、黑桃字符对应的ASCII码
char hx[]={"JQKA"}; // 对应11,12,13,14共四张大于10的牌符号
//生成顺序扑克牌数组: 1~52,梅花1~13,红心14~26,方块27~39,黑桃40~52
void newDeck(int *a) { int i; for ( i=0;i<N;i++ ) a[i]=i+1; }
//洗牌,将花色和顺序打乱
void Shuffle(int *a) { int s,i,j,t;
srand((unsigned int)time(NULL)); //利用当前时间生成随机数种子
s=rand()%11+5; printf("随机洗牌%d遍\n",s); //第1个随机数当成洗牌次数, 洗牌次数大于等于5,小于等于15
for ( i=0;i<s;i++ ) {
for ( j=0;j<N;j++ ) {
s=rand()%52; //随机数范围0~51,对应a数组下标
t=a[j]; a[j]=a[s]; a[s]=t; //第j张牌和第s张牌交换
}
}
}
//发牌并显示
void Deal(int a[N],int b[4][M]) { int i,j;
for ( i=0;i<4;i++ ) for ( j=0;j<M;j++ ) b[i][j]=a[i*M+j];
}
//理牌
void Collating(int a[4][M]) { int i,j,k,h;
for ( h=0;h<4;h++ )
for ( i=0;i<M-1;i++ )
for ( j=i+1;j<M;j++ )
if ( a[h][i]<a[h][j] ) {
k=a[h][i]; a[h][i]=a[h][j]; a[h][j]=k;
}
}
//显示
void Display(int a[4][M]) { int i,j,s;
for ( i=0;i<4;i++ ) {
for ( j=0;j<M;j++ ) {
s=a[i][j]-1; printf("%c",hs[s/M]);
s%=M; if ( s<9 ) printf("%d ",s+2); else printf("%c ",hx[s-9]);
}
printf("\n");
}
}
void main() { int Deck[N],hands[4][M];
newDeck(Deck); //新扑克牌
Shuffle(Deck); //洗牌
Deal(Deck,hands); //发牌
Collating(hands); //理牌
Display(hands); //显示
printf("\n\n"); system("pause");
}
❹ C语言斗地主发牌程序,急求,谢谢
这是以随机的形式发牌的。希望能帮到你。
int main(){ int a[60]; int b[60]; int w = 0; int wi,wj,wii; int i,j,index,x=0,m; for(i=0;i<54;i++) a[i]=i+1; srand((unsigned)time(0)); for(i=0;i<54;) { index=rand()%54; if(a[index]!=0) { b[i]=a[index]; //printf("%d ",b[i]); a[index]=0; ++i; } } printf("\n说明:\n"); printf("*******************\n"); printf("** 红桃 %c ",3); printf("**\n"); printf("** 方块 %c ",4); printf("**\n"); printf("** 梅花 %c ",5); printf("**\n"); printf("** 黑桃 %c ",6); printf("**\n"); printf("** 大王 A **\n** 小王 a **\n"); printf("*******************\n"); printf("\n请输入打牌人数:\n"); scanf("%d",&w); wi = 54/w; wj = 54%w; //printf("%d,%d",wi,wj); for (j = 0;j < w;j++) { m = 0; printf("\n\n第%d个人的牌\n",j+1); wj --; if (wj>=0) wii = wi + 1; else wii = wi; //红桃 printf("红桃 %c ",3); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=13&&b[i]>0) { m++; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //方块 printf("\n方块 %c ",4); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=26&&b[i]>13) { m++; b[i] = b[i]-13; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //梅花 printf("\n梅花 %c ",5); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=39&&b[i]>26) { m++; b[i] = b[i]-26; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //黑桃 printf("\n黑桃 %c ",6); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=52&&b[i]>39) { m++; b[i] = b[i]-39; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //大小王 printf("\n大小王 A or a :"); for(i = j*wii;i<=(j+1)*wii;i++) { if (b[i]==53) { m++; printf("A "); } if (b[i]==54) { m++; printf("a "); } } printf("\n总共:%d张牌!!!",m); } }