1、此程序为21点扑克牌游戏,玩家一共可以要五张牌,但假如牌的点数超过21,则自动出局;在不超过21点的情况下,玩家与庄家比牌的点数大小,大者为赢,相同则为平局。 程序说明: 1)将所有的函数与相应的数据封装到类中,并改写主程序。使程序简化。 2)程序中一共有13张扑克牌可以随时抽取,大于10的点数为0.5。 3)超级玩家永远不会输掉,即超级玩家可以查看下一张牌,若大于21点,则可以拒绝,当然游戏规则上不能泄露这点秘密。 4)超级玩家可以查看下一张牌,即输入指定的字符串或字符,然后按规定输入对的密码后才干看自己的和计算机的牌,并指定下一级牌的点数。 5)每次要牌后可以设定赔率,即假如开始下的是10
2、元钱的注,假如牌好,你可以规定继续下注,当然不能超过你所有的总钱数。 6)将界面的提醒说明改成中文界面,界面的解释具体和谐,可以吸引更多的玩家。 类的封装 设计一个类,将出牌,下注等的操作包含进去,玩家和计算机。均为这个类的对象。这样,在玩牌及判断输赢时,函数只需要用这两个对象的引用做参数即可,大大简化了函数。 具体的参考的数据结构如下; classCCard private: intnaPip5;/一共五张牌 intnNumber;/实际发了多少牌 intnDollar;/有多少钱 intnGamble;/赌注 intnWin;/赢局数 intnLost;/输局数 intnDraw;/平局数
3、 public: CCard();/构造函数,初始化 voidFirstPlayTwo();/最初两张牌 intGetNumber();/返回牌的张数 doubleGetPip();/返回点数 voidDidplayPip();/依次显示牌面的点数 voidDidplayPip(int);/除了第一张牌,依次所有显示牌面点数(针对计算机牌的显示) voidTurnPlay();/出一张牌 voidWin();/赢了计算赌注 voidLose();/输了 voidDraw();/平局 intSetGamblec(int);/设立赌注,赌本不够返回-1 intGetMoney();/返回钱数 vo
4、idDisplayInfo();/显示必要的信息 char*GetCurrentCard();/返回当前牌点 voidDeleteCard(void);/删除当前牌点,作弊用 voidModifyCard(double);/修改当前牌,作弊用 intAddgamble(int);/加赌注 ; 主程序 #include #include /fuctions voidreplay(char&ans);/询问玩家是否再玩一局 voidhit(int&total);/要一张牌 voiddeal(int&player,int&cpu,int&playerturns,int&cputurns);/为计算机
5、和玩家各发两张牌 voidBET(int&bet,int&money);/下注 voidprint(intwins,intlose,intdraw,intmoney);/输出最后结果 voidrules();/输出游戏规则 voidresults(intplayer,intcpu,intbet,int&money,int&draw,int&win,int&lose);/判断一局的结果 /*diyige*/ /wait.hbegin #include #include voidwait(intmilli)/暂停,milli毫秒 clock_tstart; start=clock(); while
6、(clock()-start)milli); /wait.hend #include #include #include #include /= voidpause() /暂停,任按一键继续 cout任按一键继续endl; getch(); /= intGetInt(intL=0,intH=100) intent; coutPleaseEnterANumberBetweenLandHent; while(entH) coutErrorendl; coutValuemustbebetweenLandHent; return(ent); /= voidsign() /DisplaysISAACSH
7、AFFER coutThisProgramWasWrittenByIsaacShafferendl; /= intrandom(longhi,longlo) /ThisProgramFindsARandomNumberBetweenHiandLow intran; srand(unsigned)time(NULL); ran=rand()%(hi-(lo-1)+lo; return(ran); /utility.hend intmain() intplayer=0,cpu=0,win=0,lose=0,draw=0,playerturns=0,cputurns=0,money=0,bet; c
8、harans; system(cls);/执行系统命令,清屏 rules(); coutans; if(ans=y)|(ans=Y)/检查输入是否为Yes coutttt您的赌本为100美元endl;/起始的赌本 money=100; coutttt; pause();/暂停,任按一键继续 else return(0); do system(cls); if(money0)/看看有无赌本 cout对不起,您没赌本了endl;/若赌本输光,结束程序 return(0); BET(bet,money);/下注的程序 deal(player,cpu,playerturns,cputurns);/给玩
9、家和计算机各发两张牌 do coutans; if(ans=h)|(ans=H)/假如玩家要牌 playerturns+;/玩家手中的牌数增长一张 if(playerturns5)/判断玩家手中的牌数是否超过5张 coutttt你手中的牌不能超过5张牌;/若超过5张不能继续要牌 if(playerturns6)&(ans=h)/判断是否符合玩家要牌的条件 coutendl; hit(player);/调用发牌程序 while(ans=h)|(ans=H);/继续询问玩家是否要牌 for(;(cpu16)&(cputurns6);cputurns+)/计算机开始要牌的条件 coutendl; c
10、outttt计算机要了一张牌endl; hit(cpu);/调用发牌程序 coutendl; coutendl; coutttt计算机的牌面为:cpuendl;/输出计算机的牌面的总点数 coutttt您的牌面为:playerendl;/输出玩家的牌面的总点数 coutendl; results(player,cpu,bet,money,draw,win,lose);/判断输赢 replay(ans);/询问是否继续玩牌 while(ans=y)|(ans=Y); print(win,lose,draw,money);/游戏结束,输出结果 coutendl; couttttt; return(
11、0); /- voidrules()/游戏规则 coutttWELCOMETOISAACSHAFFERSBLACKJACKGAMEendl; couttttHEREARESOMESIMPLERULESendl; coutttt1:YouCanonlyhaveamaxof5cards.endl; coutttt2:Ifyoubustyouautomaticallylose.endl; coutttt3:Ifyouwinyouwindoublewhatyoubet.endl; coutttt4:TheDealerstopsatorafter16.endl; couttttt; pause(); /
12、- voidBET(int&bet,int&money)/接受玩家下注 system(cls); coutttt您现有的:$moneyendl; coutbet; if(bet0) bet=bet*-1; money=money-bet; /- voiddeal(int&player,int&cpu,int&playerturns,int&cputurns) /为计算机和玩家各发两张牌 intplayercard1,playercard2,cpucard1,cpucard2; playerturns=2; cputurns=2; playercard1=random(13,1);/取得13与1
13、之间的随机数 coutntttDEALINGHAND=10)/若牌面的点数大于10,按10来计点数 playercard1=10; if(playercard2=10) playercard2=10; if(cpucard1=10) cpucard1=10; if(cpucard2=10) cpucard2=10; player=playercard1+playercard2;/玩家两张牌的总点数 cpu=cpucard1+cpucard2;/计算机两张牌的总点数 coutttt现有您的牌面总数是:playerendl; coutplayercard1; coutplayercard2; co
14、utendl; coutttt计算机有一张cpucard1显示endl; coutendl; cout*cpucard1=10) card=10; total=total+card;/牌点总数 coutttt牌面是:cardendl;/输出牌面 coutttt总的牌面是:totalendl;/输出总点数 /- voidresults(intplayer,intcpu,intbet,int&money,int&draw,int&win,int&lose) /判断一局的结果 if(cpu=player)/平局 coutttt平局21)/玩家超过了21点 coutttt很遗憾,你输了endl; lo
15、se+; else if(cpuplayer)/玩家赢了 cout21)/计算机超过了21点 coutttt计算机输了endl; if(player21) coutplayer) coutttt很遗憾,你输了endl; lose+; /- voidreplay(char&ans)/询问玩家是否再玩一局 coutans; /- voidprint(intwins,intlose,intdraw,intmoney) couttttt赢的次数:winsendl; couttttt输的次数:loseendl; couttttt平的次数:drawendl; couttttt您的赌本:moneyendl; 尚有。#include #include #defineNx voidmain(void) charstr20; charch; inti=0; cout输入密码:; cout.flush(); ch=getch(); while(ch!=x) stri+=ch; cout*; cout.flush(); ch=getch(); stri=0;