南京理工大学C++课程设计扑克牌游戏(多文件资料)_第1页
南京理工大学C++课程设计扑克牌游戏(多文件资料)_第2页
南京理工大学C++课程设计扑克牌游戏(多文件资料)_第3页
南京理工大学C++课程设计扑克牌游戏(多文件资料)_第4页
南京理工大学C++课程设计扑克牌游戏(多文件资料)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、实用标准文档南京理工大学紫金学院 C+1程设计报告课程:C+碑程设计学院:计算机学院班级:计算机大类四班学号:170310441姓名:田越选题名称:扑克牌游戏起止时间:2018.5.222018.6.1指导教师:杜兰2018年5月文案大全紫金学院C+课程设计2017 级 1问题描述在提供的源程序基础上,写一个程序,可以进行洗牌等操作.2 基本要求1)增加大小王.2)删去一张指定扑克牌后,进行余牌显示.3)创建一副扑克牌,显示一副扑克牌,洗牌,依次分发给四人并显示3需求分析输入形式与范围是按照提示语句输入相应的数字或是(Y)否(N)的英文字母输出形式即为提示语句所说明的内容该程序基本任务是完成扑

2、克洗牌,显示玩家手牌,按花色或牌面整理手牌(排序)测试数据为54张扑克牌面值以及花色,无需手动设置正确的输入将使得程序按说明运行,错误输入默认直接退出程序4概要设计分为8个部分,也是八个文件包含主程序所需的所有头文件 包含所有的类,并卷入all.h主调函数包含deck类的函数包含perdeck类的函数包含playdeck类的函数包含playingcard 类的函数顾名思义头文件两个:all.hclass.h其余cpp文件,共6个,说明如下:main函数deckperdeckplaydeckplayingcardmain函数调用的函数5详细设计All.h#pragma once#include

3、#include / 编译器是 VS2017#include #include #include #include Class.h#pragma once#include all.husing namespacestd;class PerDeck;class PlayingCardprivate :int nValue; /扑克牌实际面值char achFace3; / 扑克牌字符串 A,2,10,J,Q,Kchar chSuit; /扑克牌花色 public :friend class PerDeck;PlayingCard(); / 将对象清零void ShowCard(); /显示面值花

4、色void CardMake(int ); /给一张扑克牌赋值(面值,花色) ;class Deckprivate :PlayingCard m_cardarray54;int nLastDelt;public :friend class PerDeck;Deck();void MakeDeck(); /将52张牌清零(没有大,小王)void DealOne(); /删除开头一张牌void ShowDeck(); /依次逐张显示这副牌void DeckShuff( int ); /用于洗牌,参数是洗牌次数void RemoveCard(); /清零删除掉的那张牌 ;class PerDeckp

