C++编写的21点小游戏代码
2018-07-20 来源:open-open
#include<iostream> #include<string> #include<time.h> using namespace std; #define NUM 1000 int j=2;//定义为全局变量 int randNum[NUM];//因为rand()函数有一定的缺陷,所以在程序中定义了randNum数组来存放随机数 //即使使用了种子函数srand(),由于程序运行时间比较短,也不太好设置种子。因此 使用数组来存放随机数 class Poker { private: int poker[53]; //扑克 int pokerValue[53]; //扑克代表的数值 string pokerName[53]; //扑克名 int money; //玩家钱数 int bet; //玩家的赌注 int pokerF[5]; //玩家手中的牌 F:Farmer L:Landlord int pokerL[5]; //庄家手中的牌 F:Farmer L:Landlord int pokerNumF; //玩家手中的牌数 int pokerNumL; //庄家手中的牌数 public: Poker(); //构造函数,对牌初始化 void initPoker(); //洗牌,在每轮游戏开始前进行 string getPokerF(); //用字符串的形式返回玩家的牌 string getPokerL(); //用字符串的形式返回庄家的牌 int getSumF(); //返回玩家牌的点数,用以判断是否超过21点 int getSumL(); //返回庄家牌的点数 void farmerAsk(); //玩家要牌 void landlordAsk(); //庄家要牌 void inputBet(); //玩家输入赌注 void newGame(); //开始新游戏 void landlordProcess(); //在玩家不要牌时进行处理 }; Poker::Poker() { poker[0]=0; for(int i=1;i<=13;i++) //| { //| poker[i]=i; //|用构造函数对牌初始化 poker[i+13]=i; //| poker[i+26]=i; //| poker[i+39]=i; //| }//for结束 pokerValue[0]=0; for(i=1;i<=52;i++) { if(poker[i]<=10) pokerValue[i]=poker[i]; else pokerValue[i]=10; }//for结束 pokerName[0]=""; for(i=0;i<4;i++) { pokerName[1+13*i]="A"; pokerName[2+13*i]="2"; pokerName[3+13*i]="3"; pokerName[4+13*i]="4"; pokerName[5+13*i]="5"; pokerName[6+13*i]="6"; pokerName[7+13*i]="7"; pokerName[8+13*i]="8"; pokerName[9+13*i]="9"; pokerName[10+13*i]="10"; pokerName[11+13*i]="J"; pokerName[12+13*i]="Q"; pokerName[13+13*i]="K"; }//for结束 money=200; //玩家开始玩游戏时钱数是200 bet=0; for(i=0;i<5;i++) { pokerF[i]=0; //|对pokerOfFarmer初始化 pokerL[i]=0; //|对pokerOfLandlord初始化 } pokerNumF=0;//玩家手中的牌数初始化为0 pokerNumL=0;//庄家手中的牌数初始化为0 srand((int)time(0)); for(i=0;i<NUM;i++) { randNum[i]=rand()*51/32767+1;//产生随机数数组 } }//构造函数Poker()结束 void Poker::initPoker() { cout<<"新一局游戏开始,开始洗牌>>>>>"<<endl; pokerF[0]=randNum[j++]; //产生1-52的随机数 pokerF[1]=randNum[j++]; //产生1-52的随机数 pokerL[0]=randNum[j++]; //产生1-52的随机数 pokerL[1]=randNum[j++]; //产生1-52的随机数 pokerNumF=2; pokerNumL=2; cout<<"洗牌完成,你的牌为:"<<getPokerF()<<endl; }//void Poker::initPoker()结束 string Poker::getPokerF()//用字符串的形式返回玩家的牌 { int i; string result=""; for(i=0;i<pokerNumF;i++) result=result+pokerName[pokerF[i]]+" "; return result; }//string Poker::getPokerF()结束 string Poker::getPokerL()//用字符串的形式返回庄家的牌 { int i; string result=""; for(i=0;i<pokerNumL;i++) result=result+pokerName[pokerL[i]]+" "; return result; }//string Poker::getPokerL()结束 int Poker::getSumF() //返回玩家的总点数 { int result=0; for(int i=0;i<pokerNumF;i++) result=result+pokerValue[pokerF[i]]; return result; } int Poker::getSumL()//返回庄家的总点数 { int result=0; for(int i=0;i<pokerNumL;i++) result=result+pokerValue[pokerL[i]]; return result; } void Poker::farmerAsk() { if(pokerNumF>=5) { cout<<"你的牌数已够5张,不能再要牌了"<<endl; landlordProcess(); } else { pokerF[pokerNumF++]=randNum[j++]; //产生1-52的随机数 cout<<"你的牌为:"<<getPokerF()<<endl; if(getSumF()>21) { cout<<"你撑死了,你输了"<<bet<<"元"<<endl; money=money-bet; if(money<=0) { cout<<"你已经输光了,哈哈"<<endl; cout<<"游戏结束"<<endl; exit(0); } inputBet(); initPoker(); } else if(getSumF()==21) { landlordProcess(); } } } void Poker::landlordAsk() { if(pokerNumL>=5) { if(getSumF()>getSumL()) { cout<<"庄家的牌为"<<getPokerL()<<endl; cout<<"你赢了,你赢了"<<bet<<"元"<<endl; money=money+bet; inputBet(); initPoker(); } else if(getSumF()==getSumL()) { cout<<"庄家的牌为"<<getPokerL()<<endl; cout<<"平手"<<endl; inputBet(); initPoker(); } else if(getSumF()<getSumL()) { cout<<"庄家的牌为"<<getPokerL()<<endl; cout<<"你输了,你输了"<<bet<<"元"<<endl; money=money-bet; if(money<=0) { cout<<"你已经输光了,哈哈"<<endl; cout<<"游戏结束"<<endl; exit(0); } inputBet(); initPoker(); } } else { pokerL[pokerNumL++]=randNum[j++]; //产生1-52的随机数 if(getSumL()>21) { cout<<"庄家的牌为"<<getPokerL()<<endl; cout<<"庄家撑死了,你赢了"<<bet<<"元"<<endl; money=money+bet; inputBet(); initPoker(); } else landlordProcess(); } } void Poker::inputBet() { cout<<"你现在有"<<money<<"元,请输入赌注:"; do { cin>>bet; if(bet>money) cout<<"笨蛋,你没那么多钱,少来,重新输入吧:"; }while(bet>money); } void Poker::newGame() { inputBet(); initPoker(); cout<<"你得到的牌为:"<<getPokerF()<<endl; } void Poker::landlordProcess() { if(getSumL()>=17) { if(getSumL()>getSumF()) { cout<<"庄家的牌为"<<getPokerL()<<endl; cout<<"庄家获胜,你输了"<<bet<<"元"<<endl; money=money-bet; if(money<=0) { cout<<"你已经输光了,哈哈"<<endl; cout<<"游戏结束"<<endl; exit(0); } inputBet(); initPoker(); } else if(getSumF()==getSumL()) { cout<<"庄家的牌为"<<getPokerL()<<endl; cout<<"本次游戏平手"<<endl; inputBet(); initPoker(); } else { cout<<"庄家的牌为"<<getPokerL()<<endl; cout<<"你赢了,你赢了"<<bet<<"元"<<endl; money=money+bet; inputBet(); initPoker(); } } else { landlordAsk(); } } int main() { int choose=1; Poker poker; cout<<"****************** 欢迎玩二十一点游戏 ******************"<<endl<<endl; poker.inputBet(); poker.initPoker(); //洗牌 while(choose==1||choose==2||choose==3||choose==4) { cout<<"1.要牌 2.不要牌 3.重新开始 4.退出 >>请输入数字选择操作:"; cin>>choose; if(choose==1) poker.farmerAsk(); else if(choose==2) poker.landlordProcess(); else if(choose==3) poker.newGame(); else if(choose==4) exit(0); } return 0; }//main函数结束
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:IOS 8 使用系统自带导航
最新资讯
热门推荐