C课程设计_扑克牌21点.pdf

上传人:深夜****等你... 文档编号:84280645 上传时间:2023-04-04 格式:PDF 页数:22 大小:415.01KB
返回 下载 相关 举报
C课程设计_扑克牌21点.pdf_第1页
第1页 / 共22页
C课程设计_扑克牌21点.pdf_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《C课程设计_扑克牌21点.pdf》由会员分享,可在线阅读,更多相关《C课程设计_扑克牌21点.pdf(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-一个 21 点的扑克牌游戏 一、课程名称:扑克牌 二、班级和姓名:某某 三、课程设计要求 (1)所有的函数与相应的数据封装到类中,改写主程序使其更加完善。(2)程序中一共有 13 张扑克牌可以随机抽取,大于10 的点数全部为半点。(3)庄家永远不会暴庄,庄家可以查看下一张牌,若大于21 点,则拒绝。(4)高级玩家可以查看下一张牌,按H 键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。(5)每次要牌后可以设定赔率,如果开始是下的 10 元钱的注,如果牌好,你可以要求再下注,当然不能超过你所有的总钱数。(6)将界面提示说明改成中文界面,界面的解释详细友好,可以吸引更多玩家 四、功能说明

2、:本程序首先编写了一个类,将程序中定义的函数和数据封装到类中。这样不仅满足了设计要求也使整个程序的结构更加一目了然。然后对 10 以上的牌重新附值为0.5 以符合题目要求。接下来设计了防止庄家暴庄的函数,超级玩家看牌的函数,计算累计总赌注的函数。使程序真正完善起来。数据和函数是用类封装在一起的,五、采用的主要数据结构类型(1)本程序进行了类的封装,编写了一个类来封装所有相关函数和变量,把源程序封装在类中,然后对 main 主函数进行改写,结构清晰,条理有序,使得修改十分便捷,一目了然。题目要求把抽到的大于 10 点的牌的点数设为半点。按照要求将随机取下一张牌的成员函数,判断牌的点数是否大于10

3、 的 if 语句中大于 10 的牌重新赋值为0.5。例:if(playercard110)playercard1=0.5;(2)题目要求庄家永远不会暴庄,庄家取下一张之前先判定取牌后的总点数是否会大于 21 点,大于的话就拒绝去下一张,小于时就继续取牌,在函数中首先随机产生下一张牌,接着用条件语句判定原有点数与新牌点数之和是否大于21 点,然后决定是否取牌。例:if(cpu21)/判断庄家的点数 coutttt 庄家要了一张牌。endl;coutttt 这牌是:cardendl;/显示牌的点数 coutttt 总数是:cpuendl;/显示庄家的总点数 else cpu=cpu-card;/如

4、果点数超出 21 点,则不要牌了 题目要求超级玩家在输入密码后可以查看下一张牌,只需设计一成员函数,判定玩家是否继续要牌之前加入对玩家是否输入 H 键的判定,如果有输入则调用为处理玩家输入密码而单独编写的成员函数,在该函数中,首先判定玩家的输入密码是否正确,正确后才可以看下一张牌。例:void fuctions:mima(char&ans,double&card,double&player)/定义一个密码函数 int s1=1234,m1;/定义两个整型并对一个进行赋值 coutm1;/输入密码 if(s1=m1)/判断密码是否相符 coutttt 下一张牌是:cardendl;/显示下一张牌

5、 else cout密码错误endl;/提示密码错误 (3)题目要求玩家可以根据手上的牌决定是否下注,只需设计一成员函数,检查玩家的赌注累计不超过他所拥有的总资。例:void fuctions:Duzhu(int&money,int&bett)/定义一个陪率函数 char ans;bett=0;/将 0 赋值给赌注 coutans;if(ans=y)|(ans=Y)/判断玩家是否还要下注 coutbett;money=money-bett;/计算出剩余的总资本 while(money0)/如果资本小于 0,则赌注超过了资本 /提示玩家错了和要求重新输入 money=money+bett;/重新

6、计算总资本 cout你不能下这么多的赌注!endl;/提示玩家下的赌注超出资本 coutbett;money=money-bett;/计算总资本 源程序:#include#include#include#include#include#include class Playing_Card /扑克牌类,表示一张扑克牌的面值、花色和与之相联系的操作 private:int m_Value;/扑克的实际面值,用整型值表示,从 1 开始,113 char m_Face3;/扑克的数字大小,用字符串的形式表示,为A,2,3,10,J,Q,K char m_Suit;/扑克的花色(黑、红、梅、方)publ

7、ic:Playing_Card();/构造函数,初始化扑克对象,实际上是将对象清零 void showcard();/显示扑克牌对象的面值,花色 void Card_Make(int);/为一张扑克牌对象赋予特定的面值和花色 friend class PerDeck;/定义类 PerDeck 为类 Playing_Card 的友元类 ;class Deck /一副扑克(54 张)类 private:Playing_Card m_cardarray54;/一副扑克由 54 张扑克牌构成 int m_lastdelt;/标记这副扑克牌删除的张数 public:Deck();/构造函数,初始化一副扑

8、克牌对象,实际上是将其内的 54 张扑克牌清零 void MakeDeck();/生成一副扑克,即对其内的 54 张扑克赋予正确的面值及花色 void ShowDeck();/依次逐张显示这副牌 void DeckShuff(int);/洗牌,其参数是洗牌的次数 void Remove_Card();/将删除的那张扑克牌的内容清零,使这张牌在屏幕上显示不出来 friend class PerDeck;/定义类 PerDeck 为类 Deck 的友元类 ;class PerDeck Playing_Card m_Card20;/最多有 20 张牌 int nNum;/实际张数 public:Pe

9、rDeck()void MakeperDeck(Deck&,int);/对象初始化,参数为指定的那副牌及实际赋值个数 void Show();/显示 void SortFace();/按面值排序 void SortSuit();/按花色排序 int Delete(int n);/删除序号为 n 的那一张 ;void PerDeck:MakeperDeck(Deck&deck_3,int n)nNum=n;/初始化当前对象的实际张数 static int i=0;/标记为每个人发牌的其始位置 for(int k=0;knNum;k+)m_Cardk=deck_3.m_cardarrayi+k;/

10、用创建好的那副牌为当前对象发牌 i+=nNum;/为一个人发牌后起始位置向后跳 nNum个 void PerDeck:Show()/显示玩家的牌面 int j=0;if(nNum=0)cout已无牌!endl;/如果玩家无牌输出提示信息 else for(int i=0;inNum;i+)if(j%11=0)cout=nNum)return 0;/判断是否删牌 else for(int i=n;inNum;i+)m_Cardi=m_Cardi+1;/删除指定的牌 nNum-;/删除一张牌后将实际张数减 1 return 1;void PerDeck:SortFace()/按面值排序 Playi

