已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
扑克牌游戏#include #include #include #include #include #include class Playing_Card /扑克牌类,表示一张扑克牌的面值花色和与之相联系的操作 private:int m_Value; /扑克的实际面值,用整型值表示,从1开始,113char m_Face3; /扑克的数字大小,用字符串的形式表示,为A2345678910JQKchar m_Suit ; /扑克的花色(黑红梅方)public:Playing_Card(); /构造函数,初始化扑克牌对象,实际上是将对象清零void showcard(); /显示扑克牌对象的面值,花色void Card_Make(int); /为一张扑克牌对象赋予特定的面值及花色;class Deck /一副扑克(54张)类private:Playing_Card m_cardarray54; /一副扑克由54张扑克牌组成int m_lastdelt; /标记这副扑克牌删除的张数public:Deck();/构造函数,初始化一副扑克牌对象,实际上是将其内的54张牌清零void MakeDeck();/生成一副扑克,即对其内的54张扑克牌赋予正确的面值及花色void Deal_One();/任意删除一张牌void ShowDeck();/依次逐张显示这副牌void DeckShuff(int);/洗牌,其参数是洗牌的次数void Remove_Card();/将删除的那张牌的内容清零,使这张牌在屏幕上显示不出来void Senddeck();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();/暂停程序运行,供用户查看中间运行结果int 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 = 0;void Program_Init()/程序一开始运行的提示信息Center_Text(CXSOFT);cout endl;Center_Text(扑克牌游戏);cout endl n ; Center_Text(制作:-周微); cout endl n ;Center_Text(C) 2005, 周微);cout endl n ;Center_Text(点击键继续.);cin.get();char Get_Key()/从键盘接收一个字符,将其作为函数值返回char x;x = cin.get();cout endl;return x;void Playing_Card:showcard()/在屏幕上显示一张扑克牌的面值及花色cout ;cout m_Face;/显示面值cout.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); int get_number()/从键盘接收一个整型数值,将其作为函数值返回int Input_Integer = 0;Center_Text(Please enter an integer between 0 and 53. 54to quit.);cout Input_Integer;return Input_Integer;void Playing_Card:Card_Make(int num)/根据参数num生成一张扑克牌,num不同,生成的面值及花色不同int i = 0;char j;if(num=53)strcpy(m_Face,jo);m_Suit=2;m_Value=15;if(num=52)strcpy(m_Face,jo);m_Suit=1;m_Value=14; if(num=51) int face_num = num % 13;/扑克牌的面值,从0到12switch(face_num)/当面值大于10时,用JQK代替,面值为0,用A代替 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: strcpy(m_Face, K);break; default: j = char(face_num + 49);/其他的面值,用对应的ASC|码表示 if(i3) m_Facei = ; i+; m_Facei = j;i+; m_Facei = NULL; break;/扑克牌的花色,分别用红桃黑桃梅花方块的ASC|码代替 if(num 12 & num 25 & num 38 & num = 51)m_Suit = 4;/方块 if(face_num = 10)m_Value = 10;void DeckMakeDriver()/主要程序操作部分,调用多个函数,完成生成扑克牌,洗牌,显示,删除等主要操作 Deck deck_1;/生成一副扑克牌对象,内有54张牌,此时所有的扑克牌均未赋值 deck_1.MakeDeck();/对54张牌赋值deck_1.ShowDeck();/逐一显示这54张牌Get_Key();/暂停运行,供用户查看显示结果deck_1.DeckShuff(250);/对生成的这副牌洗牌250次 deck_1.ShowDeck();/逐一显示这54张洗好的牌Get_Key();deck_1.Senddeck();Get_Key();cout endl endl endl;char y;dodeck_1.Deal_One();/任意删除一张牌cout endl;cout endl endl Y继续删除 N退出 y;/询问是否继续删除y = toupper(y);while(y = Y );void Deck:MakeDeck()/对生成的54张牌逐个赋值m_lastdelt = 53;/赋初值,该值作为生成每张扑克牌的参数while(m_lastdelt -1)/判断是否产生完54张牌m_cardarraym_lastdelt.Card_Make(m_lastdelt); /调用每张扑克牌的生成函数,依次对每张扑克牌赋值,直至生成完一副扑克牌54张 m_lastdelt-;/生成完一张扑克牌后改变生成的参数 void Deck:ShowDeck()/显示一副扑克牌 int index = m_lastdelt + 1;/以该位置为第一张牌,从头显示这副扑克牌int newline = 0;Center_Text(重头显示扑克牌);cout endl;while(index=53)if(newline % 11= 0) cout endl;/每显示11张牌输入一个回车m_cardarrayindex.showcard();/按数组的顺序依次显示newline+;index+;coutendl;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, split;/split是将一副扑克牌分开成两部分的位置,如上部分,下部分 Center_Text(Shuffling Deck);cout endl;for(x=0;x=times;x+)/开始循环,每循环一次将牌全部重排一遍split = getRandInt(20,35);/随机选取split的值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);/在上部分扑克牌中随机选择27之间的随机数 numcardstomovebottom = getRandInt(2,7);/同样在下部分扑克牌中随机选择27之间的随机数 for(j=0;j 0)/当下部分那副牌没有循环时继续 this-m_cardarraydeckoutindex = bottomdeck.m_cardarraybottomdeckindex;/从下部分那张牌的最后张数开始,依次向初始的扑克牌赋值deckoutindex+;bottomdeckindex-;for(h=0;h 0) & (deckoutindex m_cardarraydeckoutindex=topdeck.m_cardarraytopdeckindex;deckoutindex+;topdeckindex-;this-m_lastdelt = -1;/将删除的张数复原为-1(未删除)void Deck:Senddeck() int m_player,n_player;int player1=0,player2=0,player3=0,player4=0;m_lastdelt=53;Playing_Card playeri214;Playing_Card playerj213; int time=0;while(time13)m_player=0,n_player=0;playerim_playerplayer1=m_cardarraym_lastdelt;m_player+;player1+;m_lastdelt-; playerim_playerplayer2=m_cardarraym_lastdelt;player2+;m_lastdelt-;playerjn_playerplayer3=m_cardarraym_lastdelt;n_player+;player3+;m_lastdelt-;playerjn_playerplayer4=m_cardarraym_lastdelt;player4+;m_lastdelt-;time+; playeri013=m_cardarray1; playeri113=m_cardarray0; for(int i=0;i=3;i+)coutplayeri+1:;if(i=1) for(int j=0;j=13;j+) playeriij.showcard();elsefor(int j=0;j=12;j+) playerji-2j.showcard(); coutn;void prog_close()/暂停程序,按键继续cout endl endl;cout Hit the key to Continue. endl;cout endl endl;Get_Key();cin.get();void Deck:Remove_Card()m_cardarraym_lastdelt= Playing_Card();/将删除的那张牌清零/任意删除一张牌。int k=53,j=0;void Deck:Deal_One() j+;int i=0;int cardnum1,cardnum2;int num=1;if(k0)coutOut of range Error;else m_lastdelt=getRandInt(0,k); cardnum1=m_lastdelt; cardnum2=m_lastdelt; Deck deck1;cout删除的牌; m_cardarraym_lastdelt.showcard(); coutn; cardnum2+; while(cardnum2m_cardarraycardnum2; i+;cardnum2+; i=0; while(cardnum1+jm_cardarraycardnum1=deck1.m_cardarrayi; cardnum1+;i+; i=0; coutcard leftn; while(i+jm_cardarrayi.showcard(); if(num%11=0)coutn; num+;i+;k-;Deck : Deck()/初始化一副扑克牌,将54张扑克牌均清零int lastdelt = 0;int i;for(i=0;i=53;i+)m_cardarrayi = Playing_Card();/构造一个临时对象赋值 TICTACTOE游戏#include#include/*/类class T/定义类用来封装所有相关函数和变量char board44;/用数组board44来定义棋盘public:void PrintMenu(); /打印菜单 说明游戏规则和方法 void PrintBoard(); /打印棋盘void GameStart(char*,int &,int &,char); /下棋int whichwin(int,int,char); /判断那个选手赢void Choice(char &); /是否再玩void Setboard(); /重置棋盘;/*/main主函数void main ()/主函数T s;/说明类的一个对象s s.PrintMenu();/通过s调用PrintMenu函数提示如何游戏char player120,player220;/玩家姓名int FirstWin=0,SecondWin=0,Draws=0,x,y,N;/说明变量,付初值为0 /以待计算输赢结果char choice=Y;cin.ignore(20,n);/输入输出流,前面如果有输入把输入行所有字符 /取空,以便后面的输入从新的一行开始cout请输入第一个玩家姓名:;cin.getline(player1,20);/连续读取数据cout请输入第二个玩家姓名:;cin.getline(player2,20);while(choice=Y|choice=y)/条件成立,执行 s.Setboard();/调用Setboard函数 N=0;while(N=16)s.PrintBoard();/打印棋盘s.GameStart(player1,x,y,O);N+;/记录已下棋子数if(s.whichwin(x-1,y-1,O)/返回值不为0则条件成立coutplayer1赢了。endl;FirstWin+;/记录赢局数break;/终止本次循环s.PrintBoard();/同上s.GameStart(player2,x,y,X);N+;if(s.whichwin(x-1,y-1,X)coutplayer2赢了。endl;SecondWin+;break;if(N=16)cout和棋!;Draws+;/记录平局数break;s.Choice(choice);/给玩家提供一次选择是否再玩的机会/输出游戏输赢次数coutplayer1赢了FirstWin次endl;coutplayer2赢了SecondWin次endl;cout和Draws次endl;cout谢谢使用。endl;cout任意键继续。endl;cin.get();/很必要的,目的是空度换行字符/*/定义公有成员函数void T:PrintMenu()cout*endl;cout游戏规则和说明.endlendl;cout第一个玩家用O第二个玩家用X;endl;cout输入所要走的行列;endl;cout按下棋。endl;cout任意键继续。endl;cout*endl;/循环打印空棋盘void T:Setboard()for(int Row=0;Row4;Row+)for(int Column=0;Column4;Column+)boardRowColumn= ;void T:PrintBoard()system(cls);/执行系统命令,cls清屏cout endl; cout 1 2 3 4 endl;/棋盘列数 cout 1 board00 | board01 | board02 | board03endl; cout -|-|-|- endl; cout 2 board10 | board11 | board12 | board13endl; cout -|-|-|- endl; cout 3 board20 | board21 | board22 | board23endl; cout -|-|-|-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年国家移民管理局直属事业单位公开招聘事业编制人员(16人)笔试模拟试卷带答案解析
- 2025四川泸州古蔺县招募新兴领域党建工作专员8人备考题库带答案解析
- 2026山东第一医科大学附属省立医院(山东省立医院)招聘临床业务科室博士研究生工作人员136人笔试模拟试卷带答案解析
- 2026福建宁德市市属学校招聘紧缺急需及高层次人才50人模拟试卷附答案解析
- 2025中铁建公路运营公司所属单位招聘15人参考题库带答案解析
- 2025广东韶关乐昌市九峰镇三联村基层公共服务站系统操作员招聘1人历年真题汇编附答案解析
- 2025年延安市市级机关遴选公务员笔试备考题库附答案解析
- 2025湖南永州市市直医疗机构工作人员招聘58人历年真题库附答案解析
- 宜宾工业职业技术学院2025年公开招聘员额制工作人员(18人)模拟试卷附答案解析
- 川北医学院2025年公开选调工作人员笔试备考试卷附答案解析
- 高中数学创新教学案例及课程设计
- 野生动物讲解课件
- XX医疗集团医院体系介绍
- 2025年内蒙古自治区综合评标评审专家库专家考试历年参考题库含答案详解(5套)
- 故障录波识图基础及典型故障分析
- 胶水储存管理办法
- 河南大学离散数学试卷
- 企业面试逻辑测试题及答案
- 2025年初中数学教师教材教法考试测试题及答案
- 广州市国家级青少年足球训练基地项目可行性研究报告
- 2025-2030年中国菊粉粉行业市场现状供需分析及投资评估规划分析研究报告
评论
0/150
提交评论