5、rivate :PlayingCard myCard20;int nNum;public :PerDeck() void MakePerDeck(Deck &, int );void Show();void SortFace();void SortSuit();int Delete( int n);class PlayDeckprivate :PerDeck myDeck4;public :PlayDeck() void PlayCard( Deck &);void Show();int DeleteOne( int row, int column);int DeleteAll( int ,

6、int , int , int );void SortDeckFace( int );void SortDeckSuit( int );void s( int );void ProgramInit(); /初始化,并输出信息void CenterText( char ShellText 80); / 居中显示int GetNumber(); / 键入整数型char GetKey(); /键入字符串型void DeckMakeDiver(); /主要算法(生成扑克牌,洗牌,删除等) int GetRandInt( int min, int maX; / 在min到max可选随机值 void Pr

7、ogClose(); /暂停,供用户查看中间运行结果main 函数.cpp#include class.husing namespacestd;int main( void ) srand( unsigned )time( NULL);int nCardNum = 0;ProgramInit();DeckMakeDiver();ProgClose();return 1;Playdeck.cpp#include class.h#include using namespacestd;void PlayDeck :PlayCard( Deck & k) int a, b, c, d;char g29

8、 = 依次输入四位玩家手里的牌数:;CenterText(g);cout a b c d;if (a + b + c + d 54)char g口 = 超过牌的张数,退出游戏。;CenterText(g);exit(0);myDeck0.MakePerDeck( k, a);myDeck1.MakePerDeck( k, b);myDeck2.MakePerDeck( k, c);myDeck3.MakePerDeck( k, d); void PlayDeck:Show() TOC o 1-5 h z char a6= 玩家 1char b6= 玩家 2char c6= 玩家 3char d

9、6= 玩家 4CenterText(a);cout endl; myDeck0.Show(); CenterText(b);cout endl; myDeck1.Show(); CenterText(c);cout endl; myDeck2.Show(); CenterText(d);cout endl; myDeck3.Show(); int PlayDeck:DeleteOne( int row, int column) myDeckrow - 1.Delete( column);return 1;int PlayDeck:DeleteAll( int a, int b, int c,

10、int d) myDeck0.Delete( a);myDeck1.Delete( b);myDeck2.Delete( c);myDeck3.Delete( d);return 1;void PlayDeck:SortDeckFace( int b)myDeckb - 1.SortFace();void PlayDeck:SortDeckSuit( int b)myDeckb - 1.SortSuit();void PlayDeck:s( int a)myDecka - 1.Show();Deck.cpp#include class.h#include using std: ostream;

11、using namespacestd;void Deck:MakeDeck() /对生成的52张牌逐个赋值nLastDelt = 53;/51while (nLastDelt -1) m_cardarraynLastDelt.CardMake(nLastDelt); nLastDelt-;void Deck:ShowDeck() / 显示一副扑克牌char a13 = 完整的一副牌”;int nIndex = nLastDelt + 1;int nNewLine = 0;CenterText(a);cout endl;while (nIndex = 53)/51if (nNewLine % 1

12、1 = 0)cout endl; m_cardarraynIndex.ShowCard();nNewLine+;nIndex+;void Deck:DeckShuff( int times )/ 洗牌算法char a11 = 洗牌;int x, nSplit;CenterText(a);cout endl;for (x = 0; x = times ; x+)nSplit = GetRandInt(20, 35);Deck TopDeck;Deck BottomDeck;int i;int nBottomNum = 1;int nTopNum = 1;for (i = 0; i m_carda

13、rrayi; nTopNum+; i+;for (i = (nSplit); i m_cardarrayi; nBottomNum+; i+;int nOutNum = 0;int nNumToTop;int nNumToBottom;int j;int h = 0;nBottomNum = 54 - nSplit; /52 nTopNum = nSplit;while (nOutNum 53) /51 nNumToTop = GetRandInt(2, 7);nNumToBottom = GetRandInt(2, 7); for (j = 0; j 0)this -m_cardarrayn

14、OutNum = BottomDeck.m_cardarraynBottomNum; nOutNum+;nBottomNum-;for (h = 0; h 0) & (nOutNum m_cardarraynOutNum = TopDeck.m_cardarraynTopNum; nOutNum+;nTopNum-;this -nLastDelt = -1; void Deck:RemoveCard() /将删除的那张牌清零m_cardarraynLastDelt = PlayingCard (); / 清零 void Deck:DealOne() /从一副扑克牌中删除一张牌 if (nLas

15、tDelt != 53)/51nLastDelt+;cout.width(5);cout endl;cout 删除牌:;m_cardarraynLastDelt.ShowCard();RemoveCard(); elsecout 这副牌全部删除完了 ;ProgClose();Deck:Deck() /初始化一副扑克牌,将52张扑克牌均清零 int lastdelt = 0;for (int i = 0; i = 53; i+)/51 m_cardarrayi = PlayingCard ();Main调用的函数.cpp#include class.h#include using namespa

16、cestd;void ProgramInit() /程序一开始的提示信息 char a11 = 扑克牌游戏”;char b25 = 单击 键开始”;CenterText(a);cout endl n ;CenterText(b);cin.get();char GetKey() /从键盘接收一个字符,将其作为函数返回值 char x;x = cin.get();cout endl;return x; void CenterText( char ShellText 80) / 居中算法int nCenter;int nLength;nLength = strlen( ShellText );nCe

17、nter = (80 - nLength) / 2;for (; nCenter != 0; nCenter-) cout ;cout ShellText ;int GetNumber() /从键盘接收一个整数值,作为函数返回值char a40 = 请输入一个在0到51之间的整数,输入52退出.;int nInputInteger = 0;CenterText(a);cout nInputInteger;return nInputInteger; void ProgClose() /程序暂停,按任意键继续cout endl endl;cout 单击 键继续 endl;cout endl end

18、l;GetKey();cin.get(); void DeckMakeDiver() /主要程序操作部分,调用多个函数,包含完整生成一副牌,洗牌,显示,删除等操 作Deckdeck_1;deck_1.MakeDeck();deck_1.ShowDeck();GetKey();deck_1.DeckShuff(250);deck_1.ShowDeck();cout endl endl endl;char y;PlayDeck F;F.PlayCard(deck_1);cout endl endl endl;F.Show();int g = 0;do char a9 = 游戏规则”;char b2

19、3 = 删除一位玩家的牌 输入1 ;char c23 = 删除四位玩家的牌 输入2 ;char d23 = 按牌的面值排序输入3 ;char e23 = 按牌的花色排序输入4 ;char f23 = 显示四位玩家手牌 输入5 ;char q23 = 按 N(n)退出游戏”;CenterText(a);cout endl; CenterText(b); cout endl; CenterText(c); cout endl; CenterText(d); cout endl; CenterText(e); cout endl; CenterText(f); cout endl; CenterTe

20、xt(q); cout g; if (g = 1) int j, k; char h; cout 请输入删除玩家的编号和牌号(从左往右数的第Ne) j k;F.DeleteOneQ, k);cout endl 是(Y)否(N)显示删除后的手牌? h;h= toupper(h); if (h = Y )F.s(j); cout endl;if (g = 2) int w, x, h, z; char y;cout 请依次输入欲删除各玩家牌的序号。 w x h z;F.DeleteAll(w, x, h, z);cout endl 是(Y)否(N)显示删除后玩家的牌? y;y = toupper(

21、y);if (y = Y )F.Show(); cout endl;if (g = 3) int h; char y;cout 请输入需要排序的玩家 h;F.SortDeckFace(h);cout 是(Y)否(N)显示排序后的牌? y;y = toupper(y);if (y = Y )F.s(h);if (g = 4)int x;char y;cout 请输入需要排序玩家的序号 x;F.SortDeckSuit(x);cout 是(Y)否(N)显示排序后的牌? y;y = toupper(y);if (y = Y )F.s(x);if (g = 5)F.Show();if (g = 78

22、| g = 110)goto loop;cout 是(Y)否(N)回到游戏规则菜单? endl;cout y;y= toupper(y); while (y = Y);loop:;int GetRandInt( int nMin, int nMaR/返回min至ma此间的任意一值(实际上是洗牌算法s的一部分)int nNumToReturn;nNumToReturn = rand();nNumToReturn = nNumToReturn % ( nMax- nMin + 1) + nMin;return nNumToReturn;Playingcard.cpp#include class.h

23、 #include using namespacestd;PlayingCard :PlayingCard() /扑克牌对象的构造函数 for(int i = 1; i = 3;)achFacei=i+;chSuit =nValue = 0;voidPlayingCard二ShowCard() /在屏幕上显示一张扑克牌的面值及花色cout cout achFace;cout.width(1);cout chSuit;cout void同PlayingCard二CardMake( int nNur)i/根据参数nNurtfc成一张扑克牌,nNumf同,生成的面值或花色不int i = 0; ch

24、ar j;int nFaceNum = nNum% 13;ifnNum= 52)strcpy(achFace, goto loop;S);ifnNum= 53)B);A); break;10); break;strcpy(achFace, goto loop;switch (nFaceNum)case 0:strcpy(achFace,case 9:strcpy(achFace,case 10:strcpy(achFace,J);breakcase 11:strcpy(achFace,Q);breakcase 12:strcpy(achFace,K);breakdefault :j = cha

25、r (nFaceNum + 49);if (i 3)achFacei = ; i+;achFacei = j; i+;achFacei = NULL break; loop:;if ( nNum 12 &nNum 25 &nNum 38 &nNum= 51)chSuit =4;/方块if(nFaceNum = 10)nValue = 10;if ( nNum= 52)nValue = 11;chSuit = 49;if ( nNum= 53)nValue = 12;chSuit = 50;Perdeck.cpp#include #include class.husing namespacestd;void PerDeck:MakePerDeck( Deck &d, int a)nNum = a;int i = 0;while (i a&d.nLastDelt != 53) myCardi+ = d.m_cardarray+ d.nLastDelt;void PerDeck:Show()char a12 = 该玩家的牌:;int nNewLine = 0;CenterText(a);cout endl;while (nNewLine nNum)if (nNewLine % 5 = 0) cout endl;myCardnN

温馨提示

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

评论

0/150

提交评论