还剩50页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《高级语言程序设计》课程设计题目猜数字游戏班级09软件工程R3学生姓名谢泽雄学生学号200931000622指导老师姚金涛提交时间2010年5月29日华南农业大学信息软件学院《高级语言程序设计》课程设计评分表题目猜数字游戏专业班级09软件工程R3提交日期2010年05月29日小组成员学号姓名完成情况成绩(指导老师填写)组长无无组员200931000622谢泽雄组员小组评分表评分项目分数1.实现情况
(15)完成课程设计要求的情况2.系统分析
(10)对系统的理解及分析的深入程度3.系统设计
(20)总体设计、具体设计、数据结构设计等4.程序设计
(30)面向对象程序设计方法与编程工具掌握水平5.界面设计
(15)界面美观程度、操作方式友好程度等6.论文撰写
(10)论文撰写的规范性、合理性等等小组总成绩教师签名日期目录
一、猜数字游戏分析41.游戏概述42.系统运行环境43.功能需求描述4
二、总体设计51.__和设计的总体思想52.程序模块结构图53.模块设计54.程序流程描述65.界面设计76.数据结构设计12
三、详细设计131.文件及函数组成132.函数设计14四.程序代码171.start.h172.start.c193.mianzone.c254.gamezone.c325.refreshline.c376.reset.c407.print.c408.count_num.c489.intset–del.c4910.i__geline.c49五.运行结果50
六、调试分析511.情况1512.情况2513.情况3514.情况452
七、总结52
一、猜数字游戏分析在《猜数字游戏》分析环节中,会对该游戏__的意图、应用目标、作用范围和有关该软件__的背景材料进行详细的分析《猜数字游戏》作为一个用来进行娱乐、消遣的应用软件,在对其进行需求分析的过程中,需要充分考虑游戏的可用性和娱乐性,__实际生活,从而得到合理的需求分析的结论1.游戏概述该软件为用户提供一个在Windows系统上运行的猜数字游戏,其使用者只有玩家玩家在运行该程序时,可以浏览游戏自最近一次重置数据记录以来,所保存的游戏记录分为“排行榜记录”和“成功情况”玩家可清空排行榜数据,以重新开始记录游戏成绩参加游戏后,游戏将自动刷新游戏记录,重新排行排行榜玩家参加游戏前,可浏览帮组功能,了解游戏规则2.系统运行环境1硬件环境处理器IntelPentium166或更高内存32MB以上硬盘空间2G以上显卡SVGA显示适配器2软件环境操作系统Windows98/Me/2000/XP/vista/73.功能需求描述猜数字游戏是用来进行娱乐、消遣活动的应用软件可进行游戏功能、浏览游戏记录功能和查看游戏帮助功能1游戏功能需求如下进行游戏在游戏提示下输入所要猜测的游戏数字,即可完成游戏重新开始游戏在游戏进行中,因不同原因玩家要求输入特定字符串以重新游戏,或放弃游戏且返回主菜单刷新排行榜游戏结束后,若玩家成功猜的答案,玩家要求记录自己的用户名和记录,参与新排行榜的排行输出答案当玩家在规定次数中不能猜出答案,则玩家要求在游戏结束后得知正确答案计算赢得游戏所用时间玩家猜出数字后,要求显示所用时间并记录到排行榜中,以便与其他玩家进行比较和检查自己的提升2浏览游戏记录功能需求如下查看排行榜游戏结束后,玩家需要查看自己的成绩排位,和了解其他玩家的游戏情况在不同情况下,玩家想依据成绩循序、用户名循序、所用时间多少进行输出排行榜count文件玩家需要查看游戏次数与成功次数的记录清空排行榜玩家在一定情况下,要求重新开始记录游戏信息清空count文件玩家在一定情况下,要求重新开始记录游戏信息3帮组功能需求如下输出游戏规则玩家需要了解游戏规则游戏说明玩家要求更了解游戏的各种功能,以更方便操作程序
二、总体设计题目要求
(1)按照分析、设计、编码、调试和测试过程完成应用程序;
(2)学习并使用流程图等工具,并在撰写论文中使用;
(3)程序的各项功能在程序运行时,以菜单方式选择并执行;
(4)要求用户输入数据时,要给出清晰、明确的提示,包括输入数据的内容、格式及结束方式等
(5)所有的信息存储在文件中,并实现文件读写操作1.__和设计的总体思想猜数字游戏是一个简易的娱乐游戏,__设计的重点在于排行榜的跟新每次游戏结束后都要对排行榜进行跟新,不可漏掉任何一次跟新解决这个问题的方法是将跟新的过程单独写成一个可以__完成得函数,在每次游戏结束后都必须调用该函数关于排行榜的输出问题,游戏将把成绩排行在前十名的玩家信息输出,当排行在十名后的玩家的成绩与第十名的成绩相同,则把与第十名的玩家的成绩相同的用户信息一同输出对于排行榜的容量问题,游戏采用自动增删的方法进行处理当排行榜存有的用户信息多于十五名时,排行榜将自动删除第十六条用户信息对菜单的选择判断要用到程序设计思想中的选择结构,对大量数据的处理要用到循环和文件处理等基本技术系统采用结构化的设计方法进行设计,采用C语言进行__2.程序模块结构图依据需求分析结果,猜数字游戏的程序可分为3个模块游戏区、游戏记录和帮助程序模块结构图如图1所示图1程序模块功能图3.模块设计1游戏区模块该模块为进入游戏,玩家进入后可按照游戏提示完成游戏,和刷新游戏记录、排行榜2游戏记录模块游戏记录模块的作用是为了保障系统的安全性和系统使用人员角色的区分该模块需要从输入设备获取用户输入的用户名和__,判断是否为合法身份,其次要判断用户权限,从而决定其能使用的系统功能,其模块功能图如图2所示图2游戏记录模块功能图3帮助模块该模块主要实现常规的管理功能,如投票人的初始化,即创建投票人文件、投票人信息的增加、删除、修改和查询等该模块主要用结构体类型的数组和文件的读写来完成对大量数据的管理操作,其功能图如图3所示图3帮助模块功能图4.程序流程描述程序的主体处理流程如图8所示图4程序流程图5.界面设计应遵循简洁美观、方便使用的原则1主菜单界面设计充分考虑界面易于操作的系统需求,其他的的功能调用采用类似于菜单的功能选择方式实现用printf语句构造简单的文字界面,具体功能选择界面设计效果如图5所示图5主菜单界面设计效果图2游戏区界面设计游戏区界面设计注重界面的简洁性,要求玩家在游戏时可在游戏提示下完成游戏,重新游戏,放弃游戏回到主菜单,游戏后刷新排行榜,浏览排行榜或继续游戏具体设计效果如组图6所示图6.1图6.2图
6.3组图6游戏区界面设计效果图3数据记录菜单界面与其他菜单界面设计充分考虑界面易于操作的系统需求,其他的的功能调用采用类似于菜单的功能选择方式实现用printf语句构造简单的文字界面,具体菜单选择界面设计效果如图7~图12所示图7数据记录菜单界面设计效果图图8排行榜菜单界面设计效果图图9重置排行榜菜单界面设计效果图图10count文件菜单界面设计效果图图11重置count文件菜单界面设计效果图图12帮助菜单界面设计效果图4排行榜输出界面、显示count文件界面、游戏规矩和游戏说明的输出界面设计这些界面设计主要考虑玩家在浏览信息的清晰和易读性以防数据输出的排版长度大于窗口的长度,在输出所有数据后使光标回到窗口的最上端,利于玩家从数据的起始端开始浏览数据排行榜的输出中,将名次、用时、成绩(次数)和用玩家姓名列表显示具体排行榜输出界面设计效果如图13~图15所示图13按排名顺序输出排行榜界面设计效果图图14按姓名次序输出排行榜界面设计效果图图15按所用时间排序输出排行榜界面设计效果图count文件的输出界面设计效果如图16所示图16count文件的输出界面设计效果图游戏规则的输出界面设计效果如图17所示图17游戏规则界面设计效果图游戏说明的输出界面设计效果如组图18所示图
18.1图
18.2图
18.3组图18游戏说明的输出界面设计效果图5退出游戏界面设计具体退出游戏界面设计效果如图19所示图19退出游戏界面设计效果图6.数据结构设计1玩家用户数据结构描述玩家用户的用户名、猜出数字所用次数和游戏所用时间,作为一整条记录存放在文件中typedefstructa{charname
[22];//玩家用户名intt;//猜数字所用次数intsj;//游戏所用时间structa*next;}player;2“胜利”信息数据结构记录玩家赢得游戏次数与猜正确平均所需次数,作为一整条记录存放在文件中structwin__e{intwintime;//总共赢的次数float__e;//才正确平均所用次数};
三、详细设计基于系统需求分析与系统总体设计的结果,本系统采用VisaulC++
6.0实现各模块的功能,下面阐述系统的详细设计和实现过程1.文件及函数组成源文件函数名或其他成分功能start.h结构声明结构声明库函数及函数原型声明start.c__in主函数__i__enu主菜单menu2游戏记录菜单phbmenu浏览排行榜菜单qkmenu清空排行榜菜单countmenu浏览count文件菜单rscountmenu重置count文件菜单menu3帮助菜单move“到达”函数rulemenu游戏规则explai__enu游戏说明endmenu结束菜单mianzone.c__in1被主函数调用,用以开始进入游戏liulan进入浏览排行榜功能paihangbang进入排行榜功能qk清空排行榜功能qingkong进入重置排行榜功能pn进入重置排行榜和count文件功能countwork进入count文件浏览功能printcount输出count文件数据函数st进入重置count文件setcount进入清空count文件功能sc进入重置count文件和排行榜help进入帮助功能gamezone.ccheckcount检查count的情况,且读取count中数据closecount更新count中的数据creat生成游戏所需猜的数字checknum检查输入的数字是否符合规定Time_get计算完成游戏所用时间gamezone进行游戏refreshline.crefresh更新排行榜note记录或输出记录起始时间reset.cresetline清空或重置排行榜resetcount重置或清空count.___文件print.cprintline按成绩输出排行榜printname按姓名输出排行榜printtime按用时输出排行榜count_num.ccountnum计算及输出平均成功率intset–del.cinset插入新纪录链表del删除链表中的第十六个记录i__geline.cpl;pl0;2.函数设计1头部文件文件名称start.h功能声明函数原型,宏定义包含头文件及定义数据结构要求完成所需函数的原型声明2进入游戏函数函数原型__in功能调用mian1函数参数void返回值void要求开始程序,使游戏顺利开始3进入游戏函数函数原型void__in1功能进入游戏主菜单参数void返回值void要求如果游戏者没有进行等级设定,则默认初级进行游戏4菜单函数函数原型void__i__enu()主菜单voidmenu2()游戏记录菜单voidphbmenu()浏览排行榜菜单voidqkmenu()清空排行榜菜单voidcountmenu()浏览count文件菜单voidrscountmenu()重置count文件菜单voidmenu3()帮助菜单函数功能输出菜单选项参数void返回值void要求明确显示菜单选项,使玩家准确进入相应的游戏功能5“到达”函数函数原型voidmove(inti,intj)功能使光标回到窗口的特定位置参数inti和intj:特定位置的坐标返回值void要求实现程序所需功能6游戏规则和游戏说明函数函数原型voidrulemenu游戏规则函数voidexplai__enu游戏说明函数功能输出游戏规则和游戏说明参数void返回值void要求使玩家清楚游戏的玩法,是玩家可以了解本程序的功能7结束函数函数原型voidendmenu功能输出结束界面参数void返回值void要求感谢玩家使用本软件8检查count函数函数原型voidcheckcountcharcount[]功能检查count的情况,且读取count中数据参数charcount[]:需要读取的数组返回值void要求检查count的情况,若存在,则读取其中的数据;若不存在,则重置count文件9更新count函数函数原型voidclosecountcharcount[]功能将count[]数组中的数据存储到参数charcount[]:需要存储到文件的数组返回值void要求更新count数据10生成随机数函数函数原型voidcreatcharkey[]功能生成游戏所需猜的数字参数charkey[]:存储答案的数组返回值void要求生成4个不重复的数字11检查输入函数函数原型voidchecknumcharguess[]功能检查输入的数字是否符合规定参数charguess[]:需检查的玩家猜测的数组返回值void要求检查输入的数字是否符合规定,不合规定的要求玩家重新输入;若和规则的,检查与答案的不同,输出提示12算时函数函数原型intTime_getchecknumtime_tfirsttime_tsecond功能计算完成游戏所用时间参数time_tfirsttime_tsecond:游戏开始的时间与游戏结束的时间返回值inta:second与first相差的秒数要求计算second与first相差的秒数并返回13游戏函数函数原型voidgamezone(功能进行游戏参数void;返回值void;要求顺利进行游戏14更新排行榜函数函数原型voidrefresh(charname[]inttintsj功能更新排行榜参数charname[]inttintsj:需要插入的玩家信息(玩家姓名,所用次数,所用时间)返回值void;要求若排行榜不存在,则新建排行榜;若存在,则将新加入的信息插入到排行榜中15记录函数函数原型voidnote(inti功能记录或输出记录起始时间参数inti:所需进行的功能返回值void;要求i=1
(2)时,输出排行榜(count文件)记录起始时间;i=34时,记录排行榜(count文件)重置时间16重置排行榜函数函数原型FILE*resetline(FINE*fp功能清空或重置排行榜参数FILE*fp:重置文件的指针返回值FILE*fp;用“r”打开的处理后的排行榜文件要求若排行榜不存在,新建排行榜;若存在,则清空排行榜17重置count文件函数函数原型voidresetcount(void功能重置或清空count.___文件参数void返回值void要求若count文件不存在,新建count文件;若存在,则清空count文件18按成绩输出排行榜函数函数原型voidprintline(void功能按成绩先后输出排行榜参数void返回值void要求若排行榜不存在,新建排行榜;若存在,则按成绩先后输出排行榜19按姓名输出排行榜函数函数原型voidprintline(void功能按姓名顺序输出排行榜参数void返回值void要求若排行榜不存在,新建排行榜;若存在,则按姓名顺序输出排行榜20按用时输出排行榜函数函数原型voidprintline(void功能按用时多少输出排行榜参数void返回值void要求若排行榜不存在,新建排行榜;若存在,则按用时多少输出排行榜21计算及输出平均成功率函数函数原型voidcountnum(void功能计算及输出平均成功率参数void返回值void要求若count文件不存在,新建count;若存在,则计算及输出平均成功率22插入链表函数函数原型player*inset(player*head,player*stud功能插入新纪录链表参数player*head,player*stud需要__入的链表的头指针和需要插入表返回值player*head:处理后的链表的头指针要求将新纪录插入到比起大或与之相等的记录前23删除记录函数函数原型player*insetplayer*headintn功能删除链表中的第十六个记录参数player*head,intn需要被处理的链表的头指针和链表跟新前的记录个数返回值player*head:处理后的链表的头指针要求若n=15,是第十六个表中的next的值赋为NULL24表链函数函数原型pl;pl0功能输出特定的表链参数void返回值void要求完成输出四.程序代码
1.start.h#includestdio.h#includetime.h#includestdlib.h#includestring.h#includeconio.h#includewindows.h//定义player数组typedefstructa{charname
[22];//玩家用户名intt;//猜数字所用次数intsj;//游戏所用时间structa*next;}player;//定义structwin__e数组structwin__e{intwintime;//总共赢的次数float__e;//才正确平均所用次数};//函数声明voidrefreshcharname[]inttintjs;voidnoteinti;FILE*resetlineFILE*fp;//……voidresetcountvoid;//初始化记录文件的函数voidprintline;voidprintname;voidprinttime;voidpl;voidpl0;voidgamezone;voidcheckcountfloatcount[];player*insetplayer*headplayer*p2;player*delplayer*headintn;void__in1;voidliulan;voidqk;voidqkmenu;voidqingkong;voidpn;voidrscountmenu;voidsetcount;voidsc;voidst;voidprintcount;voidhelp;voidend;void__i__enu;voidmenu2;voidmenu3;voidrulemenu;voidpaihangbang;voidphbmenu;voidcountwork;voidcountmenu;voidexplai__enu;voidendmenu;intTime_gettime_tfirsttime_tsecond;voidcountnum;voidcheck;//检查函数voidmoveintiintj;//“到达”函数
2.start.c#includestart.hvoid__in//开始程序{printf\n\n\n;pl;printf\n\n\n\n\t\t\t欢迎来到猜数字游戏!!!\n\n\n\n\n\n\n;pl0;printf\t\t\t(请按任意键进入菜单);getch;__in1;}void__i__enu//主菜单{systemcls;printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf\t\t\t\t
1.开始游戏\n\n;printf\t\t\t\t
2.游戏记录\n\n;printf\t\t\t\t
3.帮助\n\n;printf\t\t\t\t
4.退出游戏\n\n;printf\t\t\t请按键选择,回车确定\n;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;}voidmenu2//游戏记录菜单{systemcls;printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf\t\t\t\t
1.排行榜\n\n;printf\t\t\t\t
2.count文件\n\n;printf\t\t\t\t
3.返回主菜单\n\n;printf\t\t\t请按键选择,回车确定\n;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;return;}voidphbmenu//浏览排行榜菜单{systemcls;printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf\t\t\t\t
1.按排名浏览排行榜\n\n;printf\t\t\t\t
2.按姓名浏览排行榜\n\n;printf\t\t\t\t
3.按用时浏览排行榜\n\n;printf\t\t\t\t
4.重置排行榜\n\n;printf\t\t\t\t
5.返回上一菜单\n\n;printf\t\t\t\t
6.返回主菜单\n\n;printf\t\t\t请按键选择,回车确定\n;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;return;}voidcountmenu//浏览count文件菜单{systemcls;printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf\t\t\t\t
1.显示count文件信息\n\n;printf\t\t\t\t
2.清空count文件\n\n;printf\t\t\t\t
3.返回上一菜单\n\n;printf\t\t\t\t
4.返回主菜单\n\n;printf\t\t\t请按键选择,回车确定\n;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;return;}voidqkmenu//清空排行榜菜单{systemcls;printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf\t\t\t\t
1.清空排行榜\n\n;printf\t\t\t\t
2.同时重置count文件\n\n;printf\t\t请按退格键返回上一菜单,请按键选择(不需回车确定)\n;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;return;}voidrscountmenu//重置count文件菜单{systemcls;printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf\t\t\t\t
1.重置count文件数据\n\n;printf\t\t\t\t
2.同时清空排行榜\n\n;printf\t\t请按退格键返回上一菜单,请按键选择(不需回车确定)\n;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;return;}voidmenu3//帮助菜单{systemcls;printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf\t\t\t\t
1.游戏规则\n\n;printf\t\t\t\t
2.游戏说明\n\n;printf\t\t\t\t
3.返回主菜单\n\n;/*printf\t\t\t\t
4.重置排行榜\n\n;*/printf\t\t\t请按键选择,回车确定\n;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;return;}voidmoveintiintj//“到达”函数{COORDc;//声明坐标变量c.X=i;//横坐标为x-1c.Y=j;//纵坐标为y-1SetConsoleCursorPositionGetStdHandleSTD_OUTPUT_HANDLEc;//使光标返回开头return;}voidrulemenu//游戏规则{intij;systemcls;printf游戏规则:\n;printf\t**********************************************************\n;printf\t**********************************************************\n;printf\t
①游戏开始,系统随机产生一位不重复的4位数字\n;putchar\n;printf▲
②游戏者输入所猜的不重复数字,并按回车提交(直接输入,不\n;printf\t可用空格隔开)\n;putchar\n;printf\t
③系统将提交的数与它自动产生的数进行比较,输出结果\n;printf\t“*A*B”形式其中A代表数字正确相应位置也正确,B代表数字正\n;printf\t确但位置不正确如:1A__表示游戏者有1个数字的位置正确且数值\n;printf\t也正确,除此以外游戏者还猜对了3个数字,但位置不对,即游戏\n;printf\t者已经猜出4位数据,但有3个数据位置不对!\n;putchar\n;printf\t
④游戏者有限的十次数的猜测机会,在规定次数内完成,则游戏\n;printf\t成功否则,游戏失败其中,猜测次数与成绩有关:\n;printf\t次数越少,成绩越高\t\n;putchar\n;printf\t
⑤游戏排行榜中名次,只决定于成绩\n;printf\t**********************************************************\n;printf\t**********************************************************\n;printf\n;printf*按退格键返回帮助菜单,其他键返回主菜单;i=10;j=0;moveij;//光标回到窗口的顶端ifgetch==8help;else__in1;}voidexplai__enu{intijk=0;charA;systemcls;printf游戏说明:\n;k++;printf\t************************************************************\n;k++;printf\t************************************************************\n;k++;printf\t
①此游戏有计时功能进入游戏后开时计时,猜正确后计时结束\n;k++;printf\t游戏过程中不显示时间,只有成功猜出数字后才会提示所用时间\n;k++;putchar\n;k++;printf\t
②进入游戏后,可输入“rt”可返回主菜单;输入“rp”可\n;k++;printf\t重新开始游戏\n;k++;putchar\n;k++;printf\t
③游戏中有浏览排行榜功能\n;k++;printf\t可分别按照成绩、用户名、所用时间的顺序进行浏览\n;k++;printf\t其中只显示前十名成绩的记录,且最多显示15名玩家\n;k++;printf\t按用户名名输出排行版功能中,数字优先于字母,字母优先于文字的\n;k++;printf\t规则进行排序\n;k++;putchar\n;k++;printf\t
④在浏览表最后,显示最近一次重置排行榜或第一次游戏以来所有\n;k++;printf\t玩家猜正确的总共人次和所有玩家猜正确的平均所用次数\n;k++;printf\t则游戏成功否则,游戏失败其中,猜测次\n;k++;putchar\n;k++;printf\t
⑤所有玩家参与游戏后,分别以1到10次猜正确的平均成功率的计算\n;k++;printf\t公式为\n;k++;printf\t用1次猜中数字的成功率+用2次猜中数字的成功率+…+用十次猜中数\n;k++;printf\t字的成功率的和除以10\n;k++;putchar\n;k++;printf\t
⑥count储存信息请查看其输出(在游戏记录选项中)\n;k++;printf\t其中“所占比例”表示占成功次数的比例\n;k++;putchar\n;k++;printf\t
⑦在主菜单下,选择菜单5(菜单上未显示)可检查count文件中\n;k++;printf\t数据,和排行榜的起始时间与count文件中数据的起始时间\n;k++;printf\t************************************************************\n;k++;printf\t************************************************************\n;k++;printf\t游戏设计者华南农业大学09级软件工程R3谢泽雄\n;k++;printf\t************************************************************\n;k++;printf\t************************************************************\n;k++;printf\n;k++;printf*是否顶端开头Y/N;//k用以统计输出的行数i=10;j=0;moveij;//光标回到窗口的顶端A=getch;i=19;moveik;//光标回到最__输出处whileA!=YA!=yA!=NA!=n{putcharA;k++;printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{ifA==yprintfy;elseprintfY;explai__enu;//回到开头}i=0;moveik;//光标回到最__输出处//再次实现movei是为了应对输入错误的情况printf*按退格键返回帮助菜单,其他键返回主菜单;ifgetch==8help;else__in1;}voidendmenu//结束菜单{systemcls;printf\n\n\n;printf**********************************\n;printf**************************************\n;printf***************************\n;printf***************************\n;printf*****************************************\n;printf*****************************************\n;printf*************************\n;printf***********************\n;printf***********************\n;printf*********************\n;printf\n\n\n\n\t\t\tByebye...;printf\n\n\n\n\t\t\t欢迎使用本软件!!!;getch;}
3.mianzone.c#includestart.hvoid__in1//被主函数调用,用以开始进入游戏{charchoose
[10];__i__enu;getschoose;whilestrlenchoose!=1{printf请只选择一项进行操作;getschoose;}whilechoose
[0]!=1choose
[0]!=2choose
[0]!=3choose
[0]!=4choose
[0]!=5{printf请选择正确选项;getschoose;}/*也可用default:printfError!\n;实现*/switchchoose
[0]//功能函数选择{case1:gamezone;break;case2:liulan;break;case3:help;break;case4:end;case5:check;break;}}voidliulan//进入浏览排行榜功能{charchoose;menu2;choose=getchar;getchar;switchchoose//功能函数选择{case1:paihangbang;break;case2:countwork;break;case3:__in1;break;default:printf\tError!\n请重新输入;liulan;}}voidpaihangbang//进入排行榜功能{charchoose;phbmenu;lp:choose=getchar;getchar;switchchoose//功能函数选择{case1:printline;break;case2:printname;break;case3:printtime;break;case4:qk;break;case5:liulan;break;case6:__in1;break;default:printf\tError!\n请重新输入;gotolp;}}voidcountwork//进入count文件浏览功能{charchoose;countmenu;lp:choose=getchar;getchar;switchchoose//功能函数选择{case1:printcount;break;case2:st;break;case3:liulan;break;case4:__in1;break;default:printf\tError!\n请重新输入;gotolp;}}voidqk//清空排行榜功能{charchoose;intt=0;qkmenu;lp:choose=getch;ifchoose==8paihangbang;switchchoose//功能函数选择{case1:qingkong;break;case2:pn;break;default:printf\tError!\n请重新输入;gotolp;}}voidpn//进入重置排行榜和count文件功能{FILE*fp;charA;printf是否重置排行榜和count文件Y/N;A=getch;whileA!=YA!=yA!=NA!=n{printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{ifA==yprintfy;elseprintfY;fp=fopenline.___w;fp=resetlinefp;//重置排行榜fclosefp;resetcount;//重置count文件(无厘头出问题)*****************************printf\n重置成功!!\n请按任意键返回主菜单;getch;__in1;}elseliulan;}voidqingkong//进入重置排行榜功能{FILE*fp;charA;printf是否重置排行榜Y/N;A=getch;whileA!=YA!=yA!=NA!=n{printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{ifA==yprintfy;elseprintfY;fp=fopenline.___w;fp=resetlinefp;//重置排行榜fclosefp;printf\n重置成功!!\n请按任意键返回主菜单;getch;__in1;}elseliulan;}voidst//进入重置count文件{charchoose;intt=0;rscountmenu;lp:choose=getch;ifchoose==8countwork;switchchoose//功能函数选择{case1:setcount;break;case2:sc;break;default:printf\tError!\n请重新输入;gotolp;}}voidsc//进入重置count文件和排行榜{FILE*fp;charA;printf是否重置count文件和排行榜Y/N;A=getch;whileA!=YA!=yA!=NA!=n{printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{ifA==yprintfy;elseprintfY;fp=fopenline.___w;fp=resetlinefp;//重置排行榜fclosefp;resetcount;printf\n重置成功!!\n请按任意键返回主菜单;getch;__in1;}elseliulan;}voidsetcount//进入清空count文件功能{charA;printf是否清空count文件Y/N;A=getch;whileA!=YA!=yA!=NA!=n{printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{ifA==yprintfy;elseprintfY;resetcount;//重置count文件printf\n重置成功!!\n请按任意键返回主菜单;getch;__in1;}elseliulan;}voidprintcount//输出count文件数据函数{floatcount
[13];inti;floatsum=0;systemcls;pl;checkcountcount;fori=1;i11;i++sum+=count[i];printf\n*玩家参加游戏次数%
2.0f(次)\ncount
[0];fori=1;i11;i++{printf*在第%2d次得到准确答案的玩家人数%
2.0f(名)icount[i];ifcount
[0]0printf\t所占比例为:%
6.2f%ccount[i]*100/sum37;//
100.00%加上小数点有六位!putchar\n;}pl0;i=4;notei;printf(请按任意键返回主菜单);getch;__in1;}voidhelp//进入帮助功能{charchoose;intt=0;menu3;choose=getchar;getchar;switchchoose//功能函数选择{case1:rulemenu;break;case2:explai__enu;break;case3:__in1;break;/*case3:qingkong;break;*/default:printf\tError!\n请重新;help;}}voidend//进入结束功能{charA;systemcls;printf\n\n\n\n\t\t\t是否退出游戏Y/N;A=getch;whileA!=YA!=yA!=NA!=n{printf\n\t\t\t★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{ifA==yprintfy;elseprintfY;endmenu;exit0;}else__in1;}voidcheck{FILE*fp;inti;floatcount
[13];fori=0;i13;i++count[i]=0;count[i]=\0;//初始化count[]数组printf\t\t\t***恭喜您,进入了测试功能!***\n;printfcount文件的数据\n;fp=fopencount.___r;iffp==NULLprintfcount文件不存在!!!\n;else{fori=0;i13;i++fscanffp%fcount[i];fori=0;i12;i++printf%f\ncount[i];fclosefp;}printf***接下来,测试数据记录最近初始化的时间\n;printf请输入i3/4,不需回车确定:(3是排行榜,4是count文件);scanf%di;whilei!=3i!=4{printf%d\n请重新输入:i;scanf%di;}notei;printf按任意键退出该功能!;getch;__in1;}
4.gamezone.c#includestart.hvoidcheckcountfloatcount[]//检查count的情况且读取count中数据{FILE*fp;inti;charA;fp=fopencount.___r;iffp==NULL//count文件不存在或打开失败{lp:printf\n*数据初始化失败,游戏将强制初始化!\n;printf*是否强制初始化游戏数据Y/N;A=getch;whileA!=YA!=yA!=NA!=n{printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{resetcount;fp=fopencount.___r;}//初始化count文件else__in1;}fori=0;i12;i++{fscanffp%fcount[i];iffeoffpgotolp;}//读取count文件数据fclosefp;}voidclosecountfloatcount[]//存储count中的数据{inti;FILE*fp;fp=fopencount.___w;fori=0;i13;i++fprintffp%fcount[i];//将新的count[]数组的值写入文件fclosefp;}voidcreatcharkey[]//定义生成随机数函数{intij;loop:srandunsignedinttime0;fori=0;i4;i++key[i]=rand%10;fori=0;i3;i++//判断生成的答案中是否有重复数字forj=i+1;j4;j++ifkey[j]==key[i]gotoloop;}voidchecknumcharguess[]//定义检查输入函数{intij;printf\n请输入四个数字0~9:;getsguess;ifstrlenguess==2//判断guess[]的长度是否为2,而进行特殊处理{if!strcmpguessrpgamezone;//重新开始游戏if!strcmpguessrt__in1;//返回主菜单}whilestrlenguess!=4//判断输入的guess[]的长度是否为4{printf★☆输入无效,请重新输入!☆★;checknumguess;break;}forj=0;j4;j++//判断输入的guess[]是否存在非数字字符ifguess[j]9||guess[j]0{printf★☆输入无效!存在非数字字符请重新输入!☆★;checknumguess;break;}fori=0;i3;i++//判断输入的guess[]是否存在重复数字forj=i+1;j4;j++ifguess[i]==guess[j]{printf★☆输入无效!数字有重复请重新输入!☆★;checknumguess;break;}}intTime_gettime_tfirsttime_tsecond//计算所用时间{inta;a=intdifftimesecondfirst;//difftime的返回值为double类型returna;}voidgamezone//游戏函数{charkey
[5]guess
[5];//定义答案与输入数组charAB;charwin=0;//标记是否赢得游戏charname
[22];//记录玩家用户名intsj;//记录所用时间intij;intt=1;//记录所用次数time_tfirstsecond;//获取时间floatcount
[13];//定义count[]数组fori=0;i12;i++count[i]=0;count[i]=\0;//***初始化count[]数组***key
[4]=\0;printf\t\t\t游戏初始化,请稍等!!!;//生成随机数函数的运行用时不顶checkcountcount;//检查count.___的情况creatkey;//生成随机数(运行时间不定)systemcls;//清屏fori=0;i4;i++{key[i]+=0;printf%ckey[i];/*测试用*/}//将key[]转化为对应的数字字符pl;printf\t\t\t\t游戏开始!;printf\n\t\t(重新开始请输入“rp”返回主菜单请输入“rt”);fflushstdin;//清除内存中所保存的输入数据first=timeNULL;//************计时开始************fort=1;t11;t++{checknumguess;//检查输入ift==3//增加玩家游戏次数{count
[0]++;closecountcount;}if!strcmpkeyguess{win=1;break;}else{fori=0A=0;i4;i++ifkey[i]==guess[i]A++;//统计完全正确的数字个数fori=0B=0;i4;i++forj=0;j4;j++ifkey[i]==guess[j]B++;//统计数值正确的数字个数printf第%d次猜数您的输入有%dA%dBtAB-A;}ift==7printf\n\n********************^_^^_^剩下3次机会,加油!!!加油!!!-_-_*********************;}second=timeNULL;//************计时结束************ifwin==1{ift==11t=10;ift3count
[0]++;count[t]++;closecountcount;//保存count.___的数据printf\t\t\tCongratulations!Youwin!\n;sj=Time_getfirstsecond;//计算用时printf\n\t您本次游戏所用时间为%d分钟%d秒\n\nsj/60sj%60;printf请输入用户名1~20个字符;getsname;//获取用户名whilei=strlenname20||i1{printf★☆您输入的用户名长度20\n;printf★☆请重新输入;getsname;}//检查用户名格式refreshnametsj;//刷新排行榜记录{printf是否浏览排行榜Y/N;A=getch;whileA!=YA!=yA!=NA!=n{printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{printf%c\nA;printline;}elseprintf%c\nA;}{printf是否继续游戏Y/N;}}else{printf\n\t\t\t\tGameover!;printf\n\t\t\t\t本次答案为;putskey;//输出正确答案printf\t\t\t\t是否继续Y/N;}A=getch;whileA!=YA!=yA!=NA!=n{printf\n★☆输入错误☆★请输入Y/N:;A=getch;}ifA==Y||A==y{printf%c\nA;gamezone;}else{printf%c\nA;__in1;}}
5.refreshline.c#includestart.hvoidrefreshcharname[]inttintsj{FILE*fp;inti=0;playerrecord*p1*p2*head;structwin__ejilu;//包含intwintime和float__e在其中intn=0;//用来记录有几个排名者fflushstdin;pl0;fp=fopenline.___r;if!fp//如果打开文件失败{printf\t\t\t无法找到排行榜记录\n\n;printf\t\t\t游戏将重新设置排行榜\n\n;/*fclosefp;因为打开失败,fp无指向,并没有赋予有意义的值在运行fclose时要读取fp,但fp无效所以运行错误!*/fp=fopenline.___w;fp=resetlinefp;printf\t\t\t请按任意键继续;getch;}iffreadjilusizeofstructwin__e1fp==0{printf\t\t排行榜错误,请重置排行榜!(按任意键继续);getch;liulan;}head=p1=player*__llocsizeofplayer;//分配sizeofplayer大小whilefreadp1sizeofplayer1fp{p2=p1;p1=player*__llocsizeofplayer;p2-next=p1;n++;//记数}p2-next=NULL;fclosefp;p1=head;strcpyrecord.namename;record.t=t;record.sj=sj;head=insetheadrecord;/*从第三次开始,只要t之前的最大值就无法成功插入(在实验楼)*/head=delheadn;p1=head;fp=fopenline.___w;fwritejilusizeofstructwin__e1fp;whilep1!=NULL{fwritep1sizeofplayer1fp;p1=p1-next;}fclosefp;i=1;notei;}voidnoteinti{FILE*fp;intj;intsign=0;time_ttime0
[2];chartmp
[64];fp=fopennote.___r;iffp==NULL//count文件丢失{//重置count文件time0
[0]=time0;fp=fopennote.___w;forj=0;j2;j++fwritetime0
[0]sizeoftime_t1fp;fwritesignsizeofint1fp;fclosefp;fp=fopennote.___r;}forj=0;j2;j++freadtime0[j]sizeoftime_t1fp;freadsignsizeofint1fp;fclosefp;ifsign==0i2{printf\t\t\t\t\t***数据起始时间丢失***\n;printf********************************************************************************;}else{switchi//功能函数选择{case1://更新排行榜重置时间case2://更新count重置时间fp=fopennote.___w;time0[--i]=time0;sign++;forj=0;j2;j++fwritetime0[j]sizeoftime_t1fp;fwritesignsizeofint1fp;fclosefp;break;case3://输出排行榜重置时间case4://输出count重置时间fp=fopennote.___r;i=i/2-1;strftimetmpsizeoftmp%Y/%m/%d%X%A本年第%j天%zlocaltimetime0[i];printf以上数据记录起始时间为\n\t;putstmp;printf********************************************************************************;fclosefp;break;}}}
6.reset.c#includestart.hFILE*resetlineFILE*fp//清空或重置排行榜{structwin__ejilu;//定义jilu变量inti;playerp;jilu.wintime=0;jilu.__e=
0.0;strcpyp.name谢泽雄(无效);p.t=11;p.sj=360;//初始化数值fwritejilusizeofstructwin__e1fp;fwritepsizeofplayer1fp;//写入数据fclosefp;i=1;notei;//记录初始化时间fp=fopenline.___r;returnfp;}//返回以r打开的文件指针voidresetcountvoid//重置count.___文件{floatcount
[13];/*count
[0]存储游戏总次数;count
[1]到count
[10]储存相对应的赢游戏所需次数的总数;其他无用*/FILE*fp;//定义文件指针inti;fori=0;i12;i++{count[i]=
0.0;}count[i]=\0;//初始化数值fp=fopencount.___w;fori=0;i13;i++fprintffp%fcount[i];fclosefp;i=2;notei;//记录初始化时间return;}//不返回文件指针
7.print.c#includestart.hvoidprintline//按成绩输出排行榜{intiscore;FILE*fp=NULL;playerr;structwin__ejilu;intpaiming;chargoon;charchoi__;systemcls;pl;iffp=fopenline.___r==NULL//判断排行榜是否存在{printf\t\t打开排行榜失败,是否重新建立排行榜Y/N;choi__=getch;whilechoi__!=ychoi__!=Ychoi__!=nchoi__!=N{printf\n★☆输入无效☆★请重新输入;choi__=getch;}ifchoi__==Y||choi__==y{fp=fopenline.___w;fp=resetlinefp;printf\n\t\t重新建立成功!\n;fclosefp;}printf\n请按任意键返回主菜单;getch;__in1;}else{iffreadjilusizeofstructwin__e1fp==0{printf\t\t排行榜错误,请重置排行榜!(按任意键继续);getch;liulan;}ifjilu.wintime==0{printf\t\t排行榜未有记录!\n;printf\t\t请参加游戏刷新排行榜!\n;printf按任意键返回主菜单;getch;fclosefp;__in1;}else{printf\t\t\t***按排名顺序输出排行榜***\n\n;printf*行数\t排名\t次数\t所用时间\t玩家姓名\n;fori=0score=0paiming=0goon=0;i10;i++//输出排行榜{freadrsizeofplayer1fp;iffeoffpbreak;//feof是否结束,结束为1,否则为0也可以放在上面的for中else{ifscore==r.tgoon=1;//判断paiming是否应加1else{paiming++;goon=0;}printf*%d\t%d\t%d\t%d分钟%2d秒\t%s\ni+1paimingr.tr.sj/60r.sj%60r.name;score=r.t;}}while!feoffp//判断是否输出排名在十名后的玩家信息,是则输出,否则结束{freadrsizeofplayer1fp;ifscore!=r.tbreak;printf*%d\t%d\t%d\t%d分钟%2d秒\t%s\ni+1paimingr.tr.sj/60r.sj%60r.name;score=r.t;i++;}fclosefp;//关闭文件putchar\n;pl0;printf*所有玩家猜正确的总共人次:%d(人次)\njilu.wintime;printf*所有玩家猜正确的平均所用次数:%.4f(次)\njilu.__e;printf********************************************************************************;countnum;//输出平均成功率pl;i=3;notei;//输出排行榜数据其实时间printf*按任意键返回主菜单;i=0;moveii;//光标回到窗口的顶端i=0;score=4;moveiscore;//光标榜头getch;__in1;}}}voidprintname//按姓名输出排行榜{intiscore;FILE*fp=NULL;intkj;playerrplr
[17];structwin__ejilu;/*intwintime;float__e;在其中*/intpaimingpm
[17];chargoon;charchoi__;systemcls;pl;iffp=fopenline.___r==NULL//判断排行榜是否存在{printf\t\t打开排行榜失败,是否重新建立排行榜Y/N;choi__=getch;whilechoi__!=ychoi__!=Ychoi__!=nchoi__!=N{printf★☆输入无效☆★请重新输入;choi__=getch;}ifchoi__==Y||choi__==y{fp=fopenline.___w;fp=resetlinefp;printf\n\t\t重新建立成功!\n;fclosefp;}printf\n请按任意键返回主菜单;getch;__in1;}else{iffreadjilusizeofstructwin__e1fp==0{printf\t\t排行榜错误,请重置排行榜!(按任意键继续);getch;liulan;}ifjilu.wintime==0{printf\t\t排行榜未有记录!\n;printf\t\t请参加游戏刷新排行榜!\n;printf按任意键返回主菜单;getch;fclosefp;__in1;}else{printf\t\t\t***按姓名次序排序输出排行榜***\n\n;printf*行数\t排名\t次数\t所用时间\t玩家姓名\n;fori=0score=0paiming=0goon=0;i10;i++{freadrsizeofplayer1fp;/*{printf%s%cr.namer.t;break;}*/iffeoffpbreak;//feof是否结束,结束为1,否则为0也可以放在上面的for中/*ifr.t==11break;*/else{ifscore==r.tgoon=1;//判断paiming是否应加1else{paiming++;goon=0;}strcpyplr[i].namer.name;plr[i].t=r.t;pm[i]=paiming;plr[i].sj=r.sj;score=r.t;}}while!feoffp{freadrsizeofplayer1fp;ifscore!=r.tbreak;strcpyplr[i].namer.name;plr[i].t=r.t;pm[i]=paiming;plr[i].sj=r.sj;score=r.t;i++;}fclosefp;//关闭文件k=i;forj=0;jk-1;j++fori=0;ik-1-j;i++ifstrcmpplr[i].nameplr[i+1].name==1{strcpyr.nameplr[i].name;strcpyplr[i].nameplr[i+1].name;strcpyplr[i+1].namer.name;//交换“用户名”数据r.t=pm[i];pm[i]=pm[i+1];pm[i+1]=r.t;//交换“排名”数据r.t=plr[i].t;plr[i].t=plr[i+1].t;plr[i+1].t=r.t;//交换“成绩”数据r.sj=plr[i].sj;plr[i].sj=plr[i+1].sj;plr[i+1].sj=r.sj;//交换“用时”数据}fori=0;ik;i++//输出按姓名顺序排序后的排行榜printf*%d\t%d\t%d\t%d分钟%2d秒\t%s\ni+1pm[i]plr[i].tplr[i].sj/60plr[i].sj%60plr[i].name;putchar\n;pl0;printf*所有玩家猜正确的总共人次:%d(人次)\njilu.wintime;printf*所有玩家猜正确的平均所用次数:%.4f(次)\njilu.__e;printf********************************************************************************;countnum;//输出平均成功率pl;i=3;notei;//输出排行榜数据其实时间printf*按任意键返回主菜单;i=0;moveii;//光标回到窗口的顶端i=0;score=4;moveiscore;//光标榜头getch;__in1;}}}voidprinttime//按用时输出排行榜{intiscore;FILE*fp=NULL;intkj;playerrplr
[17];structwin__ejilu;/*intwintime;float__e;在其中*/intpaimingpm
[17];chargoon;charchoi__;systemcls;pl;iffp=fopenline.___r==NULL//判断排行榜是否存在{printf\t\t打开排行榜失败,是否重新建立排行榜Y/N;choi__=getch;whilechoi__!=ychoi__!=Ychoi__!=nchoi__!=N{printf★☆输入无效☆★请重新输入;choi__=getch;}ifchoi__==Y||choi__==y{fp=fopenline.___w;fp=resetlinefp;printf\n\t\t重新建立成功!\n;fclosefp;}printf\n请按任意键返回主菜单;getch;__in1;}else{iffreadjilusizeofstructwin__e1fp==0{printf\t\t排行榜错误,请重置排行榜!(按任意键继续);getch;liulan;}ifjilu.wintime==0{printf\t\t排行榜未有记录!\n;printf\t\t请参加游戏刷新排行榜!\n;printf按任意键返回主菜单;getch;fclosefp;__in1;}else{printf\t\t\t***按所用时间排序输出排行榜***\n\n;printf*行数\t排名\t次数\t所用时间\t玩家姓名\n;fori=0score=0paiming=0goon=0;i10;i++{freadrsizeofplayer1fp;iffeoffpbreak;//feof是否结束,结束为1,否则为0也可以放在上面的for中else{ifscore==r.tgoon=1;//判断paiming是否应加1else{paiming++;goon=0;}strcpyplr[i].namer.name;plr[i].t=r.t;pm[i]=paiming;plr[i].sj=r.sj;score=r.t;}}while!feoffp{freadrsizeofplayer1fp;ifscore!=r.tbreak;strcpyplr[i].namer.name;plr[i].t=r.t;pm[i]=paiming;plr[i].sj=r.sj;score=r.t;i++;}fclosefp;//关闭文件k=i;forj=0;jk-1;j++fori=0;ik-1-j;i++ifplr[i].sjplr[i+1].sj{strcpyr.nameplr[i].name;strcpyplr[i].nameplr[i+1].name;strcpyplr[i+1].namer.name;//交换“用户名”数据r.t=pm[i];pm[i]=pm[i+1];pm[i+1]=r.t;//交换“排名”数据r.t=plr[i].t;plr[i].t=plr[i+1].t;plr[i+1].t=r.t;//交换“成绩”数据r.sj=plr[i].sj;plr[i].sj=plr[i+1].sj;plr[i+1].sj=r.sj;//交换“用时”数据}fori=0;ik;i++//输出按所用时间长短排序后的排行榜printf*%d\t%d\t%d\t%d分钟%2d秒\t%s\ni+1pm[i]plr[i].tplr[i].sj/60plr[i].sj%60plr[i].name;putchar\n;pl0;printf*所有玩家猜正确的总共人次:%d(人次)\njilu.wintime;printf*所有玩家猜正确的平均所用次数:%.4f(次)\njilu.__e;printf********************************************************************************;countnum;//输出平均成功率pl;fclosefp;//关闭文件i=3;notei;//输出排行榜数据其实时间printf*按任意键返回主菜单;i=0;moveii;//光标回到窗口的顶端i=0;score=4;moveiscore;//光标榜头getch;__in1;}}}
8.count_num.c#includestart.hvoidcountnum//计算及输出平均成功率{floatcount
[13];floatshuanshu=0;inti;fori=0;i12;i++count[i]=0;count[i]=\0;//***初始化count[]数组***checkcountcount;ifcount
[0]==
0.0printf*所有玩家参与游戏后,分别以1到10次猜正确的平均成功率为(暂无记录)\n;else{fori=1;i11;i++{shuanshu+=count[i];}shuanshu=shuanshu/count
[0];printf*所有玩家参与游戏后,分别以1到10次猜正确的平均成功率为%.2f%cshuanshu*
10.037;//ASCⅡ码中37代表百分号putchar\n;}//计算公式为{(count
[1]+…+count
[10])/count
[0]}/10*100%}//赢得次数总和除以参加游戏总次数再除以10求平均最后乘以100%得
9.intset–del.c#includestart.hplayer*insetplayer*headplayer*stud//插入新纪录链表{player*p0*p1*p2;p1=head;p0=stud;ifhead==NULL{head=p0;p0-next=NULL;}else{whilep0-tp1-tp1-next!=NULL{p2=p1;p1=p1-next;}ifp0-t=p1-t{ifhead==p1head=p0;elsep2-next=p0;p0-next=p1;}else{p1-next=p0;p0-next=NULL;}}returnhead;}player*delplayer*headintn//定义删除链表中的第十五个表的函数{player*p1*p2;ifn=15{p1=head;whilep1-next{p2=p1;p1=p1-next;}p2-next=NULL;}returnhead;}
10.i__geline.c#includestdio.hvoidpl{printf********************************************************************************;printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;}voidpl0{printf*^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^*;printf********************************************************************************;}五.运行结果以下为运行程序的流程进入进入界面,按任意键继续,进入“主菜单”
1.选择菜单1,开始游戏玩家可按照游戏提示输入猜测的数字进行游戏若在猜数字过程中输入“rt”字符串,可放弃游戏返回主菜单;若输入“rp”字符串,可放弃该次游戏重新开始游戏
2.选择菜单2,进入“数据记录”菜单选择菜单1,进入“排行榜”菜单
2.
1.选择菜单1,进入“排行榜”菜单选择菜单1,按排名次序浏览排行榜浏览排行榜信息,最近一次重置排行榜或第一次游戏以来所有玩家猜正确的总共人次和所有玩家猜正确的平均所用次数以及所有玩家参与游戏后,分别以1到10次猜正确的平均成功率以及排行榜记录的起始时间选择菜单2,按姓名顺序浏览排行榜同上选择菜单3,按所用时间多少浏览排行榜同上选择菜单4,进入“重置排行榜”菜单.1选择菜单1,清空排行榜.2选择菜单2,同时重置count文件记录.3按退格键,返回“排行榜”菜单选择菜单5,返回“游戏记录”菜单选择菜单6,返回“主菜单”
2.
2.选择菜单2,进入“count文件”菜单选择菜单1,显示count文件记录浏览近一次重置清空count文件或第一次游戏以来,玩家参与游戏的次数;对应所需次数赢得游戏的玩家人数及其在赢得游戏总人数中所占的比例同时浏览到该记录的起始时间选择菜单4,进入“清空count文件”菜单.1选择菜单1,重置count文件数据.2选择菜单2,同时清空排行榜.3按退格键,返回“count文件”菜单选择菜单5,返回“游戏记录”菜单选择菜单6,返回“主菜单”
2.
3.选择菜单3,返回“主菜单”
3.选择菜单3,进入“帮助”菜单
3.
1.选择菜单1,显示游戏规则说明游戏的进行过程和一定的规定
3.
2.选择菜单2,显示游戏说明显示游戏的其他功能
3.
3.选择菜单3,返回“主菜单”
4.选择菜单4,退出游戏,显示退出界面
六、调试分析情况1打开文件失败,不能用fclose;语句关闭其文件指针错误代码fp=fopen"line.___""r";Iffp==NULL{fclosefp;……;}情况1截图原因此语句在fopen失败情况下因为打开失败,所以fp指向保护内存或“空指”,并没有赋予有意义的值在运行fclose时要读取fp,但fp无效所以运行错误!处理方式删除fclosefp;的语句处理情况2用fprintf;写入的文件用fread;读出后,得到乱码原因fprintf;与fscanf;的储存数据的编码和fwrite;与fread;所用的编码不同fprintf;与fscanf;是原样写入、读出;而fwrite;与fread;则不是(不清楚是怎么编码)处理方式只用其中的一组对应的写入、读出如fwrite与fread情况3排行榜是需要排序输出的,将数据按照一定的顺序输出成绩的好坏处理方式处理数据时,将数据用链表连接将新的数据以插入新链表的方式进入链表,插入时要按照一定规定进行,在这里就是成绩的好坏情况4排行榜只需输出前十名成绩的数据,但实际情况要输出十一,甚至无穷名玩家的记录原因理想情况前十名的成绩各不相同,重要的是第十一名的成绩与第十名的成绩不同这样排行榜只需输出十名玩家的数据但实际情况并不一定,再有可能的情况下,可以出现前十几名玩家的成绩都相同这样就需要输出一个不定长度有可能是无限)的排行榜.处理方式判断第十名以后的玩家成绩与第十名玩家的关系,若相同,则输出;若不同,则结束排行榜输出应为排行榜不宜过长,所以规定排行榜最多输出十五名玩家的数据
七、总结本课程设计进行了猜数字游戏的分析、设计、实现在设计过程中,我根据玩家的实际需求进了详尽的分析,并分为游戏功能和浏览游戏记录功能以分模块的思想进行函数设计,尽可能使一个函数实现一个具体的功能在猜数字游戏分析部分,给出了玩家的具体需求、具体的运行环境和游戏拥有的功能描述在总体设计部分,说明了题目的要求,阐述了__和设计的总体思想,以流程图、模块分析、效果图阐述了游戏的构成在详细设计部分,包含了文件及函数的组成的说明,函数的具体设计与功能描述在本游戏的实现过程中,以工程为基础连接各个文件、函数可对单一的函数进行调试本游戏软件已实现玩家的基本需求,但也有可完善的地方例如,对游戏进行级别设置,分为规定用十次、八次、六次猜得数字的低、中、高三个等级;或增加限制游戏时间的功能;在游戏过程中,显示所用时间,是玩家可随时了解自己已用时间最后,为了更体现游戏的简单操作,可以实现图形化操作界面猜数字游戏游戏区游戏记录帮助游戏记录排行榜显示count文件信息按排名浏览排行榜count文件按姓名浏览排行榜按用时浏览排行榜清空排行榜清空count文件帮助游戏规则游戏说明进入程序开始结束进入游戏赢得游戏Y输出排行榜刷新排行榜Y继续游戏NNNY重新游戏返回菜单YYNN按排名浏览排行榜清空排行榜按姓名浏览排行榜按用时浏览排行榜清空排行榜同时重置count文件排行榜count文件显示count文件信息重置count文件同时清空排行榜清空count文件帮助游戏规则游戏说明返回主菜单游戏记录退出程序。