您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 南京理工大学-C++课程设计-扑克牌游戏(多文件)
紫金学院C++课程设计南京理工大学紫金学院C++课程设计报告2018年5月课程:C++课程设计学院:计算机学院班级:计算机大类四班学号:170310441姓名:田越选题名称:扑克牌游戏起止时间:2018.5.22~2018.6.1指导教师:杜兰紫金学院C++课程设计2017级11问题描述在提供的源程序基础上,写一个程序,可以进行洗牌等操作.2基本要求1)增加大小王.2)删去一张指定扑克牌后,进行余牌显示.3)创建一副扑克牌,显示一副扑克牌,洗牌,依次分发给四人并显示.3需求分析输入形式与范围是按照提示语句输入相应的数字或是(Y)否(N)的英文字母输出形式即为提示语句所说明的内容该程序基本任务是完成扑克洗牌,显示玩家手牌,按花色或牌面整理手牌(排序)测试数据为54张扑克牌面值以及花色,无需手动设置正确的输入将使得程序按说明运行,错误输入默认直接退出程序4概要设计分为8个部分,也是八个文件头文件两个:all.h包含主程序所需的所有头文件.class.h包含所有的类,并卷入all.h其余cpp文件,共6个,说明如下:main函数主调函数deck包含deck类的函数perdeck包含perdeck类的函数playdeck包含playdeck类的函数playingcard包含playingcard类的函数main函数调用的函数顾名思义5详细设计All.h#pragmaonce#includeiostream#includestring.h//编译器是VS2017#includetime.h#includestdlib.h#includestdio.h#includeconio.hClass.h#pragmaonce#includeall.husingnamespacestd;classPerDeck;classPlayingCard{紫金学院C++课程设计2017级2private:intnValue;//扑克牌实际面值charachFace[3];//扑克牌字符串A,2,......10,J,Q,KcharchSuit;//扑克牌花色public:friendclassPerDeck;PlayingCard();//将对象清零voidShowCard();//显示面值花色voidCardMake(int);//给一张扑克牌赋值(面值,花色)};classDeck{private:PlayingCardm_cardarray[54];intnLastDelt;public:friendclassPerDeck;Deck();voidMakeDeck();//将52张牌清零(没有大,小王)voidDealOne();//删除开头一张牌voidShowDeck();//依次逐张显示这副牌voidDeckShuff(int);//用于洗牌,参数是洗牌次数voidRemoveCard();//清零删除掉的那张牌};classPerDeck{private:PlayingCardmyCard[20];intnNum;public:PerDeck(){}voidMakePerDeck(Deck&,int);voidShow();voidSortFace();voidSortSuit();intDelete(intn);};classPlayDeck{private:PerDeckmyDeck[4];紫金学院C++课程设计2017级3public:PlayDeck(){}voidPlayCard(Deck&);voidShow();intDeleteOne(introw,intcolumn);intDeleteAll(int,int,int,int);voidSortDeckFace(int);voidSortDeckSuit(int);voids(int);};voidProgramInit();//初始化,并输出信息voidCenterText(charShellText[80]);//居中显示intGetNumber();//键入整数型charGetKey();//键入字符串型voidDeckMakeDiver();//主要算法(生成扑克牌,洗牌,删除等)intGetRandInt(intmin,intmax);//在min到max间选随机值voidProgClose();//暂停,供用户查看中间运行结果main函数.cpp#includeclass.husingnamespacestd;intmain(void){srand((unsigned)time(NULL));intnCardNum=0;ProgramInit();DeckMakeDiver();ProgClose();return1;}Playdeck.cpp#includeclass.h#includeiostreamusingnamespacestd;voidPlayDeck::PlayCard(Deck&k){inta,b,c,d;charg[29]={依次输入四位玩家手里的牌数:};CenterText(g);coutendl;cinabcd;if(a+b+c+d54)紫金学院C++课程设计2017级4{charg[]={超过牌的张数,退出游戏。};CenterText(g);exit(0);}myDeck[0].MakePerDeck(k,a);myDeck[1].MakePerDeck(k,b);myDeck[2].MakePerDeck(k,c);myDeck[3].MakePerDeck(k,d);}voidPlayDeck::Show(){chara[6]={玩家1};charb[6]={玩家2};charc[6]={玩家3};chard[6]={玩家4};CenterText(a);coutendl;myDeck[0].Show();CenterText(b);coutendl;myDeck[1].Show();CenterText(c);coutendl;myDeck[2].Show();CenterText(d);coutendl;myDeck[3].Show();}intPlayDeck::DeleteOne(introw,intcolumn){myDeck[row-1].Delete(column);return1;}intPlayDeck::DeleteAll(inta,intb,intc,intd){myDeck[0].Delete(a);myDeck[1].Delete(b);myDeck[2].Delete(c);myDeck[3].Delete(d);return1;紫金学院C++课程设计2017级5}voidPlayDeck::SortDeckFace(intb){myDeck[b-1].SortFace();}voidPlayDeck::SortDeckSuit(intb){myDeck[b-1].SortSuit();}voidPlayDeck::s(inta){myDeck[a-1].Show();}Deck.cpp#includeclass.h#includeiostreamusingstd::ostream;usingnamespacestd;voidDeck::MakeDeck()//对生成的52张牌逐个赋值{nLastDelt=53;//51while(nLastDelt-1){m_cardarray[nLastDelt].CardMake(nLastDelt);nLastDelt--;}}voidDeck::ShowDeck()//显示一副扑克牌{chara[13]={完整的一副牌};intnIndex=nLastDelt+1;intnNewLine=0;CenterText(a);coutendl;while(nIndex=53)//51{if(nNewLine%11==0)coutendl;m_cardarray[nIndex].ShowCard();nNewLine++;nIndex++;紫金学院C++课程设计2017级6}}voidDeck::DeckShuff(inttimes)//洗牌算法{chara[11]={洗牌......};intx,nSplit;CenterText(a);coutendl;for(x=0;x=times;x++){nSplit=GetRandInt(20,35);DeckTopDeck;DeckBottomDeck;inti;intnBottomNum=1;intnTopNum=1;for(i=0;i=nSplit-1;){TopDeck.m_cardarray[nTopNum]=this-m_cardarray[i];nTopNum++;i++;}for(i=(nSplit);i54;)//52{BottomDeck.m_cardarray[nBottomNum]=this-m_cardarray[i];nBottomNum++;i++;}intnOutNum=0;intnNumToTop;intnNumToBottom;intj;inth=0;nBottomNum=54-nSplit;//52nTopNum=nSplit;while(nOutNum53)//51{nNumToTop=GetRandInt(2,7);nNumToBottom=GetRandInt(2,7);for(j=0;j=nNumToBottom;j++){if(nBottomNum0){紫金学院C++课程设计2017级7this-m_cardarray[nOutNum]=BottomDeck.m_cardarray[nBottomNum];nOutNum++;nBottomNum--;}for(h=0;h=nNumToTop;h++){if((nTopNum0)&&(nOutNum=54))//52{this-m_cardarray[nOutNum]=TopDeck.m_cardarray[nTopNum];nOutNum++;nTopNum--;}}}}}this-nLastDelt=-1;}voidDeck::RemoveCard()//将删除的那张牌清零{m_cardarray[nLastDelt]=PlayingCard();//清零}voidDeck::DealOne()//从一副扑克牌中删除一张牌{if(nLastDelt!=53)//51{nLastDelt++;cout.width(5);coutendl;cout删除牌:;m_cardarray[nLastDelt].ShowCard();RemoveCard();}else{cout这副牌全部删除完了;ProgClose();}}Deck::Deck()//初始化一副扑克牌,将52张扑克牌均清零{紫金学院C++课程设计2017级8intlastdelt=0;for(inti=0;i=53;i++)//51{m_cardarray[i]=PlayingCard();}}Main调用的函数.cpp#includeclass.h#includeiostreamusingnamespacestd;voidProgramInit()//程序一开始的提示信息{chara[11]={扑克牌游戏};charb[25]={单击Return键开始......};CenterText(a);coutendl'\n';CenterText(b);cin.get();}charGetKey()//从键盘接收一个字符,将其作为函数返回值{charx;x=cin.get();coutendl;returnx;}voidCenterText(charShellText[80])//居中算法{intnCenter;
本文标题:南京理工大学-C++课程设计-扑克牌游戏(多文件)
链接地址:https://www.777doc.com/doc-4925868 .html