11、ng_Card record;/产生一个临时对象 for(int j=0;jnNum-1;j+)for(int i=j+1;im_Cardi.m_Value)record=m_Cardi;m_Cardi=m_Cardj;m_Cardj=record;void PerDeck:SortSuit()/按花色排序 Playing_Card record;/产生一个临时对象 for(int j=0;jnNum-1;j+)for(int i=j+1;im_Cardi.m_Suit)record=m_Cardi;m_Cardi=m_Cardj;m_Cardj=record;class PlayDeck P

12、erDeck m_deck4;/一共是四个人玩牌 public:PlayDeck()void PlayCard(Deck&);/用指定的那副牌对四个人分别赋值 void Show();/显示 int DeleteOne(int row,int column);/删除一张,参数为第 row 个人的第 column 张牌 int DeleteAll(int,int,int,int);/删除一轮,参数分别代表四个人各删除哪一张 void SortDeckFace();/对整副牌面值排序 void SortDeckSuit();/对整副牌花色排序 ;void PlayDeck:PlayCard(Dec

13、k&deck_2)/给四个人发牌 for(int i=0;i2;i+)m_decki.MakeperDeck(deck_2,14);/前两个人发 14 张牌 for(int j=2;j4;j+)m_deckj.MakeperDeck(deck_2,13);/后两个人发 13 张牌 void PlayDeck:Show()/显示四个玩家的牌 for(int i=0;i4;i+)coutendl;cout玩家i+1的牌:;m_decki.Show();coutendlendl;int PlayDeck:DeleteOne(int row,int column)/删除一张,参数为第 row 个人的第

14、 column 张牌 return m_deckrow-1.Delete(column-1);int PlayDeck:DeleteAll(int a,int b,int c,int d)/删除一轮,参数分别代表四个人各删除哪一张 return m_deck0.Delete(a-1)+m_deck1.Delete(b-1)+m_deck2.Delete(c-1)+m_deck3.Delete(d-1);void PlayDeck:SortDeckFace()/将四个人的牌按面值排序 m_deck0.SortFace();m_deck1.SortFace();m_deck2.SortFace()

