⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p.cpp

📁 21dian you xi ,he dian nao wan you xi
💻 CPP
字号:
#include<iostream> 
#include<ctime> 
#include<iomanip> 
using namespace std; 
class pai 
{    
   public: 
   pai();                //构造函数 
   void beginpai();      //获得头张牌 
   void getpai();        //要牌 
   void rule();          //游戏规则 
   void getppai();        //返回一张牌的点数 
   int getnumber();      //返回牌的号码:即第几张牌 
   char gethuase();      //返回一张牌的花色 
   float total();        //返回牌面点数:即总的点数   
       void print();         //输出打牌的局数的信息 
   void pwin();          //计算赢的局数 
   void pfail();         //计算输的局数 
   void pdraw();         //计算和局的局数 
   void gettotal();      //输出该局玩家和电脑得牌的信息  

   private: 
   int ppai[7];          //存牌的数组 
   int huase[7];         //花色的数组 
   int number;           //牌的总数 
   int win;              //赢的局数 
   int fail;             //输的局数 
   int draw;             //和局的局数 
};

 
pai::pai()                   //构造函数:初始化数据 
{ 
number=0; 
win=0; 
fail=0; 
draw=0; 
} 



void pai::rule()                                                               //游戏规则             
{ 
cout<<" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; 
cout<<"   welcome to 21点 game~!\n"; 
cout<<"   game rules:\n"; 
cout<<" 1.玩家最多可以拿7张牌牌;\n"; 
cout<<" 2.如果点数大于21点就会爆点;\n"; 
cout<<" 3.如果庄家的点数大于17点,电脑将不会要牌;\n"; 
cout<<" 4.如果玩家的点数大于21点时点,玩家将不能再要牌;\n"; 
cout<<" 5.当牌中出现A时,按11点计算,如果总点数大于21点则按1点计算;\n"; 
cout<<" 6.J、Q、K按10点计算,一方出现爆点则判爆点者输;\n"; 
cout<<" 7.如果玩家和庄家同时爆点或者点数相同系统判定为和局!\n"; 
cout<<" 8.good luck to you!"<<endl; 
cout<<" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"<<endl; 
} 
void pai::beginpai()                                                           //获得头张牌 
{ 
number=0; 
huase[number]=rand()%4+3; 
ppai[number]=rand()%13+1; 
number++; 
} 



void pai::getpai()                                                             //要牌 
{ 
int panduan; 
do                                                                         //判断是否随机得了和之前相同的牌 
{ 
panduan=0;                                                             //若是相同的则返回再发,直到不相同才把牌输出 
huase[number]=rand()%4+3; 
    ppai[number]=rand()%13+1; 
for(int i=0;i<number;i++) 
if(huase[number]==huase[i]&&ppai[number]==ppai[i]) 
panduan=1; 
}while(panduan); 
number++; 
} 



void pai::getppai()                                                             //返回一张牌的点数 
{ 
if(ppai[number-1]==1) 
cout<<"A"; 
else if(ppai[number-1]==11) 
cout<<"J"; 
else if(ppai[number-1]==12) 
cout<<"Q"; 
else if(ppai[number-1]==13) 
                                                          //输出该局玩家和电脑得牌的信息 
 cout<<"K"; 
else 
cout<<ppai[number-1]; 
} 
char pai::gethuase()                                                           //返回一张牌的花色 
{ 
    char hs; 
hs=huase[number-1]; 
return hs; 
} 




void pai::gettotal()                                                           //输出该局玩家和电脑得牌的信息 
 { 
char hua[10]; 
for(int i=0;i<number;i++) 
{ 
hua[i]=huase[i]; 
if(ppai[i]==1) 
cout<<setw(3)<<hua[i]<<"A"; 
else if(ppai[i]==11) 
cout<<setw(3)<<hua[i]<<"J"; 
else if(ppai[i]==12) 
cout<<setw(3)<<hua[i]<<"Q"; 
else if(ppai[i]==13) 
cout<<setw(3)<<hua[i]<<"k"; 
else 
cout<<setw(3)<<hua[i]<<ppai[i]; 
} 
} 



int pai::getnumber()                                                           //返回牌的号码:第几张牌 
{ 
return number; 
} 
float pai::total()                                                             //返回牌面点数:总的点数 
{ 
int i; 
float total=0; 
for(i=0;i<number;i++) 
{ 
if(ppai[i]==1) 
total=total+11; 
else if(ppai[i]<=10) 
total=total+ppai[i]; 
else 
total=total+10; 
} 
for(i=0;i<number;i++) 
{ 
if(ppai[i]==1&&total>21) 
total=total-10; 
if(total<=21) 
break; 
} 
  return total; 
} 




