1、南京理工大学C+课程设计扑克游戏南京理工大学C+课程设计扑克游戏C+课程设计实验报告姓名 郑星鑫 学号 913104210332 班级9131042103 任课教师 赵琦 时间 4月12日 选择题目 扑克牌游戏 难易级别 A级 实验报告成绩 一、 程序功能简介创建一副扑克牌,并完成洗牌等操作。二课程设计要求和目的1. 增加大王和小王。2. 删去一张指定的扑克后,余牌显示。3. 创建一副扑克,显示一副扑克,洗牌,依次发给四个人并显示。4. 需要对原程序做一些修改,保留生成牌和洗牌的部分,主要是修改main函数的结构,依次为:生成牌,洗牌,发牌,然后循环显示菜单,询问是否删除一张,删除一轮,面值排
2、序,花色排序等,在main函数中定义所生成的那副牌,并将其作为参数(对象引用),所有新增类的操作均以那副牌作为数据进行运算。三. 课程设计中要解决的问题分析和调试1.首先,去掉源程序的注释,以免修改程序时自己的注释与源文件注释混淆,便于找出修改程序时可能产生的错误。2.添加大小王:修改类Deck,将一副扑克牌对象内的扑克牌个数增加两张,对这两张牌的面值及花色分别赋值“S”1(小王),“B”2(大王)。3.游戏中四个人玩牌,要新建两个类:Per_Deck类表示某个人拿的牌,Play_Deck类表示四个人玩牌的过程。Perdeck是Deck和PlayDeck的友元类。class Per_Deck
3、public: Playing_Card m_Card20; /最多有20张牌 int nNum; /实际张数 Per_Deck(); /构造函数 void MakePerDeck(Deck &,int,int); /对象初始化 void Show(); /显示 void SortFace(); /按面值排序 void SortSuit(); /按花色排序 int Delete(int n); /删除牌号为n的那张 ;/*四个人玩牌的过程*class Play_Deck public: Per_Deck m_deck4; /一共是四个人玩牌 Play_Deck(); /构造函数 void Pl
4、ayCard(Deck &); /用指定的那副牌对四个人分别赋值 void Show(); /显示 int DeleteOne(int row,int column); /删除参数为第row个人的第column张牌 void SortDeckFace(); /对整副牌面值排序 void SortDeckSuit(); /对整副牌花色排序 int s(int a); /用于调用私有数据来显示排序后的牌;4.添加人性化界面,初始运行程序时加了一个友好的界面,用p,u,k,e这四个字母拼成了中文的”扑克”二字,增加游戏的趣味性,并附带输出了自己的姓名和学号。5.在主函数中调用DeckMakeDriv
5、er()函数,通过DeckMakeDriver()中的一个do循环控制主菜单的循环出现,并对可能出现的玩家输入问题进行分析修改。5.进入四个不同功能的游戏界面时,操作后询问是否显示被操作后的牌,再询问是否返回主菜单,否的话退出游戏。6.在对玩家的牌的面值以及花色排序时,在类PlayDeck()中增加int s()函数,用于调用私有数据来显示排序完后的牌。四、 源程序结构流程框图与说明 开始生成一副新牌输入洗牌次数进行洗牌依次输入给四位玩家的牌并显示主菜单1删除某位玩家一张牌是否显示牌显示被操作后的牌是否回主菜单是是2删除各位玩家一张牌是否显示牌显示被操作的牌是否回主菜单是是4按玩家牌的花色排序
6、是否显示牌显示操作后的牌是是否回主菜单是按玩家牌的面值排序是否显示牌显示操作后的牌是否回主菜单是结束5显示各位玩家的牌 五.源程序代码 以及草稿原件#include #include #include #include #include #include void Program_Init(); int main();void Center_Text(char ); int get_number(); char Get_Key(); void DeckMakeDriver(); int getRandInt(int min, int max); void prog_close();class
7、PerDeck; /增加 class Playing_Card private: int m_Value; char m_Face3; char m_Suit ; public: Playing_Card(); void showcard(); void Card_Make(int); friend class PerDeck; /增加; class Deck private: Playing_Card m_cardarray54; / int m_lastdelt;public: Deck(); void MakeDeck() ; void Deal_One(); void ShowDeck
8、(); void DeckShuff(int); void Remove_Card(); friend class PerDeck; /增加;class PerDeck /增加PerDeck Playing_Card mCard20; int nNum;public: PerDeck() void MakePerDeck(Deck& ,int); void Show(); void SortFace(); void SortSuit(); int Delete(int n); /endclass PlayDeck /增加PlayDeck PerDeck mDeck4;public: PlayD
9、eck() void PlayCard(Deck&); void Show(); int DeleteOne(int row,int column); int DeleteAll(int, int, int, int); void SortDeckFace(int); void SortDeckSuit(int); void s(int); /endvoid PerDeck:MakePerDeck(Deck & d,int a) /PerDeck成员的函数 nNum=a; int i=0; while(ia&d.m_lastdelt!=53) mCardi+=d.m_cardarray+d.m
10、_lastdelt;void PerDeck:Show() int nNewLine=0; Center_Text(此玩家的牌:); coutendl; while(nNewLinenNum) if(nNewLine%5=0)coutendl; mCardnNewLine+.showcard(); coutendl;void PerDeck:SortFace() Playing_Card k; for(int i=0;inNum;i+) for(int j=0;jmCardj+1.m_Value) k=mCardj; mCardj=mCardj+1; mCardj+1=k; void PerD
11、eck:SortSuit() Playing_Card k; for(int i=0;inNum;i+) for(int j=0;jmCardj+1.m_Suit) k=mCardj; mCardj=mCardj+1; mCardj+1=k; int PerDeck:Delete(int n) if(nnNum) cout超出这副牌张数endl; return nNum; else cout.width(5); cout 删除牌:; mCardn-1.showcard(); while(n-1nNum) mCardn-1=mCardn+; return -nNum; /endvoid Play
12、Deck:PlayCard(Deck & k) /PlayDeck的成员函数 int a,b,c,d; Center_Text(请依次输入给四位玩家的牌数(总张数小于等于54)。); coutabcd; if(a+b+c+d54) Center_Text(张数超过牌的张数,退出游戏。); exit(0); mDeck0.MakePerDeck(k,a); mDeck1.MakePerDeck(k,b); mDeck2.MakePerDeck(k,c); mDeck3.MakePerDeck(k,d);void PlayDeck:Show() Center_Text(玩家1); coutendl
13、; mDeck0.Show(); Center_Text(玩家2); coutendl; mDeck1.Show(); Center_Text(玩家3); coutendl; mDeck2.Show(); Center_Text(玩家4); coutendl; mDeck3.Show();int PlayDeck:DeleteOne(int row,int column) mDeckrow-1.Delete(column); return 1;int PlayDeck:DeleteAll(int a,int b,int c,int d) mDeck0.Delete(a); mDeck1.Del
14、ete(b); mDeck2.Delete(c); mDeck3.Delete(d); return 1; void PlayDeck:SortDeckFace(int b) mDeckb-1.SortFace();void PlayDeck:SortDeckSuit(int b) mDeckb-1.SortSuit();void PlayDeck:s(int a) mDecka-1.Show(); /endl int main() srand( (unsigned)time( NULL ) ); int Card_Number = 0; Program_Init(); DeckMakeDri
15、ver(); prog_close(); return 1; Playing_Card:Playing_Card() int i; for(i=1;i=3;) m_Facei = ; i+; m_Suit = ; m_Value = 0;void Program_Init() Center_Text(扑克牌游戏); cout endl n ; Center_Text(by YoriFish); Center_Text(单击 继续); cin.get();char Get_Key() char x; x = cin.get(); cout endl; return x;void Playing_
16、Card:showcard() cout ; cout m_Face ; cout.width(1); cout m_Suit; cout ; void Center_Text(char ShellText80) int length; int center; length= strlen(ShellText); center = (80 - length)/2; for(;center!=0;center-) cputs( ); cputs(ShellText); coutendl; /增加 int get_number() int Input_Integer = 0; Center_Tex
17、t(Please enter an integer between 0 and 53. 54 to quit.); / cout Input_Integer; return Input_Integer;void Playing_Card:Card_Make(int num) int i = 0; char j; int face_num = num % 13; if(num/13=4) /增加 switch(face_num) case 0: strcpy(m_Face, S);break; case 1: strcpy(m_Face, B);break; else /增加 switch(fa
18、ce_num) case 0: strcpy(m_Face, A);break; case 9: strcpy(m_Face,10);break; case 10: strcpy(m_Face, J);break; case 11: strcpy(m_Face, Q);break; case 12: strcpy(m_Face, K);break; default: j = char(face_num + 49); if(i3) m_Facei = ; i+; m_Facei = j;i+; m_Facei = NULL; break; if(num 12 & num 25 & num 38
19、& num 51)m_Value=14; else m_Value = face_num + 1;void DeckMakeDriver() Deck deck_1; deck_1.MakeDeck(); deck_1.ShowDeck(); Get_Key(); int b; /增加 Center_Text(请输入洗牌次数。); cinb; /end deck_1.DeckShuff(b); deck_1.ShowDeck(); cout endl endl endl; char y; PlayDeck four; /增加 four.PlayCard(deck_1); coutendla;
20、if(a=1) int b,c; char y; cout请输入要删除第几位玩家的第几张牌。bc; four.DeleteOne(b,c); coutendl是(Y)否(N)显示删除后玩家的牌? y; y = toupper(y); if(y=Y)four.s(b); coutendl; if(a=2) int b,c,d,e; char y; cout请依次输入欲删除各玩家牌的序号。bcde; four.DeleteAll(b,c,d,e); coutendl是(Y)否(N)显示删除后玩家的牌?y; y = toupper(y); if(y=Y)four.Show(); coutendl;
21、if(a=3) int b; char y; cout请输入要对那位玩家排序b; four.SortDeckFace(b); cout是(Y)否(N)显示排序后的牌? y; y = toupper(y); if(y=Y)four.s(b); if(a=4) int b; char y; cout请输入要对那位玩家排序b; four.SortDeckSuit(b); cout是(Y)否(N)显示排序后的牌? y; y = toupper(y); if(y=Y)four.s(b); if(a=5) four.Show(); cout是(Y)否(N)回到菜单?y; y = toupper(y); w
22、hile(y=Y); /endvoid Deck:MakeDeck() m_lastdelt = 53; / while(m_lastdelt -1) m_cardarraym_lastdelt.Card_Make(m_lastdelt); m_lastdelt-; void Deck:ShowDeck() int index = m_lastdelt + 1; int newline = 0; Center_Text(新的一副牌); cout endl; while(index=53) / if(newline % 11 = 0) cout endl; m_cardarrayindex.sh
23、owcard(); newline+; index+; int getRandInt(int min, int max) int numToReturn; numToReturn = rand(); numToReturn = numToReturn % (max - min + 1) + min; return numToReturn;void Deck:DeckShuff( int times) int x, split; Center_Text(洗牌); cout endl; for(x=0;x=times;x+) split = getRandInt(20,35); Deck topdeck; Deck bottomdeck; int i; int bottomdeckindex = 1; int topdeckindex = 1; for(i=0;im_cardarrayi; topdeckindex+; i+; for(i=(split);im_ca
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1