您的位置:澳门402永利com > 关于计算机 > 编辑的21点小游戏代码

编辑的21点小游戏代码

发布时间:2019-09-24 12:18编辑:关于计算机浏览(122)

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

    本文由澳门402永利com发布于关于计算机,转载请注明出处:编辑的21点小游戏代码

    关键词: