南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx
《南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx》由会员分享,可在线阅读,更多相关《南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
iostream>
string.h>
//编译器是VS2017
time.h>
stdlib.h>
stdio.h>
conio.h>
Class.h
#pragmaonce
#include"
all.h"
usingnamespacestd;
classPerDeck;
classPlayingCard
{
private:
intnValue;
//扑克牌实际面值
charachFace[3];
//扑克牌字符串A,2,......10,J,Q,K
charchSuit;
//扑克牌花色
public:
friendclassPerDeck;
PlayingCard();
//将对象清零
voidShowCard();
//显示面值花色
voidCardMake(int);
//给一张扑克牌赋值(面值,花色)
};
classDeck
PlayingCardm_cardarray[54];
intnLastDelt;
Deck();
voidMakeDeck();
//将52张牌清零(没有大,小王)
voidDealOne();
//删除开头一张牌
voidShowDeck();
//依次逐张显示这副牌
voidDeckShuff(int);
//用于洗牌,参数是洗牌次数
voidRemoveCard();
//清零删除掉的那张牌
classPerDeck
PlayingCardmyCard[20];
intnNum;
PerDeck(){}
voidMakePerDeck(Deck&
int);
voidShow();
voidSortFace();
voidSortSuit();
intDelete(intn);
classPlayDeck
PerDeckmyDeck[4];
PlayDeck(){}
voidPlayCard(Deck&
);
intDeleteOne(introw,intcolumn);
intDeleteAll(int,int,int,int);
voidSortDeckFace(int);
voidSortDeckSuit(int);
voids(int);
voidProgramInit();
//初始化,并输出信息
voidCenterText(charShellText[80]);
//居中显示
intGetNumber();
//键入整数型
charGetKey();
//键入字符串型
voidDeckMakeDiver();
//主要算法(生成扑克牌,洗牌,删除等)
intGetRandInt(intmin,intmax);
//在min到max间选随机值
voidProgClose();
//暂停,供用户查看中间运行结果
main函数.cpp
class.h"
intmain(void)
srand((unsigned)time(NULL));
intnCardNum=0;
ProgramInit();
DeckMakeDiver();
ProgClose();
return1;
}
Playdeck.cpp
#include"
voidPlayDeck:
:
PlayCard(Deck&
k)
inta,b,c,d;
charg[29]={"
依次输入四位玩家手里的牌数:
"
};
CenterText(g);
cout<
<
endl;
cin>
>
a>
b>
c>
d;
if(a+b+c+d>
54)
{
charg[]={"
超过牌的张数,退出游戏。
CenterText(g);
exit(0);
}
myDeck[0].MakePerDeck(k,a);
myDeck[1].MakePerDeck(k,b);
myDeck[2].MakePerDeck(k,c);
myDeck[3].MakePerDeck(k,d);
Show()
chara[6]={"
玩家1"
charb[6]={"
玩家2"
charc[6]={"
玩家3"
chard[6]={"
玩家4"
CenterText(a);
myDeck[0].Show();
CenterText(b);
myDeck[1].Show();
CenterText(c);
myDeck[2].Show();
CenterText(d);
myDeck[3].Show();
intPlayDeck:
DeleteOne(introw,intcolumn)
myDeck[row-1].Delete(column);
DeleteAll(inta,intb,intc,intd)
myDeck[0].Delete(a);
myDeck[1].Delete(b);
myDeck[2].Delete(c);
myDeck[3].Delete(d);
SortDeckFace(intb)
myDeck[b-1].SortFace();
SortDeckSuit(intb)
myDeck[b-1].SortSuit();
s(inta)
myDeck[a-1].Show();
Deck.cpp
usingstd:
ostream;
voidDeck:
MakeDeck()//对生成的52张牌逐个赋值
nLastDelt=53;
//51
while(nLastDelt>
-1)
m_cardarray[nLastDelt].CardMake(nLastDelt);
nLastDelt--;
ShowDeck()//显示一副扑克牌
chara[13]={"
完整的一副牌"
intnIndex=nLastDelt+1;
intnNewLine=0;
while(nIndex<
=53)//51
if(nNewLine%11==0)cout<
m_cardarray[nIndex].ShowCard();
nNewLine++;
nIndex++;
DeckShuff(inttimes)//洗牌算法
chara[11]={"
洗牌......"
intx,nSplit;
for(x=0;
x<
=times;
x++)
nSplit=GetRandInt(20,35);
DeckTopDeck;
DeckBottomDeck;
inti;
intnBottomNum=1;
intnTopNum=1;
for(i=0;
i<
=nSplit-1;
)
{
TopDeck.m_cardarray[nTopNum]=this->
m_cardarray[i];
nTopNum++;
i++;
}
for(i=(nSplit);
54;
)//52
BottomDeck.m_cardarray[nBottomNum]=this->
nBottomNum++;
intnOutNum=0;
intnNumToTop;
intnNumToBottom;
intj;
inth=0;
nBottomNum=54-nSplit;
//52
nTopNum=nSplit;
while(nOutNum<
53)//51
nNumToTop=GetRandInt(2,7);
nNumToBottom=GetRandInt(2,7);
for(j=0;
j<
=nNumToBottom;
j++)
{
if(nBottomNum>
0)
{
this->
m_cardarray[nOutNum]=BottomDeck.m_cardarray[nBottomNum];
nOutNum++;
nBottomNum--;
}
for(h=0;
h<
=nNumToTop;
h++)
if((nTopNum>
0)&
&
(nOutNum<
=54))//52
{
this->
m_cardarray[nOutNum]=TopDeck.m_cardarray[nTopNum];
nOutNum++;
nTopNum--;
}
}
this->
nLastDelt=-1;
RemoveCard()//将删除的那张牌清零
m_cardarray[nLastDelt]=PlayingCard();
//清零
DealOne()//从一副扑克牌中删除一张牌
if(nLastDelt!
nLastDelt++;
cout.width(5);
cout<
"
删除牌:
;
m_cardarray[nLastDelt].ShowCard();
RemoveCard();
else
这副牌全部删除完了"
ProgClose();
Deck:
Deck()//初始化一副扑克牌,将52张扑克牌均清零
intlastdelt=0;
for(inti=0;
=53;
i++)//51
m_cardarray[i]=PlayingCard();
Main调用的函数.cpp
voidProgramInit()//程序一开始的提示信息
扑克牌游戏"
charb[25]={"
单击<
Return>
键开始......"
endl<
'
\n'
cin.get();
charGetKey()//从键盘接收一个字符,将其作为函数返回值
charx;
x=cin.get();
returnx;
voidCenterText(charShellText[80])//居中算法
intnCenter;
intnLength;
nLength=strlen(ShellText);
nCenter=(80-nLength)/2;
for(;
nCenter!
=0;
nCenter--)
ShellText;
intGetNumber()//从键盘接收一个整数值,作为函数返回值
chara[40]={"
请输入一个在0到51之间的整数,输入52退出."
intnInputInteger=0;
nInputInteger;
returnnInputInteger;
voidProgClose()//程序暂停,按任意键继续
键继续......"
<
GetKey();
voidDeckMakeDiver()//主要程序操作部分,调用多个函数,包含完整生成一副牌,洗牌,显示,删除等操作
Deckdeck_1;
deck_1.MakeDeck();
deck_1.ShowDeck();
deck_1.DeckShuff(250);
chary;
PlayDeckF;
F.PlayCard(deck_1);
F.Show();
intg=0;
do
chara[9]={"
游戏规则"
charb[23]={"
删除一位玩家的牌输入1"
charc[23]={"
删除四位玩家的牌输入2"
chard[23]={"
按牌的面值排序输入3"
chare[23]={"
按牌的花色排序输入4"
charf[23]={"
显示四位玩家手牌输入5"
charq[23]={"
按N(n)退出游戏"
CenterText(a);
CenterText(b);
CenterText(c);
CenterText(d);
CenterText(e);
CenterText(f);
CenterText(q);
cin>
g;
if(g==1)
intj,k;
charh;
cout<
请输入删除玩家的编号和牌号(从左往右数的第N张)"
cin>
j>
k;
F.DeleteOne(j,k);
是(Y)否(N)显示删除后的手牌?
h;
h=toupper(h);
if(h=='
Y'
)F.s(j);
if(g==2)
intw,x,h,z;
chary;
请依次输入欲删除各玩家牌的序号。
w>
x>
h>
z;
F.DeleteAll(w,x,h,z);
是(Y)否(N)显示删除后玩家的牌?
y;
y=toupper(y);
if(y=='
)F.Show();
if(g==3)
inth;
请输入需要排序的玩家"
F.SortDeckFace(h);
是(Y)否(N)显示排序后的牌?
)F.s(h);
if(g==4)
intx;
请输入需要排序玩家的序号"
x;
F.SortDeckSuit(x);
)F.s(x);
if(g==5)
F.Show();
if(g==78||g==110)
gotoloop;
是(Y)否(N)回到游戏规则菜单?
y=toupper(y);
}while(y=='
loop:
intGetRandInt(intnMin,intnMax)//返回min至max之间的任意一值(实际上是“洗牌算法”s的一部分)
intnNumToReturn;
nNumToReturn=rand();
nNumToReturn=nNumToReturn%(nMax-nMin+1)+nMin;
returnnNumToReturn;
Playingcard.cpp
PlayingCard:
PlayingCard()//扑克牌对象的构造函数
for(inti=1;
=3;
achFace[i]='
i++;
chSuit='
nValue=0;
voidPlayingCard:
ShowCard()//在屏幕上显示一张扑克牌的面值及花色
achFace;
cout.width
(1);
chSuit;
CardMake(intnNum)//根据参数nNum生成一张扑克牌,nNum不同,生成的面值或花色不同
inti=0;
charj;
intnFaceNum=nNum%13;
if(nNum==52)
strcpy(achFace,"
S"
gotoloop;
if(nNum==53)
B"
switch(nFaceNum)
case0:
strcpy(achFace,"
A"
break;
case9:
10"
case10:
J"
case11:
Q"
case12:
K"
default:
j=char(nFaceNum+49);
if(i<
3)
achFace[i]='
i++;
achFace[i]=j;
achFace[i]=NUL