C语言实现斗地主发牌程序.docx
- 文档编号:3416899
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:12
- 大小:204.90KB
C语言实现斗地主发牌程序.docx
《C语言实现斗地主发牌程序.docx》由会员分享,可在线阅读,更多相关《C语言实现斗地主发牌程序.docx(12页珍藏版)》请在冰豆网上搜索。
C语言实现斗地主发牌程序
实验四、斗地主发牌程序的实现
一、实验目的
1.了解线性表的顺序存储与基本操作;
2.了解线性表的链接存储与基本操作;
二、实验工具
VC6.0
三、实验练习和要求
3.1实验内容:
1)考虑好纸牌的存储结构,定义好纸牌大小的比较规则;
2)分别建立顺序线性表和链接线性表,可以进行定位删除,可以进行保序插入,可以进行顺序输出……;
3)利用上述线性表类,构造若干个线性表的实例,构造一个含有全部纸牌的线性表,从中随机抽取……随机发给三家(每家17张),并保留底牌3张;
4)按大小顺序分别输出各家的牌和底牌。
3.2实验要求:
1)利用♣♦♥♠王显示每家发得的牌和底牌(ASCII:
\5\4\3\6);
2)每家的牌要求有序排列(数字中3最小,2最大,不同的花色按♣,♦,♥,♠,王渐大处理);
3)所发的牌是随机的;
4)顺序线性表和链接线性表都要用到。
3.3实验难点:
1)如何存储一张牌;
2)如何比较牌的大小(345678910JQKA2);
3)如何实现顺序表与链接表的无差别性?
3.4实现提示
1)54张牌可以用整数:
0--53来表示,也可以用两个独立的整数来表示;
2)用利用C语言的RAND()函数来产生随机数;
3)牌的大小比较规则,除王比较大外,一般的牌先比较点儿数,再比较花色;
4)建议用保序插入,而不要使用最后排序。
3.5注意事项
1)顺序表和链接表的操作接口要尽量一致;
2)345678910JQKA2中的10占两位?
3)大王与小王的特殊处理。
3.6本次实验可以三人构成学习小组,上交一份作业,并给出每一个人贡献分数。
四、实验内容
本次实验分别使用顺序表和单链表实现,三人手中的牌都已经按照大小以及花色从小到大排序。
代码如下:
Ø顺序表实现随机发牌
#include
#include
#include
#include
#defineMaxSize100
typedefintdataType;
typedefstruct{
dataTypedata[MaxSize];
intsize;
}SqList;
SqList*CreateList(dataTypea[],intn){
SqList*t=(SqList*)malloc(sizeof(SqList));
for(inti=0;i t->data[i]=a[i]; t->size=n; returnt; } SqList*CreateListemp(){ SqList*t=(SqList*)malloc(sizeof(SqList)); t->size=0; returnt; } voidExchange(SqList*l,inti,intj){ inttemp; temp=l->data[i]; l->data[i]=l->data[j]; l->data[j]=temp; } intMin(SqList*l){ intmin=l->data[0]; for(inti=1;i if(l->data[i] } returnmin; } voidDelete(SqList*l,intk){ if(k<1||k>l->size)exit (1); for(inti=k;i l->data[i-1]=l->data[i]; l->size--; } intLocate(SqList*l,dataTypex){ for(inti=0;i if(l->data[i]==x)returni+1; return0; } voidPrint(SqList*l){ for(inti=0;i printf("%d",l->data[i]); } SqList*Sort(SqList*pa){ SqList*pb=CreateListemp(); intM; for(inti=0;i<17;i++){ M=Min(pa); pb->data[i]=M; Delete(pa,Locate(pa,M)); pb->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;i<54;i++) { a[i]=j; j++; } SqList*pl=CreateList(a,54); srand((unsigned)time(0)); for(N=0;N { i=rand()%54; j=rand()%54; Exchange(pl,i,j); } for(i=0,j=0;j<17;j++,i++){one[i]=pl->data[j];} for(i=0,j=17;j<34;j++,i++){two[i]=pl->data[j];} for(i=0,j=34;j<51;j++,i++){three[i]=pl->data[j];} for(i=0,j=51;j<54;j++,i++){cover[i]=pl->data[j];} SqList*first=CreateList(one,17); SqList*second=CreateList(two,17); SqList*third=CreateList(three,17); SqList*left=CreateList(cover,3); printf("--------------------------------\n"); printf("按照大小以及花色排序后的结果\n"); printf("--------------------------------\n"); SqList*sortedfirst=Sort(first); SqList*sortedsecond=Sort(second); SqList*sortedthird=Sort(third); printf("第一个人的牌: "); for(i=0;i<17;i++){printf("%s",poker[sortedfirst->data[i]-1]);} printf("\n"); printf("第二个人的牌: "); for(i=0;i<17;i++){printf("%s",poker[sortedsecond->data[i]-1]);} printf("\n"); printf("第三个人的牌: "); for(i=0;i<17;i++){printf("%s",poker[sortedthird->data[i]-1]);} printf("\n"); printf("底牌: "); for(i=0;i<3;i++){printf("%s",poker[left->data[i]-1]);} return0; } 运行两次结果截图: Ø单链表实现随机发牌 #include #include #include #include typedefintElemType; typedefstructnode {ElemTypedata; structnode*next; }slink; slink*creslink(ElemTypea[],intn) {slink*head,*p,*s; inti; p=head=(slink*)malloc(sizeof(slink)); for(i=1;i<=n;i++) {s=(slink*)malloc(sizeof(slink)); s->data=a[i-1]; p->next=s; p=s; } p->next=NULL; returnhead; } slink*creslinkemp() {slink*head,*p; p=head=(slink*)malloc(sizeof(slink)); p->next=NULL; returnhead; } intgetelem(slink*head,inti,ElemType*e) {slink*p;intj; p=head->next;j=1; while(p! =NULL&&j { p=p->next;j++; } if(p==NULL)return0; *e=p->data; return1; } intinsert(slink*head,inti,ElemTypex) {slink*p,*q; intj; p=head;j=0; while(p! =NULL&&j<(i-1)) {p=p->next;j++;} if(p==NULL)return0; q=(slink*)malloc(sizeof(slink)); q->data=x; q->next=p->next; p->next=q; return1; } intDelete(slink*head,inti) {slink*p,*q; intj; if(i<1)return0; p=head;j=0; while(p->next!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实现 地主 发牌 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)