扑克牌游戏1.doc_第1页
扑克牌游戏1.doc_第2页
扑克牌游戏1.doc_第3页
扑克牌游戏1.doc_第4页
扑克牌游戏1.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课题标号:2,游戏程序 第1题 课题名称:扑克牌游戏一.程序功能简介创建一副扑克,并完成洗牌,显示洗过后的新牌,删除指定的牌,发牌,排序等操作.是一个游戏小程序.二.课程设计要求(1)增加大小王(2)删去一张指定扑克后,余牌显示(3)创建一副扑克,显示一副扑克,洗牌,依次分给4个人并显示三.课程设计思想1.添加大小王并赋值:将一副扑克牌对象内的扑克牌数增加两张(Playing_Card m_cardarray54;),对这两张牌的面值及花色分别赋值”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(i3)achFacei = ; i+;achFacei = j;i+;achFacei = NULL; break; if(nNum 12 & nNum 25 & 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;i53-deck.nLastDelt;i+)int n=i%4;if(n=0)m_deck0.m_Carda=deck.m_cardarrayi;a+;if(n=1)m_deck1.m_Cardb=deck.m_cardarrayi;b+;if(n=2)m_deck2.m_Cardc=deck.m_cardarrayi;c+;if(n=3)m_deck3.m_Cardd=deck.m_cardarrayi;d+;m_deck0.nNum=a;m_deck1.nNum=b;m_deck2.nNum=c;m_deck3.nNum=d;coutendl; 题目要求为同副牌,我把原程序中void DeckMakeDriver()去掉,把Deck对象deck_1作为那副牌,进行操作。3.删除指定牌:题目要求删去一张指定扑克后,余牌显示。当输入序号时候,会显示所删的牌,并且余牌显示,当在次询问是否删牌时,将删除余牌中所对应的那一张。void Deck:DealOne() /删除一张牌int k=0;int m;if(nLastDelt!=53) cout.width(5);cout 删除牌(第几张):m;cout删除牌为:t;m_cardarraym-1.ShowCard();coutendl余牌为:endl;for(m;m54;m+) /将所删牌去掉,并将后一张牌的值赋予前张 m_cardarraym-1=m_cardarraym;m_cardarraym= PlayingCard(); for(int i=0;i52-nLastDelt;i+) /显示余牌 if(k%11=0)coutendl; m_cardarrayi.ShowCard(); k+; nLastDelt+; elsecout 这副牌全部删除完了;ProgClose();后面在类PlayDeck里有设计了删牌程序分别删一张或一轮void PlayDeck:DeleteOne(int row,int column) /删除一张牌m_deckrow-1.m_Cardcolumn-1.ShowCard();coutendl剩余牌为:endl;for(int i=0,k=1;im_deckrow-1.nNum;i+)if(i!=column-1)m_deckrow-1.m_Cardi.ShowCard();if(k%5=0)coutn;k+;switch(row)case 1:a-;break;case 2:b-;break;case 3:c-;break; case 4:d-;break;coutendl;void PlayDeck:DeleteAll(int one,int two,int three,int four) /删除一轮牌cout玩家1删除的牌: ; m_deck0.m_Cardone.ShowCard();coutn余牌为:n;for(int m=0,z=1;ma;m+)if(m!=one)m_deck0.m_Cardm.ShowCard();if(z%5=0)coutendl;z+;coutendl;cout玩家2删除的牌: ; m_deck1.m_Cardtwo.ShowCard();coutn余牌为:n;for(int i=0,l=1;ib;i+)if(i!=two)m_deck1.m_Cardi.ShowCard();if(l%5=0)coutendl;l+;coutendl;cout玩家3删除的牌: ; m_deck2.m_Cardthree.ShowCard();coutn余牌为:n;for(int j=0,x=1;jc;j+)if(j!=three)m_deck2.m_Cardj.ShowCard();if(x%5=0)coutendl;x+;coutendl;cout玩家4删除的牌: ; m_deck3.m_Cardfour.ShowCard();coutn余牌为:n;for(int k=0,y=1;kd;k+)if(k!=four)m_deck3.m_Cardk.ShowCard();if(y%5=0)coutendl;y+;coutendl;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;inum-1;i+)for(int j=i+1;jnum;j+)if(m_deckt.m_Cardi.nValuem_deckt.m_Cardj.nValue)a=m_deckt.m_Cardi;m_deckt.m_Cardi=m_deckt.m_Cardj; m_deckt.m_Cardj=a;/*void PlayDeck:SortSuit(int num,int t) /按花色排列PlayingCard a;for(int i=0;inum-1;i+)for(int j=1+i;jnum;j+)if(m_deckt.m_Cardi.chSuitm_deckt.m_Cardj.chSuit)a=m_deckt.m_Cardi;m_deckt.m_Cardi=m_deckt.m_Cardj; m_deckt.m_Cardj=a;四课程设计思所遇困难设计过程中遇到过一些问题,设计增加大小王时,如何增加两张新牌而不破坏原有的牌,这我增加了两个if语句,并且写在后面,这等于将一张牌其中的量赋了两次值后才有大小王,若在前面书写if语句,则大小王的面值不能按自己要求赋值。如何再删除牌后余牌显示,也是比较困难,我尝试过用PlayingCard()去使值清零,但这样显示的只是问号,后来,我才想起for语句将后值赋于前值,再显示出来。最后的类比较繁琐,对每一个函数具体运用要靠自己编写。如:如何将删去若干张牌后的剩下牌分给四人的具体方法等。这都是我在程序设计中所遇到的困难。另外,一些细节问题也会使程序出错,例如:将判断符号“=”输为“=”等。五程序设计的个人体会一开始我还认为我不可能完成,但是经过四周的努力

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论