纸牌游戏设计报告.doc_第1页
纸牌游戏设计报告.doc_第2页
纸牌游戏设计报告.doc_第3页
纸牌游戏设计报告.doc_第4页
纸牌游戏设计报告.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

纸牌游戏设计报告纸牌游戏设计报告1.问题描述:本次设计通过C语言编写程序实现对图像一般的基本处理,本次设计主要是52张纸牌除去大小王,玩家4位;需要实现以下功能。设计一个菜单界面,上面分别有1.发新牌、2.洗牌发牌、3.按点数理牌、4退出。当点击“1.发新牌”,会转换到一个新的发牌界面上,在这个界面上实现四位玩家中每位玩家的牌都是按照同一花色从小到大的排列界面(其中A最小,K最大),而且最后还能返回到菜单界面;同样当点击“2.洗牌发牌”,发牌界面上四位玩家中牌是随机排列没有特定的规律,但是要注意的是每位玩家的牌都是不相同的;当点击“3.按点数发牌”,发牌界面上四位玩家的牌是随机发牌之后按照从小到大的顺序依次排列;当点击“4.退出”,退出菜单界面结束程序的运行。2.模块划分:此次设计主要有四个模块,它们分别是菜单模块、发新牌模块、洗牌发牌模块、按点数理牌模块;它们的之间的关系如下所示 它们所对应的界面转换关系如下: 3. 算法设计:(1)52张纸牌图片的放置:第一步:开辟一个存放52张纸牌地址的一维数组a52,定义变量i,x;第二步:将这52张纸牌按照特定的顺序特定的顺序加载到这个数组中去;第三步:利用4个for循环语句控制每张图片输出的位置putimage()函数;第四步:设置一个清屏函数system(“cls”),当按下键盘上Enter键退出该界面。(2)随机数组b52的生成:第一步:定义三个变量i,j,tmp;第二步:设置一个随机种子srand(unsigned)time(NULL);第三步:利用for循环生成52个随机数;第四步:利用while循环生成每个随机数;第五步:在while循环下,在利用for循环判断生成的随机数与之前生成随机是否相同,相同执行break语句结束循环生成新的随机数,再次进行比较;如果不相同则存放到数组中去;最后将这个数组返回到主函数中去。(3)随机数组b52按一定顺序排列:第一步:定义三个变量i,j,temp;第二步:利用4个嵌套的for循环语句来实现每位玩家的13张纸牌按照从小到大的顺序排列;第三步:在每个嵌套的for循环中利用bi%13来确定每张纸牌的大小,如果后一张牌比前一张牌小,则交换它们的位置,最后返回这个数组b52到主函数中去。(4)鼠标的生成:第一步:定义一个鼠标按键信息MOUSEMSG msg;第二步:设置一个鼠标函数msg=GetMouseMsg();第三步:利用一个if语句判断鼠标左键是否按下msg.uMsg=WM_LBUTTONDO-WN;第四步:在if语句下根据鼠标函数msg.x,msg.y的范围生成字符1、2、3、4,最后这四个字符返回发到主函数中去。(5) 主函数实现调用函数的功能:第一步:定义调用函数数组范围的值SIZE=52;图片的大小initgraph();flag初始化-flag=0;第二步:利用while(flag=0)循环判断是否执行相应的函数调用;第三步:利用switch-case语句来调用相应的函数,其中case的值是上述返回的字符1、2、3、4;第四步:当case=1执行发新牌功能; 当case=2执行洗牌发牌功能; 当case=3执行按点数理牌功能; 当case=4flag=1,结束while循环,退出程序。4.详细设计:整个程序函数之间的关系如下所示 主函数按点理牌函数洗牌发牌函数洗牌发牌函数纸牌展示函数纸牌展示函数纸牌背景函数纸牌展示函数纸牌背景函数按点数理牌 洗牌发牌发新牌 发新牌函数以下是本次设计函数功能描述:(1)菜单界面的函数DispMenu1()是基于c语言利用easy.h库函数将菜单背景图片展示在出来,其中loadimage加载图片,putimage放置图片;(2)菜单选择函数ChooseMenu()是并且在其中利用easy.h库函数鼠标函数的功能来实现,其中MOUSEMSG msg是鼠标定义信息,利用if语句,当鼠标按下左键键函数msg=WM_LBUTTONDOWN和1.发新牌、2.洗牌发牌、3.按点数理牌、4.退出在菜单背景图片msg.x和msg.y的范围来控制产生四个字符1、2、3、4;并将字符返回给主函数; (3) 类似于(1)将52张纸牌的背景函数DispMenu2();(4) 纸牌展示函数ShowCard()利用zasy.h库函数将52张纸牌图片的地址加载到一个一维数组a52中去,在此过程中利用四个for循环控制每张纸牌图片在背景图片上的位置以及它们之间的间距,在该函数还设置了一个清屏功能“system(cls)”用来返回主菜单操作;(5) 发新牌函数NewCard(),就是定义一个一维数组b52,通过for循环给这个一维数组赋值,数组中每个元素的值等于该该下标;(6) 洗牌发牌函数Shuffle(),就是定义一个一维数组b52,利用随机种子srand(unsigned)time(NULL)和循环生成52个051的不同的整数,并将它们赋到一维数组b52中去;(7) 按点数理牌函数SortCard(),将(6)中生成的一维数组b52分成四组,它们分别是b0b12,b13b25,b26b38,b39b52,将每组的13个元素除以13求其余数,该余数的大小代表了该纸牌的点数大小,最后利用循环语将每组元素余数按照从小到大排序;(8) 主函数mian(),该函数的功能就是通过Swtichcase语句调用相应的函数来实现指定的功能;5.运行结果:当点击运行结果是会出现菜单界面当鼠标点击1.发新牌时会出现下面的界面:当鼠标点击2.洗牌发牌时会出现下面的界面:当鼠标点击3.按点数理牌时会出现下面的界面:从上述运行的结果可以看到,实现一副牌不含大小王的同一花色13张牌分配给同一玩家;然后随机分配给每位玩家;最后随机分配给玩家的牌按大小顺序排列。符合设计要求。当在键盘上按下“Enter”返回主菜单。6.心得与体会利用C语言程序设计课程的相关知识完成一个具有一般的软件设计题目,在此次设计中利用C语言进行程序设计,并规范地完成设计报告。通过设计巩固和加深对C语言的语言、算法、函数等知识的理解掌握现实复杂问题的分析建模和解决方法包括问题描述、系统分析、设计建模、代码实现、结果分析等提高利用计算机分析解决综合性实际问题的基本能力,并且使自己对软件有进一步的了解。通过此次设计使我基本掌握程序设计的基本方法和步骤,而且对我以前学习知识的一个检测,同时也让自己意识到还有很多的地方自己做的不够,还需要继续潜心学习;在设计程序首先要对自己的设计有所了解,如何去设计,大致的步骤有哪些,如何去实现它的功能,同时也必须查阅相关的资料,找到相关的例子,然后进行创新,得到自己想要的结果,要反复进行调试,找出自己存在的问题,不断改进提高。7.程序源代码:#include#include #include easyx.h#include conio.h#include time.hstatic int b52;void ShowCard(void)/将52张纸牌展示在背景图片上 IMAGE a52;int i,x; loadimage(&a0,_T(E:程序1231231.jpg),80,80,true);/加载背景图片,按指定大小存储loadimage(&a1,_T(E:程序1231235.jpg),80,80,true);loadimage(&a2,_T(E:程序1231239.jpg),80,80,true);loadimage(&a3,_T(E:程序12312313.jpg),80,80,true);loadimage(&a4,_T(E:程序12312317.jpg),80,80,true);loadimage(&a5,_T(E:程序12312321.jpg),80,80,true);loadimage(&a6,_T(E:程序12312325.jpg),80,80,true);loadimage(&a7,_T(E:程序12312329.jpg),80,80,true);loadimage(&a8,_T(E:程序12312333.jpg),80,80,true);loadimage(&a9,_T(E:程序12312337.jpg),80,80,true);loadimage(&a10,_T(E:程序12312341.jpg),80,80,true);loadimage(&a11,_T(E:程序12312345.jpg),80,80,true);loadimage(&a12,_T(E:程序12312349.jpg),80,80,true);loadimage(&a13,_T(E:程序1231232.jpg),80,80,true);loadimage(&a14,_T(E:程序1231236.jpg),80,80,true);loadimage(&a15,_T(E:程序12312310.jpg),80,80,true);loadimage(&a16,_T(E:程序12312314.jpg),80,80,true);loadimage(&a17,_T(E:程序12312318.jpg),80,80,true);loadimage(&a18,_T(E:程序12312322.jpg),80,80,true);loadimage(&a19,_T(E:程序12312326.jpg),80,80,true);loadimage(&a20,_T(E:程序12312330.jpg),80,80,true);loadimage(&a21,_T(E:程序12312334.jpg),80,80,true);loadimage(&a22,_T(E:程序12312338.jpg),80,80,true);loadimage(&a23,_T(E:程序12312342.jpg),80,80,true);loadimage(&a24,_T(E:程序12312346.jpg),80,80,true);loadimage(&a25,_T(E:程序12312350.jpg),80,80,true);loadimage(&a26,_T(E:程序1231233.jpg),80,80,true);loadimage(&a27,_T(E:程序1231237.jpg),80,80,true);loadimage(&a28,_T(E:程序12312311.jpg),80,80,true);loadimage(&a29,_T(E:程序12312315.jpg),80,80,true);loadimage(&a30,_T(E:程序12312319.jpg),80,80,true);loadimage(&a31,_T(E:程序12312323.jpg),80,80,true);loadimage(&a32,_T(E:程序12312327.jpg),80,80,true);loadimage(&a33,_T(E:程序12312331.jpg),80,80,true);loadimage(&a34,_T(E:程序12312335.jpg),80,80,true);loadimage(&a35,_T(E:程序12312339.jpg),80,80,true);loadimage(&a36,_T(E:程序12312343.jpg),80,80,true);loadimage(&a37,_T(E:程序12312347.jpg),80,80,true);loadimage(&a38,_T(E:程序12312351.jpg),80,80,true);loadimage(&a39,_T(E:程序1231234.jpg),80,80,true);loadimage(&a40,_T(E:程序1231238.jpg),80,80,true);loadimage(&a41,_T(E:程序12312312.jpg),80,80,true);loadimage(&a42,_T(E:程序12312316.jpg),80,80,true);loadimage(&a43,_T(E:程序12312320.jpg),80,80,true);loadimage(&a44,_T(E:程序12312324.jpg),80,80,true);loadimage(&a45,_T(E:程序12312328.jpg),80,80,true);loadimage(&a46,_T(E:程序12312332.jpg),80,80,true);loadimage(&a47,_T(E:程序12312336.jpg),80,80,true);loadimage(&a48,_T(E:程序12312340.jpg),80,80,true);loadimage(&a49,_T(E:程序12312344.jpg),80,80,true);loadimage(&a50,_T(E:程序12312348.jpg),80,80,true);loadimage(&a51,_T(E:程序12312352.jpg),80,80,true); BeginBatchDraw();for(i=0,x=80;i13;x=x+60,i+)putimage(x,90,&abi);for(i=13,x=80;i26;x=x+60,i+)putimage(x,200,&abi);for(i=26,x=80;i39;x=x+60,i+)putimage(x,310,&abi);for(i=39,x=80;i52;x=x+60,i+)putimage(x,420,&abi); FlushBatchDraw(); EndBatchDraw(); system(pause);system(cls);int NewCard(int b52,int h)/给一维数组b52赋值int i; for(i=0;ih;i+)bi=i;return b52;int Shuffle(int b52,int h)/随机生成52个152的不同的整数存放到一维数组b52中去 int i,j,tmp;srand(unsigned)time(NULL); for(i=0;ih;i+) while(1) tmp=h*rand()/RAND_MAX; for(j=0;ji;j+) if(tmp=bj) break;if(j=i) bi=tmp; break; return b52;int SortCard(int b52,int h )/将一维数组b52分成四组,每组13个数按照从小大的顺顺排列int i,j,temp;for(i=0;i13;i+) for(j=0;j13;j+) if(bi%13)(bj%13) temp=bi; bi=bj; bj=temp; for(i=13;i26;i+) for(j=13;j26;j+) if(bi%13)(bj%13) temp=bi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论