?? p.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 + -