C语言实现斗地主发牌程序Word文档下载推荐.docx
- 文档编号:16322381
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:12
- 大小:204.90KB
C语言实现斗地主发牌程序Word文档下载推荐.docx
《C语言实现斗地主发牌程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言实现斗地主发牌程序Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
顺序表实现随机发牌
#include<
stdio.h>
malloc.h>
#include<
time.h>
stdlib.h>
#defineMaxSize100
typedefintdataType;
typedefstruct{
dataTypedata[MaxSize];
intsize;
}SqList;
SqList*CreateList(dataTypea[],intn){
SqList*t=(SqList*)malloc(sizeof(SqList));
for(inti=0;
i<
n;
i++)
t->
data[i]=a[i];
size=n;
returnt;
}
SqList*CreateListemp(){
SqList*t=(SqList*)malloc(sizeof(SqList));
size=0;
}
voidExchange(SqList*l,inti,intj){
inttemp;
temp=l->
data[i];
l->
data[i]=l->
data[j];
data[j]=temp;
intMin(SqList*l){
intmin=l->
data[0];
for(inti=1;
l->
size;
i++){
if(l->
data[i]<
min)min=l->
}
returnmin;
voidDelete(SqList*l,intk){
if(k<
1||k>
size)exit
(1);
for(inti=k;
l->
data[i-1]=l->
size--;
intLocate(SqList*l,dataTypex){
data[i]==x)returni+1;
return0;
voidPrint(SqList*l){
for(inti=0;
printf("
%d"
l->
data[i]);
SqList*Sort(SqList*pa){
SqList*pb=CreateListemp();
intM;
17;
M=Min(pa);
pb->
data[i]=M;
Delete(pa,Locate(pa,M));
size++;
}
returnpb;
intmain()
{
inta[54],i,j,N;
intone[17];
inttwo[17];
intthree[17];
intcover[3];
char*poker[]={"
梅花3"
"
方块3"
红桃3"
黑桃3"
梅花4"
方块4"
红桃4"
"
黑桃4"
梅花5"
方块5"
红桃5"
黑桃5"
梅花6"
方块6"
红桃6"
黑桃6"
梅花7"
方块7"
红桃7"
黑桃7"
梅花8"
方块8"
红桃8"
黑桃8"
梅花9"
方块9"
红桃9"
黑桃9"
梅花10"
方块10"
红桃10"
黑桃10"
梅花J"
方块J"
红桃J"
黑桃J"
梅花Q"
方块Q"
红桃Q"
黑桃Q"
梅花K"
方块K"
红桃K"
黑桃K"
梅花A"
方块A"
红桃A"
黑桃A"
梅花2"
方块2"
红桃2"
黑桃2"
小王"
大王"
};
printf("
顺序表实现:
3个人,每人随机发17张牌,留3张底牌。
\n\n"
);
for(i=0,j=1;
54;
a[i]=j;
j++;
SqList*pl=CreateList(a,54);
srand((unsigned)time(0));
for(N=0;
N<
MaxSize;
N++)
{
i=rand()%54;
j=rand()%54;
Exchange(pl,i,j);
}
for(i=0,j=0;
j<
j++,i++){one[i]=pl->
for(i=0,j=17;
34;
j++,i++){two[i]=pl->
for(i=0,j=34;
51;
j++,i++){three[i]=pl->
for(i=0,j=51;
j++,i++){cover[i]=pl->
SqList*first=CreateList(one,17);
SqList*second=CreateList(two,17);
SqList*third=CreateList(three,17);
SqList*left=CreateList(cover,3);
--------------------------------\n"
);
按照大小以及花色排序后的结果\n"
SqList*sortedfirst=Sort(first);
SqList*sortedsecond=Sort(second);
SqList*sortedthird=Sort(third);
第一个人的牌:
"
for(i=0;
i++){printf("
%s"
poker[sortedfirst->
data[i]-1]);
\n"
第二个人的牌:
poker[sortedsecond->
第三个人的牌:
poker[sortedthird->
底牌:
3;
poker[left->
运行两次结果截图:
单链表实现随机发牌
typedefintElemType;
typedefstructnode
{ElemTypedata;
structnode*next;
}slink;
slink*creslink(ElemTypea[],intn)
{slink*head,*p,*s;
inti;
p=head=(slink*)malloc(sizeof(slink));
for(i=1;
=n;
{s=(slink*)malloc(sizeof(slink));
s->
data=a[i-1];
p->
next=s;
p=s;
next=NULL;
returnhead;
slink*creslinkemp()
{slink*head,*p;
p=head=(slink*)malloc(sizeof(slink));
intgetelem(slink*head,inti,ElemType*e)
{slink*p;
intj;
p=head->
next;
j=1;
while(p!
=NULL&
&
i)
{
p=p->
j++;
if(p==NULL)return0;
*e=p->
data;
return1;
intinsert(slink*head,inti,ElemTypex)
{slink*p,*q;
p=head;
j=0;
(i-1))
{p=p->
q=(slink*)malloc(sizeof(slink));
q->
data=x;
next=p->
next=q;
intDelete(slink*head,inti)
if(i<
1)return0;
while(p->
next!
i-1)
if(p->
next==NULL)return0;
q=p->
next=q->
free(q);
voidsort(inta[],intsize){
size-1;
inttmpmin=i;
for(intj=i+1;
j++){
if(a[j]<
a[tmpmin])tmpmin=j;
inttmp=a[i];
a[i]=a[tmpmin];
a[tmpmin]=tmp;
voidPrint(slink*head,char*a[])
=NULL)
{printf("
a[(p->
data)-1]);
p=p->
intmain(){
inta[54],r,R;
单链表实现:
for(inti=0,j=1;
i++){a[i]=j;
slink*paNum=creslink(a,54);
slink*pbNum=creslinkemp();
for(intx=1,n=54;
x<
=54;
x++,n--){
srand((unsigned)time(0));
r=(rand()%n)+1;
getelem(paNum,r,&
R);
insert(pbNum,x,R);
Delete(paNum,r);
slink*pone=pbNum->
one[i]=pone->
pone=pone->
slink*ptwo=pbNum->
i++){ptwo=ptwo->
two[i]=ptwo->
ptwo=ptwo->
slink*pthree=pbNum->
i++){pthree=pthree->
three[i]=pthree->
pthree=pthree->
slink*pcover=pbNum->
i++){pcover=pcover->
cover[i]=pcover->
pcover=pcover->
sort(one,17);
sort(two,17);
sort(three,17);
slink*sortedfirst=creslink(one,17);
slink*sortedsecond=creslink(two,17);
slink*sortedthird=creslink(three,17);
slink*Cover=creslink(cover,3);
Print(sortedfirst,poker);
Print(sortedsecond,poker);
Print(sortedthird,poker);
Print(Cover,poker);
五、疑难问题的解决和感想
错误1:
错误:
顺序表实现中的Min函数:
将for(inti=1;
i++)错写成for(inti=1;
分析:
所以在之后Sort函数:
该函数通过for循环不断找出参数顺序表的最小值放入新的顺序表,然后删除原表中的原最小值,再进入新的循环直至将所有原顺序表元素按从小到大顺序排列在新顺序表中,返回新顺序表。
由于只考虑了第一次for循环原顺序表中17个元素,就把Min函数循环判断条件写为i<
17,殊不知Sort函数循环中每执行一次循环原顺序表就会减少一个元素,所以Min函数中的循环判断条件也应每循环一次减一。
所以Min函数中循环判断条件应为作为参数的顺序表的元素个数即i<
size
错误2:
poker数组下标没有减一
以字符串形式输出三个人分配的数字:
字符串指针数组的下标是从0到53,
而三人所分配的数字是从1到54,所以当三人所分配数字作为poker对应下标时应当减一
即输出poker[sortedxxx->
data[i]-1]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实现 地主 发牌 程序