南京理工大学C++课程设计扑克游戏.docx

上传人:b****6 文档编号:8552127 上传时间:2023-01-31 格式:DOCX 页数:23 大小:1.51MB
下载 相关 举报
南京理工大学C++课程设计扑克游戏.docx_第1页
第1页 / 共23页
南京理工大学C++课程设计扑克游戏.docx_第2页
第2页 / 共23页
南京理工大学C++课程设计扑克游戏.docx_第3页
第3页 / 共23页
南京理工大学C++课程设计扑克游戏.docx_第4页
第4页 / 共23页
南京理工大学C++课程设计扑克游戏.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

南京理工大学C++课程设计扑克游戏.docx

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

南京理工大学C++课程设计扑克游戏.docx

南京理工大学C++课程设计扑克游戏

南京理工大学C++课程设计—扑克游戏

C++课程设计实验报告

姓名郑星鑫学号913104210332班级9131042103任课教师赵琦时间4月12日

选择题目扑克牌游戏难易级别A级

实验报告成绩

一、程序功能简介

创建一副扑克牌,并完成洗牌等操作。

二.课程设计要求和目的

1.增加大王和小王。

2.删去一张指定的扑克后,余牌显示。

3.创建一副扑克,显示一副扑克,洗牌,依次发给四个人并显示。

4.需要对原程序做一些修改,保留生成牌和洗牌的部分,主要是修改main函数的结构,依次为:

生成牌,洗牌,发牌,然后循环显示菜单,询问是否删除一张,删除一轮,面值排序,花色排序等,在main函数中定义所生成的那副牌,并将其作为参数(对象引用),所有新增类的操作均以那副牌作为数据进行运算。

三.课程设计中要解决的问题分析和调试

1.首先,去掉源程序的注释,以免修改程序时自己的注释与源文件注释混淆,便于找出修改程序时可能产生的错误。

2.添加大小王:

修改类Deck,将一副扑克牌对象内的扑克牌个数增加两张,对这两张牌的面值及花色分别赋值“S”1(小王),“B”2(大王)。

3.游戏中四个人玩牌,要新建两个类:

Per_Deck类表示某个人拿的牌,Play_Deck类表示四个人玩牌的过程。

Perdeck是Deck和PlayDeck的友元类。

classPer_Deck

{

public:

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

intnNum;//实际张数

Per_Deck();//构造函数

voidMakePerDeck(Deck&,int,int);//对象初始化

voidShow();//显示

voidSortFace();//按面值排序

voidSortSuit();//按花色排序

intDelete(intn);//删除牌号为n的那张

};

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

classPlay_Deck

{

public:

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

Play_Deck();//构造函数

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

voidShow();//显示

intDeleteOne(introw,intcolumn);//删除参数为第row个人的第column张牌

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

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

ints(inta);//用于调用私有数据来显示排序后的牌

};

4.添加人性化界面,初始运行程序时加了一个友好的界面,用p,u,k,e这四个字母拼成了中文的”扑克”二字,增加游戏的趣味性,并附带输出了自己的姓名和学号。

5.在主函数中调用DeckMakeDriver()函数,通过DeckMakeDriver()中的一个do循环控制主菜单的循环出现,并对可能出现的玩家输入问题进行分析修改。

5.进入四个不同功能的游戏界面时,操作后询问是否显示被操作后的牌,再询问是否返回主菜单,否的话退出游戏。

6.在对玩家的牌的面值以及花色排序时,在类PlayDeck()中增加ints()函数,用于调用私有数据来显示排序完后的牌。

四、源程序结构流程框图与说明

 

开始

生成一副新牌

输入洗牌次数进行洗牌

依次输入给四位玩家的牌并显示

主菜单

1删除某位玩家一张牌

是否显示牌

显示被操作后的牌

是否回主菜单

2删除各位玩家一张牌

是否显示牌

显示被操作的牌

是否回主菜单

4按玩家牌的花色排序

是否显示牌

显示操作后的牌

是否回主菜单

按玩家牌的面值排序

是否显示牌

显示操作后的牌

是否回主菜单

结束

5显示各位玩家的牌

五.源程序代码以及草稿原件

#include

#include

#include

#include

#include

#include

voidProgram_Init();

intmain();

voidCenter_Text(char[]);

intget_number();

charGet_Key();

voidDeckMakeDriver();

intgetRandInt(intmin,intmax);

voidprog_close();

classPerDeck;//增加

classPlaying_Card

