南京理工大学C++课程设计—扑克游戏_第1页
南京理工大学C++课程设计—扑克游戏_第2页
南京理工大学C++课程设计—扑克游戏_第3页
南京理工大学C++课程设计—扑克游戏_第4页
南京理工大学C++课程设计—扑克游戏_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、C+课程设计实验报告姓名 郑星鑫学 号 913104210332班 级 9131042103任课教师 赵琦 时间 4月 12日选择题目 扑克牌游戏难易级别 A级实验报告成绩程序功能简介创建一副扑克牌,并完成洗牌等操作。二课程设计要求和目的1. 增加大王和小王。2. 删去一张指定的扑克后,余牌显示。3. 创建一副扑克,显示一副扑克,洗牌,依次发给四个人并显示。4. 需要对原程序做一些修改,保留生成牌和洗牌的部分,主要是修改main 函数的结构,依次为:生成牌,洗牌,发牌,然后循环显示菜单,询问是否删除一张,删除一轮,面值排序, 花色排序等,在 main 函数中定义所生成的那副牌,并将其作为参数(

2、对象引用) ,所有新增 类的操作均以那副牌作为数据进行运算。三. 课程设计中要解决的问题分析和调试1. 首先,去掉源程序的注释,以免修改程序时自己的注释与源文件注释混淆,便于找 出修改程序时可能产生的错误。2. 添加大小王:修改类 Deck,将一副扑克牌对象内的扑克牌个数增加两张,对这两张 牌的面值及花色分别赋值“ S”1( 小王),“B”2(大王)。3. 游戏中四个人玩牌,要新建两个类: Per_Deck类表示某个人拿的牌, Play_Deck 类 表示四个人玩牌的过程。 Perdeck 是 Deck 和 PlayDeck 的友元类。class Per_Deckpublic:Playing_

3、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_Deckpublic:Per_Deck m_deck4;Play_Deck();void PlayCard(Deck &);void Show();int DeleteOne(

4、int row,int column);void SortDeckFace();void SortDeckSuit();int s(int a) ;;/ 一共是四个人玩牌/ 构造函数/ 用指定的那副牌对四个人分别赋值/ 显示/ 删除参数为第 row 个人的第 column 张牌/ 对整副牌面值排序/ 对整副牌花色排序/ 用于调用私有数据来显示排序后的牌4. 添加人性化界面,初始运行程序时加了一个友好的界面 ,用 p,u,k,e 这四个字母拼成了中 文的”扑克”二字 , 增加游戏的趣味性,并附带输出了自己的姓名和学号。5. 在主函数中调用 DeckMakeDriver() 函数,通过 DeckM

5、akeDriver() 中的一个 do 循环控制 主菜单的循环出现,并对可能出现的玩家输入问题进行分析修改。5. 进入四个不同功能的游戏界面时,操作后询问是否显示被操作后的牌,再询问是否返回 主菜单,否的话退出游戏。6. 在对玩家的牌的面值以及花色排序时,在类 PlayDeck ()中增加 int s()函数,用于 调用私有数据来显示排序完后的牌。四、源程序结构流程框图与说明开始生成一副新牌输入洗牌 次数进行洗牌依次输入给四位玩 家的牌并显示主菜单5 显示 各位 玩家 的牌1 删除某 位玩家一 张牌2 删 除 各 位玩家一 张牌按玩家 牌的面 值排序4按玩家 牌的花色 排序是否回是否回主主菜单

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 PerD

7、eck; / 增加class Playing_Cardprivate:int m_Value;char m_Face3;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(i

8、nt);/ 增加/ 增加 PerDeckvoid Remove_Card();friend class PerDeck;class PerDeckPlaying_Card mCard20; int nNum;public:PerDeck()void MakePerDeck(Deck& ,int);void Show();void SortFace();void SortSuit();int Delete(int n);class PlayDeckPerDeck mDeck4;public:PlayDeck()void PlayCard(Deck&);void Show();int Delete

9、One(int row,int column)int DeleteAll(int, int, int, int);void SortDeckFace(int);void SortDeckSuit(int);void s(int);void PerDeck:MakePerDeck(Deck & d,int a)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;whi

10、le(nNewLinenNum) if(nNewLine%5=0)coutendl; mCardnNewLine+.showcard();coutendl;void PerDeck:SortFace()/end/ 增加 PlayDeck/end/PerDeck 成员的函数 void intPlaying_Card k;for(int i=0;inNum;i+)for(int j=0;jmCardj+1.m_Value) k=mCardj; mCardj=mCardj+1; mCardj+1=k;PerDeck:SortSuit()Playing_Card k;for(int i=0;inNum

11、;i+)for(int j=0;jmCardj+1.m_Suit) k=mCardj;mCardj=mCardj+1;mCardj+1=k; voidif(nnNum)cout 超出这副牌张数 endl; return nNum;elsecout.width(5);cout 删除牌 :;mCardn-1.showcard();while(n-1nNum) mCardn-1=mCardn+;return -nNum;PlayDeck:PlayCard(Deck & k)/end/PlayDeckint a,b,c,d;Center_Text( 请依次输入给四位玩家的牌数 ( 总张数小于等于 co

12、utabcd;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;mDeck0.Show();Center_Text( 玩家 2); coutendl;mDeck1.Show();Center_Text( 玩家 3); coutendl;mDeck

13、2.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.Delete(b);mDeck2.Delete(c);mDeck3.Delete(d);return 1;void PlayDeck:SortDeckFace(int b) mDeckb-1.So

14、rtFace();void PlayDeck:SortDeckSuit(int b)mDeckb-1.SortSuit();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 =

15、 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;voidPlaying_Card:showcard()cout ; cout m_Face ; cout.width(1);cout m_Suit; cout ;voidCenter_Text(char ShellText80)int length;int

16、center;length= strlen(ShellText);center = (80 - length)/2; for(;center!=0;center-) cputs( );cputs(ShellText);coutendl; / 增加int/get_number()int Input_Integer = 0;Center_Text(Please enter an integercout Input_Integer; return Input_Integer;void Playing_Card:Card_Make(int num)between 0 and 53. 54 to qui

17、t.);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(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:s

18、trcpy(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 & num 51)m_Value=14;elsem_Value = face_num + 1;void DeckMakeDriver()Deck deck_1;deck_1.MakeDeck();deck_1.ShowDeck();/ 增加/end/ 增加Get_Key();int b;Center_Text( 请输入洗牌次数

19、。 ); cinb;deck_1.DeckShuff(b);deck_1.ShowDeck();cout endl 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 请依次

20、输入欲删除各玩家牌的序号。 bcde;four.DeleteAll(b,c,d,e);endl;coutendly;y = 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) 显示排序

21、后的牌? y;y = toupper(y); if(y=Y)four.s(b); if(a=5)four.Show();cout 是( Y)否( N)回到菜单? y;y = toupper(y); while(y=Y);/end void 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; Cent

22、er_Text( 新的一副牌 ); cout endl;while(index=53) / if(newline % 11 = 0) cout endl; m_cardarrayindex.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,

23、 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_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);numcardstomovebottom = getRan

温馨提示

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

评论

0/150

提交评论