您好,欢迎来到微智科技网。
搜索
您的当前位置:首页C++课设21点

C++课设21点

来源:微智科技网


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\"<wait(350);

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<<\"\\\现在你的牌面总数是:\"<cout<<\"[\"<cout<<\"[\"<cout<cout<<\"\\\计算机有一张\"<cout<cout<<\"[*]\"<<\"[\"<}

程序要求(5)即将程序:

void rules()

{

cout<<\"\\WELCOME TO THE GAME\"<cout<<\"\\\HERE ARE SOME SIMPLE RULES\"<cout<<\"\\\1:you can only have a max of 5 cards.\"<cout<<\"\\\2:if you bust you automatically lose.\"<cout<<\"\\\3:if you win you win double what you bet.\"<cout<<\"\\\4:the dealer stops at or after 16.\"<cout<<\"\\\\\";

pause();

}

改为: void CCard::rules()//s Function Displays the rules for Black Jack

{

cout<<\"\\欢迎来到21点扑克牌游戏\"<cout<<\"\\\下面是一些规则:\"<cout<<\"\\\1:你最多能拥有5张牌.\"<cout<<\"\\\2:如果你输了你将失去你的赌注.\"<cout<<\"\\\3:如果你赢了你将得到你赌注的二倍.\"<cout<<\"\\\4:电脑将在得到16点以上的牌时停止.\"<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美元初始钱数\"<game.setmoney(100);

cout<<\"\\\\";

pause(); //暂停,按任意间继续

} //检查输入是否是YES

else

{

return(0);

}

cout<<\"如果您是普通玩家请按1.\"<cout<<\"如果您是高级玩家请按2.\"<cout<<\"如果您是超级玩家请按3.\"<cin>>ch;

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<<\"你破产了!\"<return(0);

}

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<<\"你输入的字母错误,请从新输入.\"<cin>>ans;

}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<game.hit(player); //调用发牌程序

}

}while((ans=='h')||(ans=='H')); //继续询问玩家是否要牌

for(;(cpu<16)&&(cputurns<6);cputurns++) //计算机开始要牌条件

{

cout<cout<<\"\\\电脑接了一张牌.\"<game.hit(cpu); //调用发牌程序

}

cout<cout<cout<<\"\\\电脑的牌点总数是:\"<cout<<\"\\\你的牌点总数是:\"<cout<game.results(player,cpu,bet,money,draw,win,lose); //判断输赢

game.replay(ans);

}while((ans=='y')||(ans=='Y'));

game.print(win,lose,draw,money);

cout<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请输入密码,以回车键结束:\"<cout.flush();

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<<\"你破产了!\"<return(0);

}

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<<\"你输入的字母错误,请从新输入.\"<cin>>ans;

}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<game.hit2(player); //调用发牌程序

}

}while((ans=='h')||(ans=='H')); //继续询问玩家是否要牌

for(;(cpu<16)&&(cputurns<6);cputurns++) //计算机开始要牌条件

{

cout<cout<<\"\\\电脑接了一张牌\"<game.hit(cpu); //调用发牌程序

}

cout<cout<cout<<\"\\\电脑的牌点总数是:\"<cout<<\"\\\你的牌点总数是:\"<cout<game.results(player,cpu,bet,money,draw,win,lose); //判断输赢

game.replay(ans);

}while((ans=='y')||(ans=='Y'));

game.print(win,lose,draw,money);

cout<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请输入密码,以回车键结束:\"<cout.flush();

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<<\"你破产了!\"<return(0);

}

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<<\"你输入的字母错误,请从新输入.\"<cin>>ans;

}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<game.hit3(player); //调用发牌程序

}

}while((ans=='h')||(ans=='H')); //继续询问玩家是否要牌

for(;(cpu<16)&&(cputurns<6);cputurns++) //计算机开始要牌条件

{

cout<cout<<\"\\\电脑接了一张牌\"<game.hit(cpu); //调用发牌程序

cout<cout<cout<<\"\\\电脑的牌点总数是:\"<cout<<\"\\\你的牌点总数是:\"<cout<game.results(player,cpu,bet,money,draw,win,lose); //判断输赢

game.replay(ans);

}while((ans=='y')||(ans=='Y'));

game.print(win,lose,draw,money);

cout<cout<<\"\\\\\";

return(0);

}