15、;m_deck3.SortFace();void PlayDeck:SortDeckSuit()/将四个人的牌按花色排序 m_deck0.SortSuit();m_deck1.SortSuit();m_deck2.SortSuit();m_deck3.SortSuit();void Program_Init();/程序初始化,输出初始化信息 int main();void Center_Text(char);/将参数(字符串)在屏幕上显示在一行的中间位置 void Get_Key();/接收用户键入的字符 void DeckMakeDriver();/*程序的主要算法,内部调用多个函数,包括生

16、成扑克牌,洗牌,删除,排序等主要操作*/int getRandInt(int min,int max);/取得在两参数间的整型随机值 void prog_close();/暂停程序运行,供用户查看中间运行结果 int main()srand(unsigned)time(NULL);/初始化随机数种子 Program_Init();/显示程序初始化提示信息 DeckMakeDriver();/调用程序的主要算法,包含程序的主要操作过程 prog_close();/暂停程序运行,供用户查看运行结果 return 1;Playing_Card:Playing_Card()/扑克牌对象的构造函数 in

17、t i;for(i=0;i3;)/初始化扑克牌的面值,清零 m_Facei=;i+;m_Suit=;/初始化扑克牌的花色,清零 m_Value=0;void Program_Init()/程序一开始运行的提示信息 Center_Text(扑克牌游戏n);coutendlendl;Get_Key();void Get_Key()/从键盘接收用户键入的字符 coutendl;Center_Text(单击任意键继续.);getch();coutendl;void Playing_Card:showcard()/在屏幕上显示一张扑克牌的面值及花色 cout ;coutm_Face;/显示面值 cout

18、.width(1);cout m_Suit;/显示花色 cout;void Center_Text(char ShellText80)/将函数参数(字符串)在屏幕上居中显示 int length;int center;length=strlen(ShellText);/取得欲显示字符串的大小 center=(80-length)/2;/整个屏幕的列数为 80,取得字符串在该行的其始位置 for(;center!=0;center-)/在字符串前输出空格 cputs();cputs(ShellText);void Playing_Card:Card_Make(int num)/*根据参数 num

19、 生成一张扑克牌,num 不同,生成的 面值或花色不同*/int i=0;char j;int face_num=num%13;/扑克牌的面值,从 0 到 12 if(num=52)strcpy(m_Face,);/大王花色赋为 S else if(num=53)strcpy(m_Face,);/小王花色赋为 B else switch(face_num)/当面值大于 10 时,用 J,Q,K代替,面值为 0,用 A 代替 case 0:strcpy(m_Face,A);break;case 9:strcpy(m_Face,10);break;case 10:strcpy(m_Face,J);

20、break;case 11:strcpy(m_Face,Q);break;case 12:strcpy(m_Face,K);break;default:j=char(face_num+49);/其它的面值,用对应的 ASCII码表示 if(i3)m_Facei=;i+;m_Facei=j;i+;m_Facei=NULL;break;/扑克牌的花色,分别用红桃,黑桃,梅花,方块的 ASCII 码替代 if(num 12&num 25&num 38&num=51)m_Suit=4;/方块 if(num=52)m_Suit=1;/小王 if(num=53)m_Suit=2;/大王 if(num=52

21、)m_Value=14;/小王面值赋为 14 else if(num=53)m_Value=15;/大王面值赋为 15 else m_Value=face_num+1;/A 的面值实际上用 1 表示,其余面值依次加 1 void DeckMakeDriver()/主要程序操作部分,调用多个函数,完成生成一副牌,洗牌,显示,删除等操作 Deck deck_1;/生成一副扑克牌对象,内有 54 张牌,此时所有的扑克牌均未赋值 PlayDeck man;/产生一局牌 deck_1.MakeDeck();/对 54 张扑克牌赋值 deck_1.ShowDeck();/逐一显示这 54 张牌 Get_Key();/暂停运行,供用户查看显示结果 deck_1.DeckShuff(250);/对生成的这副牌洗牌 250 次 deck_1.ShowDeck();/逐一显示这洗好的 54 张牌 Get_Key();/暂停运行,供用户查看显示结果 man.PlayCard(deck_1);/发牌 int Memory=0;for(;)man.Show();/显示四个人的牌 Center_Text(111 扑克牌菜单111n);Center_Text(3 1:删除一张牌 3n);Center_Text(4 2:删除一轮牌 4n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