一个用C++编的21点纸牌游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//模拟21点扑克游戏
//------代码------
#include
#include
#include
#include
#include
using namespace std;
class CCard
{
private:
int naPip[5];//一共五张牌
int nNumber;//发了多少张牌
int nDollar;//有多少钱
int nGamble;//赌注
int nWin;//赢局数
int nLose;//输局数
int nDraw;//平局数
public:
CCard();//构造函数,初始化
void FirsPlayTwo();//最初两章牌
int GetNumber();//返回牌数
int GetPip();//返回点数
void DisplayPip();//一次全部显示点数
void DisplayPip(int);//除了第一张牌,依次全部显示牌面点数(针对计算机牌的显示)
void TurnPlay();//出第一章牌
void Win();//赢了计算赌注
void Lose();//输了
void Draw();//平局
int SetGamble(int);//设置赌注,赌本不够返回-1
int GetMoney();//返回钱数
void DisplayInfo();//打印必要的信息
int GetCurrentCard();//返回当前点数
} ;
struct User
{char username[10];
char password[10];
}user;
////////////////////////////////////////////
CCard::CCard()//构造函数初始化数据成员
{ nNumber=0;
nDollar=100;//初始化赌注为100RMB
for(int i=0;i<5;i++)
{
naPip[i]=0;
}
nGamble=0;
nWin=nLose=nDraw=0;
}
///////////////////
int CCard::GetMoney(void)
{return nDollar;}
///////////////////////
void CCard::DisplayInfo()//打印必要信息
{
cout<<"您一共玩了"<
/////////////////////////////
int CCard::SetGamble(int gamble)
{
if(nDollar-gamble<0)
return -1;
if(gamble<0)
{
if(nDollar-20<0)
return -1;
nGamble=20;
}
else
nGamble=gamble;
nDollar-=nGamble;
return 0;
}
///////////////////////////////////
void CCard::FirsPlayTwo()//最初两章牌
{
naPip[0]=rand()%13+1;
naPip[1]=rand()%13+1;
nNumber=2;
}
////////////////////////////
int CCard::GetCurrentCard()//返回当前牌点
{
return naPip[nNumber-1];
}
/////////////
int CCard::GetNumber()//返回牌数
{return nNumber;}
////////////
int CCard::GetPip()//返回点数
{
int nPip=0;
for(int i=0;i
if(naPip[i]>=0)
nPip+=10;
else
nPip+=naPip[i];
}
return nPip;
}
//////////////////
void CCard::DisplayPip()//一次显示牌面点数
{
for(int i=0;i
//////////////////////
void CCard::TurnPlay()//出一张牌
{
nNumber++;
naPip[nNumber-1]=rand()%13+1;
}
//////////////////////////
void CCard::Win()//赢了计算赌注
{ cout<<"赢家牌面:";
DisplayPip();
cout<<"片面点数:"<
nWin++;
cout<<"赌本:¥"<
lar<<" 赢了"<
///////////////////////////////
void CCard::Lose()
{ nLose++;
cout<<"输家牌面:";
DisplayPip();
if(GetPip()>21)
cout<<"哇~,我靠,爆了~!\n";
else
cout<<"牌面点数: "<
////////////////////////////////
void CCard::Draw()
{
nDraw++;
nDollar+=nGamble;
cout<<"平局牌面:";
DisplayPip();
if(GetPip()>21)
cout<<"shit~爆了!\n";
else
cout<<"牌面数: "<
//////////////////////////////////
void CCard::DisplayPip(int)
//除了第一张牌,一次全部显示牌面的点数(针对计算机显示)
{ cout<<"[*]"<<'\t';//不显示第一章
for(int i=1;i
/////////////////////////////
void DisplayRule(void)
{
cout<<"\t欢迎进入21点游戏世界!\n\n";
cout<<"\t游戏规则:\n";
cout<<"\t1.玩家最多可要5张牌\n";
cout<<"\t2.如果牌数超过21点,则爆点,自动判输;\n";
cout<<"\t3.赢家可得双倍赌注;\n";
cout<<"\t4.电脑在牌点大于等于16时不在要牌。\n\n";
cout<<"\t\t ------------------------------------------\n";
cout<<"\t\t| Ver:1.00 作者:独孤剑客 QQ:410139419 |\n";
cout<<"\t\t ------------------------------------------\n";
cout<
////////////////////////////
void Judge(CCard &cpu,CCard &player)//判断输赢
{
cout<
{
cout<<"\n\n平局!\n";
cout<<"计算机数据:\t";
cpu.DisplayPip();
cout<<"牌面点数:"<
player.Draw();
cout<
else if((cpu.GetPip()>21)||(player.GetPip()>cpu.GetPip()&&player.GetPip()<=21))
{
cout<<"\n\n恭喜你,你赢了!\n";
cout<<"计算机数据:\t";
cpu.DisplayPip();
cout<<"牌面点数:"<
player.Win();
cout<
else
{
cout<<"\n\n很遗憾,您输了!\n";
cout<<"计算机数据:\t";
cpu.DisplayPip();
cout<<"牌面点数:"<
player.Lose();
cout<
}
///////////////////////////
void PlayTurn(CCard &cpu,CCard &player)//玩一局
{
char chChoice;
int b1Cpu=1,b1Player=1;//判断是否要牌
cpu.FirsPlayTwo();//计算机和玩家各要两张牌
player.FirsPlayTwo();
do
{ cout<<"你的牌
点位:\t";
player.DisplayPip();
cout<<"计算机的牌点为:\t";
cpu.DisplayPip();
cout<<"你的牌面点数:"<
{
cout<<"\n\n你是否要继续要牌(Y/N)?";
cin>>chChoice;
if((chChoice=='Y'||chChoice=='y'))
{ if(player.GetNumber()<5)
player.TurnPlay();
cout<<"你要的是这两张牌: "<
b1Player=0;
}
else
{ cout<<"对不起,你已经要了5张牌,不能再要牌了!";
b1Player=0;
}
}
if(chChoice=='N'||chChoice=='n')
b1Player=0;
if(cpu.GetPip()<16&&cpu.GetNumber()<5)
{
cpu.TurnPlay();
cout<<"计算机要牌的点数:"<
else
b1Cpu=0;
if(b1Cpu&&player.GetNumber()<5&&player.GetPip()<21)
b1Player=1;
}while(b1Cpu||b1Player);
Judge(cpu,player);//判断输赢
return;
}
/////////////////////
void disaplay(char *filename)
{fstream infile(filename,ios::in);
if(!infile)
{
cout<<"Open file fail!"<
}
char c;
while(infile.get(c))
{ _sleep(10);
cout.put(c);}
cout<
}
/////////////////////////////
void disaplay_1(char *filename)
{fstream infile(filename,ios::in);
if(!infile)
{
cout<<"Open file fail!"<
}
char c;
while(infile.get(c))
{ _sleep(40);
cout.put(c);}
cout<
}
////////////////////////////////
void Selet()
{cout<<"是否跳过游戏介绍(Y/N):";
char se;
cin.get(se);
if(se=='n'||se=='N')
{disaplay("新建 文本文档.txt");
cout<<"\t铸造完成"<
}
else
return;
}
///////////////////----见证奇迹-----//////////////
int main(void)
{ srand((unsigned)time(NULL));//初始化随机种子
CCard cpu,player;
int blLogic;
int nMoney;//下注数目
DisplayRule(); //打印规则
Selet();
char chChoice;
cout<<"是否现在开始游戏(Y/N)?\n";
cin>>chChoice;
while(chChoice=='Y'||chChoice=='y')
{ do
{ cout<<"你现在有赌本:¥"<
cin>>nMoney;
blLogic=player.SetGamble(nMoney);
if(blLogic)
cout<<"你的赌本不够,请重新下注!\n";
}while(blLogic);
PlayTurn(cpu,player);//玩一局
cout<<"是否继续21点游戏(Y/N)?\n";
cin>>chChoice;
}
player.DisplayInfo();
cout<<"\n\n好孩子啊~!赌博害人害己。还是踏踏实实的学习吧~..\n";
cout<<"欢迎再次使用本程序\n\n\n";
return 0;
}