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

📄 01.cpp

📁 21點牌 能重新洗牌 點沒有用到文件
💻 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&computer)                                            //判断输赢情况并输出牌的情况 
{ 
cout<<"··························"<<endl<<endl; 
cout<<"您所有的牌:"; 
player.gettotal(); 
cout<<"       您的牌面点数:"<<player.total()<<endl<<endl; 
cout<<"电脑所有的牌:"; 
computer.gettotal(); 
cout<<"       电脑的牌面点数:"<<computer.total()<<endl<<endl; 
if((player.total()>21&&computer.total()>21)||(player.total()==computer.total())) 
{ 
cout<<"平局!"<<endl; 
    player.pdraw(); 
} 
    else if(player.total()>21) 
{ 
cout<<"很抱歉,你输了!"<<endl; 
player.pfail(); 
} 
else if(computer.total()>21) 
{ 
cout<<"恭喜你,你赢了!"<<endl; 
player.pwin(); 
} 
else if(player.total()>computer.total()) 
{ 
cout<<"恭喜你,你赢了!"<<endl; 
player.pwin(); 
} 
else 
{ 
cout<<"很抱歉,你输了!"<<endl; 
player.pfail(); 
} 
} 
void playpai(pai&player,pai&computer)                                          //玩牌的过程 
{ 
char jud='y'; 
int pjudge=1,cjudge=1; 
player.beginpai(); 
computer.beginpai(); 
cout<<"\n◆您的第一、二张牌分别为:"<<player.gethuase(); 
player.getppai(); 
player.getpai(); 
    cout<<"   "<<player.gethuase(); 
player.getppai(); 
cout<<".  您当前总点数为:"<<player.total()<<".\n"; 
computer.getpai(); 
cout<<"◆电脑的第"<<computer.getnumber()<<"张牌是:"<<computer.gethuase(); 
computer.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(computer.total()<=17&&computer.getnumber()<7) 
{ 
computer.getpai(); 
        cout<<"◆电脑要牌,电脑的第"<<computer.getnumber()<<"张牌是:"<<computer.gethuase(); 
    computer.getppai(); 
    cout<<".\n"<<endl; 
} 
        else 
    cjudge=0; 
}while(pjudge||cjudge); 
    judge(player,computer); 
} 

int main() 
{ 
srand((unsigned)time(NULL)); 
    pai player,computer; 
player.rule(); 
char sjudge; 
cout<<"是否开始游戏,开始游戏请按Y,否则任意键结束!"; 
cin>>sjudge; 
do 
{    
system("cls"); 
                player.rule(); 
if(sjudge=='Y'||sjudge=='y') 
{ 
playpai(player,computer); 
    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 + -