C课程设计点纸牌游戏程序.docx
- 文档编号:28098032
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:18
- 大小:18.50KB
C课程设计点纸牌游戏程序.docx
《C课程设计点纸牌游戏程序.docx》由会员分享,可在线阅读,更多相关《C课程设计点纸牌游戏程序.docx(18页珍藏版)》请在冰豆网上搜索。
C课程设计点纸牌游戏程序
#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((ent { 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); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 纸牌 游戏 程序