| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
wdey
9年前发布

C++编写的21点小游戏代码

#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函数结束