完整word版C++课程设计扑克牌游戏.docx

上传人:b****5 文档编号:5984312 上传时间:2023-01-02 格式:DOCX 页数:25 大小:22.46KB
下载 相关 举报
完整word版C++课程设计扑克牌游戏.docx_第1页
第1页 / 共25页
完整word版C++课程设计扑克牌游戏.docx_第2页
第2页 / 共25页
完整word版C++课程设计扑克牌游戏.docx_第3页
第3页 / 共25页
完整word版C++课程设计扑克牌游戏.docx_第4页
第4页 / 共25页
完整word版C++课程设计扑克牌游戏.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

完整word版C++课程设计扑克牌游戏.docx

《完整word版C++课程设计扑克牌游戏.docx》由会员分享,可在线阅读,更多相关《完整word版C++课程设计扑克牌游戏.docx(25页珍藏版)》请在冰豆网上搜索。

完整word版C++课程设计扑克牌游戏.docx

完整word版C++课程设计扑克牌游戏

//*******************preprocessordirectives***********************

#include

#include

#include

#include

#include

#include

//usedtoseedtherandomnumbergenerator

//*******************************扑克类****************************************

classPlaying_Card

{

friendclassPerDeck;

public:

intm_Value;//扑克的实际面值,用整型值表示,从1开始,1~13

charm_Face[3];//扑克的数字大小,用字符串的形式表示,为A,2,3,....,10,J,Q,K

intorder;

charm_Suit;//扑克的花色(黑、红、梅、方)

public:

Playing_Card();//构造函数,初始化扑克牌对象,实际上是将对象清零

voidshowcard();//显示扑克牌对象的面值,花色

voidCard_Make(int);//为一张扑克牌对象赋予特定的面值和花色

voidAskPaidui();//询问是否进行扑克小人游戏

voidPaidui();//扑克小人排序游戏

intgetCount();

};

//***************************一副扑克(54张)**************************

classDeck

{

friendclassPerDeck;

friendclassPlayDEck;

public:

Playing_Cardm_cardarray[54],temp;//一副扑克牌有54张扑克牌组成(包括大小王)

intm_lastdelt;//标记这副扑克牌删除的张数

public:

Deck();//构造函数,初始化一副扑克牌对象,实际上是将其内的54张扑克牌清零

voidMakeDeck();//生成一副扑克,即对其内的54张扑克牌赋予正确的面值及花色

voidShowDeck();//显示余下的所有的扑克牌

voidDeckShuff(int);//洗牌,其参数是洗牌的次数

//voidRemove_Card();//将删除的那张扑克牌的内容清零,使这张牌在屏幕上显示不出来

};//mistakenlyusinganonexistantcard

//canbuusedtosendacard?

?

//************************某个人拿的牌******************************

classPerDeck

{

public:

Playing_Cardm_Card[20],temp;//最多有20张牌

intnNum;//实际张数

PerDeck(){}

voidMakePerDeck(Deck&,int);//对象初始化,参数为指定的那副牌及实际赋值个数

voidShow();//显示

voidSortFace();//按面值排序

voidSortSuit();//按花色排序

voidDelete(intn);//删除序号为n的那一张

};

//*********************************四个人玩牌的过程****************************************

classPlayDeck

{

public:

PerDeckm_deck[4];//一共是4个人玩牌

intdelt,sort;

public:

PlayDeck(){}

voidPlayCard(Deck&);//用指定的那副牌对四个人分别赋值

voidShowAll();//显示

voidDeleteOne(introw,intcolumn);//删除一张,参数为第row个人的第column那一张

voidDeleteAll(int,int,int,int);//删除一轮,参数分别代表4个人各删除哪一张

voidSortDeckFace();//对整副牌按面值排序

voidSortDeckSuit();//对整副牌按花色排序

voidAskSort();//询问排序方法

voidAskDelete();//询问删除方法

intget_int();//获得一个整数

};

//*************************************************

//***************************prototypes**********************************

voidProgram_Init();//程序初始化,输出初始化信息

intmain();

voidCenter_Text(char[]);//将参数(字符串)显示在屏幕的中间

intget_number();//接收用户输入的数值,作为函数值返回

intchoose_number();//判断选择是删除一张还是一轮的办法

charGet_Key();//获得一个字符,作为函数值返回

voidDeckMakeDriver();//主要算法,调用多个函数,执行声成牌,洗牌删除等操作

intgetRandInt(intmin,intmax);//取得两参数见的随机值

voidprog_close();//暂停程序运行,查看中间运行结果

charcontinue_quit();

//****************************Main*************************************

intmain()

{

srand((unsigned)time(NULL));//初始化随机数种子

intCard_Number=0;

Program_Init();//显示程序初始化信息

DeckMakeDriver();//调用函数的主要算法,包含程序的主要操作过程

prog_close();//暂停程序的运行,供用户查看运行结果

return1;//结束

}