{

private:

intm_Value;

charm_Face[3];

charm_Suit;

public:

Playing_Card();

voidshowcard();

voidCard_Make(int);

friendclassPerDeck;//增加

};

classDeck

{

private:

Playing_Cardm_cardarray[54];//

intm_lastdelt;

public:

Deck();

voidMakeDeck();

voidDeal_One();

voidShowDeck();

voidDeckShuff(int);

voidRemove_Card();

friendclassPerDeck;//增加

};

classPerDeck//增加PerDeck

{

Playing_CardmCard[20];

intnNum;

public:

PerDeck(){}

voidMakePerDeck(Deck&,int);

voidShow();

voidSortFace();

voidSortSuit();

intDelete(intn);

};//end

classPlayDeck//增加PlayDeck

{

PerDeckmDeck[4];

public:

PlayDeck(){}

voidPlayCard(Deck&);

voidShow();

intDeleteOne(introw,intcolumn);

intDeleteAll(int,int,int,int);

voidSortDeckFace(int);

voidSortDeckSuit(int);

voids(int);

};//end

voidPerDeck:

:

MakePerDeck(Deck&d,inta)//PerDeck成员的函数

{

nNum=a;

inti=0;

while(i

=53)

mCard[i++]=d.m_cardarray[++d.m_lastdelt];

}

voidPerDeck:

:

Show()

