收藏 分销(赏)

扑克牌游戏1.doc

上传人:pc****0 文档编号:7172205 上传时间:2024-12-27 格式:DOC 页数:7 大小:44.50KB 下载积分:10 金币
下载 相关 举报
扑克牌游戏1.doc_第1页
第1页 / 共7页
扑克牌游戏1.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
课题标号:2,游戏程序 第1题 课题名称:扑克牌游戏 一.程序功能简介 创建一副扑克,并完成洗牌,显示洗过后的新牌,删除指定的牌,发牌,排序等操作.是一个游戏小程序. 二.课程设计要求 (1)增加大小王 (2)删去一张指定扑克后,余牌显示 (3)创建一副扑克,显示一副扑克,洗牌,依次分给4个人并显示 三.课程设计思想 1.添加大小王并赋值: 将一副扑克牌对象内的扑克牌数增加两张(Playing_Card m_cardarray[54];),对这两张牌的面值及花色分别赋值”B”(大王)”S”(小王)(在PlayingCard类定义的CardMake(int nNum)中先制造52张牌面值花色,再分别用两个if结构添加大王,小王). void PlayingCard::CardMake(int nNum) //生成一副牌 { int i = 0; char j; int nFaceNum = nNum % 13; switch(nFaceNum) { case 0: strcpy(achFace," A");break; case 9: strcpy(achFace,"10");break; case 10: strcpy(achFace," J");break; case 11: strcpy(achFace," Q");break; case 12: strcpy(achFace," K");break; default:j = char(nFaceNum + 49); if(i<3) { achFace[i] = ' '; i++; achFace[i] = j;i++; achFace[i] = NULL; break; } } if(nNum <= 12)chSuit = 6; if(nNum >12 && nNum <= 25)chSuit = 3; if(nNum >25 && nNum <= 38)chSuit = 5; if(nNum >38 && nNum <= 51)chSuit = 4; if(nFaceNum <= 9)nValue = nFaceNum + 1; if(nNum==53){strcpy(achFace," B");chSuit = 2;nValue=15;}; (添加大王) if(nNum==52){strcpy(achFace," S");chSuit = 1;nValue=14;}; (添加小王) if(nFaceNum == 10)nValue = 11; if(nFaceNum==11)nValue=12; if(nFaceNum==12)nValue=13; } 2.创建一副牌分发四人 根据书上介绍创造两个类,命名为PlayDeck(四个人玩牌的过程) 和PlayDeck(某人拿的牌),把它们设为Deck类和Playing Card类的友元类.,在void PlayDeck::PlayCard(Deck&deck)中将其分为四份,依次分给每人: void PlayDeck::PlayCard(Deck&deck) //将牌分为四份 { for(int i=0;i<53-deck.nLastDelt;i++) { int n=i%4; if(n==0){m_deck[0].m_Card[a]=deck.m_cardarray[i];a++;} if(n==1){m_deck[1].m_Card[b]=deck.m_cardarray[i];b++;} if(n==2){m_deck[2].m_Card[c]=deck.m_cardarray[i];c++;} if(n==3){m_deck[3].m_Card[d]=deck.m_cardarray[i];d++;} } m_deck[0].nNum=a; m_deck[1].nNum=b; m_deck[2].nNum=c; m_deck[3].nNum=d; cout<<endl; } 题目要求为同副牌,我把原程序中void DeckMakeDriver()去掉,把Deck对象deck_1作为那副牌,进行操作。 3.删除指定牌: 题目要求删去一张指定扑克后,余牌显示。当输入序号时候,会显示所删的牌,并且余牌显示,当在次询问是否删牌时,将删除余牌中所对应的那一张。 void Deck::DealOne() //删除一张牌 { int k=0; int m; if(nLastDelt!=53) { cout.width(5); cout <<" 删除牌(第几张):"<<'\t'; cin>>m; cout<<"删除牌为:"<<'\t'; m_cardarray[m-1].ShowCard(); cout<<endl<<"余牌为:"<<endl; for(m;m<54;m++) //将所删牌去掉,并将后一张牌的值赋予前张 {m_cardarray[m-1]=m_cardarray[m]; m_cardarray[m]= PlayingCard();} for(int i=0;i<52-nLastDelt;i++) //显示余牌 { if(k%11==0)cout<<endl; m_cardarray[i].ShowCard(); k++; }nLastDelt++; } else { cout << "这副牌全部删除完了"; ProgClose(); } } 后面在类PlayDeck里有设计了删牌程序分别删一张或一轮 void PlayDeck::DeleteOne(int row,int column) //删除一张牌 { m_deck[row-1].m_Card[column-1].ShowCard(); cout<<endl<<"剩余牌为:"<<endl; for(int i=0,k=1;i<m_deck[row-1].nNum;i++){ if(i!=column-1){ m_deck[row-1].m_Card[i].ShowCard(); if(k%5==0)cout<<'\n'; k++;} switch(row){ case 1:a--;break; case 2:b--;break; case 3:c--;break; case 4:d--;break;} } cout<<endl; } void PlayDeck::DeleteAll(int one,int two,int three,int four) //删除一轮牌 { cout<<"玩家1删除的牌: "; m_deck[0].m_Card[one].ShowCard(); cout<<'\n'<<"余牌为:\n"; for(int m=0,z=1;m<a;m++) if(m!=one){m_deck[0].m_Card[m].ShowCard(); if(z%5==0)cout<<endl;z++;} cout<<endl; cout<<"玩家2删除的牌: "; m_deck[1].m_Card[two].ShowCard(); cout<<'\n'<<"余牌为:\n"; for(int i=0,l=1;i<b;i++) if(i!=two){m_deck[1].m_Card[i].ShowCard(); if(l%5==0)cout<<endl;l++;} cout<<endl; cout<<"玩家3删除的牌: "; m_deck[2].m_Card[three].ShowCard(); cout<<'\n'<<"余牌为:\n"; for(int j=0,x=1;j<c;j++) if(j!=three){m_deck[2].m_Card[j].ShowCard(); if(x%5==0)cout<<endl;x++;} cout<<endl; cout<<"玩家4删除的牌: "; m_deck[3].m_Card[four].ShowCard(); cout<<'\n'<<"余牌为:\n"; for(int k=0,y=1;k<d;k++) if(k!=four){m_deck[3].m_Card[k].ShowCard(); if(y%5==0)cout<<endl;y++;} cout<<endl; a--;b--;c--;d--; } 在程序中a,b,c,d为整体变量 4.添加人性化界面 开始运行程序时加了一个友好的界面,输出了自己的姓名和学号.并且在程序中用system(cls)清屏,使屏幕明朗。在洗牌的程序中加入了函数void wait(int milli)延时,使视觉效果真实。另,在类PlayDeck中有排序程序,发牌后显示排序,可按面值大小或花色排序 void PlayDeck::SortFace(int num,int t) //按面值排列 { PlayingCard a; for(int i=0;i<num-1;i++) for(int j=i+1;j<num;j++) if(m_deck[t].m_Card[i].nValue<m_deck[t].m_Card[j].nValue) { a=m_deck[t].m_Card[i];m_deck[t].m_Card[i]=m_deck[t].m_Card[j]; m_deck[t].m_Card[j]=a; } } //*********************************************************************** void PlayDeck::SortSuit(int num,int t) //按花色排列 { PlayingCard a; for(int i=0;i<num-1;i++) for(int j=1+i;j<num;j++) if(m_deck[t].m_Card[i].chSuit<m_deck[t].m_Card[j].chSuit) { a=m_deck[t].m_Card[i];m_deck[t].m_Card[i]=m_deck[t].m_Card[j]; m_deck[t].m_Card[j]=a; } } 四.课程设计思所遇困难 设计过程中遇到过一些问题,设计增加大小王时,如何增加两张新牌而不破坏原有的牌,这我增加了两个if语句,并且写在后面,这等于将一张牌其中的量赋了两次值后才有大小王,若在前面书写if语句,则大小王的面值不能按自己要求赋值。如何再删除牌后余牌显示,也是比较困难,我尝试过用PlayingCard()去使值清零,但这样显示的只是问号,后来,我才想起for语句将后值赋于前值,再显示出来。最后的类比较繁琐,对每一个函数具体运用要靠自己编写。如:如何将删去若干张牌后的剩下牌分给四人的具体方法等。这都是我在程序设计中所遇到的困难。另外,一些细节问题也会使程序出错,例如:将判断符号“==”输为“=”等。 五.程序设计的个人体会 一开始我还认为我不可能完成,但是经过四周的努力我完成了,虽难不够完善,但是我自己能够编出来程序,并且有所收获,我觉得很不错了。编程并不像想象中那么容易,如何将一个程序用最简便的方法编写出来,而且使程结构序严谨,实现较多功能,是很困难的,我所设计的扑克牌游戏,只能完成删牌功能,而且比较繁琐,我所学到的C++知识,只有这样远远不够,对于真正的掌握编程还有一段距离,我应该更加努力学习。同时,在小细节上犯的错误让我明白我应该更加严谨。这样才能少犯些错误。 6
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服