- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模拟人工发牌课程设计报告
目 录
1 前言 1
2 需求分析 1
2.1 任务和要求 1
2.2 运行环境 1
2.3 开发工具 1
3 分析和设计 2
3.1 系统分析及设计思路 2
3.2 主要数据结构及算法 2
3.3 函数流程图 3
4 具体代码实现 5
5 课程设计总结 7
5.1 程序运行结果或预期运行结果 7
5.2 设计结论 7
致 谢 8
1 前言
现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。作为新时代的大学生,我们应该努力学习科学文化知识,以适应社会的发展要求。以现代化的科学知识为祖国做贡献。
我的课程设计的实际题目是用计算机模拟发牌程序。
假设一副扑克牌有52张,共4个玩家,编写程序统计出各玩家手里拿的牌的牌面(牌面包括纸牌的大小和花色)。要求使用C或C++语言编程,定义合适的数据结构。最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。
2 需求分析
2.1 任务和要求
用计算机模拟发牌程序。假设一副扑克牌有52张,共4个玩家,编写程序统计出各玩家手里拿的牌的牌面(牌面包括纸牌的大小和花色)。(1)WINDOWS2000/XP系统
(2)Visual C++ 6.0编译环境或编译环境C语言
3 分析和设计
3.1 系统分析及设计思路
对课题的理解:模拟人工发牌是把52张扑克牌随机的发到四个玩家手上,最后统计出四个玩家手上拿的牌,包括牌面的花色和大小。而课题主要问题就是如何做到随机性发牌给四个玩家,所以课题要解决的就是要做到随机性的发牌给四个玩家并且每个玩家有且只有13张牌。
设计思想与方法:
1.52张牌可以分为四种花色和每种花色有13张从小到到大的牌,因此可以用一个整数类型的4*13的二维数组来模拟这52张牌,数组的每一行分别代表一种花色,数组的每一列分别代表A到K共13张牌点,这样就模拟出来了这52张牌。而这个二维数组的每个元素的值就是用来存放该牌发给了哪个玩家,例如:a[1][4]=1,表示方块5发给了第一位玩家,以此类推。而数组初始化给每个元素的值都设置为0,表示该牌还没有发到任何一个玩家手上。
2.随机发牌:如何随机把这52张牌随机发给四个玩家,我的想法是利用C语言里的随机函数rand()随机抽取二维数组里的一个元素,接着判断这个被随机抽取出来的元素是否已经属于某个玩家,即该元素的值是否等于0,如果不等于0,则继续随机抽取另外一个元素。否则,赋予这个元素的值为某个玩家,并且设置一个计数器Z,用来统计该玩家当前有多少张牌,当Z=13后就停止给该玩家发牌。这样就完成了给一个玩家发牌。循环四次则把52张牌随机的发给了四个玩家。
3.统计玩家的牌:就是输出四个玩家手中的牌(包括牌面的花色和大小),即把二维数组每个元素按值的不同分类输出,把元素的值相等的输出在一起,这样就统计了四个玩家手中的牌。
3.2 主要数据结构及算法
1.先设计主函数(main函数),用一个整数类型的4*13的二维数组来模拟这52张牌。调用各子函数输出结果。
2.设计子函数(init函数)来初始化牌组,使每个玩家一种颜色的牌。
3.洗牌的交换函数随机交换52张牌所属的玩家
N
Y
图3.1 shuffle函数流程图
Y N
Y N
图3.2 show函数流程图
4 具体代码实现
#include stdio.h#include time.h#include stdlib.h// 初始化牌组,初始状态是每个玩家一种颜色的牌void init(int a[][13]){ int i, j; for(i = 0; i 4; ++i) for(j = 0; j 13; ++j) a[i][j] = i+1; // 同一行为相同花色的13张牌}// 用于洗牌的交换函数void swap(int* a, int* b){ int t; t = *a; *a = *b; *b = t;}// 随机打乱,原理是随机交换52张牌所属的玩家// 参数为牌组的首地址和超尾地址(最后一个元素的后一个位置)void shuffle(int* begin, int* end){ int* temp; for(temp = begin; temp != end; ++temp) swap(temp, begin + rand() % (end-begin));}// 输出各个玩家的牌void show(int a[][13]){ int i, j, k; for(k = 0; k 4; ++k) { //
文档评论(0)