{

intnNewLine=0;

Center_Text("此玩家的牌:

");

cout<

while(nNewLine

{

if(nNewLine%5==0)cout<

mCard[nNewLine++].showcard();

}

cout<

}

voidPerDeck:

:

SortFace()

{

Playing_Cardk;

for(inti=0;i

for(intj=0;j

if(mCard[j].m_Value>mCard[j+1].m_Value)

{

k=mCard[j];

mCard[j]=mCard[j+1];

mCard[j+1]=k;

}

}

voidPerDeck:

:

SortSuit()

{

Playing_Cardk;

for(inti=0;i

for(intj=0;j

if(mCard[j].m_Suit>mCard[j+1].m_Suit)

{

k=mCard[j];

mCard[j]=mCard[j+1];

mCard[j+1]=k;

}

}

intPerDeck:

:

Delete(intn)

{

if(n>nNum)

{

cout<<"超出这副牌张数"<

returnnNum;

}

else

{

cout.width(5);

cout<<"删除牌:

";

mCard[n-1].showcard();

while(n-1

mCard[n-1]=mCard[n++];

}

return--nNum;

}//end

voidPlayDeck:

:

PlayCard(Deck&k)//PlayDeck的成员函数

{

inta,b,c,d;

Center_Text("请依次输入给四位玩家的牌数(总张数小于等于54)。

");

cout<

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

if(a+b+c+d>54)

{

Center_Text("张数超过牌的张数,退出游戏。

");

exit(0);

}

mDeck[0].MakePerDeck(k,a);

mDeck[1].MakePerDeck(k,b);

mDeck[2].MakePerDeck(k,c);

mDeck[3].MakePerDeck(k,d);

}

voidPlayDeck:

:

Show()

{

Center_Text("玩家1");

cout<

mDeck[0].Show();

Center_Text("玩家2");

cout<

mDeck[1].Show();

Center_Text("玩家3");

cout<

mDeck[2].Show();

Center_Text("玩家4");

cout<

mDeck[3].Show();

}

intPlayDeck:

:

DeleteOne(introw,intcolumn)

{

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

return1;

}

intPlayDeck:

:

DeleteAll(inta,intb,intc,intd)

{

mDeck[0].Delete(a);

mDeck[1].Delete(b);

mDeck[2].Delete(c);

mDeck[3].Delete(d);

return1;

}

voidPlayDeck:

:

SortDeckFace(intb)

{

mDeck[b-1].SortFace();

}

voidPlayDeck:

:

SortDeckSuit(intb)

{

mDeck[b-1].SortSuit();

}

voidPlayDeck:

:

s(inta)

{

mDeck[a-1].Show();

}//endl

intmain()

{

srand((unsigned)time(NULL));

intCard_Number=0;

Program_Init();

DeckMakeDriver();

prog_close();

return1;

}

Playing_Card:

:

Playing_Card()

{

inti;

for(i=1;i<=3;)

{

m_Face[i]='';

i++;

}

m_Suit='';

m_Value=0;

}

voidProgram_Init()

{

Center_Text("扑克牌游戏");

cout<

Center_Text("byYoriFish");

Center_Text("单击继续");

cin.get();

}

charGet_Key()

{

charx;

x=cin.get();

cout<

returnx;

}

voidPlaying_Card:

:

showcard()

{

cout<<"";

cout<

cout.width

(1);

cout<

cout<<"";

}

voidCenter_Text(charShellText[80])

{

intlength;

intcenter;

length=strlen(ShellText);

center=(80-length)/2;

for(;center!

=0;center--)

{

cputs("");

}

cputs(ShellText);

cout<

}

intget_number()

{

intInput_Integer=0;

Center_Text("Pleaseenteranintegerbetween0and53.54toquit.");//

cout<

cin>>Input_Integer;

returnInput_Integer;

}

 

voidPlaying_Card:

:

Card_Make(intnum)

{

inti=0;

charj;

intface_num=num%13;

if(num/13==4)//增加

{

switch(face_num)

{

case0:

strcpy(m_Face,"S");break;

case1:

strcpy(m_Face,"B");break;

}

}

else//增加

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);

if(i<3)

{

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

m_Face[i]=j;i++;

m_Face[i]=NULL;

break;

}

}

if(num<=12)m_Suit=6;

if(num>12&&num<=25)m_Suit=3;

if(num>25&&num<=38)m_Suit=5;

if(num>38&&num<=51)m_Suit=4;

if(num==52)m_Suit=1;//增加

if(num==53)m_Suit=2;//增加

if(num>51)m_Value=14;

else

m_Value=face_num+1;

}

voidDeckMakeDriver()

{

Deckdeck_1;

deck_1.MakeDeck();

deck_1.ShowDeck();

Get_Key();

intb;//增加

Center_Text("请输入洗牌次数。

");

cin>>b;//end

deck_1.DeckShuff(b);

deck_1.ShowDeck();

cout<

chary;

PlayDeckfour;//增加

four.PlayCard(deck_1);

cout<

four.Show();

inta=0;

do

{

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

Center_Text("主菜单");

Center_Text("删除某位玩家一张牌请输入1");

Center_Text("删除各位玩家一张牌请输入2.");

Center_Text("按玩家的牌面值排序请输入3.");

Center_Text("按玩家的牌花色排序请输入4.");

Center_Text("显示各位玩家的牌面请输入5.");

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

cin>>a;

if(a==1)

{

intb,c;

chary;

cout<<"请输入要删除第几位玩家的第几张牌。

"<

cin>>b>>c;

four.DeleteOne(b,c);

cout<

"<

cin>>y;

y=toupper(y);

if(y=='Y')four.s(b);

cout<

}

if(a==2)

{

intb,c,d,e;

chary;

cout<<"请依次输入欲删除各玩家牌的序号。

"<

cin>>b>>c>>d>>e;

four.DeleteAll(b,c,d,e);

cout<

"<

cin>>y;

y=toupper(y);

if(y=='Y')four.Show();

cout<

}

if(a==3)

{

intb;

chary;

cout<<"请输入要对那位玩家排序"<

cin>>b;

four.SortDeckFace(b);

cout<<"是(Y)否(N)显示排序后的牌?

"<

cin>>y;

y=toupper(y);

if(y=='Y')four.s(b);

}

if(a==4)

{

intb;

chary;

cout<<"请输入要对那位玩家排序"<

cin>>b;

four.SortDeckSuit(b);

cout<<"是(Y)否(N)显示排序后的牌?

"<

cin>>y;

y=toupper(y);

if(y=='Y')four.s(b);

}

if(a==5)

{

four.Show();

}

cout<<"是(Y)否(N)回到菜单?

"<

cin>>y;

y=toupper(y);

}while(y=='Y');

}//end

voidDeck:

:

MakeDeck()

{

m_lastdelt=53;//

while(m_lastdelt>-1)

{

m_cardarray[m_lastdelt].Card_Make(m_lastdelt);

m_lastdelt--;

}

}

voidDeck:

:

ShowDeck()

{

intindex=m_lastdelt+1;

intnewline=0;

Center_Text("新的一副牌");

cout<

while(index<=53)//

{

if(newline%11==0)cout<

m_cardarray[index].showcard();

newline++;

index++;

}

}

intgetRandInt(intmin,intmax)

{

intnumToReturn;

numToReturn=rand();

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

returnnumToReturn;

}

voidDeck:

:

DeckShuff(inttimes)

{

intx,split;

Center_Text("洗牌");

cout<

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

{

split=getRandInt(20,35);

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_ca

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

当前位置:首页 > 高等教育 > 工学

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

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