扑克牌游戏.docx

上传人:b****6 文档编号:6457492 上传时间:2023-01-06 格式:DOCX 页数:17 大小:20.30KB
下载 相关 举报
扑克牌游戏.docx_第1页
第1页 / 共17页
扑克牌游戏.docx_第2页
第2页 / 共17页
扑克牌游戏.docx_第3页
第3页 / 共17页
扑克牌游戏.docx_第4页
第4页 / 共17页
扑克牌游戏.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

扑克牌游戏.docx

《扑克牌游戏.docx》由会员分享,可在线阅读,更多相关《扑克牌游戏.docx(17页珍藏版)》请在冰豆网上搜索。

扑克牌游戏.docx

扑克牌游戏

#include

#include

#include

#include

#include

#include

#include

#include

inta,b,c,d;//用于记录各位玩家所删去的牌的张数;

classPlaying_Card//扑克类

{

public:

charm_Face[3];//扑克的数字大小

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

Playing_Card();//构造函数

voidshowcard();//显示一张牌

voidCard_Make(int);//制造一张牌

};

classDeck//一副扑克(54张)

{

private:

Playing_Cardm_cardarray[54];//扑克牌数组

intm_lastdelt;

public:

Deck();//构造函数

voidMakeDeck();//制造一副牌

voidShowDeck();//显示一副牌

voidDeckShuff(int);//洗牌

voidRemove_Card(intx);//将一张牌置空;

voidMove();//删去大小王

voidSendDeck();//发牌

voidDelete_One_Card(int);//删去一张牌;

Playing_CardDriver[4][13];//四个玩家的牌

};

voidblank();

voidshowout();//输出开始界面

voidCenter_Text(char[]);//将char[]中的内容居中;

charGet_Key();//输入一个字符;

voidDeckMakeDriver();//测试函数;

intgetRandInt(intmin,intmax);//得到一个随机数;

voidprog_close();//暂停程序;

voidshow(char*,double);//打字效果

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

voidmain()//主函数用于调用其他函数;

{

srand((unsigned)time(NULL));//设置随机数;

intCard_Number=0;

showout();//调用此函数显示相关信息;

DeckMakeDriver();//调用此函数;

exit(-1);//退出程序

}

Playing_Card:

:

Playing_Card()//Playing_Card类中的构造函数,产生的对象为一张空牌;

{

inti;

for(i=0;i<3;)

{

m_Face[i]='';

i++;

}

m_Suit='';

}

voidshow(char*pp,doublen)

