基于C++的21点游戏.docx
《基于C++的21点游戏.docx》由会员分享,可在线阅读,更多相关《基于C++的21点游戏.docx(21页珍藏版)》请在冰豆网上搜索。
![基于C++的21点游戏.docx](https://file1.bdocx.com/fileroot1/2023-1/5/e04a6535-b5d0-4de1-abde-4eb3aa9faad6/e04a6535-b5d0-4de1-abde-4eb3aa9faad61.gif)
基于C++的21点游戏
/*游戏名称:
21点益智游戏
创作团队:
软日1010班游戏设计小组(之一)
负责人:
陈振涛
时间:
2011—05—06
*/
#include
#include"Poker.h"
#include"Player.h"
#include"com_player.h"
#include//////洗牌
#include
#include
#include
#include
#include/////////////用于文件存在性检测
usingnamespacestd;
//usingios:
:
in;
//usingios:
:
out;
//usingios:
:
app;
externintPoker_num=0;
externvectorpoke;///////////////生命为全局变量,不可初始化
//externconstchar*const_person;
voidcreat_Poker(Poker*name);
voidset_Poker(Poker*p);
voidre_play(Poker*name);
charde_cin();
voidoutput_information(Player&p1,constchar*pp);
boolinput_information(Player&p,constchar*pp,stringmima);
//boolnew_output_information(Player&p,constchar*pp);
intmain()
{
creat_Poker(&poke[0]);//返回指针,,创建扑克
set_Poker(&poke[0]);//返回指针,洗牌
//for(intjp=0;jp//{
//poke[jp].show();
民//}//////////////////////////////用于展示一幅完整的扑克
chardd;
intii=0;//////////////专用的循环变量
charnew_name[32];
stringname1;
stringmima1="aa";
stringmima2="bb";
fstreamin_out;
vectorpoke(52,0);
com_playercompture_one;
Playerperson_one;
cout<<"新用户?
(Y/N)"<dd=de_cin();
if(dd=='y'||dd=='Y')
{
for(;;)
{
cout<<"创建新角色输入用户名,密码"<cin>>name1;
//intii=0;
cout<for(intii=0;ii{
new_name[ii]=name1[ii];
}
cout<<"ii"<new_name[ii]='.';
new_name[ii+1]='t';
new_name[ii+2]='x';
new_name[ii+3]='t';
new_name[ii+4]='\0';
cout<constchar*const_person=const_cast(new_name);
if(!
access(const_person,0))
{
cout<<"存在性检测结果:
"<cout<<"对不起,该用户名已存在,请重新注册"<!
!
!
!
!
!
!
!
continue;
}///////c存在返回0不存在返回一u
else
{
cout<<"恭喜您,该用户可用"<//break;
}
//cout<//if(!
new_output_information(person_one,const_person))
//break;
//else
//continue;
cout<<"请输入密码"<for(;mima1!
=mima2;)
{
cout<<"输入密码"<cin>>mima1;
cout<<"确认密码"<cin>>mima2;
if(mima1!
=mima2)
cout<<"不匹配,重新输入"<}
output_information(person_one,const_person);
break;
}
person_one.set_new(name1,mima1);
}
else
{
for(;;)
{
cout<<"输入用户名"<cin>>name1;
intii=0;
for(ii=0;ii{
new_name[ii]=name1[ii];
}
//new_name[ii]='.';
//new_name[ii+1]='t';
//new_name[ii+2]='x';
//new_name[ii+3]='t';
new_name[ii]='\0';
cout<<"输入密码"<cin>>mima1;
constchar*const_person1=const_cast(new_name);
boolde_new=input_information(person_one,const_person1,mima1);
if(de_new)
{
cout<<"用户信息匹配成功开始游戏"<break;
}
else
cout<<"对不起,用户名或密码错误重新输入"<}
}/////////////////////////////////////////////////////游戏开始阶段玩家信息初始化工做//////////////////////////////////////
do{
cout<<"游戏开始"<compture_one.cPoker_push();
re_play(&poke[0]);
compture_one.cPoker_push();
re_play(&poke[0]);////开始阶段每人两张牌
person_one.Poker_push();
re_play(&poke[0]);
person_one.Poker_push();
re_play(&poke[0]);
//////////////////////////////////////游戏开始阶段没人两张牌?
/////////////////////////////////////////////////////////
while(compture_one.cget_sum()<15)
{
compture_one.cPoker_push();
re_play(&poke[0]);
//getchar();
}
compture_one.cshow_first();
for(;;)
{
person_one.show_Poker();
charde_player;
cout<<"是否要牌(Y/N)"<de_player=de_cin();
if(de_player=='Y'||de_player=='y')
{
person_one.Poker_push();
re_play(&poke[0]);
}
else
break;
}
////////////////发牌阶段、////////////////////////
cout<<"电脑";
compture_one.cshow_Poker();
cout<cout<cout<<"玩家";
person_one.show_Poker();
cout<cout</////////////////k开始判断胜负、、、、、、、、、、、、、、
if(person_one.get_sum_int()>21&&compture_one.cget_sum()<22)
{
cout<<"电脑胜利"<}
elseif(person_one.get_sum_int()<22&&compture_one.cget_sum()>21)
{
cout<<"玩家胜利"<person_one.Player_win();
}
elseif(person_one.get_sum_int()>21&&compture_one.cget_sum()>21)
{
cout<<"平分秋色"<}
else
{
if(person_one.get_sum_int()>compture_one.cget_sum())
{
cout<<"玩家胜利"<person_one.Player_win();
}
elseif(person_one.get_sum_int()==compture_one.cget_sum())
{
cout<<"平分秋色"<}
else
cout<<"玩家失败"<}
//////////////胜负已经定更新用户信息//////////////
person_one.rename_change();
output_information(person_one,new_name);
cout<<"信息成功更新,存储信息已为最新"<compture_one.delete_all();
person_one.delete_all();
person_one.show_in();
//getchar();
cout<<"是否继续?
(Y/N)"<dd=de_cin();
if(dd=='y'||dd=='Y')
{
cout<cout<cout<<"新的回合"<cout<cout<}
}while(dd=='y'||dd=='Y');
cout<<"谢谢游戏,再见"<return0;
}
///////////////////////////////////////////////
///////////洗牌
voidset_Poker(Poker*p)
{
//cout<<"洗牌"<for(intkp=0;kp<52;kp++)
srand(time(0));
intt=0;
Pokertemp;
for(intip=0;ip<52;ip++)
{
t=rand()%52;
temp=p[ip];
p[ip]=p[t];
p[t]=temp;
}
Poker_num=0;//////重置当前牌数
}
//////初始化扑克
voidcreat_Poker(Poker*name)
{
for(intj=0;j<52;j++)
{
name[j].hua=j/13+3;
name[j].num=j%13+49;//转换成为字符型
//if(name[])
switch(name[j].num)
{
case'1':
name[j].num='A';
break;
case':
':
name[j].num='1';
break;
case';':
name[j].num='J';
break;
case'<':
name[j].num='Q';
break;
case'=':
name[j].num='K';
break;
}
}
}
voidre_play(Poker*name)
{
//
cout<<52-Poker_num<<"当前扑克张数"<if(Poker_num>51)
{
set_Poker(name);
}
}///////////////扑克用完之后的处理,每次发牌都会检验扑克是否用完
charde_cin()
{
charde;
do{
cin>>de;
if(!
(de=='n'||de=='N'||de=='Y'||de=='y'))
cout<<"输入有误重新输入"<}while(!
(de=='n'||de=='N'||de=='Y'||de=='y'));
returnde;
}
/////////////////输入用户信息。
来源:
文件///////////
boolinput_information(Player&p,constchar*pp,stringmima)
{
//cout<fstreaminput;
booldecide;
input.open(pp,ios:
:
in);
//cout<<"成功性检测吧读取"<if(!
input.good())/////////此时打开成功返回1
{
cout<<"文件打开失败,退出程序"<exit(-1);/////////////////////文件打开失败退出程序
}
input>>p.name>>p.mima>>p.score>>p.rename;
if(p.mima==mima)
{
decide=1;
//break;
}
else
{
decide=0;
}
input.close();
returndecide;////返回真值说明用户名匹配成功
}
///////////////////写入用户信息,目标用户文件///////////
voidoutput_information(Player&p,constchar*pp)
{
//Playerp;
//cout<fstreamin_out;
in_out.open(pp,ios:
:
out);
//cout<<"成功性检测吧xiechu"<if(!
in_out.good())/////////此时打开成功返回1
{
cout<<"文件打开失败,退出程序"<exit(-1);/////////////////////文件打开失败退出程序
}
else
{
in_out<
cout<<"信息保存成功"<}
in_out.close();
}
///////////新用户用户名合法性检测
//
//////////关与游戏升级,计划在2.0版本加入密码保护功能,3,0版本争取写出图形界面啊、//////////////
头文件三个
//Poker.h:
interfaceforthePokerclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_POKER_H__6288609E_E8DA_4234_982B_1321FCC9FC06__INCLUDED_)
#defineAFX_POKER_H__6288609E_E8DA_4234_982B_1321FCC9FC06__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
//#include
#include
classPoker
{
charnum;
charhua;
public:
Poker(charnum=0,charhua=0);
voidshow();
intgetnum();
friendvoidcreat_Poker(Poker*name);
virtual~Poker();
};
#endif//!
defined(AFX_POKER_H__6288609E_E8DA_4234_982B_1321FCC9FC06__INCLUDED_)
//Player.h:
interfaceforthePlayerclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_PLAYER_H__26240C16_0DED_48BE_AE3E_E4FACBC7B7E9__INCLUDED_)
#defineAFX_PLAYER_H__26240C16_0DED_48BE_AE3E_E4FACBC7B7E9__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#include
#include"Poker.h"
#include
#include
usingnamespacestd;
usingstd:
:
string;
classPlayer
{
stringname;
stringmima;
stringrename;
unsignedintscore;
vectorhand_Poker;
public:
Player(stringname="",stringmima="",intscore=0,stringrename="");
//Player(Player&a);
voidshow_in();//输出信息
voidshow_Poker();//输出扑克
voidrename_change();//适时改变称号
intget_sum_int();//得到点数之和
voidset_new(stringname="0",stringmima="0",intscore=0);//设置新成员
voidPoker_push();//拿牌
voidPlayer_win();
friendboolinput_information(Player&p,constchar*pp,stringmima);
friendvoidoutput_information(Player&p,constchar*pp);
friendboolnew_output_information(Player&p,constchar*pp);
voiddelete_all();
virtual~Player();
};
#endif//!
defined(AFX_PLAYER_H__26240C16_0DED_48BE_AE3E_E4FACBC7B7E9__INCLUDED_)
//com_player.h:
interfaceforthecom_playerclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_COM_PLAYER_H__AB2B96C5_874D_47A0_ADEF_8FFD6E9F9049__INCLUDED_)
#defineAFX_COM_PLAYER_H__AB2B96C5_874D_47A0_ADEF_8FFD6E9F9049__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#include
#include"Poker.h"
usingnamespacestd;
classcom_player
{
vectorchand_Poker;
public:
com_player();
voidcshow_Poker();
intcget_sum();
voidcPoker_push();//拿牌
voidcshow_first();
voiddelete_all();
virtual~com_player();
};
#endif//!
defined(AFX_COM_PLAYER_H__AB2B96C5_874D_47A0_ADEF_8FFD6E9F9049__INCLUDED_)
原文件
//Poker.cpp:
implementationofthePokerclass.
//
///////////////////////////////////////////////