11、系统需求分析1.1问题描述:该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。1.2功能要求:(1)、本游戏显示这样的菜单:a、随机产生数据b、用户输入数据c、退出游戏(2)、游戏成功与否都能返回主菜单2、概要设计2.1系统总体设计猜数字游戏是一种大众娱乐游戏,开发与设计的重点在于游戏供玩家进行猜数字游戏的原始数字的产生和用户每次进行猜数字操作之后的游戏提示,还有用户设置数字作为游戏数据。在前面对猜数字游戏进行需求分析的过程中,已经初步明确了系统的主要功能模块和用户需求,下面将给出猜数字游戏的功能模块结构。2开始功能菜单显示单人模式退出游戏双人模式帮助信息图4-1系统功能图2.2各模块功能本游戏软件软件可以共分为五大模块,分别是数据检测模块、游戏模块、系统自动生成数字模块、帮助信息模块、主函数模块。整个游戏软件基本实现用户对此类游戏软件的要求,其各个模块的功能如下:(1)、voidc_input(char*str):检测数据模块;该模块是系统对玩家输入的数据进行检测,若数据符合要求,即四个数字不重复且第一个数字不为零,则进行下一步,否则系统提示“输入错误,请重新输入”,然后重新进入输入状态。(2)、voidc_game(constchar*temp):游戏模块;该模块为玩家提供猜数字游戏的主休功能,由系统自动产生或其他人输入4个随机排列的整数,并给玩家8次机会猜测数字的数值和排列顺序。如果用户在8次之内没有猜出3正确的结果,则提示用户游戏失败,否则提示用户游戏成功。(3)、voidc_rand():系统自动生成数字模块;系统在游戏规则下,通过特定的算法实现自动生成4个不重复的数字,为游戏提供要猜的数字,供玩家来猜。(4)、voidc_help():帮助信息模块;帮助信息模块提供的功能是当玩家选项为帮助功能对应的选项数字时,进入帮助信息模块,此模块给出了用户猜数字的游戏规则和游戏中相关提示的含义,以便用户了解游戏规则,更好地进行游戏。(5)voidmain():主函数模块;该模块主要提供主界面,将各个模块连接起来,让用户更方便、更有效地进行游戏。3、详细设计3.1采用C语言定义相关的数据类型inti,j;/*定义输入的数字及系统产生的数字*/intci;/*定义猜数字的机会*/charin[4];/*定义数字的个数*/charout[5]=”0A0B”;/*定义相关的系统提示*/chartemp[4];/*进行游戏的数字*/3.2流程图4输入的数字和答案是否一致给出提示,回答机会减1是否还有回答机会?否是游戏成功是游戏失败退出否玩家输入猜测的数字输入的数字是否符合要求开始否是图4-353.3函数调用关系图主函数:intmain()帮助信息函数:c_help()输入数据检测函数:c_input(char*str)用户输入数据函数:c_printf()自动生成数据函数:c_rand()图4-34、系统调试在设计系统自动生成数字的函数中,我犯了点逻辑上的小错误,陷入了死胡同,后来请教了其他同学,同学给了我一个新的思考思路,最终把这部分函数很好地完成了。刚开始执行帮助函数的时候,当我从帮助信息中返回到主菜单后,无法输入任何信息。在我的细心检查与推理下,解决了这一问题。在后来执行输入函数时,按数字顺序输入,输完后执行显示功能,数字、字母的位置显示不对,试着在其中增加一些语句,希望能把所需结果按正常顺序显示,但暂时没有成功,最后在老师的帮助下,所需结果能按正常顺序输出了。游戏系统在计算玩家猜数字的机会的时候遇到了些小麻烦,程序刚遍完运行游戏时,系统将玩家输入错误视为减少一次游戏机会。在同学的帮助下,将检测输入数据是否符合要求这一步从游戏部分分出来,重新建立一个函数,并与游戏部分建立联系,完美地解决了这一问题。6当然,在系统调试的时候还有一些标点符号的忽略,给系统调试带来一点小麻烦。因此,在调试程序的同时,我们也要谨记调试失败的原因,以免下次犯同类错误。5、运行结果截屏及说明5.1运行结果截屏游戏初始画面,用户输入自己的选择进入相应的模块:图5-1选择单人模式,系统自动生成4个数字由玩家来猜,只有8次机会:7图5-2在游戏的过程中还会出现系统提示,其中A表示数字相同且位置相同,B表示数字相同而位置不同:图5-3再输入的过程中,如果输入的数字不符合要求,会有系统提示:8图5-4这个游戏还可以选择双人模式,由2个人来玩。其中一个人输入数字请另一个人来猜:图5-5在数字设置完成后,会转向下一界面:9图5-6如果对游戏有什么不明白的,还可以选择进入游戏帮助界面:图5-7在用户选择离开游戏的时候还有一次确认,确保用户不是失误操作:10图5-85.2使用说明系统为玩家提供猜数字游戏的主体功能,由系统自动产生或由用户自己设置4个随机排列的整数,并给用户8次机会猜测数字的数值和排列顺序。如果用户在8次之内没有猜出正确的结果,则提示用户游戏失败,否则提示用户猜数字成功。猜数字游戏软件的总体目标是按照特定游戏规则为用户提供一个方便友好的游戏界面,并且提供相应的帮助功能。游戏规则如下:①游戏软件随机产生4个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。或者由用户自己设置4个数字,请他人来猜,游戏规则不变。②玩家有8次猜数字的机会,如果在8次之内仍末猜出正确的数字值和数字位置顺序,则提示用户游戏失败。③一旦玩家在8次的次数限制内猜出正确的数字值和位置顺序,则赢得游戏。11在进行游戏的过程中,系统会根据用户输入的数字给出相应提示,也就是数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。在运行本游戏软件的时候,在主菜单中可以找到游戏帮助选项,选择后直接进入帮助信息界面,用户也可以从那里了解到游戏规则和使用方法。6、心得体会C语言课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。在如今高度计算机化的社会下,电脑编程在计算机领域已尤为重要,扮演着一个不可或缺与替代的角色。经过一周的C语言课程设计,我不但实践了课本的知识,还制作了自己的小程序,更重要的是自己对C语言有了更深入的了解。在实践中,深刻体会到只有经过调试程序,我们才能掌握正确的语法知识及把解决问题的方法用程序语言来表达。在设计程序的过程中不仅使我掌握了c语言程序设计基本技能,同时也增长了翻阅有关文献的能力,加强了实践能力及自学能力,培养了分析问题和解决问题的能力。想起这次课程设计的这些日子,至今我仍感慨颇多。以前上课时学的都是一些最基本的东西,觉得很枯燥无味。但当自己能把所学的知识转换为有用的东西时,心中却不知何时有了一种莫名的动力,在电脑前面一坐就是好几个小时。或许这就是有压力才有动力吧!在整整一星期的日子里,面对一件新事物,从理论到实践,可以说是苦多于甜。这一周的课程设计,不仅使我巩固了以前所学过的知识,更使我获得了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实践中得出结论,才能真正掌握好所学知识,才能够实现理论到使用的升华!毕竟这是我进行的第一次课程设计,所以在该过程中遇到问题,可以说是数12不胜数。此外,在设计的过程中发现了自己对以前所学过的知识理解得不够透彻、掌握得不够牢固的不足之处。好的学习方法在学习中很多时候都起着至关重要的作用!尤其是在这次课程设计过程中,深深地体会到,善于总结是学习过程中不可缺少的重要的一个环节。每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的调试和运行状况,随时总结,找到自己的错误与不足之处,这样所编写的程序才能逐步提高。就如生活那样,汗水预示着结果也见证着收获。直到实际动手做,我才真正领略到“一份耕耘,一份收获。”这一句话的真正含义。这次的c语言设计,对我们而言,知识上的收获重要,但是在一个团队间的团结合作的幕幕更让我们记忆终生。挫折是一份财富,经历是一份拥有。虽然这些日子很短暂但我相信这次实际操作必会成为我人生路上的一段美好的回忆!最后我想对给过我帮助的所有同学和各位指导老师表示忠心的感谢!7、附录7.1源代码#includestdio.h#includestdlib.h#includeconio.h#includestring.h#includetime.h/*定义变量及函数*/voidc_input(char*str){13inti,j;/*检测输入是否合法*/input:for(i=0;i4;i++){str[i]=getch();putchar(str[i]);}putchar('\n');for(i=0;i4;i++){if(str[i]'0'||str[i]'9'){printf(输入错误,请重新输入:);gotoinput;}for(j=0;ji;j++){if(str[i]==str[j]){printf(输入错误,请重新输入:);14gotoinput;}}}}/*显示帮助信息*/voidc_help(){system(cls);printf(\t\t\t\t※游戏帮助※);printf(\n\n本游戏有两种模式。第一种是由电脑自动生成四个不重复的数字,由玩家来猜;第二种);printf(\n是由玩家自己设置四个不重复的数字,请他人来猜,在主菜单中选择【双人模式】可进入第);printf(\n二种模式。游戏开始后,玩家输入四个不重复的数字,输入后会有提示XAYB,X表示有几个);printf(\n数字与答案数字相同且位置相同。Y表示有几个数字与答案数字相同但位置不正确。例如:);printf(\n答案数字是3792,如果输入9786,则会提示1A1B。玩家总共有八次机会来猜数字。);printf(\n\n\n\t\t\t\t\t\t祝您游戏愉快!);printf(\n\n请按任意键返回主菜单……);15getch();return;}/*游戏部分*//*定义变量及函数*/voidc_game(constchar*temp){inti,j,ci;charin[4];charout[5]=0A0B;for(ci=0;ci8;ci++){printf(第%d次输入,你总共有8次机会:,ci+1);c_input(in);for(i=0;i4;i++){if(in[i]==temp[i]){out[0]++;}16else{for(j=0;j4;j++){if(in[i]==temp[j]){out[2]++;}}}}printf(%s\n,out);if(strcmp(out,4A0B)==0){printf(恭喜你,你赢了!);printf(\n请按任意键返回主菜单……………);getch();return;}out[0]='0';17out[2]='0';}printf(很遗憾,你输了,再接再厉哦!);printf(\n请按任意键返回主菜单……………);getch();}voidc_rand(){inti,j;chardata[]=0123456789;chartemp[4];system(cls);printf(\t\t\t\t※单人模式※\n\n);/*电脑自动生成4个不重复数字*/for(i=0;i4;i++){j=rand()%(10-i);temp[i]=data[j];data[j]=data[10-i-1];18}c_game(temp);}voidc_printf(){chartemp[4];/*用户自己设置数字请他人来猜*/system(cls);printf(\t\t\t\t※双人模式※\n\n);printf(请输入测试数据:);/*检测用户输入的数据是否符合要求*/c_input