C++课程设计扑克牌21点Word文档格式.docx
- 文档编号:19264315
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:27
- 大小:28.17KB
C++课程设计扑克牌21点Word文档格式.docx
《C++课程设计扑克牌21点Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计扑克牌21点Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
题目要求超级玩家在输入密码后可以查看下一张牌,只需设计一成员函数,判定玩家是否继续要牌之前加入对玩家是否输入H键的判定,如果有输入则调用为处理玩家输入密码而单独编写的成员函数,在该函数中,首先判定玩家的输入密码是否正确,正确后才可以看下一张牌。
voidfuctions:
:
mima(char&
ans,double&
card,double&
player)//定义一个密码函数
{
ints1=1234,m1;
//定义两个整型并对一个进行赋值
请输入密码(四位数字):
;
//提示输入密码
cin>
>
m1;
//输入密码
if(s1==m1)//判断密码是否相符
{
cout<
\t\t\t下一张牌是:
//显示下一张牌
}
elsecout<
密码错误"
//提示密码错误
(3)题目要求玩家可以根据手上的牌决定是否下注,只需设计一成员函数,检查玩家的赌注累计不超过他所拥有的总资。
Duzhu(int&
money,int&
bett)//定义一个陪率函数
{
charans;
bett=0;
//将0赋值给赌注
你还要下注吗?
(是'
Y'
/否'
N'
):
//提示玩家是否还要下注
cin>
ans;
if((ans=='
y'
)||(ans=='
))//判断玩家是否还要下注
请输入你的赌注:
//提示玩家输入赌注
bett;
money=money-bett;
//计算出剩余的总资本
}
while(money<
0)//如果资本小于0,则赌注超过了资本
{//提示玩家错了和要求重新输入
money=money+bett;
//重新计算总资本
你不能下这么多的赌注!
//提示玩家下的赌注超出资本
请重新下注:
//提示重新下注
//计算总资本
}
源程序:
#include<
iostream.h>
string.h>
conio.h>
stdlib.h>
stdio.h>
time.h>
classPlaying_Card//扑克牌类,表示一张扑克牌的面值、花色和与之相联系的操作
private:
intm_Value;
//扑克的实际面值,用整型值表示,从1开始,1~13
charm_Face[3];
//扑克的数字大小,用字符串的形式表示,为A,2,3,…,10,J,Q,K
charm_Suit;
//扑克的花色(黑、红、梅、方)
public:
Playing_Card();
//构造函数,初始化扑克对象,实际上是将对象清零
voidshowcard();
//显示扑克牌对象的面值,花色
voidCard_Make(int);
//为一张扑克牌对象赋予特定的面值和花色
friendclassPerDeck;
//定义类PerDeck为类Playing_Card的友元类
};
classDeck//一副扑克(54张)类
Playing_Cardm_cardarray[54];
//一副扑克由54张扑克牌构成
intm_lastdelt;
//标记这副扑克牌删除的张数
Deck();
//构造函数,初始化一副扑克牌对象,实际上是将其内的54张扑克牌清零
voidMakeDeck();
//生成一副扑克,即对其内的54张扑克赋予正确的面值及花色
voidShowDeck();
//依次逐张显示这副牌
voidDeckShuff(int);
//洗牌,其参数是洗牌的次数
voidRemove_Card();
//将删除的那张扑克牌的内容清零,使这张牌在屏幕上显示不出来
//定义类PerDeck为类Deck的友元类
classPerDeck
Playing_Cardm_Card[20];
//最多有20张牌
intnNum;
//实际张数
PerDeck(){}
voidMakeperDeck(Deck&
int);
//对象初始化,参数为指定的那副牌及实际赋值个数
voidShow();
//显示
voidSortFace();
//按面值排序
voidSortSuit();
//按花色排序
intDelete(intn);
//删除序号为n的那一张
voidPerDeck:
MakeperDeck(Deck&
deck_3,intn)
nNum=n;
//初始化当前对象的实际张数
staticinti=0;
//标记为每个人发牌的其始位置
for(intk=0;
k<
nNum;
k++)m_Card[k]=deck_3.m_cardarray[i+k];
//用创建好的那副牌为当前对象发牌
i+=nNum;
//为一个人发牌后起始位置向后跳nNum个
Show()//显示玩家的牌面
intj=0;
if(nNum==0)cout<
已无牌!
//如果玩家无牌输出提示信息
else
for(inti=0;
i<
i++)
{
if(j%11==0)cout<
//每行输出11张牌
m_Card[i].showcard();
j++;
}
intPerDeck:
Delete(intn)
if(n>
=nNum)return0;
//判断是否删牌
for(inti=n;
i++)m_Card[i]=m_Card[i+1];
//删除指定的牌
nNum--;
//删除一张牌后将实际张数减1
return1;
SortFace()//按面值排序
Playing_Cardrecord;
//产生一个临时对象
for(intj=0;
j<
nNum-1;
j++)
for(inti=j+1;
if(m_Card[j].m_Value>
m_Card[i].m_Value)
{record=m_Card[i];
m_Card[i]=m_Card[j];
m_Card[j]=record;
SortSuit()//按花色排序
if(m_Card[j].m_Suit>
m_Card[i].m_Suit)
classPlayDeck
PerDeckm_deck[4];
//一共是四个人玩牌
PlayDeck(){}
voidPlayCard(Deck&
);
//用指定的那副牌对四个人分别赋值
intDeleteOne(introw,intcolumn);
//删除一张,参数为第row个人的第column张牌
intDeleteAll(int,int,int,int);
//删除一轮,参数分别代表四个人各删除哪一张
voidSortDeckFace();
//对整副牌面值排序
voidSortDeckSuit();
//对整副牌花色排序
voidPlayDeck:
PlayCard(Deck&
deck_2)//给四个人发牌
for(inti=0;
2;
i++)m_deck[i].MakeperDeck(deck_2,14);
//前两个人发14张牌
for(intj=2;
4;
j++)m_deck[j].MakeperDeck(deck_2,13);
//后两个人发13张牌
Show()//显示四个玩家的牌
玩家"
i+1<
的牌:
m_deck[i].Show();
endl<
intPlayDeck:
DeleteOne(introw,intcolumn)//删除一张,参数为第row个人的第column张牌
{returnm_deck[row-1].Delete(column-1);
DeleteAll(inta,intb,intc,intd)//删除一轮,参数分别代表四个人各删除哪一张
{returnm_deck[0].Delete(a-1)+m_deck[1].Delete(b-1)+m_deck[2].Delete(c-1)+m_deck[3].Delete(d-1);
SortDeckFace()//将四个人的牌按面值排序
m_deck[0].SortFace();
m_deck[1].SortFace();
m_deck[2].SortFace();
m_deck[3].SortFace();
SortDeckSuit()//将四个人的牌按花色排序
m_deck[0].SortSuit();
m_deck[1].SortSuit();
m_deck[2].SortSuit();
m_deck[3].SortSuit();
voidProgram_Init();
//程序初始化,输出初始化信息
intmain();
voidCenter_Text(char[]);
//将参数(字符串)在屏幕上显示在一行的中间位置
voidGet_Key();
//接收用户键入的字符
voidDeckMakeDriver();
/*程序的主要算法,内部调用多个函数,包括生成扑克牌,
洗牌,删除,排序等主要操作*/
intgetRandInt(intmin,intmax);
//取得在两参数间的整型随机值
voidprog_close();
//暂停程序运行,供用户查看中间运行结果
intmain()
srand((unsigned)time(NULL));
//初始化随机数种子
Program_Init();
//显示程序初始化提示信息
DeckMakeDriver();
//调用程序的主要算法,包含程序的主要操作过程
prog_close();
//暂停程序运行,供用户查看运行结果
Playing_Card:
Playing_Card()//扑克牌对象的构造函数
inti;
for(i=0;
3;
)//初始化扑克牌的面值,清零
m_Face[i]='
'
i++;
m_Suit='
//初始化扑克牌的花色,清零
m_Value=0;
voidProgram_Init()//程序一开始运行的提示信息
Center_Text("
扑克牌游戏\n"
Get_Key();
voidGet_Key()//从键盘接收用户键入的字符
单击任意键继续..."
getch();
voidPlaying_Card:
showcard()//在屏幕上显示一张扑克牌的面值及花色
{
"
m_Face;
//显示面值
cout.width
(1);
m_Suit;
//显示花色
voidCenter_Text(charShellText[80])//将函数参数(字符串)在屏幕上居中显示
intlength;
intcenter;
length=strlen(ShellText);
//取得欲显示字符串的大小
center=(80-length)/2;
//整个屏幕的列数为80,取得字符串在该行的其始位置
for(;
center!
=0;
center--)//在字符串前输出空格
cputs("
cputs(ShellText);
Card_Make(intnum)/*根据参数num生成一张扑克牌,num不同,生成的
面值或花色不同*/
inti=0;
charj;
intface_num=num%13;
//扑克牌的面值,从0到12
if(num==52)strcpy(m_Face,"
//大王花色赋为S
elseif(num==53)strcpy(m_Face,"
//小王花色赋为B
switch(face_num)//当面值大于10时,用J,Q,K代替,面值为0,用A代替
case0:
strcpy(m_Face,"
A"
break;
case9:
10"
case10:
J"
case11:
Q"
case12:
K"
default:
j=char(face_num+49);
//其它的面值,用对应的ASCII码表示
if(i<
3)
i++;
m_Face[i]=j;
i++;
m_Face[i]=NULL;
break;
//扑克牌的花色,分别用红桃,黑桃,梅花,方块的ASCII码替代
if(num<
=12)m_Suit=6;
//红桃
if(num>
12&
&
num<
=25)m_Suit=3;
//黑桃
25&
=38)m_Suit=5;
//梅花
38&
=51)m_Suit=4;
//方块
if(num==52)m_Suit=1;
//小王
if(num==53)m_Suit=2;
//大王
if(num==52)m_Value=14;
//小王面值赋为14
elseif(num==53)m_Value=15;
//大王面值赋为15
elsem_Value=face_num+1;
//A的面值实际上用1表示,其余面值依次加1
voidDeckMakeDriver()//主要程序操作部分,调用多个函数,完成生成一副牌,洗牌,显示,删除等操作
Deckdeck_1;
//生成一副扑克牌对象,内有54张牌,此时所有的扑克牌均未赋值
PlayDeckman;
//产生一局牌
deck_1.MakeDeck();
//对54张扑克牌赋值
deck_1.ShowDeck();
//逐一显示这54张牌
Get_Key();
//暂停运行,供用户查看显示结果
deck_1.DeckShuff(250);
//对生成的这副牌洗牌250次
//逐一显示这洗好的54张牌
man.PlayCard(deck_1);
//发牌
intMemory=0;
)
man.Show();
//显示四个人的牌
Center_Text("
\1\1\1扑克牌菜单\1\1\1\n"
\31:
删除一张牌\3\n"
\42:
删除一轮牌\4\n"
\53:
花色排序\5\n"
\64:
面值排序\6\n"
\15:
退出程序\1\n"
请选择:
\n"
intn;
charstr[30];
aa:
n;
cin.getline(str,30);
if(strlen(str)>
=1)
输入错误,请重新输入:
gotoaa;
if(!
cin)
charstr[30];
cin.clear();
cin.getline(str,30);
switch(n)//判断执行的操作
case1:
//执行删除一张牌的操作
inta,b;
charstr[30];
bb:
cout<
请输入删除第几个人的第几张牌"
cin>
a>
b;
if(strlen(str)>
=2)
{
cout<
gotobb;
}
while(!
charstr[30];
cin.clear();
cin.getline(str,30);
Memory+=man.DeleteOne(a,b);
break;
case2:
//执行删除一轮牌的操作
intc,d,e,f;
charstr1[30];
cc:
请依次输入删除四个人的第几张牌"
cin>
c>
d>
e>
f;
cin.getline(str1,30);
if(strlen(str1)>
gotocc;
gotocc;
Memory+=man.DeleteAll(c,d,e,f);
case3:
man.SortDeckSuit();
//执行按花色排序
case
4:
man.SortDeckFace();
//执行按面值排序
case5:
exit(0);
//执行退出程序
default:
system("
cls"
//清屏
if(Memory==54)break;
//判断循环结束条件
}
v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 扑克牌 21
![提示](https://static.bdocx.com/images/bang_tan.gif)