发布网友 发布时间:2022-04-25 13:03
共1个回答
热心网友 时间:2024-05-18 07:36
//////洗牌-发牌////////
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct POKER
{
int num; // A:1 , J:11 , Q:12 , K:13 小王:14 大王:15
int color; //黑1,红2,梅3,方4
}s[54];
void output(int mode, int num) //mode为0时表示显示整副牌, 为1时表示发牌
{ //mode为1时: num的值表示每位玩家发多少张牌
if(mode==1 && (num<1 || num>13))
{
printf("\n设置每位玩家的牌数出错!");
return;
}
int i,player_count=1;
for(i=0;i<54;i++)
{
if(mode==1)
{
if(i%num==0)
{
if(player_count>4)
{
return;
}
printf("\n玩家%d : ",player_count);
player_count++;
}
}
if(s[i].num==14)
{
putchar(1);
}
else if(s[i].num==15)
{
putchar(2);
}
else
{
switch(s[i].num)
{
case 1: putchar('A');break;
case 11: putchar('J');break;
case 12: putchar('Q');break;
case 13: putchar('K');break;
default: printf("%d",s[i].num);
}
switch(s[i].color)
{
case 1:putchar(6);break;
case 2: putchar(3);break;
case 3: putchar(5);break;
case 4: putchar(4);break;
default: printf(" ");
}
}
printf(" ");
}
}
void xipai()
{
int i,num,color;
memset(s,0,sizeof(struct POKER)*54);
int count=0;
while(count<54)
{
num=rand()%15+1;
color=rand()%4+1;
int flag_skip=0;
for(i=0;i<54;i++)
{
if((s[i].num==num && s[i].color==color) || (s[i].num==14 && num==14) || (s[i].num==15 && num==15))
{
flag_skip=1;
break;
}
}
if(flag_skip==1)
{
continue;
}
while(1)
{
i=rand()%54;
if(s[i].num==0)
{
s[i].num=num;
s[i].color=color;
count++;
break;
}
else
{
continue;
}
}
}
}
int main()
{
int c,num=13;
srand((unsigned)time(0));
xipai();
while(1)
{
printf("\n\n已洗好, 请选择: (1:全部显示 2:发牌 3:洗牌) ");
fflush(stdin);
scanf("%d",&c);
if(c==1)
{
output(0,0);
}
else if(c==3)
{
xipai();
}
else if(c==2)
{
printf("\n\n每位发几张:(1--13) ");
while(1)
{
fflush(stdin);
scanf("%d",&num);
if(num>0 && num<14)
{
break;
}
else
{
printf("\n输入错误,请重新输入\n每位发几张:(1--13) ");
}
}
output(1,num);
}
}
return 0;
}