资源描述:
《扑克牌洗牌发牌过程模拟课程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、珠海学院课程设计报告学院、系:吉林大学珠海学院计算机科学与技术系专业名称:计算机科学与技术设计科目:程序设计基础课程设计学生姓名:指导教师:完成时间:2015年5月5日第一章—扑克牌洗牌发牌过程模拟编写一个模拟人工洗牌的程序,将洗好的牌分别发给四个人。对每个人的牌要按桥牌的规则输出。即一个人的牌要先按牌的花色(顺序为梅花、方块、红心和黑桃)进行分类,同一类的牌要再按A、K、Q、J、…、3、2牌的大小顺序排列。另发牌应按四个人的顺序依次分发。1.1设计任务与目标模拟人工洗牌的题目,用自己所学的C++进行编写,并且完善随机洗牌算法,以及排序算法的
2、优化,学习习课程的学习经验,加强自己的动手实践能力,增加知识,强化学习,是自己获得进步。1.2方案设计与论证1.2.1根据题目要求,设置一个结构体card,因为一张牌有花色和数字的不同,所以结构体card包括了flag和value两个成员,其中flag用整型{1,2,3,4}来分别表示梅花,方块,红心和黑桃四种花色;value用{1,2,3,4,5,6,7,8,9,10,11,12,13}来表示牌上的数字。因此一张牌可以由flag和value的组合来唯一确定。在ASCFlag和ASCValue分别来表示ASCII码的扑克花印以及扑克符号。1.
3、2.2洗牌(shuffle)。由于洗牌时牌的顺序是随机的,所以用到了void srand(unsigned seed)和int rand(void)函数。通过srand函数设置rand函数所用得到随机数产生算法的种子值来不断改变rand函数的随机数的启动种子值,以产生最佳的随机数。又由于相同的种子后面的rand()函数会出现一样的随机数。所以为了防止随机数每次重复常常使用系统时间来初始化,即使用time函数来获得系统的时间,将time_t型数据转化为(unsigned)型再传给srand函数,即srand((unsigned)time(&t)
4、);而在这里所用的则是srand(time(NULL)),直接传入一个空指针。用0到51的整数分别对应52张牌 随机产生0到51之间的一个整数,将该整数所对应的那张牌与0对应的那张牌交换,然后随机产生1到51之间的一个整数,重复该过程,使他们仅交换数组下标,从而不改变扑克符号和花印。 1.2.3排序(sort)。排序包括按花色排序和按大小排序 。在按花色排序中,利用sort函数,根据冒泡排序法,从第一张牌开始依次与其后面的牌比较flag的大小,若第一张牌的flag大于后面的,则两者交换,否则继续。同理:在按照大小排序时,按照冒泡排序法,大的值
5、在前,小的在后。而在花色排好之后,只需要在某种花色的内部进行大小排序即可。 1.2.4牌的显示(colourPX[])。牌的显示包括花色和数字。用switch函数把原来的flag和value成员赋值给ASCFlag和ASCValue成员,让ASCFlag和ASCValue成员打印出ASCII码花色和符号。1.2.5设置四个数组A[u], B[u], C[u], D[u]来分别表示四个人的牌。然后模拟出52张牌。(2)洗牌。(3)发牌:发牌时是根据顺序轮流分给四个人 (4)排序。将牌发好之后再根据排序函数分别对四个人的牌进行花色和大小的排序。(
6、5)输出。即用print函数将牌输出。结束。1.3程序框图或流程图,程序清单与调用关系1.4全部源程序清单//扑克3.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include#include#include#includeusingnamespacestd;typedefclassCARD{public:intflag;//扑克的类型intvalue;//扑克编号stringASCFlag;//用ASCII码表示扑克花印stringASC
7、Value;//表示扑克符号}Card;classpu_ke{public:pu_ke();//初始化扑克voidshuffle();//洗牌voiddeal();//扑克分牌voidsort(CardPX[]);//排序扑克voidcolour(CardPX[]);//給扑克印色voidprint();//扑克输出CardP1[13],P2[13],P3[13],P4[13];private:CardP[52];Cardswap;};pu_ke::pu_ke()//初始化扑克{intFlags[4]={1,2,3,4};intValue[1
8、3]={1,2,3,4,5,6,7,8,9,10,11,12,13};for(inti=0;i<13;i++){P[i].flag=Flags[0];P[i].va