Deck:

:

Deck()//初始化一副牌,将54张牌清零

{

intlastdelt=0;

inti;

for(i=0;i<=53;i++)

{

m_cardarray[i]=Playing_Card();//构造一个临时对象赋值

}

}

voidDeck:

:

DeckShuff(inttimes)//洗牌,参数为次数

{

intx,split;//split是分开成两部分的位置,如上部分、下部分

Center_Text("开始洗牌……");

cout<

for(x=0;x<=times;x++)//开始循环,每循环一次将牌全部重排一遍

{

split=getRandInt(20,35);//随机选取split的值

Decktopdeck;//生成两副扑克牌对象

Deckbottomdeck;

inti;

intbottomdeckindex=1;

inttopdeckindex=1;

for(i=0;i<=split-1;)//将初始的那副牌的上边部分的张数赋值到新生成的牌的对象中

{

topdeck.m_cardarray[topdeckindex]=this->m_cardarray[i];

topdeckindex++;

i++;

}

for(i=(split);i<54;)//将下边的部分的张数赋值到新生成的对象中

{

bottomdeck.m_cardarray[bottomdeckindex]=this->m_cardarray[i];

bottomdeckindex++;

i++;

}

intdeckoutindex=0;

intnumcardstomovetop;

intnumcardstomovebottom;

intj;

inth=0;

bottomdeckindex=54-split;//下部分扑克牌的张数

topdeckindex=split;//上部分扑克牌的张数

while(deckoutindex<=53)

{

numcardstomovetop=getRandInt(2,7);//从上部分抽取的张数,是2-7之间的随机数

numcardstomovebottom=getRandInt(2,7);//在下部分扑克牌中随机选择2~7之间的随机数

/*将下部分的牌赋值给原来的那副牌*/

for(j=0;j<=numcardstomovebottom;j++)//从0开始循环numcardstomovebottom次

{

if(bottomdeckindex>0)//当下部分那副牌没有循环完时继续

{/*从下部分那副牌的最后张数开始,依次向c初始的扑克牌赋值*/

this->m_cardarray[deckoutindex]=bottomdeck.m_cardarray[bottomdeckindex];

deckoutindex++;

bottomdeckindex--;

}

for(h=0;h<=numcardstomovetop;h++)//下部分的扑克牌赋值完成后,对上部分的牌进行同样的操作

{

if((topdeckindex>0)&&(deckoutindex<=54))

{

this->m_cardarray[deckoutindex]=topdeck.m_cardarray[topdeckindex];

deckoutindex++;

topdeckindex--;

}

}

}

}

}

Center_Text("完成洗牌");

cout<

this->m_lastdelt=-1;//将删除牌的张数复原为-1(未删除)

}

voidDeck:

:

MakeDeck()//对一副牌逐一赋值

{

m_lastdelt=53;//赋初值,该值作为生成每张扑克牌的参数

while(m_lastdelt>-1)//判断是不是生成了54张牌

{

m_cardarray[m_lastdelt].Card_Make(m_lastdelt);//调用Card——Make,对牌赋值,完成一副牌

m_lastdelt--;//生成一张牌后改变生成的参数

}

}

voidDeck:

:

ShowDeck()//显示一副扑克牌牌

{

intindex=m_lastdelt+1;//以此位置为第一张牌,从头显示这副牌

Center_Text("完整的一副牌");

cout<

while(index<=53)

{

if(index%11==0)cout<

m_cardarray[index].showcard();//按数组的顺序依次显示

index++;

}

cout<

}

voidPerDeck:

:

Delete(intn)//删除序号为n的那张牌