{

for(unsignedinti=0;i

{

intm;

m=(int)n;

Sleep(m);

cout<

}

}

voidshowout()

{

cout<

show("********欢迎进入扑克牌游戏********\n\n\n",1);

show("puk\n",1);

show("puk\n",1);

show("pppppppukkkkkkkkkkkkkkk\n",1);

show("puk\n",1);

show("puukkkkkkkkk\n",1);

show("ppuukk\n",1);

show("ppuukkkkkkkkk\n",1);

show("ppuee\n",1);

show("puee\n",1);

show("ppueee\n",1);

show("pueeeee\n\n\n",1);

show("设计者:

宗柳\n\n",1);

show("学号:

05081901\n\n",1);

show("班级:

0508190102\n\n",1);

cout<

show("请按键继续...",1);

cin.get();

}

charGet_Key()//从用户处得到一个字符,可用来暂停程序;

{

charx;

x=cin.get();

cout<

returnx;

}

voidPlaying_Card:

:

showcard()//显示一张牌;

{cout<

cout<

cout.width

(1);

cout<

cout<<"";

}

voidCenter_Text(charShellText[80])//将ShellText[80]中的字符居中显示;

{

intlength;

intcenter;

length=strlen(ShellText);//计算出字符串ShellText[]的长度;

center=(80-length)/2;//计算出离屏幕左端的空格数;

for(;center!

=0;center--)

{

cputs("");//输出空格;

}

cputs(ShellText);//输出ShellText[80]中的内容;

}

voidPlaying_Card:

:

Card_Make(intnum)//制造一张牌;

{

inti=0;

charj;

intface_num=num%13;

switch(face_num)

{

case0:

strcpy(m_Face,"A");break;

case9:

strcpy(m_Face,"10");break;

case10:

strcpy(m_Face,"J");break;

case11:

strcpy(m_Face,"Q");break;

case12:

strcpy(m_Face,"K");break;

default:

{

j=char(face_num+49);//将face_num+49的计算结果转换成字符;

if(i<3)

{

m_Face[i]='';i++;

m_Face[i]=j;i++;

m_Face[i]=NULL;

break;

}

}

}

if(num<=12)m_Suit=6;//制造13张牌从黑桃A-黑桃K;

if(num>12&&num<=25)m_Suit=3;//制造13张牌从红桃A-红桃K;

if(num>25&&num<=38)m_Suit=5;//制造13张牌从梅花A-梅花K;

if(num>38&&num<=51)m_Suit=4;//制造13张牌从方片A-方片K;

}

voidDeckMakeDriver()

{

inti,m;

system("cls");//清屏;

Deckdeck_1;//定义一个Deck类的对象;

cout<

Center_Text("现在创建了一副新牌");//调用Center_Text()函数,将括号内的信息输出,并使其居于屏幕的中间

cout<

deck_1.MakeDeck();//制造一副牌;

deck_1.ShowDeck();//显示一副牌;

cout<

Center_Text("请按键开始洗牌......");

Get_Key();//用户任输入一个字符,用来暂停程序;

deck_1.DeckShuff(250);//洗牌250次;

deck_1.ShowDeck();//显示洗好后的牌

cout<

Center_Text("请按键继续......");

Get_Key();//用户任输入一个字符,用来暂停程序;

cout<

deck_1.Move();//删去牌中的大、小王;

deck_1.ShowDeck();//将大小王删去后的牌显示;

cout<

Center_Text("请按键开始发牌......");

Get_Key();//用户任输入一个字符,用来暂停程序;

system("cls");//清屏;

cout<<"================================================================================"<

deck_1.SendDeck();//发牌给四个玩家;

cout<<"玩家

(1)的牌为:

"<

for(i=0;i<13;i++)deck_1.Driver[0][i].showcard();//显示此玩家

(1)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

cout<<"玩家

(2)的牌为:

"<

for(i=0;i<13;i++)deck_1.Driver[1][i].showcard();//显示此玩家

(2)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

cout<<"玩家(3)的牌为:

"<

for(i=0;i<13;i++)deck_1.Driver[2][i].showcard();//显示此玩家(3)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

cout<<"玩家(4)的牌为:

"<

for(i=0;i<13;i++)deck_1.Driver[3][i].showcard();//显示此玩家(4)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

cout<<"================================================================================";

cout<<"请按键显示游戏玩家菜单......";

Get_Key();

Center_Text("***********************游戏玩家菜单***********************");

cout<

Center_Text("1-玩家

(1)");

cout<

Center_Text("2-玩家

(2)");

cout<

Center_Text("3-玩家(3)");

cout<

Center_Text("4-玩家(4)");

cout<

Center_Text("**********************************************************");

cout<

cout<<"请输入所要处理牌的玩家的序号:

";

intinput1;

charinput2;

do{

if(input2=='y'||input2=='Y')

cout<<"请输入所要处理牌的玩家的序号:

";

cin>>input1;

cout<

switch(input1)

{

case1:

for(m=0;m<13-a;m++)deck_1.Driver[input1-1][m].showcard();//显示此玩家

(1)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

deck_1.Delete_One_Card(input1);//删除玩家

(1)的第input1张牌;

break;

case2:

for(m=0;m<13-b;m++)deck_1.Driver[input1-1][m].showcard();//显示此玩家

(2)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

deck_1.Delete_One_Card(input1);//删除玩家

(2)的第input1张牌;

break;

case3:

for(m=0;m<13-c;m++)deck_1.Driver[input1-1][m].showcard();//显示此玩家(3)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

deck_1.Delete_One_Card(input1);//删除玩家(3)的第input1张牌;

break;

case4:

for(m=0;m<13-d;m++)deck_1.Driver[input1-1][m].showcard();//显示此玩家(4)的牌;

blank();//输出各张牌所对应的序号于牌的下方;

deck_1.Delete_One_Card(input1);//删除玩家(4)的第input1张牌;

break;

default:

cout<<"输入错误!

"<

exit(-1);

}

cout<<"是否还要处理其余玩家的牌?

若是,按;若否,按任意键退出!

\n请按键选择:

";

cin>>input2;

cout<

}while(input2=='y'||input2=='Y');

}

voidDeck:

:

MakeDeck()//制造一副牌;

{

m_lastdelt=53;//一副牌的总张数;

while(m_lastdelt>1)//先制造除大、小王外的其余52张牌;

{

m_cardarray[m_lastdelt-2].Card_Make(m_lastdelt-2);

//调用Card_Make(intnum)函数制造52张牌;

m_lastdelt--;//每制造一张牌m_lastdelt-1;

}

if(m_lastdelt==1)//制造一张大王;

{

strcpy(m_cardarray[m_lastdelt+51].m_Face,"W");

m_cardarray[m_lastdelt+51].m_Suit=2;

m_lastdelt--;

}

if(m_lastdelt==0)//制造一张小王;

{

strcpy(m_cardarray[m_lastdelt+53].m_Face,"w");

m_cardarray[m_lastdelt+53].m_Suit=1;

}

}

voidDeck:

:

ShowDeck()

{

intindex=m_lastdelt;//经调用MakeDeck()函数后,此时的m_lastdelt值为0;

intnewline=0;

while(index<=53)

{

if(newline%13==0)cout<

m_cardarray[index].showcard();//调用showcard()函数,显示每一张牌

newline++;//记录已显示的牌的张数;

index++;

}

}

voidDeck:

:

SendDeck()//按牌的顺序依次将牌发给四个玩家;

{

inti;

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

{

Driver[0][i]=m_cardarray[i*4];

Driver[1][i]=m_cardarray[i*4+1];

Driver[2][i]=m_cardarray[i*4+2];

Driver[3][i]=m_cardarray[i*4+3];

}

}

intgetRandInt(intmin,intmax)//得到一个随机数,并将其返回;

{

intnumToReturn;

numToReturn=rand();

numToReturn=numToReturn%(max-min+1)+min;

returnnumToReturn;

}

voidDeck:

:

DeckShuff(inttimes)//洗牌次数

{

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

system("cls");

cout<

Center_Text("以下为洗过后的牌");

cout<

for(x=0;x<=times;x++)

{

split=getRandInt(20,35);//通过getRandInt(intmin,intmax)函数得到一个随机数;

Decktopdeck;//制造两副新的空牌topdeck和bottomdeck;

Deckbottomdeck;

inti;

intbottomdeckindex=1;

inttopdeckindex=1;

for(i=0;i<=split-1;)//将原来牌的前split张赋值给topdeck;

{

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

topdeckindex++;

i++;

}

for(i=(split);i<54;)//将原来牌中剩余的牌赋值给bottomdeck;

{

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

bottomdeckindex++;

i++;

}

intdeckoutindex=0;//用来记录从topdeck.cardarray[split]和bottomdeck.cardarray[54-split]中向deck_1.cardarray[54]中已赋值的牌的总数;

intnumcardstomovetop;//记录随机数;

intnumcardstomovebottom;//记录随机数;

intj;

inth=0;

bottomdeckindex=54-split;//bottomdeck.cardarray[54]中所拥有的牌的张数为54-split张并赋值给bottomdeckindex;

topdeckindex=split;//topdeck.cardarray[54]中所拥有的牌的张数为split张并赋值给topdeckindex;

while(deckoutindex<=53)

{

numcardstomovetop=getRandInt(2,7);

//从上部分抽取的张数,是2-7之间的随机数

numcardstomovebottom=getRandInt(2,7);

//从下部分抽取的张数,是2-7之间的随机数;

for(j=0;j<=numcardstomovebottom;j++)//将从下部分抽取的牌中的第一张插入deck_1.cardarray[54]中;

{

if(bottomdeckindex>0)

//检查从bottomdeck.cardarray[54-split]中抽取的牌是否还有剩余;

{

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

deckoutindex++;

bottomdeckindex--;

}

for(h=0;h<=numcardstomovetop;h++)

//将从上部分抽取的牌全部插入deck_1.cardarray[54]中;

{

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

//检查从topdeck.cardarray[split]中的牌是否还有剩余并检查deck_1.cardarray[54]中的牌是否全被洗过;

{

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

deckoutindex++;

topdeckindex--;

}

}

}

}

}

this->m_lastdelt=0;//将m_lastdelt重新修改为0,以便后面显示牌;

}

voidblank()//输出每个玩家的牌所对应的序号;

{

intj;

cout<

for(j=1;j<=13;j++)

{

if(j<=10)cout<<""

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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