




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告学院、系:吉林大学珠海学院专业名称:软件工程课程设计科目VC+程序课程设计学生姓名:指导教师:完成时间:2013年12月题目模拟人工洗牌 编写一个模拟人工洗牌的程序,将洗好的牌分别发给四个人。使用结构card 来描述一张牌,用随机函数来模拟人工洗牌的过程,最后将洗好的52张牌顺序分别发给四个人。对每个人的牌要按桥牌的规则输出。即一个人的牌要先按牌的花色(顺序为梅花、方块、红心和黑桃)进行分类,同一类的牌要再按A、K、Q、J、3、2牌的大小顺序排列。另发牌应按四个人的顺序依次分发。注:C+随机数函数有:void srand(unsigned seed) 一、设计任务与目标我选择的题目是模拟人工洗牌的题目,上一学期的语言设计中我已经使用过rand函数和scrand函数,所以此次设计来说是有一些相对的优势。希望通过课程设计来查看自己半学期来的学习情况,不断完善和学习课程的学习经验,加强自己的动手实践能力,增加知识,强化学习,是自己获得进步。二、方案设计与论证:设计思想:第一:根据题目要求,设置一个结构体card,因为一张牌有花色和数字的不同,所以结构体card包括了flag和value两个成员,其中flag通过取0,1,2,3来分别表示梅花,方块,红心和黑桃四种花色;value取值2-10、J(11)、Q(12)、K(13)、A(14)来表示牌上的数字。因此一张牌可以由flag和value的组合来唯一确定。第二:洗牌(shuffle)。由于洗牌时牌的顺序是随机的,所以用到了voidsrand(unsignedseed)和intrand(void)函数。通过srand函数设置rand函数所用得到随机数产生算法的种子值来不断改变rand函数的随机数的启动种子值,以产生最佳的随机数。又由于相同的种子后面的rand()函数会出现一样的随机数。所以为了防止随机数每次重复常常使用系统时间来初始化,即使用time函数来获得系统的时间,将time_t型数据转化为(unsigned)型再传给srand函数,即srand((unsigned)time(&t);而在这里所用的则是srand(time(NULL),直接传入一个空指针。用0到51的整数分别对应52张牌随机产生0到51之间的一个整数,将该整数所对应的那张牌与0对应的那张牌交换,然后随机产生1到51之间的一个整数,重复该过程,每次随机数的最大范围减1,直到洗牌完毕。第三:排序(sort)。排序包括按花色排序和按大小排序。在按花色排序中,利用sort函数,根据冒泡排序法,从第一张牌开始依次与其后面的牌比较flag的大小,若第一张牌的flag大于后面的,则两者交换,否则继续。同理:在按照大小排序时,按照冒泡排序法,大的值在前,小的在后。而在花色排好之后,只需要在某种花色的内部进行大小排序即可。即函数sortvalue().第四:牌的显示(show()。牌的显示包括花色和数字。花色用switch函数分为四种情况分别输出。数字则直接定义一个字符型数组,通过数组value来表示输出即可。第五:主函数:(1)设置四个数组Au,Bu,Cu,Du来反别表示四个人的牌。然后模拟出52张牌。(2)洗牌。(3)发牌:发牌时是根据memcpy函数随机将牌发给四个人。(4)排序。将牌发好之后再根据排序函数分别对四个人的牌进行花色和大小的排序。(5)输出。即用show函数将牌输出。结束。3、 程序框图或流程图,程序清单与调用关系classArtificialShuffleintflag value四、全部源程序清单#include #include #include #include using namespace std;enum SortType flag, value;typedef class CARD/据题目要求,设置一个结构体card Public: int flag; int value; Card;class ArtificialShuffle/根据实验要求,设置一个ArtificialShuffle类public:void shuffle(Card *cards);/洗牌void sort(Card *cards, int size, SortType stype);/排序void show(int flag, int value);/显示牌的花色和数字void sortValue(Card *cards);/排序void print();/打印至屏幕private:Card cardst52;/模拟出52张牌Card At13, Bt13, Ct13, Dt13;/设置四个数组来分别表示四个人的牌;void ArtificialShuffle:shuffle(Card *cards) int i, j, t; Card c; srand(time(NULL);/使用time函数来获得系统时间,并使用srand产生种子值提供给rand使用 for (i = 0; i 52; +i) for (j = 0; j 52; +j) t = rand() % 52; if (j != t) memcpy(&c, &cardst, sizeof(Card);/void *memcpy(void *dest, const void *src, size_t n); memcpy(&cardst, &cardsj, sizeof(Card);/从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 memcpy(&cardsj, &c, sizeof(Card); void ArtificialShuffle:sort(Card *cards, int size, SortType stype) int i, j, k; Card t; for (i = 0; i size-1; +i)/根据冒泡排序法,从第一张牌开始依次与其后面的牌比较flag的大小 k = i; for (j = i + 1; j cardsj.flag) k = j; else if (stype = value) & cardsk.value cardsj.value) k = j; if (k != i) memcpy(&t, &cardsi, sizeof(Card); memcpy(&cardsi, &cardsk, sizeof(Card); memcpy(&cardsk, &t, sizeof(Card); void ArtificialShuffle:show(int flag, int value) static char values = 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A; char a,b,c,d; a=3;b=4;c=5;d=6;/使用ASCII码中的扑克牌花色代码值使其打印出花色 switch (flag) case 0: cout c ;/花色用switch函数分为四种情况分别输出 break; case 1: cout b ; break; case 2: cout a ; break; case 3: cout d ; break; if (value = 10) cout 10; else cout valuesvalue-2; /根据扑克牌所建立的字符数组,因此要-2 cout tt; void ArtificialShuffle:sortValue(Card *cards)/同理,冒泡法排序 int p4 = 0, 0, 0, 0; int i, j; ArtificialShuffle TX; for (i = 0; i 13; +i) +pcardsi.flag; j = 0; for (i = 0; i 4; +i) TX.sort(cards + j, pi, value); j += pi; void ArtificialShuffle:print() ArtificialShuffle LX; int i, j, s = 0, v = 2; for (i = 0; i 52; +i) cardsti.flag = s; cardsti.value = v; +v; if (i+1) % 13 = 0) +s; v = 2; LX.shuffle(cardst); j = 0; for (i = 0; i 52; i += 4) memcpy(&Atj, &cardsti, sizeof(Card);/发牌时是根据memcpy函数随机将牌发给四个人 memcpy(&Btj, &cardsti+1, sizeof(Card); memcpy(&Ctj, &cardsti+2, sizeof(Card); memcpy(&Dtj, &cardsti+3, sizeof(Card); +j; LX.sort(At, 13, flag); LX.sortValue(At); LX.sort(Bt, 13, flag); LX.sortValue(Bt); LX.sort(Ct, 13, flag); LX.sortValue(Ct); LX.sort(Dt, 13, flag); LX.sortValue(Dt); cout 玩家一 t t 玩家二 t; cout t 玩家三 t t 玩家四 endl; for (i = 0; i 13; +i) LX.show(Ati.flag, Ati.value); LX.show(Bti.flag, Bti.value); LX.show(Cti.flag, Cti.value); LX.show(Dti.flag, Dti.value); cout endl; void main()/主函数 ArtificialShuffle RGXP; RGXP.print();五、程序运行的测试与分析此程序内rand函数可以产生介于0到32767间的虚拟随机数,所谓虚拟随机数的意思就是因为当只设置相同的启动种子值,所产生的数值序列都是可预测的。要产生不可预测的数值序列,必须通过srand函数不断改变随机数的启动种子值,已产生最佳的随机数。六、结论与心得 这一次的程序设计是我对于一学期来的学习VC+课程的总结,这是一个有意义的过程,现在的我已经能够简单的设计一些小的程序,这次的设计经历对我的进步起了一个不小的推进作用,在这次设计中我遇到了不少的问题,同样也总结了不少东西,比如我认为在做设计之前要有一个清晰的思路,要细心的考虑每个细节,所以更要求我们认真对待,认真完成,再设计的过程中有可能需要新知识,这就要求我们在课外去寻找,去自学。通过这个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全员上岗证考及答案1
- 农业综合开发施工组织设计
- 学校安保处工作计划
- 乘加 乘减(教学设计)-2024-2025学年二年级上册数学人教版
- 1.2 数轴、相反数和绝对值教学设计-2025-2026学年初中数学沪科版2012七年级上册-沪科版2012
- 测量与控制系统(单元)装调工技能巩固考核试卷及答案
- 匿名读书心得分享
- 己二腈装置操作工工艺创新考核试卷及答案
- 植物插画教学创新创业项目商业计划书
- 植物编织材料创新创业项目商业计划书
- GB/T 7713.4-2025信息与文献编写规则第4部分:数据论文
- 2025年全国通信专业技术人员职业水平考试(通信专业实务终端与业务)(高、中级)练习题及答案
- 法律职业资格考试客观题(试卷一)试题与参考答案(2025年)
- 江西中寰投资集团下属公司招聘笔试题库2025
- 狂犬疫苗使用培训课件
- 2025新疆伊犁州伊宁市中小学招聘各学科编外教师备考考试题库附答案解析
- 2025-2030中国游戏音频技术发展与沉浸式体验设计趋势报告
- 2023-2025年高考化学试题分类汇编:有机化合物(原卷版)
- 【2025年】郴州社区专职工作人员招聘考试笔试试卷【附答案】
- 2025年苏绣行业研究报告及未来行业发展趋势预测
- 2025发展对象考试题库附含答案
评论
0/150
提交评论