南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx

上传人:b****3 文档编号:18288842 上传时间:2022-12-15 格式:DOCX 页数:26 大小:57.01KB
下载 相关 举报
南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx_第1页
第1页 / 共26页
南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx_第2页
第2页 / 共26页
南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx_第3页
第3页 / 共26页
南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx_第4页
第4页 / 共26页
南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx

《南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx》由会员分享,可在线阅读,更多相关《南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

南京理工大学 C++课程设计 扑克牌游戏多文件Word文档格式.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1