C++课程设计论文
———21点的扑克牌
21点课程设计要求:
(1) 将所有的函数与相应的数据封装到类中。
(2) 程序中一共13张扑克牌可以随机的抽取,要求当牌点大于10的点数全部为半点。
(3) 要求高级玩家永远不会输,即高级玩家可以查看下一张牌,若大于21点则拒绝,超级玩家可以指定下一级牌的点数。
(4) 每次要牌后可以设定赔率。如果牌好可以在下注,但是不能超过总钱数。
(5) 将界面该为中文形式,界面解释详细友好,可以吸引更多的玩家。
本程序是由两人一起合作完成的,本人主要从事(2)(5)二点设计要求。
设计的原程序是把大于10点的数都规定为10点,而程序设计要求是要把大于10点的牌全部规定为半点,即为0.5点,这就要求整型数向实型数的转化,因此在程序实行过程中要多定义一些实型变量,并且把原程序的变量player,cpu该为实型的,其程序如下:
void deal(float&player,float&cpu,int&playerturns,int&cputurns)
{
int playercard1,playercard2,cpucard1,cpucard2;
Float m,n,p,q;
playerturns=2;
cputurns=2;
playercard1=random(13,1);
cout<<\"\\n\\\DEALING HAND\"< playercard2=random(13,1); wait(150); cpucard1=random(13,1); wait(350); cpucard2=random(13,1); if(playercard1>10) m=0.5; else m=playercard1; if(playercard2>10) n=0.5; else n=playercard2; if(cpucard1>10) p=0.5; else p=cpucard1; if(cpucard1>10) q=0.5; else q=cpucard2; player=m+n; cpu=p+q; cout<<\"\\\现在你的牌面总数是:\"< 程序要求(5)即将程序: void rules() { cout<<\"\\WELCOME TO THE GAME\"< pause(); } 改为: void CCard::rules()//s Function Displays the rules for Black Jack { cout<<\"\\欢迎来到21点扑克牌游戏\"< #include #include #include \"utility.h\" #include \"wait.h\" #include #include #include #define N '\\r' //fuctions. class CCard { private: float player; //玩家点数 float cpu; //电脑点数 int win; //赢的次数 int lose; int draw; int playerturns; int cputurns; int money; int bet; public: void setmoney(int a); void rules(); void replay(char &ans); //输的次数 //平的次数 //玩家牌数 //电脑牌数 //有多少钱 //下注的钱 //给玩家本钱 //游戏规则 //询问是否继续玩 void print(int wins,int lose,int draw,int money); //输出最后结果 void deal(float &player,float &cpu,int &playerturns,int &cputurns); //为计算机和玩家个发两张牌 void hit(float &total); //普通玩家要一张牌 void hit2(float &total); //高级玩家要一张牌 void hit3(float &total); //超级玩家要一张牌 void BET(int &bet,int &money); //下注 void results(float player,float cpu,int bet,int &money,int &draw,int &win,int &lose); //判断输赢 void reBET(int &bet,int &money); int common(); //普通玩家 int advanced(); //高级玩家 int super(); //超级玩家 }game; int main(int &money) { void rules(); float player=0,cpu=0; int win=0,lose=0,draw=0,playerturns=0,cputurns=0; char ans; int ch; system(\"cls\"); //执行系统命令 cls game.rules(); cout<<\"\\\你想玩吗?y/n:\"; cin>>ans; if((ans == 'y')||(ans=='Y')) { cout<<\"\\\给你100美元初始钱数\"< cout<<\"\\\\"; pause(); //暂停,按任意间继续 } //检查输入是否是YES else { return(0); } cout<<\"如果您是普通玩家请按1.\"< switch(ch) { case 1: game.common(); break; case 2: game.advanced(); break; case 3: game.super(); break; default: cout<<\"选择错误,程序退出!\"< return(0); } void CCard::setmoney(int a) { money=a; } //-------------------------------------------------------------------------------- int CCard::common() { char ans; do{ system(\"cls\"); if(money<0) //看是否无赌本 { cout<<\"你破产了!\"< } game.BET(bet,money); //下注程序 game.deal(player,cpu,playerturns,cputurns); //为计算机和玩家个发两张牌 do{ cout<<\"\\n你想继续要牌还是不再要牌?h/s:\"; //询问玩家是否要牌 cin>>ans; if((ans!='H'&&ans!='h'&&ans!='s'&&ans!='S')) { do{ cout<<\"你输入的字母错误,请从新输入.\"< }while((ans!='H'&&ans!='h'&&ans!='s'&&ans!='S')); } if((ans=='h')||(ans=='H')) { game.reBET(bet,money); playerturns++; //玩家手中牌数增加一张 if(playerturns>5) //看玩家是否超过五张牌 { cout<<\"\\\你不能拥有多于5张牌.\"; } } if((playerturns<6)&&(ans=='h')) //判断是否符合要牌条件 { cout< } }while((ans=='h')||(ans=='H')); //继续询问玩家是否要牌 for(;(cpu<16)&&(cputurns<6);cputurns++) //计算机开始要牌条件 { cout< } cout< game.replay(ans); }while((ans=='y')||(ans=='Y')); game.print(win,lose,draw,money); cout< return(0); } //--------------------------------------------------------------------------------------- int CCard::advanced() { ifstream infile; char Tempchar[22],Filename[20]; strcpy(Filename,\"password1.txt\"); infile.open(Filename); char str[20]; if(!infile) { cout<<\"打开文件错误!\\n\"; exit(0); } infile.getline(Tempchar,22); do{ char ch; int i=0; cout<<\"\\n请输入密码,以回车键结束:\"< ch=getch(); while(ch!=N) { str[i++]=ch; cout<<'*'; //密码用*号取代 cout.flush(); ch=getch(); } str[i]=0; }while(strcmp(str,Tempchar)!=0); char ans; do{ system(\"cls\"); if(money<0) //看是否无赌本 { cout<<\"你破产了!\"< } game.BET(bet,money); //下注程序 game.deal(player,cpu,playerturns,cputurns);//为计算机和玩家个发两张牌 do{ cout<<\"\\\你想继续要牌还是不再要牌?h/s :\"; //询问玩家是否要牌 cin>>ans; if((ans!='H'&&ans!='h'&&ans!='s'&&ans!='S')) { do{ cout<<\"你输入的字母错误,请从新输入.\"< }while((ans!='H'&&ans!='h'&&ans!='s'&&ans!='S')); } if((ans=='h')||(ans=='H')) { game.reBET(bet,money); playerturns++; //玩家手中牌数增加一张 if(playerturns>5) //看玩家是否超过五张牌 { cout<<\"\\\你不能拥有多于5张牌.\"; } } if((playerturns<6)&&(ans=='h')) //判断是否符合要牌条件 { cout< } }while((ans=='h')||(ans=='H')); //继续询问玩家是否要牌 for(;(cpu<16)&&(cputurns<6);cputurns++) //计算机开始要牌条件 { cout< } cout< game.replay(ans); }while((ans=='y')||(ans=='Y')); game.print(win,lose,draw,money); cout< return(0); } //--------------------------------------------------------------------------------------- int CCard::super() { ifstream infile; char Tempchar[22],Filename[20]; strcpy(Filename,\"password2.txt\"); infile.open(Filename); char str[20]; if(!infile) { cout<<\"打开文件错误!\\n\"; exit(0); } infile.getline(Tempchar,22); do{ char ch; int i=0; cout<<\"\\n请输入密码,以回车键结束:\"< ch=getch(); while(ch!=N) { str[i++]=ch; cout<<'*'; cout.flush(); ch=getch(); } str[i]=0; }while(strcmp(str,Tempchar)!=0); char ans; do{ system(\"cls\"); if(money<0) //看是否无赌本 { cout<<\"你破产了!\"< } game.BET(bet,money); //下注程序 game.deal(player,cpu,playerturns,cputurns);//为计算机和玩家个发两张牌 do{ cout<<\"\\\你想继续要牌还是不再要牌?h/s :\"; //询问玩家是否要牌 cin>>ans; if((ans!='H'&&ans!='h'&&ans!='s'&&ans!='S')) { do{ cout<<\"你输入的字母错误,请从新输入.\"< }while((ans!='H'&&ans!='h'&&ans!='s'&&ans!='S')); } if((ans=='h')||(ans=='H')) { game.reBET(bet,money); playerturns++; //玩家手中牌数增加一张 if(playerturns>5) //看玩家是否超过五张牌 { cout<<\"\\\你不能拥有多于5张牌\"; cout< } if((playerturns<6)&&(ans=='h')) //判断是否符合要牌条件 { cout< } }while((ans=='h')||(ans=='H')); //继续询问玩家是否要牌 for(;(cpu<16)&&(cputurns<6);cputurns++) //计算机开始要牌条件 { cout< cout< game.replay(ans); }while((ans=='y')||(ans=='Y')); game.print(win,lose,draw,money); cout< return(0); } //------------------------------------------------------------------------ void CCard::rules()//s Function Displays the rules for Black Jack { cout<<\"\\欢迎来到21点扑克牌游戏\"< pause(); } //---------------------------------------------------------------------------------------- void CCard::BET(int &bet,int &money) //This Function finds out how much money they wish to bet { cout<<\"\\\你有:$\"< cin>>bet; do{ if(bet>=money) { cout<<\"\\n输入错误,赌注不能超过资本! 请从新输入.\"< } }while(bet>money); if(bet<0) { bet=bet*-1; } money=money-bet; } //---------------------------------------------------------------------------------------- void CCard::reBET(int &bet,int &money) { char ch; cout<<\"\\n你是否要从新下注?y/n\"< if((ch!='Y')&&(ch!='y')&&(ch!='N')&&(ch!='n')) { do { cout<<\"您的选择错误,请从新选择.\"< }while((ch!='Y')&&(ch!='y')&&(ch!='N')&&(ch!='n')); } if((ch=='Y')||(ch=='y')) { money+=bet; cout<<\"您现在有\"< money-=bet; } } //------------------------------------------------------------------------------------ void CCard::deal(float &player,float &cpu,int &playerturns,int &cputurns) //This Function Deals The hands { int playercard1,playercard2,cpucard1,cpucard2; float m,n,p,q; playerturns=2; cputurns=2; playercard1=random(13,1); cout<<\"\\n\\\正在发牌\"< playercard2=random(13,1); wait(150); cpucard1=random(13,1); wait(350); cpucard2=random(13,1); if(playercard1>10) m=0.5; else m=playercard1; if(playercard2>10) n=0.5; else n=playercard2; if(cpucard1>10) p=0.5; else p=cpucard1; if(cpucard1>10) q=0.5; else q=cpucard2; player=m+n; cout<<\"\\\你的牌点总数是:\"< //---------------------------------------------------------------------------------------- void CCard::hit(float &total) //This fuction is to deal a card and add it to the total { int card; float z; card=random(13,1); if(card>10) { z=0.5; } else z=card; total=total+z; cout<<\"\\\这张牌是:\"< //--------------------------------------------------------------------------------------- void CCard::hit2(float &total) { char ch; int card; float x; do{ card=random(13,1); if(card>10) { x=0.5; } else x=card; cout<<\"这张牌是:\"< if((ch=='Y')||(ch=='y')); }while((ch=='N')||(ch=='n')); if(card>10) { x=0.5; } else x=card; total=total+x; cout<<\"\\\这张牌是:\"< //----------------------------------------------------------------- void CCard::hit3(float &total) { char ch; int card; float c; card=random(13,1); if(card>10) { c=0.5; } else c=card; cout<<\"这张牌是:\"< if((ch=='N')||(ch=='n')) {cout<<\"请输入你想要的点数.\"< } if(card>10) { c=0.5; } else c=card; total=total+c; cout<<\"\\\这张牌是:\"< //------------------------------------------------------------------- void CCard::results(float player,float cpu,int bet,int &money,int &win,int &lose) //this function finds who wins &draw,int { if(cpu==player) { cout<<\"\\\这是平局.\"< money+=bet; } if(player>21) { cout<<\"\\\很遗憾,你输了!\"< } else { if(cpu cout<<\"\\n\\\恭喜你,你赢了!\"; money=money+(bet*2); win++; } } if(cpu>21) { cout<<\"\\\电脑输了.\"< { cout<<\"\\n\\\恭喜你,你赢了!\"; win++; money=money+(bet*2); } } else { if(cpu>player) { cout<<\"\\\很遗憾,你输了!\"< } } } //----------------------------------------------------------------- void CCard::replay(char &ans) { cout<<\"\\n\\\你想继续玩这个游戏吗y/n?:\"; cin>>ans; if((ans!='Y')&&(ans!='y')&&(ans!='N')&&(ans!='n')) { do { cout<<\"您的选择错误,请从新选择.\"< }while((ans!='Y')&&(ans!='y')&&(ans!='N')&&(ans!='n')); } } //----------------------------------------------------------------- void CCard::print(int wins,int lose,int draw,int money) { cout<
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务