- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
毕业,课程,设计,数据结构,算法,斗地主,游戏毕业,课程,设计,数据结构,算法,斗地主,游戏
一、程序功能
斗地主玩法简单,娱乐性强,老少皆宜,如今已风靡整个中国,并流行于互联网上。尤其是三人斗地主,玩法简单,娱乐性强,老少皆宜。该游戏由三个人玩,该游戏由三个人玩,一副牌共54 张牌。每局牌有一个玩家是地主,目标是以合法的出牌方式先出完手里所有的牌,而农民的目标是在地主出完牌以前,先出完手里所有的牌。先出完牌的人所代表的一方获胜。
在这次课程设计中,我采用了数据结构中所学到的链表存储方式对数据进行了存储和提取。用C++和C语言中所学到的循环语句对程序进行了实现。本次课设程序代码实现的动能有:游戏初始化,洗牌函数,出牌函数,显示玩家手牌,桌面菜单等功能。
二、知识运用
本程序采用了多中文件,其中有包括头文件:Player.h、Engine.h、CNpoker.h,源文件:Player.cpp、Engine.h、Cnpoker.cpp。头文件中存在嵌套是的程序变得更有结构。使人更容易读懂。
本程序主要使用的是数组、类(构造函数、成员函数)以及结构体,是的程序变得更加具体。
本程序中还采用了许多函数,例如:if判断语句、switch判断语句、 for循环、while循环、时间函数、随机函数,并且个函数见又存在着函数的嵌套,是得整个程序变得更加的丰富。
该程序也运用了一些本学期所学的数据结构方面的一些内容,例如:随机排序和冒泡排序等。
该程序最大的特点是运用了一些其它的函数,例如:窗口处理函数、光标定位、绘图函数等,优化了程序,使得程序变得更美观。
三、模块分析
3.1 洗牌函数
游戏共需54张牌,所以需要分配54张牌的存储空间,并进行随机洗牌,确保游戏的公平性。首先在Engine.h头文件中定义了一个牌的类,然后调用类的成员函数的,运用随机排序的方法进行洗牌。实现的代码如下:
void CEngine::shuffle(){//洗牌
int i;
for(int i=0;i54;i++)//初始化牌0~53
Card[i]=i;
//随机排序
srand(time(0));
for(i=53;i0;i--){
int random = rand()%(i+1);
//交换
int temp = Card[random];
Card[random]=Card[i];
Card[i]=temp;
}
}
3.2 随机发牌(54张牌发给3个玩家)
首先在Engine.h头文件中定义了一个牌的类。调用类的成员函数Deal(这里主要运用了指针),对三名玩家进行发牌。实现的代码如下:
void CEngine::Deal(CPlayer *p1,CPlayer *p2,CPlayer *p3,int *LC){
shuffle();
//0~16 player0
p1-GetCard(Card,17);
p2-GetCard(Card+17,17);
p3-GetCard(Card+34,17);
LC[0] = Card[51];
LC[1] = Card[52];
LC[2] = Card[53];
}
3.3显示当前玩家手牌
玩家在出牌以后有功能模块会实现对所出数据的删除,玩家手中的牌重新排序。在头文件Player.h中定义了一个CPlayer的类,这个类中定义了拿牌与出牌两种成员函数,在拿牌的成员函数中,当随机发下牌后再运用冒泡排序法对玩家手中的牌进行再次的排序。实现代码如下:
void CPlayer::GetCard(int *c,int n){//得n张牌
for(int i = 0; i n; i++)
Card[nCardNum++] = c[i];//简单赋值
Card[nCardNum]= -2;
int lastExchange=nCardNum-1;//改进冒泡排序
while(lastExchange){
int index=lastExchange;
lastExchange=0;
for(int j=0;jindex;j++){
if(valueOf(Card[j]) valueOf(Card[j+1])){
int temp=Card[j];
Card[j]=Card[j+1];
Card[j+1]=temp;
lastExchange=j;
您可能关注的文档
最近下载
- 2025-2026学年浙江省温州市鹿城区南浦实验中学七年级(下)期中数学试卷.pdf VIP
- 一台列管式换热器的设计(含装配图)-化工原理课程设计.doc
- 桥梁知识专题讲座课程PPT课件.ppt
- 临床技术操作规范:皮肤病与性病分册 中华医学会.pdf
- 医患沟通技巧ppt课件.pptx
- 2024版糖尿病科普课件(完整版).ppt VIP
- 2022科学课程标准解读及学习心得:科学课程的育人方向.docx VIP
- 黄帝内经-认识五脏六腑课件.ppt
- 温州二中2025(突破训练)020年七年级下学期英语期中试题(有答案,无听力).pdf VIP
- 高三生物二轮复习微专题:PCR技术中的引物课件.pptx
文档评论(0)