文档详情

纸牌游戏设计报告.docx

发布:2017-06-06约9.68千字共19页下载文档
文本预览下载声明
纸牌游戏设计报告  PAGE \* MERGEFORMAT 19 纸牌游戏设计报告 1.问题描述: 本次设计通过C语言编写程序实现对图像一般的基本处理,本次设计主要是52张纸牌除去大小王,玩家4位;需要实现以下功能。设计一个菜单界面,上面分别有1.发新牌、2.洗牌发牌、3.按点数理牌、4退出。当点击“1.发新牌”,会转换到一个新的发牌界面上,在这个界面上实现四位玩家中每位玩家的牌都是按照同一花色从小到大的排列界面(其中A最小,K最大),而且最后还能返回到菜单界面;同样当点击“2.洗牌发牌”,发牌界面上四位玩家中牌是随机排列没有特定的规律,但是要注意的是每位玩家的牌都是不相同的;当点击“3.按点数发牌”,发牌界面上四位玩家的牌是随机发牌之后按照从小到大的顺序依次排列;当点击“4.退出”,退出菜单界面结束程序的运行。 2.模块划分: 此次设计主要有四个模块,它们分别是菜单模块、发新牌模块、洗牌发牌模块、按点数理牌模块;它们的之间的关系如下所示 它们所对应的界面转换关系如下: 算法设计: (1)52张纸牌图片的放置: 第一步:开辟一个存放52张纸牌地址的一维数组a[52],定义变量i,x; 第二步:将这52张纸牌按照特定的顺序特定的顺序加载到这个数组中去; 第三步:利用4个for循环语句控制每张图片输出的位置—putimage()函数; 第四步:设置一个清屏函数system(“cls”),当按下键盘上Enter键退出该界面。 (2)随机数组b[52]的生成: 第一步:定义三个变量i,j,tmp; 第二步:设置一个随机种子srand((unsigned)time(NULL)); 第三步:利用for循环生成52个随机数; 第四步:利用while循环生成每个随机数; 第五步:在while循环下,在利用for循环判断生成的随机数与之前生成随机是否相同,相同执行break语句结束循环生成新的随机数,再次进行比较;如果不相同则存放到数组中去;最后将这个数组返回到主函数中去。 (3)随机数组b[52]按一定顺序排列: 第一步:定义三个变量i,j,temp; 第二步:利用4个嵌套的for循环语句来实现每位玩家的13张纸牌按照从小到大的顺序排列; 第三步:在每个嵌套的for循环中利用b[i]%13来确定每张纸牌的大小,如果后一张牌比前一张牌小,则交换它们的位置,最后返回这个数组b[52]到主函数中去。 (4)鼠标的生成: 第一步:定义一个鼠标按键信息MOUSEMSG msg; 第二步:设置一个鼠标函数msg=GetMouseMsg(); 第三步:利用一个if语句判断鼠标左键是否按下msg.uMsg==WM_LBUTTONDO -WN; 第四步:在if语句下根据鼠标函数msg.x,msg.y的范围生成字符‘1’、‘2’、‘3’、‘4’,最后这四个字符返回发到主函数中去。 主函数实现调用函数的功能: 第一步:定义调用函数数组范围的值SIZE=52;图片的大小initgraph();flag初始化-flag=0; 第二步:利用while(flag=0)循环判断是否执行相应的函数调用; 第三步:利用switch-case语句来调用相应的函数,其中case的值是上述返回的字符‘1’、‘2’、‘3’、‘4’; 第四步:当case=‘1’执行发新牌功能; 当case=‘2’执行洗牌发牌功能; 当case=‘3’执行按点数理牌功能; 当case=‘4’flag=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’
显示全部
相似文档