{

n--;

temp=m_Card[n];

for(n;n

m_Card[n]=m_Card[n+1];

m_Card[nNum]=Playing_Card();

nNum-=1;

}

voidPerDeck:

:

MakePerDeck(Deck&,intnNum)//对象初始化

{}

voidPerDeck:

:

Show()//显示

{

inti=0;

for(i;i

{

if(i==10)

cout<

m_Card[i].showcard();

}

cout<

}

voidPerDeck:

:

SortFace()//按面值排序

{

inti,j=0;

for(j;j

{

for(i=0;i

{

if(m_Card[i].m_Value>m_Card[i+1].m_Value)

{

temp=m_Card[i];

m_Card[i]=m_Card[i+1];

m_Card[i+1]=temp;

}

}

}

}

voidPerDeck:

:

SortSuit()//按花色排序

{

inti,j=0;

for(j;j

{

for(i=0;i

{

if(m_Card[i].m_Suit>m_Card[i+1].m_Suit)

{

temp=m_Card[i];

m_Card[i]=m_Card[i+1];

m_Card[i+1]=temp;

}

}

}

}

voidPlayDeck:

:

AskDelete()//询问删除方法

{

cout<

cout<<"删除一张,请选择1;"<

cout<<"删除一轮,请选择2;"<

cout<<"退出,选择3;"<

delt=get_int();

switch(delt)

{

case1:

Center_Text("输入要删除第row人的第column张牌");

cout<<"输入row,column,用空格隔开:

";

introw,column;

cin>>row>>column;

if(row>0&&row<5)

{

if(column>0&&column<=m_deck[row-1].nNum)

{

DeleteOne(row,column);

break;

}

elsePlayDeck:

:

AskDelete();

}

elsePlayDeck:

:

AskDelete();

case2:

Center_Text("依次输入要删除4个人的第a,b,c,d张牌");

cout<<"输入a,b,c,d,用空格隔开"<

inta,b,c,d;

cin>>a>>b>>c>>d;

if(a>0&&a<=m_deck[0].nNum)

{

if(b>0&&b<=m_deck[1].nNum)

{

if(c>0&&c<=m_deck[2].nNum)

{

if(d>0&&d<=m_deck[3].nNum)

{

DeleteAll(a,b,c,d);

break;

}

elsePlayDeck:

:

AskDelete();

}

elsePlayDeck:

:

AskDelete();

}

elsePlayDeck:

:

AskDelete();

}

elsePlayDeck:

:

AskDelete();

case3:

exit(0);

default:

Center_Text("输入错误,请选择一种删除方法或退出");

PlayDeck:

:

AskDelete();

}

}

voidPlayDeck:

:

AskSort()

{

intend_of=0,player=0;

for(player;player<4;player++)

{

if(m_deck[player].nNum==0)

{

cout<<"玩家"<

"<

end_of++;

}

}

if(end_of!

=0)

prog_close();

cout<

cout<<"按面值排序,请选择1;"<

cout<<"按花色排序,请选择2;"<

cout<<"退出,请选择3;"<

sort=get_int();

switch(sort)

{

case1:

SortDeckFace();

break;

case2:

SortDeckSuit();

break;

case3:

exit(0);

default:

Center_Text("输入错误,请选择一种排序方法或退出");

PlayDeck:

:

AskSort();

}

}

voidPlaying_Card:

:

AskPaidui(){

cout<

cout<<"进入54个扑克小人排队报数小游戏,请选择1"<

cout<<"退出,选择2"<

order=getCount();

switch(order){

case1:

break;

case2:

exit(0);

default:

Center_Text("输入错误,请重新输入");

voidPlaying_Card:

:

AskPaidui();

}

}

voidPlayDeck:

:

DeleteAll(inta,intb,intc,intd)//依次删除第a,b,c,d张牌

{

m_deck[0].Delete(a);

m_deck[1].Delete(b);

m_deck[2].Delete(c);

m_deck[3].Delete(d);

cout<<"上一轮分别删除了以下的一轮牌:

";

m_deck[0].temp.showcard();

cout<<'\t';

m_deck[1].temp.showcard();

cout<<'\t';

m_deck[2].temp.showcard();

cout<<'\t';

m_deck[3].temp.showcard();

cout<

}

voidPlayDeck:

:

DeleteOne(introw,intcolumn)//删除第row人的第column张牌

{

m_deck[row-1].Delete(column);

cout<<"上一轮分别删除了以下的一张牌:

";

m_deck[row-1].temp.showcard();

cout<

}

voidPlaying_Card:

:

Paidui(){

charj,Face[3],Suit;

intp[54],n=0;

for(inti=0;i<54;i++){

p[i]=1;

}

for(intk=0;k<53;){

for(i=0;i<54;i++)

if(p[i]){

n++;

if(n%5==0){

p[i]=0;

k++;

}

}

}

for(i=0;i<54;i++)

if(p[i])

{cout<<"最后一个扑克小人的编号为:

"<

";

intfaceN=i%13;//扑克牌的面值,从0到12

if(i==52)strcpy(Face,"S");//小王赋为S

elseif(i==53)strcpy(Face,"B");//大王赋为B

else

{

switch(faceN)//当面值大于10时,用J,Q,K代替,面值为0,用A代替

{

case0:

strcpy(Face,"A");break;

case9:

strcpy(Face,"10");break;

case10:

strcpy(Face,"J");break;

case11:

strcpy(Face,"Q");break;

case12:

strcpy(Face,"K");break;

default:

j=char(faceN+49);//其它的面值,用对应的ASCII码表示

if(i<3)

{

Face[i]='';i++;

Face[i]=j;i++;

Face[i]=NULL;

break;

}

}

}

cout<

//扑克牌的花色,分别用红桃,黑桃,梅花,方块的ASCII码替代

if(i<=12)Suit=6;//红桃

if(i>12&&i<=25)Suit=3;//黑桃

if(i>25&&i<=38)Suit=5;//梅花

if(i>38&&i<=51)Suit=4;//方块

if(

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

当前位置:首页 > PPT模板 > 其它模板

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

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