版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、南京理工大学C+课程设计扑克游戏C+课程设计实验报告姓名 郑星鑫 学号 913104210332 班级9131042103 任课教师 赵琦 时间 4月12日 选择题目 扑克牌游戏 难易级别 A级 实验报告成绩 程序功能简介创立一副扑克牌,并完成洗牌等操作。二课程设计要求和目的1. 增加大王和小王。2. 删去一张指定的扑克后,余牌显示。3. 创立一副扑克,显示一副扑克,洗牌,依次发给四个人并显示。4. 需要对原程序做一些修改,保存生成牌和洗牌的局部,主要是修改main函数的结构,依次为:生成牌,洗牌,发牌,然后循环显示菜单,询问是否删除一张,删除一轮,面值排序,花色排序等,在main函数中定义所
2、生成的那副牌,并将其作为参数对象引用,所有新增类的操作均以那副牌作为数据进行运算。三. 课程设计中要解决的问题分析和调试1.首先,去掉源程序的注释,以免修改程序时自己的注释与源文件注释混淆,便于找出修改程序时可能产生的错误。2.添加大小王:修改类Deck,将一副扑克牌对象内的扑克牌个数增加两张,对这两张牌的面值及花色分别赋值“S1小王,“B2大王。3.游戏中四个人玩牌,要新建两个类:Per_Deck类表示某个人拿的牌,Play_Deck类表示四个人玩牌的过程。Perdeck是Deck和PlayDeck的友元类。class Per_Deck public:Playing_Card m_Card2
3、0; /最多有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 PlayCard(Deck &); /用指定的那副牌对四个人分别赋值void Sh
4、ow(); /显示int DeleteOne(int row,int column); /删除参数为第row个人的第column张牌void SortDeckFace(); /对整副牌面值排序void SortDeckSuit(); /对整副牌花色排序 int s(int a); /用于调用私有数据来显示排序后的牌;添加人性化界面,初始运行程序时加了一个友好的界面,用p,u,k,e这四个字母拼成了中文的扑克二字,增加游戏的趣味性,并附带输出了自己的姓名和学号。5.在主函数中调用DeckMakeDriver()函数,通过DeckMakeDriver()中的一个do循环控制主菜单的循环出现,并对可
5、能出现的玩家输入问题进行分析修改。5.进入四个不同功能的游戏界面时,操作后询问是否显示被操作后的牌,再询问是否返回主菜单,否的话退出游戏。6.在对玩家的牌的面值以及花色排序时,在类PlayDeck中增加int s函数,用于调用私有数据来显示排序完后的牌。源程序结构流程框图与说明 开始生成一副新牌输入洗牌次数进行洗牌依次输入给四位玩家的牌并显示主菜单1删除某位玩家一张牌是否显示牌显示被操作后的牌是否回主菜单是是2删除各位玩家一张牌是否显示牌显示被操作的牌是否回主菜单是是4按玩家牌的花色排序是否显示牌显示操作后的牌是是否回主菜单是按玩家牌的面值排序是否显示牌显示操作后的牌是否回主菜单是结束5显示各
6、位玩家的牌 五.源程序代码 以及草稿原件#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 PerDeck; /增加class Playing_Card private:int m_Value;char m_F
7、ace3; char m_Suit ; public:Playing_Card();void showcard();void Card_Make(int);friend class PerDeck; /增加; class Deckprivate:Playing_Card m_cardarray54; /int m_lastdelt;public:Deck();void MakeDeck();void Deal_One();void ShowDeck();void DeckShuff(int);void Remove_Card();friend class PerDeck; /增加;class
8、PerDeck /增加PerDeckPlaying_Card mCard20;int nNum;public:PerDeck()void MakePerDeck(Deck& ,int);void Show();void SortFace();void SortSuit();int Delete(int n); /endclass PlayDeck /增加PlayDeckPerDeck mDeck4;public:PlayDeck()void PlayCard(Deck&);void Show();int DeleteOne(int row,int column);int DeleteAll(i
9、nt, 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_lastdelt;void PerDeck:Show()int nNewLine=0;Center_Text(此玩家的牌:);coutendl;while(nNewLinenNum)if(nNe
10、wLine%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 PerDeck:SortSuit()Playing_Card k;for(int i=0;inNum;i+)for(int j=0;jmCardj+1.m_Suit)k=mCardj;mCardj=mCardj+1;mCardj+
11、1=k;int PerDeck:Delete(int n)if(nnNum)cout超出这副牌张数endl;return nNum;elsecout.width(5);cout 删除牌:;mCardn-1.showcard();while(n-1nNum)mCardn-1=mCardn+;return -nNum; /endvoid PlayDeck:PlayCard(Deck & k) /PlayDeck的成员函数int a,b,c,d;Center_Text(请依次输入给四位玩家的牌数(总张数小于等于54。);coutabcd;if(a+b+c+d54)Center_Text(张数超过牌的
12、张数,退出游戏。);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;mDeck0.Show();Center_Text(玩家2);coutendl;mDeck1.Show();Center_Text(玩家3);coutendl;mDeck2.Show();Center_Text(玩家4);coutendl;mDeck3.Show();int Pl
13、ayDeck: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.Delete(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(
14、);void PlayDeck:s(int a)mDecka-1.Show(); /endlint main() srand( (unsigned)time( NULL ) ); int Card_Number = 0;Program_Init(); DeckMakeDriver();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 ;
15、Center_Text(by YoriFish);Center_Text(单击 继续);cin.get();char Get_Key()char x;x = cin.get();cout endl;return x;void Playing_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(;c
16、enter!=0;center-)cputs( );cputs(ShellText);coutendl; /增加 int get_number()int Input_Integer = 0;Center_Text(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) /增加swi
17、tch(face_num)case 0: strcpy(m_Face, S);break;case 1: strcpy(m_Face, B);break; else /增加switch(face_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(
18、i3)m_Facei = ; i+;m_Facei = j;i+;m_Facei = NULL; break; if(num 12 & num 25 & num 38 & num 51)m_Value=14;elsem_Value = face_num + 1;void DeckMakeDriver() Deck deck_1;deck_1.MakeDeck();deck_1.ShowDeck();Get_Key();int b; /增加Center_Text(请输入洗牌次数。);cinb; /enddeck_1.DeckShuff(b);deck_1.ShowDeck();cout endl
19、 endl endl;char y;PlayDeck four; /增加four.PlayCard(deck_1);coutendla;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
20、 = toupper(y);if(y=Y)four.Show();coutendl;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)回到菜单?
21、y;y = toupper(y);while(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_cardarray
22、index.showcard(); 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 topdec
23、k;Deck bottomdeck;int i;int bottomdeckindex = 1;int topdeckindex = 1;for(i=0;im_cardarrayi;topdeckindex+;i+;for(i=(split);im_cardarrayi;bottomdeckindex+;i+;int deckoutindex = 0;int numcardstomovetop;int numcardstomovebottom;int j;int h = 0;bottomdeckindex = 54 - split; /topdeckindex =split;while(deckoutindex = 53) /numcardstomovetop = getRandInt(2,7); numcardstom
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苗圃土地租赁合同(2024版)
- 购房合同贷款
- 考勤课件教学课件
- 2024年度教育培训合同标的为在线课程开发3篇
- 教师劳动合同
- 二零二四年份新能源汽车充电设施建设合同
- 《汽车维修接待实务》 课件 学习情境三 接待前准备
- 团队协作的课件
- 2024年度工程款清算补充协议2篇
- 租房合同标准版可打印
- 病人欠费催缴通知单
- 流体力学第1章绪论课件
- GB/T 40615-2021电力系统电压稳定评价导则
- 氧气(MSDS)安全技术说明书
- 新能源汽车动力电池技术:各类动力电池的工作原理及应用课件
- 发动机机械系统2.0升ltg-9.66维修指南车下
- 2022版义务教育(科学)课程标准(含2022年新增和修订部分)
- 幼儿园二十四节气之小雪课件
- 草沙障施工方案
- 部编版五年级语文上册第六单元《习作:我想对您说》课件
- 输尿管结石护理查房PPT
评论
0/150
提交评论