免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#include#include#include#include#includeclass PlayingCard /扑克牌类,表示一张扑克牌的面值,花色和与之相联系的操作private:int nValue; /扑克的实际面值,用整型值表示,从1开始,113char achFace3; /扑克的数字大小,用字符串的形式表示,为A,2,3,.,10,J,Q,K char chSuit; /扑克的花色(黑,红,梅,方)public:PlayingCard(); /构造函数,初始化扑克对象,实际上是将对象清零void ShowCard(); /显示扑克牌对象的面值,花色void CardMake(int); /为一张扑克牌对象赋予特定的面值及花色;class Deck /一副扑克牌52张private: PlayingCard m_cardarray52; /一副扑克牌由52张扑克牌组成int nLastDelt; /标记这副扑克牌删除的张数public:Deck(); /构造函数,初始化一副扑克对象,实际上是将其内52张扑克牌清零 void MakeDeck(); /生成一副扑克,即对其内的52张扑克牌赋予正确的面值及花色void DealOne(); /从这副牌的开头删除一张牌void ShowDeck(); /依次逐张显示这副牌void DeckShuff(int); /洗牌,其参数是洗牌的次数void RemoveCard(); /将删除的那张扑克牌的内容清零,使这张牌在屏幕上显示不出来;void ProgramInit(); /程序初始化,输出初始化数值int mian();void CenterText(char); /将参数(字符串)在屏幕上显示在一行的中间位置int GetNumber(); /接收用户键入的整型数值,作为函数的返回值char GetKey(); /接收用户键入的字符,作为函数的返回值void DeckMakeDriver(); /程序的主要算法,内部调用多个函数,包括生成扑克牌。洗牌,删除等主要操作int GetRandInt(int min, int max); /取得在两个参数之间的整型随机值void ProgClose(); /暂停程序运行,供用户查看运行结果int main() srand( (unsigned)time(NULL) ); /初始化随机数种子 int nCardNum=0; ProgramInit(); /显示程序初始化提示信息 DeckMakeDriver(); /调用程序的主要算法,包含程序的主要操作过程 ProgClose(); /暂停程序运行,供用户查看运行结果 return 1;PlayingCard:PlayingCard() /扑克牌对象的构造函数 int i; for(i=1;i=3;) /初始化扑克牌的面值,清零 achFacei= ; i+; chSuit= ; /初始扑克牌的花色,清零 nValue=0;void ProgramInit() /程序一开始运行提示信息 CenterText(扑克牌游戏); coutendln;CenterText(单击键开始.);cin.get();char GetKey() /从键盘接收一个字符,将其作为函数的返回值 char x; x=cin.get(); coutendl; return x;void PlayingCard:ShowCard() /在屏幕上显示一张扑克牌的面值及花色 cout ; coutachFace; /显示面值 cout.width(1); cout chSuit; /显示花色 cout ;void CenterText( char ShellText80) /将函数参数(字符串)在屏幕上居中显示 int nLength; int nCenter; nLength=strlen(ShellText); /取得欲显示字符串大小 nCenter=(80-nLength)/2; /整个屏幕的列数为80,取得字符串在该行的起始位置 for(;nCenter!=0;nCenter-) /在字符串前输出空格 cputs( ); cputs(ShellText);int GetNumber() /从键盘接收一个整型数值,将其作为函数值返回 int nInputInteger=0; CenterText(请输入一个在0到51之间的整数,输入52退出); coutnInputInteger; return nInputInteger;void PlayingCard:CardMake( int nNum) /根据参数nNum生成一张扑克牌,nNum不同,生成的面值或花色不同 int i=0;char j;int nFaceNum=nNum%13; /扑克牌的面值,从0到12switch(nFaceNum) /当面值大于10时,用J,Q,K代替,面值为0时,用A代替 case 0:strcpy(achFace,A);break; case 9:strcpy(achFace,10);break; case 10:strcpy(achFace,J);break; case 11:strcpy(achFace,Q);break; case 12:strcpy(achFace,K);break;default:j=char(nFaceNum+49); /其它面值,用对应的ASCII码表示if(i3) achFacei= ;i+; achFacei=j;i+; achFacei=NULL; break; /扑克牌的花色,分别用红桃,黑桃,梅花,方块的ASCII码代替if(nNum12&nNum25&nNum38&nNum=51) chSuit=4; /方块if(nFaceNum=10) nValue=10;void DeckMakeDriver() /主要程序操作部分,调用多个函数,完成生成一副牌,洗牌,显示,删除等操作 Deck deck_1; /生成一副扑克牌对象,内有52张牌,此时所有的扑克牌均未赋值 deck_1.MakeDeck(); /对52张扑克牌赋值 deck_1.ShowDeck(); /逐一显示这52张牌 GetKey(); /暂停运行,供用户查看显示结果 deck_1.DeckShuff(250); /对生成的这副牌洗牌250次 deck_1.ShowDeck(); /逐一显示这52张洗好的牌 coutendlendlendl; char y; do deck_1.DealOne(); /从这副牌的开始位置删除一张牌 coutendl; coutendlendl选择Y删除一张牌,选择N退出y; /询问是否继续删除 y=toupper(y);while(y=Y);void Deck:MakeDeck() /对生成的52张牌逐个赋值 nLastDelt=51; /赋初值,该值作为生成每张扑克牌的参数 while(nLastDelt-1) /判断是否产生完52张牌 m_cardarraynLastDelt.CardMake(nLastDelt); /调用每张扑克牌的生成函数,依次对每张扑克牌赋值,直至生成完一副扑克牌(52张) nLastDelt-; /生成完一张扑克牌后改变生成的参数void Deck:ShowDeck() /显示一副扑克牌 int nIndex=nLastDelt+1; /以该位置为第一张牌,从头显示这幅扑克牌 int nNewLine=0; CenterText(完整的一副牌); coutendl; while(nIndex=51) if(nNewLine%11=0) coutendl; /每显示11张输出一个回车 m_cardarraynIndex.ShowCard(); /按数组的顺序依次显示 nNewLine+; nIndex+;int GetRandInt( int nMin, int nMax) /返回两个参数之间的一个整型随机值 int nNumToReturn; nNumToReturn=rand(); /取得随机值 nNumToReturn=nNumToReturn%(nMax-nMin+1)+nMin; /将随机值的范围调整到两个参数之间 return nNumToReturn;void Deck:DeckShuff( int times ) /洗牌,参数为洗牌的次数 int x,nSplit; /nSplit是将一副扑克牌分开成两个部分的位置,如上部分,下部分 CenterText(); coutendl; for(x=0;x=times;x+) /开始循环,每循环一次将牌全部重排一遍 nSplit=GetRandInt(20,35); /随机选取nSplit的值 Deck TopDeck; /生成两副扑克牌对象 Deck BottomDeck; int i; int nBottomNum=1; int nTopNum=1; for(i=0;im_cardarrayi; nTopNum+; i+; for(i=(nSplit);im_cardarrayi; nBottomNum+; i+; int nOutNum=0; int nNumToTop; int nNumToBottom; int j; int h=0; nBottomNum=52-nSplit; /下部分那副扑克牌的张数 nTopNum=nSplit; /上部分那副扑克牌的张数 while(nOutNum=51) nNumToTop=GetRandInt(2,7); /在上部分扑克牌中随机选择27之间的随机数 nNumToBottom=GetRandInt(2,7); /同样在下部分扑克牌中随机选择27之间的随机数 for(j=0;j0) /当下部分那副牌没有循环完时继续 this-m_cardarraynOutNum=BottomDeck.m_cardarraynBottomNum; /从下部分那副牌的最后张数开始,依次向初始的扑克牌赋值 nOutNum+; nBottomNum-; for(h=0;h0)&(nOutNumm_cardarraynOutNum=TopDeck.m_cardarraynTopNum; nOutNum+; nTopNum-; this-nLastDelt=-1; /将删除牌的张数复原为-1(未删除)void ProgClose() /程序暂停,按任意键继续 coutendlendl; cout单击键继续.endl; coutendlendl; GetKey(); cin.get();void Deck:RemoveCard() m_cardarraynLastDelt=PlayingCard(); /将删除的那张牌清零void Deck:DealOne() /从一副扑克牌中删除一张牌 if (nLastDelt!=51) /当未将整副
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 讲解员操作评估模拟考核试卷含答案
- 2025年下半年教师资格证考试《综合素质》(中学)真题(解析)附答案
- 2025年全国计算机等级考试一级笔试真题解析及答案
- 2025年上半年教师资格证考试《保教知识与能力》(幼儿园)题及答案
- 2026年秋季开学高中开学第一课(时间管理)课件
- 2026年秋季开学高三开局即冲刺动员大会课件
- 2026年秋季开学初中物理启蒙心理健康讲座课件
- 2024年嵌入式面试试题(附答案)
- 2026浙江省教师职称考试(物理)历年参考题库含答案详解3卷
- 2026浙江卫生系统招聘考试(英语)历年参考题库含答案详解3卷
- 民宿员工聘用合同范本
- 企业级BOM培训课件
- 主井提升培训课件
- 浙江金石亚药医药科技有限公司迁扩建项目环评报告
- 酒店安全巡查日常检查记录表
- 招商岗位测试题及答案
- 医院后勤管理与设备职责
- 《左传》完整版本
- 周三多-管理学:原理与方法(第七版),第三章
- 无人机遥感图像融合
- 高考英语复习读后续写练习 善举篇 改变家乡为无法使用操场的孩子们带来福音 课件
评论
0/150
提交评论