C++课程设计21点纸牌游戏程序.docx
《C++课程设计21点纸牌游戏程序.docx》由会员分享,可在线阅读,更多相关《C++课程设计21点纸牌游戏程序.docx(15页珍藏版)》请在冰豆网上搜索。
C++课程设计21点纸牌游戏程序
#include
#include
#include
#include
#include
#include
classGame
{
public:
Game()
{
win=0,lose=0,draw=0,playerturns=0,cputurns=0,money=100,bet=0;
player=0,cpu=0;
charanswer1[]="123456";
strcpy(answer,answer1);
charanswer2[]="654321";
strcpy(daan,answer2);
};
voidrules();//显示规则
voidBET();//下注
voiddeal();//交易
voidrun(Game&);//进行异常处理
voidhit1();//拿下一牌
voidhit2();//确保庄家不会爆庄并且点数大于16
voidprint();//打印出最后结果
voidresults();//最后的胜利结果
voidcheck();//检查是否爆庄
Gameoperator=(Game&d);//运算符重载
voidreplay(char&ans);//是否进行新一轮的游戏
voidclean();//清屏
voidwait(int);
voidpause();
intGetInt(int,int);
intrandom(long,long);
private:
intplayerturns,cputurns,money;
intwin,lose,draw,bet;
floatplayer,cpu;
charanswer[7];
chardaan[7];
};
//---------------------------------------------------------------------------------------
voidGame:
:
wait(intmilli)
{
clock_tstart;
start=clock();
while((clock()-start);
}
//=========================================================
voidGame:
:
pause()
{
cout<<"PressAnyKeyToContinue"<getch();
}
//=========================================================
intGame:
:
GetInt(intL=0,intH=100)
{
intent;
cout<<"PleaseEnterANumberBetween"<cin>>ent;
while((entH))
{
cout<<"Error"<cout<<"Valuemustbebetween"<cin>>ent;
}
return(ent);
}
//==========================================================
intGame:
:
random(longhi,longlo)//随机抽牌
{
intran;
srand((unsigned)time(NULL));
ran=rand()%(hi-(lo-1))+lo;
return(ran);
}
//=============================================================
voidGame:
:
rules()
{
cout<<"\t\t\t*********欢迎使用21点游戏软件*********"<cout<cout<cout<<"\t\t\t游戏规则:
"<cout<cout<<"\t\t\t※①:
每轮游戏你最多只可以有5牌。
"<cout<<"\t\t\t※②:
如果你的点数超过21将输掉这轮游戏。
"<cout<<"\t\t\t※③:
高级玩家可以看下一牌。
"<cout<<"\t\t\t※④:
胜利者将得到2倍的注金。
"<cout<<"\t\t\t※⑤:
庄家牌点数不会小于16点。
"<cout<<"\t\t\t";
pause();
}
//---------------------------------------------------------------------------------------
voidGame:
:
BET()//下注
{
system("cls");//执行系统命令cls
cout<<"\t\t\t你的资本:
$"<cout<<"\t\t\t你想下多少赌注?
:
";
cin>>bet;
if(bet<=0)
{
cout<<"对不起,输入有误";
exit(0);
}
if(money-bet<0)
{
cout<<"对不起,你没有那么多钱!
:
(";//seesifyourbroke
exit(0);
}
money-=bet;
}
//----------------------------------------------------------------------------------------
voidGame:
:
deal()//发前两牌
{
intplayercard1,playercard2,cpucard1,cpucard2;
floatccard1,ccard2,pcard2,pcard1;
playerturns=2;//开始给玩家发两牌
cputurns=2;//庄家也发两牌
playercard1=random(13,1);//在1到13中找出一个随机数
cout<<"\n\t\t\t正在洗牌,请稍候......"<wait(500);
playercard2=random(13,1);
wait(500);
cout<<"["<cout<<"["<if(playercard1>10)//大于十的牌点数全部置为0.5
{
pcard1=0.5,player=pcard1,playercard1=0;
}
if(playercard2>10)//大于十的牌点数全部置为0.5
{
pcard2=0.5,player+=pcard2,playercard2=0;
}
player+=playercard1+playercard2;//总点数
cout<<"\t\t\t你现在的点数为:
"<cout<cpucard1=random(13,1);//调用函数
wait(350);
cpucard2=random(13,1);//调用函数
cout<<"\t\t\t庄家有一"<"<cout<<"[*]"<<"["<if(cpucard1>10)//大于十的牌点数全部置为0.5
{
ccard1=0.5,cpu=ccard1,cpucard1=0;
}
if(cpucard2>10)//大于十的牌点数全部置为0.5
{
ccard2=0.5,cpu+=ccard2,cpucard2=0;
}
cpu+=cpucard1+cpucard2;//总的点数
cout<}
//----------------------------------------------------------------------------------------
voidGame:
:
run(Game&c2)//进行异常处理
{
charans;
do{
intm=0;
system("cls");//执行系统命令cls
c2.clean();//进行新的一轮游戏!
c2.check();//检验是否爆庄
c2.BET();//进行下注
c2.deal();//洗牌
do{
if(playerturns==5)cout<<"已达最大牌数,不能再要牌了,请按任意键看你的总的点数!
"<do{
try{//开始捕获异常处理
cout<<"\t\t\t你愿意继续吗?
(hit愿意,stay否):
";
m=0;//可以没有的!
但把下面的if语句改一下就必须有了
cout<cin>>ans;
cin.ignore(20,'\n');//把输入行中的其余字符取空,以便后面的输入从新一轮开始
if((ans=='h')||(ans=='H')||(ans=='s')||(ans=='S'))break;
elsethrowans;//产生异常事件
}
catch(char)//开始处理异常机制
{
cout<<"你的输入有误!
:
(请重新输入"<m=1;
}
catch(...){
cout<<"你的输入有误!
:
(请重新输入"<m=2;
}
}while(m!
=0);
if((ans=='h')||(ans=='H'))
{
playerturns++;
if(playerturns>5)
{
cout<<"\t\t\t你不能多于5牌!
"<}
}
if((playerturns<6)&&(ans=='h'))
{
cout<c2.hit1();
}
}while((ans=='h')||(ans=='H'));
for(;(cpu<16)&&(cputurns<6);cputurns++)
{
cout<cout<<"\t\t\t庄家得到一牌!
"<c2.hit2();//callshitfunction
}
cout<cout<cout<<"\t\t\t庄家的点数为:
"<cout<<"\t\t\t你的点数为:
"<cout<c2.results();//看你是否赢了
c2.replay(ans);
}while((ans=='y')||(ans=='Y'));
}
voidGame:
:
hit1()//取下一并把它加入总和
{
intcard=0,copycard=0,bet1=0;
floatcards=0;
card=random(13,1);
copycard=card;
charans,s1[100];
cout<<"如果您是普通玩家请按n."<cout<<"如果您是高级玩家或超级玩家请按y."<cin>>ans;
label1:
if(ans=='y'||ans=='Y')
{
cin.ignore(20,'\n');//把输入行中的其余字符取空,以便后面的输入从新一路轮开始
cout<<"请输入特别玩家的6位密码:
";
cin.getline(s1,7);//提取密码
if(!
strcmp(s1,answer))
{
cout<<"\t\t\t这牌是:
"<cout<<"是否加注(yorn)?
\n";
cin>>ans;
if(ans=='y'||ans=='Y')
{
cout<<"你的现金还有$"<cout<<"你要加多少注?
(你也可以不加)";
cin>>bet1;
if(money-bet1<0)
{
cout<<"你没有足够的赌注";
}
money=money-bet1;
bet+=bet1;
cout<<"\t\t\t你的总点数为:
"<}
else
{
if(cards==0.5)
player-=cards;
elseplayer-=copycard;
cout<<"\t\t\t你的总点数为:
"<}
}
else
{
if(strcmp(s1,daan)==0)
{
cout<cout<<"现在计算机的总牌点为:
"<cout<<"您的总牌点为:
"<floatcard;
card=(float)random(13,1);
if(card>10)card=0.5;
cout<<"下牌面是:
"<<"["<cout<<"您想要什么牌?
请输入牌点数:
";
cin>>card;
if(card>10)card=0.5;
cout<cout<<"您要的牌为"<<"["<player=player+card;//牌点总数
cout<<"总的牌面是:
"<cout<}
else
{
cout<<"对不起,你输入的密码错误!
不能看牌"<cout<<"是否再次输入密码(yesorno)?
"<cin>>ans;
if(ans=='y'||ans=='Y')
gotolabel1;
else
{
cout<<"\t\t\t总点数是:
"<}
}
}
}
else
{
if(card>10)
{
cards=0.5,card=0;
};
player+=cards+card;
cout<<"\t\t\t总点数为:
"<}
}
//-----------------------------------------------------------------
voidGame:
:
hit2()//确保庄家不会爆庄并且点数大于16
{
intcard=0,copycard=0;
floatcards=0;
card=random(13,1);//调用函数
copycard=card;
cout<<"这牌是:
"<if(card>10)
{
cards=0.5,card=0;
};
cpu=cpu+cards+card;
if(cpu>21){
if(cards==0)cpu-=copycard;//当card小于10但总数大于21时执行
elsecpu-=cards;//当card大于10且点数大于21时执行
cout<<"\t\t\t总点数为:
"<}
if(cpu<16)//确保庄家点数大于等于16
{
cpu=16;
cout<<"\t\t\t总点数是:
"<}
}
//---------------------------------------------------------------------
voidGame:
:
results()//找出赢家
{
if(cpu==player)
{
cout<<"\t\t\t点数一样,你们平了!
"<draw++;
money+=bet;
}
if(player>21)
{
cout<<"\t\t\t啊哦,你爆了!
:
("<lose++;
}
else
{
if(cpu{
cout<<"\n\t\t\t恭喜你,你赢了!
:
)";
money=money+(bet*2);
win++;
}
}
if(cpu>21)
{
cout<<"\t\t\t恭喜你,庄家爆了!
:
)"<if(player<21)
{
cout<<"\n\t\t\t恭喜你,你赢了!
:
)";
win++;
money=money+(bet*2);
}
}
else
{
if(cpu>player)
{
cout<<"\t\t\t不好意思,你输了!
:
("<lose++;
}
}
}
//---------------------------------------------------------------------
GameGame:
:
operator=(Game&d)//保留上一轮的一些数据
{
Gamet;
t.win+=d.win,t.lose+=d.lose,t.draw=+d.draw,t.playerturns=0,t.cputurns=0,t.money+=d.money,t.player=0,t.cpu=0;
returnt;
}
//---------------------------------------------------------------------
voidGame:
:
clean()//清零
{
win=this->win,lose=this->lose,draw=this->draw,playerturns=0,cputurns=0,money=this->money,
bet=0,player=0,cpu=0;
}
//---------------------------------------------------------------------
voidGame:
:
replay(char&ans)//是否继续游戏
{
cout<<"\n\t\t\t你是否想继续游戏(yesorno)?
";
cin>>ans;
}
//---------------------------------------------------------------------
voidGame:
:
check()
{
if(money<=0)//检查钱的多少
{
cout<<"对不起,你输光了,你不能玩了!
:
("<}
}
//---------------------------------------------------------------------
voidGame:
:
print()//打印最后结果
{
voidsign();
cout<<"\t\t\t\t赢:
"<cout<<"\t\t\t\t负:
"<cout<<"\t\t\t\t平:
"<cout<<"\t\t\t\t余额:
"<cout<<"\t\t\t\t使用"<if(money<=-1000)cout<<"\t\t\t你输的真惨啊!
:
("<}
//---------------------------------------------------------------------
intmain()
{
Gamec2;
charans;
system("cls");//执行系统命令cls
c2.rules();//调用函数
cout<<"\t\t\t游戏可以开始了吗?
(yesorno):
";
cin>>ans;
if((ans=='y')||(ans=='Y'))//看你是否想要进行游戏
{
cout<<"\t\t\t你现在拥有的赌本为$100!
"<//cout<<"\t\t\t"<//pause();
}
else//如果否退出游戏
{
return(0);
}
c2.run(c2);//进行游戏
c2.print();//输出最后结果
cout<cout<<"\t\t\t\t";
return(0);
}