void pai::pwin()                                                               //计算赢的局数 
{ 
win++; 
} 
void pai::pfail()                                                              //计算输的局数 
{ 
fail++; 
} 
void pai::pdraw()                                                              //计算平的局数 
{  
draw++; 
} 




void pai::print()                                                              //输出打牌的局数的信息 
{ 
cout<<"\n··························"<<endl; 
cout<<"您一共打了"<<win+fail+draw<<"盘牌,"<<"赢了"<<win<<"盘,"<<"输了"<<fail<<"盘,"<<"平了"<<draw<<"盘."<<endl<<endl; 
    cout<<"··························"<<endl; 
} 

void judge(pai&player,pai&House)                                            //判断输赢情况并输出牌的情况 
{ 
   cout<<"··························"<<endl<<endl; 
    cout<<"您所有的牌:"; 
     player.gettotal(); 
    cout<<"       您的牌面点数:"<<player.total()<<endl<<endl; 
   cout<<"庄家所有的牌:"; 
    House.gettotal(); 
    cout<<"       庄家的牌面点数:"<<House.total()<<endl<<endl; 
  if((player.total()>21&&House.total()>21)||(player.total()==House.total())) 
  { 
       cout<<"平局!"<<endl; 
       player.pdraw(); 
  } 
    else if(player.total()>21) 
	{ 
       cout<<"很抱歉,你输了!"<<endl; 
        player.pfail(); 
	} 
     else if(House.total()>21) 
	 { 
        cout<<"恭喜你,你赢了!"<<endl; 
        player.pwin(); 
	 } 
          else if(player.total()>House.total()) 
		  { 
             cout<<"恭喜你,你赢了!"<<endl; 
              player.pwin(); 
		  } 
           else 
		   { 
             cout<<"很抱歉,你输了!"<<endl; 
                 player.pfail(); 
		   } 
} 
void playpai(pai&player,pai&House)                                          //玩牌的过程 
 
 { 
char jud='y'; 
int pjudge=1,cjudge=1; 
player.beginpai(); 
House.beginpai(); 
cout<<"\n您的第一、二张牌分别为:"<<player.gethuase(); 
player.getppai(); 
player.getpai(); 
    cout<<"   "<<player.gethuase(); 
player.getppai(); 
cout<<".  您当前总点数为:"<<player.total()<<".\n"; 
House.getppai(); 
cout<<"庄家的第"<<House.getnumber()<<"张牌是:"<<House.gethuase(); 
House.getppai(); 
cout<<".\n"<<endl; 
do 
{ 
    if(player.total()>21) 
{ 
cout<<"对不起,你的点数超过了21点,已经爆点了~!"<<endl; 
jud=0; 
} 
else if(jud!=0) 
{ 
    cout<<"是否继续要牌,要牌请按Y,否则请按N."; 
        cin>>jud; 
} 
if(((jud=='y'||jud=='Y')&&pjudge==1)) 
{   
  if(player.getnumber()<7&&jud!=0) 
  {   
      player.getpai(); 
                  cout<<"◆你的第"<<player.getnumber()<<"张牌是:"<<player.gethuase(); 
  player.getppai(); 
  cout<<".  您当前总点数为:"<<player.total()<<".\n"; 
  } 
          else 
  { 
  jud=0; 
  cout<<"对不起,您的牌数已经超过7张,您不能再要牌了!"; 
  } 
} 
else  
{ 
pjudge=0; 
    jud=0; 
} 
if(House.total()<=17&&House.getnumber()<7) 
{ 
House.getpai(); 
        cout<<"庄家要牌,庄家的第"<<House.getnumber()<<"张牌是:"<<House.gethuase(); 
       House.getppai(); 
    cout<<".\n"<<endl; 
} 
        else 
    cjudge=0; 
}while(pjudge||cjudge); 
    judge(player,House); 
} 




int main() 
{ 
srand((unsigned)time(NULL)); 
    pai player,House; 
player.rule(); 
char sjudge; 
cout<<"是否开始游戏,开始游戏请按Y,否则任意键结束!"; 
cin>>sjudge; 
do 
{    
system("cls"); 
                player.rule(); 
if(sjudge=='Y'||sjudge=='y') 
{ 
playpai(player,House); 
    player.print(); 
sjudge=0; 
cout<<"是否继续游戏,继续请按Y,否则任意键结束!"; 
            cin>>sjudge; 
} 
}while(sjudge=='Y'||sjudge=='y'); 
    cout<<"赌博有害健康,恭喜你做了一个明智的选择!"<<endl; 
    return 0; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -