📄 01.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 + -