1、课 程 设 计 报 告课程名称 C语言程序设计 课题名称 猜 数 字 游 戏 专 业 自 动 化 班 级 1081班 学 号 201013110111 姓 名 罗 超 超 指导教师 王 颖 2011年6月20日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计 课 题 猜 数 字 游 戏 专业班级 自 动 化 1081 班 学生姓名 罗 超 超 学 号 201013110111 指导老师 王 颖 审 批 任务书下达日期 2011 年 6 月 13 日任务完成日期 2007 年 6 月 20 日猜数字游戏一、问题描述: 该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重
2、复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。二、功能要求:1、本游戏显示这样的菜单:(1) 随机产生数据(2) 用户输入数据(3) 退出游戏2、游戏成功与否都能返回主菜单三、算法提示:1、 数据结构:数组2、 用简单的程序设计方法四、测试数据:测试数据: 3792第一次输入: 12340A2B第二次输入: 5678 0A1B第三次输入: 0867 0A1B第四次输入: 9786 1A1B第五次输入: 1794 2A0B第六次输入: 2793 2A2B第七次输入: 3792 4A0B游戏成功!五、其它: 对该系统有兴趣的同学可以在
3、实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。目录第一章 绪论6第一节 项目背景6第二节 本课题所做的工作6第三章 程序设计8第一节 程序的功能8第二节 输入输出的要求8第三节 程序模块8第一条 模块组成8第二条 层次结构9第三条 模块调用10第四章 分析11第一条 模块解释与功能11第五章 调试15第一节 菜单测试15第二节 游戏测试16第一条 在自定义中16第二条 在随机游戏中17第六章 总结19第七章 附录20第一节 附录A 源程序20第二节 附录B 参考文献30课程设计评分表31第一章 绪论第一节 项目背景 C语言是一种优秀的程序设
4、计语言,其功能丰富,表达能力强,程序执行效率高,可移植性好;C语言既有高级计算机程序设计语言的特点,同时又具有部分汇编语言的特点,因而C语言具有较强的系统处理能力。通过C语言函数结构可以方便的实现程序的模块化;在C语言的基础上发展起来的面向对象程序设计语言如C+,java,c#等于C语言有许多的共同特征,掌握C语言对学习进而应用这些面向对象的程序设计语言有极大的帮助。因为其独特的语言机制在计算机科学领域中得到了广泛的应用。目前,大部分工科专业的计算机程序语言都是C语言,主要学习面向过程的程序设计方法。 C语言课程设计是综合性比较强的一门设计课程,它考察了学生对C语言的掌握及运用情况。有助于提高
5、学生的分析,理解及动手实践能力。是计算机的基础课程。本题目运用了结构体变量的定义及初始化,for,do-while循环,if,switch-case语句,文件打开,文件保存及其复合使用。 第二节 本课题所做的工作本课题设计一个猜数字游戏,用户根据自己的爱好与兴趣进行随机游戏与自定义游戏,如果用户想自定义一个数字来猜,可以由用户自己进行输入,如果想挑战高难度,用户可以猜测由电脑产生的一个随机数,具体工作有:系统自动产生一个随机数或用户自己定义一个随机数,制作游戏主菜单,制作游戏继续菜单,设计游戏程序,设计友好的界面提示与帮助。 本课程设计分为六个章节,每个章节为课题展开,重程序的需求分析,程序总
6、体设计,程序设计等逐步向读者介绍,说明本课题。还提供了源程序供读者参考。 第二章 需求分析 本程序为猜数字游戏,用户可以根据自己的爱好与兴趣进行随机游戏与自定义游戏,如果用户想自定义一个数字来猜,可以由用户自己进行输入,如果想挑战高难度,用户可以猜测由电脑产生的一个随机数; 每个游戏者都想在自己游戏结束时看到自己的得分情况,因此需要对游戏结果进行打分;游戏者在游戏时,可能想到在任意时候都可以退出游戏,因此,无论游戏进行到任何阶段,都能够返回到主菜单或退出游戏;在退出游戏之前,如果游戏者要再次进行挑战,应该设置一个提示游戏继续提示模块; 为了能够更好的迎合游戏者,界面设置要和谐,要能给用户有足够
7、的提示,因此,系统菜单应该包括游戏开始,游戏退出,游戏说明,关于,游戏得分榜五个部分。第三章 程序设计第一节 程序的功能 该游戏可以由程序随机产生或由用户自定义四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。输入正确则为成功, 累计八次错误则游戏失败。游戏成功根据猜测次数给出相应的得分!该游戏还能自动判断你输入是否有误,如果输入有误,则自动提示您正确的操作。第二节 输入输出的要求 按提示输入0-9之间的数字进行操作 输入 如:在菜单页面时 输入1进入游戏; 输入2退出游戏; 输入3进入游戏说明页面; 输入4查看游戏版本及版权; 输入5查看游戏得分榜。 输出
8、如: 在游戏成功与失败时输出游戏得分与挑战成功与否!如果当输入的选项出现错误时,则系统输出游戏提示“你输入有误,请确定后重新输入!”。第三节 程序模块第一条 模块组成 本程序分为八个模块,main()主模块,menu()菜单模块,startf()开始模块,save()存储模块,display()排行榜模块,,shuomingf()说明模块,tuichu()退出模块,guanyuf()关于模块。第二条 层次结构 第三条 模块调用显示菜单输入选项开始返回?返回?返回?执行开始函数Startf( )执行得分榜函数defen()tuichu( )执行说明函数Delete( )执行关于语句guanyu(
9、)退出= =1= =5= =3= =4= =2YYYNNN第四章 分析 第一条 模块解释与功能v main()-主模块,操作系统的开始与结束运行;void main()/*主函数*/ menu();/调用菜单模块进行菜单选择v menu()-菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执行;v main()-主模块,操作系统的开始与结束运行;void main()/*主函数*/ menu();/调用菜单模块进行菜单选择v menu()-菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执行;scanf(%d,&k);switch(k) /*选择项*/case 1:system
10、cls);startf();/开始游戏;break;case 2:system(cls);break;break;case 3: system(cls);return shuomingf();/跳到说明case 4: system(cls);return guanyuf();/跳到关于default : printf(tt您的输入有误,请重新输入!n);system(pause);system(cls);return menu();/返回主菜单v startf()-开始模块,猜数字游戏开始,游戏者按照自己的意愿来进行游戏,系统对游戏的输入进行判断,真正实现了系统与游戏者完美融合;scanf(
11、d,&f);/进行是否自定义选择switch(f)case 0:/进行随机游戏srand(int)time(0);/*随机数据的产生*/ n=1+(int)(10000.1*rand()/(RAND_MAX+1.0); break;default:printf(你输入有误,请重新输入!);system(pause);case 1:printf(请输入你要自定义的数据n);scanf(%d,&n);break; Do/进行游戏,知道猜对或8次才结束 int c;printf(请输入四个0到9之间的数字,且不重复,如:1234n);scanf(%d,&cs);/*判断随机数据是否合格*/ int
12、 g1,s1,b1,q1,A=0,B=0;g1=cs%10;/*拆分测试数据*/s1=cs%100/10;b1=cs/100%10;if(cs1000)q1=0;elseq1=cs/1000;/*拆分测试数据*/ int p4=q1,b1,s1,g1,i,j;/*比较各位数是否相等*/if (cs=n)/游戏区/ break;for(i=0;i4;i+)for(j=0;j4;j+)if (pi=aj)if (i=j)A+;elseB+;m+;/次数累计system (cls);printf(ttt%dA%dB,m=%d,A,B,m);printf(n);printf(n);while(m8);
13、/进行游戏,知道猜对或8次才结束v phangb()-排行榜模块,进入排行榜查看自己及以往的游戏排行情v Tuichu()-退出模块,退出整个游戏系统;scanf(%d,&h);switch(h)/是否退出模块选择case 1:system(cls);menu();/返回主菜单;break;case 2:system(cls);break;break;default : system(cls);printf(您的输入有误,请重新输入!);/提示报错return menu();v Shuomingf-说明模块(),向游戏者介绍游戏的规则,并提示游戏者如何进行游戏;v Guanyuf()-关于模块
14、向游戏者介绍本游戏的版本及版权。第五章 调试第一节 菜单测试 在主菜单中 输入 1:进入游戏; 输入 2:退出游戏; 输入 3:进入游戏说明; 输入 4:进入关于; 输入 5:进入游戏排行榜; 输入其它数据或按键时:提示“你输入有误,请重新输入”;2) 在自定义数值中 输入 1:进入自定义,提示请输入你要自定义的数据; 输入 0:进入随机游戏,系统将自动生成数据给游戏者猜; 输入 3:系统报错,提示“你输入有误,请重新输入!”;3) 在继续菜单中 输入 1:继续进行游戏; 输入 2:退出游戏; 输入 3:系统报错,提示“你输入有误,请重新输入”;第二节 游戏测试第一条 在自定义中自定义:输入
15、12341) 第一次 1234 结果如下图: 2) 第一次 1356 第二次 2345 0A3B;第三次 3456 2A0B;第四次 5678 0A0B 第五次 7890 0A0B;第六次 0123 0A2B;第七次 2357 0A2B;第八次 1234 结果如下图:自定义:输入12提示报错,-“是否自定义数值”,直至定义正确; 结果如上图:第二条 在随机游戏中 随机数据 1234第一次 1356 1A0B;第二次 2345 0A3B;第三次 3456 2A0B;第四次 5678 0A0B ;第五次 7890 0A0B;第六次 0123 0A2B;第七次 2357 0A2B;第八次 1234
16、结果如下图: 第六章 总结 在一周的时间里,我们每天几乎都要面对着电脑十个小时以上,上课时去机房写程序,回到宿舍还要继续奋斗;要是只是在电脑面前坐着也没有什么难过的,但是在电脑面前还要想着怎么去写代码,怎么去安排程序结构,怎么去实现想要的程序功能等等一系列的事情;特别是在调试程序的时候更是让人头痛,辛辛苦苦的写好了函数,等到调试运行就出现一堆错误,真的拿它没办法呀!不过还好有书本的基础知识、发达的网络通信、知识渊博的老师以及热心的同学的帮助,才使我能将那些问题一一解决! 在还没有进行课程设计实训之前,我对C语言知识的掌握真的只能说是很肤浅,我只知道分开来使用那些语句和语法,对他们根本没有整体感
17、念,所以在学习C语言时经常会感觉很盲目,甚至不知道自己学这些东西是为了什么。通过一周的课程设计,我对C语言有了更深入的了解,同时也建立起了一个对C语言的整体架构和编程思想;我还学到了很多课本上没有学到的东西,也了解了很多以前不了解的计算机语言方面的知识;他扩充了我的知识,也开拓了我的视野,让我们了解了我们学习计算机语言的目的和将来发展的方向。 通过该程序设计,我深刻体会到要编好一个程序必须具备扎实的基础知识由于以前学习的相关知识比较浅显,所以一开始我便感觉无从下手,但通过与同学间的互相讨论交流及上网搜索的相关资料,我渐渐掌握了做设计报告的基本方法和步骤,在自己的努力最终圆满完成了老师要求设计任
18、务。 其实这次最大的收获还是发现自己的不足,原来自己所掌握的知识只是皮毛而已,还有对于计算机的基本操作知道的真是少的可怜,虽然受了点小小的打击,但总比一直错下去、学了等于没学强,这样至少不会一直迷迷糊糊下去了。另外我也深深理解上机操作的重要性,有时候觉得自己很认真很仔细,对于编写的程序非常自信,可实际一上机操作就不行了,会出现错误,虽然会打击自信心,但总比一直错下去、学了等于没学强,那样学习也将失去意义,学习就是一个不断犯错又不断修正的过程,我觉得我每犯一个错误都会从中收获一些东西,这也叫经验吧,是这样通过不断犯错积累的,所以对于学习中的错误更要无惧无畏。 尽管这次课设做的可谓坎坎坷坷,但现在
19、想来还是不错的,最起码让我对程序啊、函数啊的理解加深了,对于课本上忽略的东西也有所了解,最重要的是发现自己还不行,要努力,而且很努力才行。第七章 附录 第一节 附录A 源程序#include #include#include#includemath.hstatic int t;int a100;extern startf();/*外部说明*/extern menu();/*外部说明*/extern backf();/*外部说明*/ extern tuichu();/*外部说明*/extern shuomingf();/*外部说明*/extern guanyuf();/*外部说明*/学生基本信息
20、保存模块void Save(int x)FILE *fp;int i;at=x;t+;fp=fopen(c:youxi.txt,w+);for(i=0;i0)printf(n完成%d个文件的保存n,t);system(pause);elsesystem(cls);printf(n文件为空,没有保存一个文件n);system(pause);fclose(fp);/关闭文件/显示模块void display()int i;for(i=0;i 1.开 始 2.退出系统 3.游戏说明 4.关 于 5 显示分数 =*|n);printf(tt|*|n);printf(tt|.|n);printf(nnn
21、n);printf(tt请按提示输入:);scanf(%d,&k);switch(k) /*选择项*/case 1:system(cls);startf();break;case 2:system(cls);break;break;case 3: system(cls);return shuomingf();case 4: system(cls);return guanyuf();case 5:system(cls); display(); system(pause);return menu();default : printf(tt您的输入有误,请重新输入!n);system(pause);
22、system(cls);return menu();int startf( )/*游戏模块*/int n,m=0,g,s,b,q,cs,C=0,f;/*cs表示测试数据*/doprintf(是否自定义数值:1/0 (1:是 /0:否)n);scanf(%d,&f);switch(f)case 0:srand(int)time(0);/*随机数据的产生*/ n=1+(int)(10000.1*rand()/(RAND_MAX+1.0); break;default:printf(你输入有误,请重新输入!);system(pause);case 1:printf(请输入你要自定义的数据n);sca
23、nf(%d,&n);break; g=n%10;s=n%100/10; b=n/100%10;if(n1000)q=0;while(g=s)|(g=b)|(g=q)|(s=b)|(s=q)|(b=q)|(n=10000);/*随机数据的产生*/int a4=q,b,s,g;/*将随机数据重组*/system(cls);printf(欢迎进入MS版猜数字游戏.nn);printf(tt.A:数字正确,且位置正确 .n);/*温馨提示*/printf(tt.B:数字正确,但位置错误 .n);printf(tt.m:实验次数 .nn); do int c;printf(请输入四个0到9之间的数字,且
24、不重复,如:1234n);scanf(%d,&cs);/*判断随机数据是否合格*/ int g1,s1,b1,q1,A=0,B=0;g1=cs%10;/*拆分测试数据*/s1=cs%100/10;b1=cs/100%10;if(cs1000)q1=0;elseq1=cs/1000;/*拆分测试数据*/ int p4=q1,b1,s1,g1,i,j;/*比较各位数是否相等*/if (cs=n)/游戏区/ break;for(i=0;i4;i+)for(j=0;j4;j+)if (pi=aj)if (i=j)A+;elseB+;m+;system (cls);printf(ttt%dA%dB,m=%d,A,B,m);printf(n);printf(n);while(m8);/游戏区/if(m 1.继 续 2.游戏退出 版本:MS.11.4 作者:罗超超 =*|n);printf(ttt|*