模拟扑克牌发牌游戏—联合数组
include""
defineNUM54
//这个简单,用一维数组随机生成54个不相同的数字,按下标顺序存入order数组
//然后呢,order数组的值又作为pk数组的下标,取出扑克牌,实现随机发牌
voidmain()
{
//变量定义区域,在下面开始定义程序中用到的各种变量
intsplit_num=24,split_i;//后面用,不可删除
charsplit_line='*';//后面用,不可删除,可更改*为其他符号
charpk[NUM][6]={{"\3A"},{"\32"},{"\33"},{"\34"},{"\35"},{"\36"},{"\37"},{"\38"},{"\39"},{"\310"},{"\3J"},{"\3Q"},{"\3K"},{"\4A"},{"\42"},{"\43"},{"\44"},{"\45"},{"\46"},{"\47"},{"\48"},{"\49"},{"\410"},{"\4J"},{"\4Q"},{"\4K"},{"\5A"},{"\52"},{"\53"},{"\54"},{"\55"},{"\56"},{"\57"},{"\58"},{"\59"},{"\510"},{"\5J"},{"\5Q"},{"\5K"},{"\6A"},{"\62"},{"\63"},{"\64"},{"\65"},{"\66"},{"\67"},{"\68"},{"\69"},{"\610"},{"\6J"},{"\6Q"},{"\6K"},{"大王"},{"小王"}};
inti,j,k;
intrand_num,rand_order[NUM];
//变量定义区域结束
//业务处理区域,下面开始处理程序各种业务运算
srand((int)time(NULL));//用当前时间作为随机种子
//先随机生成54个数字,依次存入一维数组rand_order中,既然随机生成,那就是并不一定连续哦,目的就是要不连续的,
//才能实现后面pk数组时达到随机发牌的效果
rand_order[0]=rand()%NUM+1;
for(i=1;iNUM;)
{
rand_num=rand()%NUM+1;
for(j=0;ji;j++)
if(rand_num==rand_order[j])
break;
if(ji)
continue;
rand_order[i]=rand_num;
i++;
}
/*
for(i=0;i54;i++)
{
if(i%10==0)printf("\n");
printf("%d",rand_order[i]);
}
*/
//业务运算处理结束
//输出控制区域,下面集中处理各种输出
//注意:如果业务处理区域临时用到一些输出提示,可以不受限制
//现在你可以在下面模拟输出随机发扑克牌了哦,你把随机方法应用到给你定义的pk数组就行。
//比如,我采用随机数取出来一个,然后把这张牌发出去,同时清除这张牌单元为\0,保证后面再随机取到的话,我判断这张牌还在不?如果不在了,是\0,那就重新抽取
k=1;
printf("第%d人的牌是:",k);
for(i=0;i54;i++)
{
printf("%-6s",pk[rand_order[i]-1]);
//pk[]中括号里面是rand_order[i]-1,为啥?因为rand_order[]数组里存储的是1-54的随机数字,而pk[]要取每个单元值的话,下标要从0-53,刚好错位一个数字1,所以减去1,是单元值减去1,不是rand_order[i-1]哦,切记,理解哦!
if((i+1)%12==0)
//除以12是因为给一个人要发12张牌,发完后就要换行了,接着给下一个人发牌
{
printf("\n");
if(++k=4)
printf("第%d人的牌是:",k);
else
printf("\n剩余的6张底牌是:");
}
}
//还可以判断大小王在那个人的手里,请自己补充代码
//下面固定输出版权信息
//个人根据情况不同,请修改成自己的信息
printf("\n\n");
//我是分割线
for(split_i=1;split_i=split_num;split_i++)
printf("%c",split_line);
printf("\n");
printf("班级:XXXXXXX\n");
printf("姓名:XXXXXXX\n");
printf("学号:XXXXXXX\n");
printf("系部:信息工程系\n");
//我是分割线
for(split_i=1;split_i=split_num;split_i++)
printf("%c",split_line);
printf("\n");
getchar();
getchar();
}
下面是采用随机下标+清空扑克牌存储单元的方式
include""
include""
//请大家感觉下这个扑克牌模拟发牌程序
//这里面因为用到了数组的测长,赋值等函数
//大家暂时理解一下
//大家编写程序的时候,采用在一维整型数组中先生成54个随机数的方式,然后联合pk数组,输出每个人的12张牌和6张底牌
//需要参考我给你的这个程序原理
voidmain()
{
//变量定义区域,在下面开始定义程序中用到的各种变量
intsplit_num=24,split_i;//后面用,不可删除
charsplit_line='*';//后面用,不可删除,可更改*为其他符号
charpk[54][6]={{"\3A"},{"\32"},{"\33"},{"\34"},{"\35"},{"\36"},{"\37"},{"\38"},{"\39"},{"\310"},{"\3J"},{"\3Q"},{"\3K"},
{"\4A"},{"\42"},{"\43"},{"\44"},{"\45"},{"\46"},{"\47"},{"\48"},{"\49"},{"\410"},{"\4J"},{"\4Q"},{"\4K"},
{"\5A"},{"\52"},{"\53"},{"\54"},{"\55"},{"\56"},{"\57"},{"\58"},{"\59"},{"\510"},{"\5J"},{"\5Q"},{"\5K"},
{"\6A"},{"\62"},{"\63"},{"\64"},{"\65"},{"\66"},{"\67"},{"\68"},{"\69"},{"\610"},{"\6J"},{"\6Q"},{"\6K"},
{"大王"},{"小王"}};
inti,j,k;
//变量定义区域结束
//业务处理区域,下面开始处理程序各种业务运算
//下面测试输出这54张牌
/*
for(i=1;i=54;i++)
{
printf("%s",pk[i-1]);
if(i%13==0)
printf("\n");
}
printf("\n%d\n",strlen(strcpy(pk[0],"\0")));
*/
//业务运算处理结束
//输出控制区域,下面集中处理各种输出
//注意:如果业务处理区域临时用到一些输出提示,可以不受限制
//现在你可以在下面模拟输出随机发扑克牌了哦,你把随机方法应用到给你定义的pk数组就行。
//比如,我采用随机数取出来一个,然后把这张牌发出去,同时清除这张牌单元为\0,保证后面再随机取到的话,我判断这张牌还在不?如果不在了,是\0,那就重新抽取
j=1;
k=1;
for(;1;)
{
srand((int)time(0));//用当前时间作为随机种子
printf("第%d人的牌是:",k);
for(;1;)
{
i=rand()%54+1;
if(strlen(pk[i-1],"\0")==0)
continue;
printf("%-6s",pk[i-1]);
strcpy(pk[i-1],"\0");//这里清空已发了的牌的空间
j++;
if(j%13==0)//除以13是因为给一个人要发12张牌,那发到第13张牌的时候,就要停止了
{
printf("\n");
break;
}
}
j=1;
k++;
if(k==5)
break;
}
printf("\n剩余的6张底牌是:");
for(i=1;i55;i++)
{
if(strlen(pk[i-1],"\0")!=0)
printf("%-6s",pk[i-1]);
}
printf("\n");
//下面固定输出版权信息
//个人根据情况不同,请修改成自己的信息
printf("\n\n");
//我是分割线
for(split_i=1;split_i=split_num;split_i++)
printf("%c",split_line);
printf("\n");
printf("班级:XXXXXXX\n");
printf("姓名:XXXXXXX\n");
printf("学号:XXXXXXX\n");
printf("系部:信息工程系\n");
//我是分割线
for(split_i=1;split_i=split_num;split_i++)
printf("%c",split_line);
printf("\n");
getchar();
getchar();
}


