其实发牌问题里有个随机的问题,就是模拟洗牌的问题,我来尝试下这个程序吧(每个花色的代码分别是:红桃 \x3,方块\x4,梅花\x5,黑桃\x6
#include
#include
char hua_se[4]={'\x3','\x4','\x5','\x6'}; //定义一个数组来存放花色
char *dight[14]={"Ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king"};//定义一个指针型的数组来存放数字
int fa_pai[4][13]={0};//定义一个二维数组来发牌
void move(int fa_pai[4][13]);
void deal(int fa_pai[4][13],char huase[4],char *dight[4][13]);
int main(void){srand(time(NULL));
move(fa_pai);
deal(hua_se,dight,fa_pai);
printf("你是否想结束发牌?Y/N");
getch();return 0;}void move(int fa_pai[4][13]){int r,card,row,column;
for(card=1;card<=52;card++)
{
r=rand();
row=r%4;
r=rand();
column=r%13;
while(fa_pai[4][13]!=0)
{
r=rand();
row=r%4;
r=rand();
column=r%13;
}
fa_pai[row][column]=card;
}
}
void deal(int fapai[4][13],char hua_se[3],char *dight[13])
{
char c;int card,row,column;
for(card=1;card<=52;card++)
{
for(row=0;row<=3;row++)
{
for(column=0;column<=12;column++)
{
if(fapai[row][column]==card)
{
if(card%3=0)c='\n';
elsec='\t';
printf("%5sof%-8s%c",hua_se[row],dight[column],c);
}
}
}
}
}
#include
#include
#include
/*定义输出与数组下标不一致的排符*/
void print(int t)
{int a=t%13;
switch(a)
{case 1:printf("2 ");break;
case 2:printf("A ");break;
case 3:printf("K ");break;
case 4:printf("Q ");break;
case 5:printf("J ");break;
case 6:printf("10 ");break;
case 0:printf("3 ");break;
default :printf("%d ",16-a);
}
}
void main()
{/*定义存储每张牌的点数和花色*/
struct zhangxiao
{
int p;int r;int flag;
}pai[52],num;
int i,j,k;
char a[4]={'\005','\004','\006','\003'};
srand((unsigned)time(NULL));
for(i=0;i<=51;i++)
{pai[i].p=i+1;pai[i].r=rand();pai[i].flag=0;}
/*根据点数排序*/
for(i=0;i<=51;i++)
for(j=i+1;j<=51;j++)
if(pai[i].r > pai[j].r)
{num=pai[i];pai[i]=pai[j];pai[j]=num;}
/*根据花色排序*/
for(i=0;i<=3;i++)
for(j=i*13;j<=i*13+12;j++)
for(k=j+1;k<=i*13+12;k++)
if(pai[j].p > pai[k].p)
{num=pai[k];pai[k]=pai[j];pai[j]=num;}
/*控制输出对齐*/
printf("\n");
printf(" ");
for(i=0;i<=3;i++)
{
for(k=1;k<=4;k++)
{
printf("%c",a[k-1]);
for(j=i*13;j<=i*13+12;j++)
if(pai[j].p >= (k-1)*13+1 && pai[j].p <= (k-1)*13+12+1 && pai[j].flag==0)
{print(pai[j].p);pai[j].flag=1;}
}
if(i==0)printf("\n\n\n");
if(i==1)printf(" ");
if(i==2){printf("\n\n\n");printf(" ");}
if(i==3)printf("\n");
}
}
你是要怎么发牌?将一副牌都发出吗?还是随机的呀!