//------------------------------------------------------------------------

void CCard::rules()//s Function Displays the rules for Black Jack

{

cout<<\"\\欢迎来到21点扑克牌游戏\"<cout<<\"\\\下面是一些规则:\"<cout<<\"\\\1:你最多能拥有5张牌.\"<cout<<\"\\\2:如果你输了你将失去你的赌注.\"<cout<<\"\\\3:如果你赢了你将得到你赌注的二倍.\"<cout<<\"\\\4:电脑将在得到16点以上的牌时停止.\"<cout<<\"\\\\\";

pause();

}

//----------------------------------------------------------------------------------------

void CCard::BET(int &bet,int &money)

//This Function finds out how much money they wish to bet

{

cout<<\"\\\你有:$\"<cout<<\"\\\你要下多少赌注? \";

cin>>bet;

do{

if(bet>=money)

{

cout<<\"\\n输入错误,赌注不能超过资本! 请从新输入.\"<cin>>bet;

}

}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\"<cin>>ch;

if((ch!='Y')&&(ch!='y')&&(ch!='N')&&(ch!='n'))

{

do

{

cout<<\"您的选择错误,请从新选择.\"<cin>>ch;

}while((ch!='Y')&&(ch!='y')&&(ch!='N')&&(ch!='n'));

}

if((ch=='Y')||(ch=='y'))

{

money+=bet;

cout<<\"您现在有\"<cin>>bet;

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\\\正在发牌\"<wait(350);

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<<\"\\\你的牌点总数是:\"<cout<<\"[\"<cout<<\"[\"<cout<cout<<\"\\\电脑有一张\"<cout<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<<\"\\\这张牌是:\"<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<<\"这张牌是:\"<cout<<\"您是否要这张牌?y/n\"<cin>>ch;

if((ch=='Y')||(ch=='y'));

}while((ch=='N')||(ch=='n'));

if(card>10)

{

x=0.5;

}

else x=card;

total=total+x;

cout<<\"\\\这张牌是:\"<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<<\"这张牌是:\"<cout<<\"您是否要这张牌?y/n\"<cin>>ch;

if((ch=='N')||(ch=='n'))

{cout<<\"请输入你想要的点数.\"<cin>>card;

}

if(card>10)

{

c=0.5;

}

else c=card;

total=total+c;

cout<<\"\\\这张牌是:\"<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<<\"\\\这是平局.\"<draw++;

money+=bet;

}

if(player>21)

{

cout<<\"\\\很遗憾,你输了!\"<lose++;

}

else

{

if(cpu{

cout<<\"\\n\\\恭喜你,你赢了!\";

money=money+(bet*2);

win++;

}

}

if(cpu>21)

{

cout<<\"\\\电脑输了.\"<if(player<21)

{

cout<<\"\\n\\\恭喜你,你赢了!\";

win++;

money=money+(bet*2);

}

}

else

{

if(cpu>player)

{

cout<<\"\\\很遗憾,你输了!\"<lose++;

}

}

}

//-----------------------------------------------------------------

void CCard::replay(char &ans)

{

cout<<\"\\n\\\你想继续玩这个游戏吗y/n?:\";

cin>>ans;

if((ans!='Y')&&(ans!='y')&&(ans!='N')&&(ans!='n'))

{

do

{

cout<<\"您的选择错误,请从新选择.\"<cin>>ans;

}while((ans!='Y')&&(ans!='y')&&(ans!='N')&&(ans!='n'));

}

}

//-----------------------------------------------------------------

void CCard::print(int wins,int lose,int draw,int money)

{

cout<cout<<\"\\\\胜局:\"<cout<<\"\\\\负局 :\"<cout<<\"\\\\平局 :\"<cout<<\"\\\\你的剩余钱是 :\"<以前经常在手机,电脑上玩纸牌游戏。当时就很好奇这些游戏是怎么做出来?带着这个困饶我已久的大问号,一开始我就和我的伙伴投入了很大的热情,积极合作,遇到问题,一起讨论,一起实践。虽然一路上磕磕绊绊,但我们最终坚持了下来,在最后成功的时刻,我们都非常激动,非常自豪和有成就感!这次实践,让我们受益匪浅!深深感谢老师的教育和支持!!可能以后我们再没有交集,但我们依然在内心深深的祝你一路走好!!!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务