您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 数据结构 扑克牌游戏
目录1课程设计的目的..................................21.1课程设计的目的:..........................错误!未定义书签。1.2课程设计的题目:.........................错误!未定义书签。1.3题目要求:................................错误!未定义书签。2课程设计的实验报告内容:.........错误!未定义书签。3课程设计的原程序代码:...........................44运行结果:.......................错误!未定义书签。5.课程设计总结..................错误!未定义书签。6参考书目:......................错误!未定义书签。1课程设计的目的1.1课程设计的目的设计一个扑克牌游戏程序,可以供四个人一块娱乐、游戏。系统要等到四个玩家都登陆之后才能开始游戏。在系统开始游戏之前,要求四个玩家都提前下注,并且最小下注金额为100,在游戏开始前系统会自动提示玩家是否加注,最后显示四个玩家的总共的下注筹码,最后胜利的玩家将获得这些筹码。1.2课程设计的题目扑克牌游戏。1.3题目要求增加大小王。发牌要求:将洗完的牌平均分成4组,并完成将花色相同的牌按大小排列起来;根据牌点的大小将牌排列起来。4组牌可以依次删除指定的牌,如红桃5、黑桃A等,并将余牌显示,即模仿4个人依次出牌。将双方出的牌扩大为两张,若出现一组对子,则对子牌点任何单牌,若双方均为对子,则比较牌点之和。在一开始设置总赌资,根据输赢及下注的多少统计赌资,同时统计输赢的结果。出牌时,先显示自己的牌点,然后根据自己的牌来确定是否加注,即拿到好牌时,可继续加注。设计程序,使高级玩家可以利用输入一键(如H键),然后输入密码来看自己的下一张牌,如不好,则可以再要,直到满意为止。可以按任意键(如C)来查看计算机的牌,然后决定自己的赌注。2课程设计的实验报告内容2.1需求分析扑克牌游戏要求四个玩家在一块才能开始游戏,因此设定一个计数器来记录玩家的人数。不够四个玩家的时候提示已登陆的玩家waiting、、、、、、,等到四个玩家全部登陆后才开始游戏。每个玩家在开始游戏前都要提前下注,参加游戏的最少赌注是100,在正式开始游戏前系统会提示玩家是否加注。并且显示每个玩家最后的赌注,防止抵赖。最后胜利的玩家获得所有的赌注。系统有自动洗牌功能,即给每个玩家随机发三张牌,这三张牌有五种情况。三张牌的数字都不一样;有两张牌的数字一样,即对子,三张牌的花色一样,即同花;三张牌的数字是连续的,即顺子;三张牌的花色一样并且数字是连续的,即同花顺。所以要编写函数来计算各种牌的分值,用来比较玩家牌的大小,决定玩家的输赢。2.2概要设计设定一个名为DeckOfCard的类,该类包含了游戏操作的所有的方法和对象。总的设计步骤和方法classDeckOfCardPrivate:intDeck[4][13];intcolourA;intcolourB;intcolourC;intcolourD;Public;DeckOfCards();voiddeal();voidshullfe();voidgetValue();intwait(intx);intgetsameColour();intgetStraigh();intgetStraightAndColoursOrNot();intgetPairOrsameValue();voidoutput();intwager();每次开始游戏时都要重新洗牌,洗好之后要对牌进行存储,即开辟空间来存放这些牌,用构造函数来实现。在牌发给每个玩家之后需要比较每个玩家牌的大小单张牌大小比较的方法是比较牌面数字和花色的大小。如果玩家拿到的是顺子计算得分的方式是:如果玩家拿到的是同花,则玩家得分的计算方法为:如果玩家拿到的是同花顺,则玩家得分的计算方法为:如果玩家拿到的是对子,玩家得分的计算方法为:玩家赌注的计算主函数3课程设计源代码#ifndefDECKOFCARDS_H#defineDECKOFCARDS_HclassDeckOfCards{public:DeckOfCards();voiddeal();//洗牌voidshullfe();//发牌voidgetValue();//计算得分intwait(intx);//等四个人到齐才能开始游戏intgetsameColour();//同花intgetStraigh();//顺子intgetStraightAndColoursOrNot();//同花顺或非同花非顺子intgetPairOrsameValue();//对子或炸弹voidoutput();//输出本轮游戏的结果intwager();//设置玩家的赌注private:intDeck[4][13];intcolourA;intcolourB;intcolourC;intcolourD;};#endif#includewindows.h//DeckOfCards.cpp#includeiostreamusingstd::cin;usingstd::cout;usingstd::endl;usingstd::left;usingstd::right;#includeiomanipusingstd::setw;#includecstdlib//usingstd::rand;//usingstd::srand;#includectime//usingstd::time;staticintnum_peo=3;staticintwages[4]={100,100,100,100};staticintwin_wages=0;staticintget[4][3]={0};staticintnumber=0;staticintstraigh=0;staticintsameColour=0;staticintgetScore[4]={0,0,0,0};staticintsameValue=0;DeckOfCards::DeckOfCards(){//构造函数for(introw=0;row4;row++){for(intcolumn=0;column13;column++){Deck[row][column]=0;}}for(intj=0;j=3;j++){getScore[j]=0;}srand(time(0));//延迟函数}voidDeckOfCards::shullfe(){//牌面大小的判断依据introw;intcolumn;for(intcard=1;card=52;card++){do{row=rand()%4;//判断这张牌的花色column=rand()%13;//判断这张牌的数字}while(Deck[row][column]!=0);Deck[row][column]=card;//由此可以知道某花色某数字的牌的大小}}voidDeckOfCards::deal(){//洗牌staticconstintface[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};staticconstchar*suit[4]={A,B,C,D};number=0;for(inti=0;i=3;i++){intcount=0;colourA=0;colourB=0;colourC=0;colourD=0;if(i==0)coutPlayerA:endl;elseif(i==1)coutPlayerB:endl;elseif(i==2)coutplayerC:endl;elsecoutplayerD:endl;for(intcard=1+i*3;card=3+i*3;card++){for(introw=0;row4;row++){for(intcolumn=0;column13;column++){if(Deck[row][column]==card){cout;coutsetw(3)rightsuit[row]setw(3)rightface[column]((card%3==0)?'\n':'\t');get[i][count]=face[column];count++;switch(*suit[row]){case'A':colourA++;break;case'B':colourB++;break;case'C':colourC++;break;case'D':colourD++;break;}}}}}coutendl;coutcolourA=colourAendl;coutcolourB=colourBendl;coutcolourC=colourCendl;coutcolourD=colourDendl;coutendl;getValue();number++;}//coutendl;output();}voidDeckOfCards::getValue(){//计算每位玩家的得分getScore[number]+=getStraigh();getScore[number]+=getsameColour();getScore[number]+=getStraightAndColoursOrNot();getScore[number]+=getPairOrsameValue();coutgetScoregetScore[number]endlendl;coutgetStraigh()=getStraigh()endl;coutgetsameColour()=getsameColour()endl;coutgetStraightAndColoursOrNot()=getStraightAndColoursOrNot()endl;coutgetPairOrsameValue()=getPairOrsameValue()endl;}intDeckOfCards::getStraigh(){//如果玩家的牌是顺子,计算玩家的得分intt;for(inti=0;i=1;i++)for(intj=0;j=1-i;j++){if(get[number][j]get[number][j+1]){t=get[number][j];get[number][j]=get[number][j+1];get[number][j+1]=t;}}for(intm=0;m=2;m++){coutget[number][m];}coutendl;if((get[number][2]-get[number][1])==1&&(get[number][1]-get[number][0])==1){straigh=1;coutstraigh=straighendl;return0;}elseif(get[number][0]==1&&get[number][1]==12&&get[number][2]==13){straigh=1;coutstraighstraighendl;return0;}elsereturn0;}intDeckOfCards::getsameColour(){//如果玩家的牌是同花,计算玩家的得分inta=colourA+1;intb=colourB+1;intc=colourC+1;intd=colourD+1;if((a*b*c*d)==4&&get[number][0]==1){sameColour=1;coutsameColour=sameColourend
本文标题:数据结构 扑克牌游戏
链接地址:https://www.777doc.com/doc-3598737 .html