- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++课程设计实验报告
程序名称:扑克牌游戏
程序设计功能:创建一副扑克牌,并完成洗牌等相关操作。
程序设计要求:
增加大小王。
删去一张指定的牌后,余牌显示。
创建一副扑克,显示一副扑克牌,洗牌,一次分发给四个人并显示。
程序设计过程中根据设计思想添加功能:
根据洗牌参数,添加入可以让玩牌者控制洗牌次数的功能。
在可以完成每人删除一张牌的功能基础上,增加可以删除一轮牌(也就是同时每人删除一张牌)的功能。
对题目的分析与注释
总体分析:根据题目的设计要求,增加满足要求所需要的函数,实现相应功能,通过合理安排调用过程,实现题目要求的功能。
注释:(已在程序设计过程中指出)
增加功能的设计思路
增加大小王 实现函数:Deck::MakeDeck() PlayingCard::CardMake()
Deck::MakeDeck()将参数nLastDelt由51增加到53,生成一副扑克牌的54张牌(0~54),实际上是多分配了两张大小王的空间,控制参数nLastDelt的变化,再通过调用函数PlayingCard::CardMake()将参数传递给nNum,为每张牌(包括大小王)赋予正确的面值和花色,由此生成一副完整的牌。其中对大小王的赋值是添加的功能,具体实现过程如下:
void PlayingCard::CardMake(int nNum)//跟据nNum生成一张扑克牌,nNum不同,生成的面值花色
{
int i = 0;
char j;
if(nNum==53) //生成大王
{
strcpy(achFace," B");
chSuit=2;
nValue=15;
}
if(nNum==52) //生成小王
{
strcpy(achFace," S");
chSuit=1;
nValue=14;
}
由此段程序可知,参数nLastDelt是由大到小变化的,所以54张牌中首先生成大小王,至于其他牌的生成,是课本源程序上自带的,牌的花色由相应的ASCII码来赋值。
(2)删去一张指定的牌后,余牌显示。 实现函数: Deck::DelOne()
PlayingCard::ShowCard() Deck::Delete()
通过switch语句满足case的条件后,开始进行删除一张牌(调用函数Deck::DelOne()),系统会询问要删除第几个人的第几张牌,在这里考虑到用户可能会误输入大于人数或大于个人牌数的错误数字,因此设计了如果参数不符合要求就返回选择菜单这一步。之后调用Delete()函数将牌删除。Delete()函数为新增函数,具体如下:
void Deck::Delete(int m,int n) //删除一张,n指删除排的位置(第几张牌 )
{ for(int i=n;i<13;i++)
card[m][i]=card[m][i+1];
card[m][13]=PlayingCard(); //将删除的后面的牌依次向前移,并为最后一张赋空,虽然最后一张赋空但其空间仍存在,因此运行时会显示问号。
}
将牌删除以后,调用ShowCard()显示删除的那张牌,并显示剩余的那张牌以及未删除的人的所有牌。
创建一副扑克,显示一副扑克牌,洗牌,一次分发给四个人并显示。
实现函数:DeckMakeDriver() Deck::MakeDeck() PlayingCard::CardMake() Deck::ShowDeck() Deck::DeckShuff() Deck::SendDeck() PlayingCard::ShowCard()
主函数中直接调用函数DeckMakeDriver()来实现,其中发牌函数SendDeck()为新增函数,具体实现过程如下:
void Deck::SendDeck() //为四个玩家分牌并显示
{
int m=0,n=0,p=0,q=0;
for(int i=0;i<54;i++)
{
switch(i%4)
{ case 0: card[0][m]=m_cardarray[i];m++;break;
case 1: card[1][n]=m_cardarray[i];n++;break;
case 2: card[2][p]=m_cardarray[i];p++;break;
case 3: card[3][q]=m_cardarray[i];q++;break;
}
}
for(int a=0;a<2;a+
文档评论(0)