您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 南京理工大学C++课程设计—扑克游戏
C++课程设计实验报告姓名郑星鑫学号913104210332班级9131042103任课教师赵琦时间4月12日选择题目扑克牌游戏难易级别A级实验报告成绩一、程序功能简介创建一副扑克牌,并完成洗牌等操作。二.课程设计要求和目的1.增加大王和小王。2.删去一张指定的扑克后,余牌显示。3.创建一副扑克,显示一副扑克,洗牌,依次发给四个人并显示。4.需要对原程序做一些修改,保留生成牌和洗牌的部分,主要是修改main函数的结构,依次为:生成牌,洗牌,发牌,然后循环显示菜单,询问是否删除一张,删除一轮,面值排序,花色排序等,在main函数中定义所生成的那副牌,并将其作为参数(对象引用),所有新增类的操作均以那副牌作为数据进行运算。三.课程设计中要解决的问题分析和调试1.首先,去掉源程序的注释,以免修改程序时自己的注释与源文件注释混淆,便于找出修改程序时可能产生的错误。2.添加大小王:修改类Deck,将一副扑克牌对象内的扑克牌个数增加两张,对这两张牌的面值及花色分别赋值“S”1(小王),“B”2(大王)。3.游戏中四个人玩牌,要新建两个类:Per_Deck类表示某个人拿的牌,Play_Deck类表示四个人玩牌的过程。Perdeck是Deck和PlayDeck的友元类。classPer_Deck{public:Playing_Cardm_Card[20];//最多有20张牌intnNum;//实际张数Per_Deck();//构造函数voidMakePerDeck(Deck&,int,int);//对象初始化voidShow();//显示voidSortFace();//按面值排序voidSortSuit();//按花色排序intDelete(intn);//删除牌号为n的那张};//**************************四个人玩牌的过程*******************classPlay_Deck{public:Per_Deckm_deck[4];//一共是四个人玩牌Play_Deck();//构造函数voidPlayCard(Deck&);//用指定的那副牌对四个人分别赋值voidShow();//显示intDeleteOne(introw,intcolumn);//删除参数为第row个人的第column张牌voidSortDeckFace();//对整副牌面值排序voidSortDeckSuit();//对整副牌花色排序ints(inta);//用于调用私有数据来显示排序后的牌};4.添加人性化界面,初始运行程序时加了一个友好的界面,用p,u,k,e这四个字母拼成了中文的”扑克”二字,增加游戏的趣味性,并附带输出了自己的姓名和学号。5.在主函数中调用DeckMakeDriver()函数,通过DeckMakeDriver()中的一个do循环控制主菜单的循环出现,并对可能出现的玩家输入问题进行分析修改。5.进入四个不同功能的游戏界面时,操作后询问是否显示被操作后的牌,再询问是否返回主菜单,否的话退出游戏。6.在对玩家的牌的面值以及花色排序时,在类PlayDeck()中增加ints()函数,用于调用私有数据来显示排序完后的牌。四、源程序结构流程框图与说明开始生成一副新牌输入洗牌次数进行洗牌依次输入给四位玩家的牌并显示主菜单1删除某位玩家一张牌是否显示牌显示被操作后的牌是否回主菜单是是2删除各位玩家一张牌是否显示牌显示被操作的牌是否回主菜单是是4按玩家牌的花色排序是否显示牌显示操作后的牌是是否回主菜单是按玩家牌的面值排序是否显示牌显示操作后的牌是否回主菜单是结束5显示各位玩家的牌五.源程序代码以及草稿原件#includeiostream.h#includestring.h#includeconio.h#includestdlib.h#includestdio.h#includetime.hvoidProgram_Init();intmain();voidCenter_Text(char[]);intget_number();charGet_Key();voidDeckMakeDriver();intgetRandInt(intmin,intmax);voidprog_close();classPerDeck;//增加classPlaying_Card{private:intm_Value;charm_Face[3];charm_Suit;public:Playing_Card();voidshowcard();voidCard_Make(int);friendclassPerDeck;//增加};classDeck{private:Playing_Cardm_cardarray[54];//intm_lastdelt;public:Deck();voidMakeDeck();voidDeal_One();voidShowDeck();voidDeckShuff(int);voidRemove_Card();friendclassPerDeck;//增加};classPerDeck//增加PerDeck{Playing_CardmCard[20];intnNum;public:PerDeck(){}voidMakePerDeck(Deck&,int);voidShow();voidSortFace();voidSortSuit();intDelete(intn);};//endclassPlayDeck//增加PlayDeck{PerDeckmDeck[4];public:PlayDeck(){}voidPlayCard(Deck&);voidShow();intDeleteOne(introw,intcolumn);intDeleteAll(int,int,int,int);voidSortDeckFace(int);voidSortDeckSuit(int);voids(int);};//endvoidPerDeck::MakePerDeck(Deck&d,inta)//PerDeck成员的函数{nNum=a;inti=0;while(ia&&d.m_lastdelt!=53)mCard[i++]=d.m_cardarray[++d.m_lastdelt];}voidPerDeck::Show(){intnNewLine=0;Center_Text(此玩家的牌:);coutendl;while(nNewLinenNum){if(nNewLine%5==0)coutendl;mCard[nNewLine++].showcard();}coutendl;}voidPerDeck::SortFace(){Playing_Cardk;for(inti=0;inNum;i++)for(intj=0;jnNum-i-1;j++)if(mCard[j].m_ValuemCard[j+1].m_Value){k=mCard[j];mCard[j]=mCard[j+1];mCard[j+1]=k;}}voidPerDeck::SortSuit(){Playing_Cardk;for(inti=0;inNum;i++)for(intj=0;jnNum-i-1;j++)if(mCard[j].m_SuitmCard[j+1].m_Suit){k=mCard[j];mCard[j]=mCard[j+1];mCard[j+1]=k;}}intPerDeck::Delete(intn){if(nnNum){cout超出这副牌张数endl;returnnNum;}else{cout.width(5);cout删除牌:;mCard[n-1].showcard();while(n-1nNum)mCard[n-1]=mCard[n++];}return--nNum;}//endvoidPlayDeck::PlayCard(Deck&k)//PlayDeck的成员函数{inta,b,c,d;Center_Text(请依次输入给四位玩家的牌数(总张数小于等于54)。);coutendl;cinabcd;if(a+b+c+d54){Center_Text(张数超过牌的张数,退出游戏。);exit(0);}mDeck[0].MakePerDeck(k,a);mDeck[1].MakePerDeck(k,b);mDeck[2].MakePerDeck(k,c);mDeck[3].MakePerDeck(k,d);}voidPlayDeck::Show(){Center_Text(玩家1);coutendl;mDeck[0].Show();Center_Text(玩家2);coutendl;mDeck[1].Show();Center_Text(玩家3);coutendl;mDeck[2].Show();Center_Text(玩家4);coutendl;mDeck[3].Show();}intPlayDeck::DeleteOne(introw,intcolumn){mDeck[row-1].Delete(column);return1;}intPlayDeck::DeleteAll(inta,intb,intc,intd){mDeck[0].Delete(a);mDeck[1].Delete(b);mDeck[2].Delete(c);mDeck[3].Delete(d);return1;}voidPlayDeck::SortDeckFace(intb){mDeck[b-1].SortFace();}voidPlayDeck::SortDeckSuit(intb){mDeck[b-1].SortSuit();}voidPlayDeck::s(inta){mDeck[a-1].Show();}//endlintmain(){srand((unsigned)time(NULL));intCard_Number=0;Program_Init();DeckMakeDriver();prog_close();return1;}Playing_Card::Playing_Card(){inti;for(i=1;i=3;){m_Face[i]='';i++;}m_Suit='';m_Value=0;}voidProgram_Init(){Center_Text(扑克牌游戏);coutendl\n;Center_Text(byYoriFish);Center_Text(单击Return继续);cin.get();}charGet_Key(){charx;x=cin.get();coutendl;returnx;}voidPlaying_Card::showcard(){cout;coutm_Face;cout.width(1);coutm_Suit;cout;}voidCenter_Text(charShellText[80]){intlength;intcenter;length=strlen(ShellText);center=(80-length)/2;for(;center!=0;center--){cputs();}cputs(ShellText);coutendl;//增加}intget_number(){intInput_Integer=0;Center_Text(Pleaseenteranintegerbetween0and53.54toquit.);//coutendl;cinInput_Integer;returnInput_Integer;}voidPlaying_Card::Card_Make(intnum){inti=0;charj;intface_num=num%13;if(num/13=
本文标题:南京理工大学C++课程设计—扑克游戏
链接地址:https://www.777doc.com/doc-4907063 .html