扑克牌游戏
更新时间:2023-08-29 02:35:01 阅读量: 教育文库 文档下载
课题标号:2,游戏程序 第1题
课题名称:扑克牌游戏
一.程序功能简介
创建一副扑克,并完成洗牌,显示洗过后的新牌,删除指定的牌,发牌,排序等操作.是一个游戏小程序.
二.课程设计要求
(1)增加大小王
(2)删去一张指定扑克后,余牌显示
(3)创建一副扑克,显示一副扑克,洗牌,依次分给4个人并显示
三.课程设计思想
1.添加大小王并赋值:
将一副扑克牌对象内的扑克牌数增加两张(Playing_Card m_cardarray[54];),对这两张牌的面值及花色分别赋值”B”(大王)”S”(小王)(在PlayingCard类定义的CardMake(int nNum)中先制造52张牌面值花色,再分别用两个if结构添加大王,小王).
void PlayingCard::CardMake(int nNum) //生成一副牌 { int i = 0;
char j;
int nFaceNum = nNum % 13;
switch(nFaceNum)
{
case 0: strcpy(achFace," A");break;
case 9: strcpy(achFace,"10");break;
case 10: strcpy(achFace," J");break;
case 11: strcpy(achFace," Q");break;
case 12: strcpy(achFace," K");break;
default:j = char(nFaceNum + 49);
if(i<3)
{
achFace[i] = ' '; i++;
achFace[i] = j;i++;
achFace[i] = NULL;
break;
}
}
if(nNum <= 12)chSuit = 6;
if(nNum >12 && nNum <= 25)chSuit = 3;
if(nNum >25 && nNum <= 38)chSuit = 5;
if(nNum >38 && nNum <= 51)chSuit = 4;
if(nFaceNum <= 9)nValue = nFaceNum + 1;
(添加大王) (添加小王) if(nFaceNum == 10)nValue = 11;
if(nFaceNum==11)nValue=12;
if(nFaceNum==12)nValue=13;
}
2.创建一副牌分发四人
根据书上介绍创造两个类,命名为PlayDeck(四个人玩牌的过程) 和PlayDeck(某人拿的牌),把它们设为Deck类和Playing Card类的友元类.,在void PlayDeck::PlayCard(Deck&deck)中将其分为四份,依次分给每人:
void PlayDeck::PlayCard(Deck&deck) //将牌分为四份
{
for(int i=0;i<53-deck.nLastDelt;i++)
{
int n=i%4;
if(n==0){m_deck[0].m_Card[a]=deck.m_cardarray[i];a++;}
if(n==1){m_deck[1].m_Card[b]=deck.m_cardarray[i];b++;}
if(n==2){m_deck[2].m_Card[c]=deck.m_cardarray[i];c++;}
if(n==3){m_deck[3].m_Card[d]=deck.m_cardarray[i];d++;}
}
m_deck[0].nNum=a;
m_deck[1].nNum=b;
m_deck[2].nNum=c;
m_deck[3].nNum=d;
cout<<endl;
}
题目要求为同副牌,我把原程序中void DeckMakeDriver()去掉,把Deck对象deck_1作为那副牌,进行操作。
3.删除指定牌:
题目要求删去一张指定扑克后,余牌显示。当输入序号时候,会显示所删的牌,并且余牌显示,当在次询问是否删牌时,将删除余牌中所对应的那一张。
void Deck::DealOne() //删除一张牌
{
int k=0;
int m;
if(nLastDelt!=53)
{
cout.width(5);
cout <<" 删除牌(第几张):"<<'\t';
cin>>m;
cout<<"删除牌为:"<<'\t';
m_cardarray[m-1].ShowCard();
cout<<endl<<"余牌为:"<<endl;
for(m;m<54;m++) //将所删牌去掉,并将后一张牌的值赋予前张 {m_cardarray[m-1]=m_cardarray[m];
m_cardarray[m]= PlayingCard();}
for(int i=0;i<52-nLastDelt;i++) //显示余牌
{
if(k%11==0)cout<<endl;
m_cardarray[i].ShowCard();
k++;
}nLastDelt++;
}
else
{
cout << "这副牌全部删除完了";
ProgClose();
}
}
后面在类PlayDeck里有设计了删牌程序分别删一张或一轮
void PlayDeck::DeleteOne(int row,int column) //删除一张牌
{
m_deck[row-1].m_Card[column-1].ShowCard();
cout<<endl<<"剩余牌为:"<<endl;
for(int i=0,k=1;i<m_deck[row-1].nNum;i++){
if(i!=column-1){
m_deck[row-1].m_Card[i].ShowCard();
if(k%5==0)cout<<'\n';
k++;}
switch(row){
case 1:a--;break;
case 2:b--;break;
case 3:c--;break;
case 4:d--;break;}
}
cout<<endl;
}
void PlayDeck::DeleteAll(int one,int two,int three,int four) //删除一轮牌{
cout<<"玩家1删除的牌: ";
m_deck[0].m_Card[one].ShowCard();
cout<<'\n'<<"余牌为:\n";
for(int m=0,z=1;m<a;m++)
if(m!=one){m_deck[0].m_Card[m].ShowCard();
if(z%5==0)cout<<endl;z++;}
cout<<endl;
cout<<"玩家2删除的牌: ";
m_deck[1].m_Card[two].ShowCard();
cout<<'\n'<<"余牌为:\n";
for(int i=0,l=1;i<b;i++)
if(i!=two){m_deck[1].m_Card[i].ShowCard();
if(l%5==0)cout<<endl;l++;}
cout<<endl;
cout<<"玩家3删除的牌: ";
m_deck[2].m_Card[three].ShowCard();
cout<<'\n'<<"余牌为:\n";
for(int j=0,x=1;j<c;j++)
if(j!=three){m_deck[2].m_Card[j].ShowCard();
if(x%5==0)cout<<endl;x++;}
cout<<endl;
cout<<"玩家4删除的牌: ";
m_deck[3].m_Card[four].ShowCard();
cout<<'\n'<<"余牌为:\n";
for(int k=0,y=1;k<d;k++)
if(k!=four){m_deck[3].m_Card[k].ShowCard();
if(y%5==0)cout<<endl;y++;}
cout<<endl;
a--;b--;c--;d--;
}
在程序中a,b,c,d为整体变量
4.添加人性化界面
开始运行程序时加了一个友好的界面,输出了自己的姓名和学号.并且在程序中用system(cls)清屏,使屏幕明朗。在洗牌的程序中加入了函数void wait(int milli)延时,使视觉效果真实。另,在类PlayDeck中有排序程序,发牌后显示排序,可按面值大小或花色排序 void PlayDeck::SortFace(int num,int t) //按面值排列
{
PlayingCard a;
for(int i=0;i<num-1;i++)
for(int j=i+1;j<num;j++)
if(m_deck[t].m_Card[i].nValue<m_deck[t].m_Card[j].nValue)
{
a=m_deck[t].m_Card[i];m_deck[t].m_Card[i]=m_deck[t].m_Card[j]; m_deck[t].m_Card[j]=a;
}
}
//*********************************************************************** void PlayDeck::SortSuit(int num,int t) //按花色排列
{
PlayingCard a;
for(int i=0;i<num-1;i++)
for(int j=1+i;j<num;j++)
if(m_deck[t].m_Card[i].chSuit<m_deck[t].m_Card[j].chSuit)
{
a=m_deck[t].m_Card[i];m_deck[t].m_Card[i]=m_deck[t].m_Card[j]; m_deck[t].m_Card[j]=a;
}
}
四.课程设计思所遇困难
设计过程中遇到过一些问题,设计增加大小王时,如何增加两张新牌而不破坏原有的牌,这我增加了两个if语句,并且写在后面,这等于将一张牌其中的量赋了两次值后才有大小王,若在前面书写if语句,则大小王的面值不能按自己要求赋值。如何再删除牌后余牌显示,也是比较困难,我尝试过用PlayingCard()去使值清零,但这样显示的只是问号,后来,我才想起for语句将后值赋于前值,再显示出来。最后的类比较繁琐,对每一个函数具体运用要靠自己编写。如:如何将删去若干张牌后的剩下牌分给四人的具体方法等。这都是我在程序设计中所遇到的困难。另外,一些细节问题也会使程序出错,例如:将判断符号“==”输为“=”等。
五.程序设计的个人体会
一开始我还认为我不可能完成,但是经过四周的努力我完成了,虽难不够完善,但是我自己能够编出来程序,并且有所收获,我觉得很不错了。编程并不像想象中那么容易,如何将一个程序用最简便的方法编写出来,而且使程结构序严谨,实现较多功能,是很困难的,我所设计的扑克牌游戏,只能完成删牌功能,而且比较繁琐,我所学到的C++知识,只有这样远远不够,对于真正的掌握编程还有一段距离,我应该更加努力学习。同时,在小细节上犯的错误让我明白我应
该更加严谨。这样才能少犯些错误。
正在阅读:
扑克牌游戏08-29
2022年复旦大学外国语言文学学院819语言学概论(韩国语)考研核心04-07
走进直播间作文700字06-26
中央广播电视大学英语(2)07-27
法律专业大学生公司实习报告01-05
华北2×350MW超临界供热机组扩建配套化学可行性研究报告-广州中撰咨询08-25
军训心得_大一新生接受军事训练心得体会03-27
宁夏自考信息网02-08
中级食品检验工复习题105-18
江苏高考2011-2015诗歌真题汇编01-05
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 扑克牌
- 游戏
- 一笔画解析--谢谢-经典——一块由两个正三角形拼成的菱形土地ABCD周长为800米
- 中国地质大学北京 地球科学概论 考研资料
- 创客空间管理制度
- 向量组的线性相关性习题课
- 最新外研版小学英语五年级上册he was in the kitchen公开课教学设计 (1)
- 五年级上册解方程练习题
- 2013国家公务员考试行测备考:语句排序题之关联词语突破
- 成功议论文写法教案 (5)
- 绥化市违反兽药管理行为行政处罚制度
- 马原课后思考题答案〔5-7章〕及相关材料〔2009.12.16〕
- 数据库课后练习及答案
- HITACHI 7180操作流程
- 初中奥数讲义_因式分解的应用附答案
- 2016年清华大学风景园林学考研复习计划
- 金属切削刀具
- 电力系统分析——习题
- 剑南春硬汉酒商业计划书
- 六年级上册1-16课课内阅读专题训练题
- 陕西师范大学出版社2014八年级数学上册C版答案
- 土人景观设计-秦皇岛滨海公园