C语言课程设计--猜数字游戏

更新时间:2023-12-26 19:03:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

程 设 计 报 告

课程名称 C语言程序设计 课题名称 猜 数 字 游 戏 专 业 自 动 化 班 级 1081班 学 号 201013110111 姓 名 罗 超 超 指导教师 王 颖

2011年6月20日

湖南工程学院 课 程 设 计 任 务 书

课程名称 C语言程序设计 课 题 猜 数 字 游 戏

专业班级 自 动 化 1081 班 学生姓名 罗 超 超 学 号 201013110111 指导老师 王 颖 审 批

任务书下达日期 2011 年 6 月 13 日 任务完成日期 2007 年 6 月 20 日

2

猜数字游戏

一、问题描述:

该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。

二、功能要求:

1、本游戏显示这样的菜单:

(1) 随机产生数据 (2) 用户输入数据 (3) 退出游戏

2、游戏成功与否都能返回主菜单

三、算法提示:

1、 数据结构:数组 2、 用简单的程序设计方法

四、测试数据:

测试数据: 3792 第一次输入: 1234

0A2B

第二次输入: 5678

0A1B

第三次输入: 0867

0A1B

第四次输入: 9786

1A1B

第五次输入: 1794

2A0B

第六次输入: 2793

2A2B

3

第七次输入: 3792

4A0B

游戏成功!!!

五、其它:

对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能,如:破记录功能,若你所匹配的次数小于纪录保持者,则为破纪录。

4

目录

第一章 绪论 .................................................................................................................... 6

第一节 项目背景 ...................................................................................................... 6 第二节 本课题所做的工作 ........................................................................................ 6 第三章 程序设计 ............................................................................................................. 8

第一节 程序的功能 ................................................................................................... 8 第二节 输入输出的要求 ............................................................................................ 8 第三节 程序模块 ...................................................................................................... 8

第一条 模块组成 ............................................................................................... 8 第二条 层次结构 ............................................................................................... 9

第三条 模块调用 ..............................................................................................10

第四章 分析 ................................................................................................................... 11 第一条 模块解释与功能 .................................................................................... 11

第五章 调试 ...................................................................................................................15

第一节 菜单测试 .....................................................................................................15 第二节 游戏测试 .....................................................................................................16

第一条 在自定义中 ...........................................................................................16

第二条 在随机游戏中 .......................................................................................17

第六章 总结 ...................................................................................................................19 第七章 附录 ...................................................................................................................20 第一节 附录A 源程序 ...........................................................................................20 第二节 附录B 参考文献........................................................................................30 课程设计评分表 ..............................................................................................................31

5

第一章 绪论

第一节 项目背景

C语言是一种优秀的程序设计语言,其功能丰富,表达能力强,程序执行效

率高,可移植性好;C语言既有高级计算机程序设计语言的特点,同时又具有部分汇编语言的特点,因而C语言具有较强的系统处理能力。通过C语言函数结构可以方便的实现程序的模块化;在C语言的基础上发展起来的面向对象程序设计语言如C++,java,c#等于C语言有许多的共同特征,掌握C语言对学习进而应用这些面向对象的程序设计语言有极大的帮助。因为其独特的语言机制在计算机科学领域中得到了广泛的应用。目前,大部分工科专业的计算机程序语言都是C语言,主要学习面向过程的程序设计方法。

C语言课程设计是综合性比较强的一门设计课程,它考察了学生对C语言的掌握及运用情况。有助于提高学生的分析,理解及动手实践能力。是计算机的基础课程。本题目运用了结构体变量的定义及初始化,for,do-while循环,if,switch-case语句,文件打开,文件保存及其复合使用。

第二节 本课题所做的工作

本课题设计一个猜数字游戏,用户根据自己的爱好与兴趣进行随机游戏与自定义游戏,如果用户想自定义一个数字来猜,可以由用户自己进行输入,如果想挑战高难度,用户可以猜测由电脑产生的一个随机数,具体工作有:系统自动产生一个随机数或用户自己定义一个随机数,制作游戏主菜单,制作游戏继续菜单,设计游戏程序,设计友好的界面提示与帮助。

本课程设计分为六个章节,每个章节为课题展开,重程序的需求分析,程序总体设计,程序设计等逐步向读者介绍,说明本课题。还提供了源程序供读者参考。

6

第二章 需求分析

本程序为猜数字游戏,用户可以根据自己的爱好与兴趣进行随机游戏与自定

义游戏,如果用户想自定义一个数字来猜,可以由用户自己进行输入,如果想挑战高难度,用户可以猜测由电脑产生的一个随机数;

每个游戏者都想在自己游戏结束时看到自己的得分情况,因此需要对游戏结果进行打分;

游戏者在游戏时,可能想到在任意时候都可以退出游戏,因此,无论游戏进行到任何阶段,都能够返回到主菜单或退出游戏;

在退出游戏之前,如果游戏者要再次进行挑战,应该设置一个提示游戏继续提示模块;

为了能够更好的迎合游戏者,界面设置要和谐,要能给用户有足够的提示,因此,系统菜单应该包括游戏开始,游戏退出,游戏说明,关于,游戏得分榜五个部分。

7

第三章 程序设计

第一节 程序的功能

该游戏可以由程序随机产生或由用户自定义四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。输入正确则为成功, 累计八次错误则游戏失败。游戏成功根据猜测次数给出相应的得分!该游戏还能自动判断你输入是否有误,如果输入有误,则自动提示您正确的操作。

第二节 输入输出的要求 按提示输入0-9之间的数字进行操作

① 输入 如:在菜单页面时 输入1进入游戏; 输入2退出游戏;

输入3进入游戏说明页面;

输入4查看游戏版本及版权; 输入5查看游戏得分榜。

② 输出 如:

在游戏成功与失败时输出游戏得分与挑战成功与否!如果当输入的选项出现错误时,则系统输出游戏提示“你输入有误,请确定后重新输入!”。

第三节 程序模块

第一条 模块组成

本程序分为八个模块,main()主模块,menu()菜单模块,startf()开始模块,save()存储模块,display()排行榜模块,,shuomingf()说明模块,tuichu()退出模块,guanyuf()关于模块。

8

第二条 层次结构

9

第三条 模块调用

开始 显示菜单 输入选项 = =1 = =5 = =3 = =4 = =2 执行开始函数 Startf( ) 执行得分榜函数defen() 执行说明函数 Delete( ) 执行关于语句guanyu() N 返回? 返回? N 返回? N Y Y Y 退出 10

第四章 分析

第一条 模块解释与功能

??main()--主模块,操作系统的开始与结束运行; void main()/*主函数*/ {

menu();//调用菜单模块进行菜单选择 }

??menu()--菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执

行;

??main()--主模块,操作系统的开始与结束运行;

void main()/*主函数*/ {

menu();//调用菜单模块进行菜单选择 }

??menu()--菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执

行; scanf(\

switch(k) /*选择项*/ { case 1:

{

system(\startf(); //开始游戏

};break;

case 2:

{

system(\break;

};break;

11

case 3:

{ system(\

return shuomingf();///跳到说明 }

case 4:

{

system(\

return guanyuf();//跳到关于 }

default :

{ }

printf(\您的输入有误,请重新输入!\\n\system(\system(\

return menu();//返回主菜单

??startf()--开始模块,猜数字游戏开始,游戏者按照自己的意愿来进行游戏,

系统对游戏的输入进行判断,真正实现了系统与游戏者完美融合;

scanf(\进行是否自定义选择 switch(f) {

case 0://进行随机游戏

srand((int)time(0));/*随机数据的产生*/

n=1+(int)(10000.1*rand()/(RAND_MAX+1.0));

break;

default:

printf(\你输入有误,请重新输入!!\system(\

case 1:printf(\请输入你要自定义的数据\\n\ }

12

scanf(\break;

Do//进行游戏,知道猜对或8次才结束

{

int c;

printf(\请输入四个0到9之间的数字,且不重复,如:1234\\n\scanf(\判断随机数据是否合格*/

int g1,s1,b1,q1,A=0,B=0; g1=cs;///**拆分测试数据**// s1=cs0/10; b1=cs/100;{

if(cs<1000)

q1=0;

else

q1=cs/1000;///**拆分测试数据**// }

int p[4]={q1,b1,s1,g1},i,j;/*比较各位数是否相等*/

if (cs==n)//游戏区// break; {

for(i=0;i<4;i++)

for(j=0;j<4;j++) if (p[i]==a[j])

if (i==j) A++; else B++;

m++;//次数累计

system (\

printf(\printf(\printf(\}

13

}

while(m<8);//进行游戏,知道猜对或8次才结束

??phangb()--排行榜模块,进入排行榜查看自己及以往的游戏排行情

??Tuichu()--退出模块,退出整个游戏系统;

scanf(\

switch(h)//是否退出模块选择 { case 1:

{

system(\menu();//返回主菜单

};break;

case 2:

{

system(\break;

};break;

default :

{

system(\

printf(\您的输入有误,请重新输入!\提示报错 return menu();

?? Shuomingf--说明模块(),向游戏者介绍游戏的规则,并提示游戏者如何进

行游戏;

?? Guanyuf()--关于模块,向游戏者介绍本游戏的版本及版权。

14

第五章 调试

第一节 菜单测试 在主菜单中

输入 1:进入游戏; 输入 2:退出游戏; 输入 3:进入游戏说明; 输入 4:进入关于; 输入 5:进入游戏排行榜;

输入其它数据或按键时:提示“你输入有误,请重新输入”;

2) 在自定义数值中

输入 1:进入自定义,提示请输入你要自定义的数据; 输入 0:进入随机游戏,系统将自动生成数据给游戏者猜; 输入 3:系统报错,提示“你输入有误,请重新输入!”;

3) 在继续菜单中

输入 1:继续进行游戏; 输入 2:退出游戏;

输入 3:系统报错,提示“你输入有误,请重新输入”;

15

第二节 游戏测试

第一条 在自定义中

自定义:输入1234 1) 第一次 1234 结果如下图:

2) 第一次 1356 第二次 2345 0A3B; 第三次 3456 2A0B; 第四次 5678 0A0B 第五次 第六次 第七次 第八次

7890 0A0B; 0123 0A2B; 2357 0A2B; 1234

结果如下图:

16

自定义:输入12

提示报错,--“是否自定义数值”,直至定义正确;

结果如上图:

第二条 在随机游戏中 随机数据 1234

第一次 1356 1A0B; 第二次 2345 0A3B; 第三次 3456 2A0B; 第四次 第五次 第六次 第七次

5678 7890 0123 2357

0A0B ; 0A0B; 0A2B; 0A2B;

第八次 1234 结果如下图:

17

18

第六章 总结

在一周的时间里,我们每天几乎都要面对着电脑十个小时以上,上课时去机

房写程序,回到宿舍还要继续奋斗;要是只是在电脑面前坐着也没有什么难过的,但是在电脑面前还要想着怎么去写代码,怎么去安排程序结构,怎么去实现想要的程序功能等等一系列的事情;特别是在调试程序的时候更是让人头痛,辛辛苦苦的写好了函数,等到调试运行就出现一堆错误,真的拿它没办法呀!不过还好有书本的基础知识、发达的网络通信、知识渊博的老师以及热心的同学的帮助,才使我能将那些问题一一解决!

在还没有进行课程设计实训之前,我对C语言知识的掌握真的只能说是很肤浅,我只知道分开来使用那些语句和语法,对他们根本没有整体感念,所以在学习C语言时经常会感觉很盲目,甚至不知道自己学这些东西是为了什么。通过一周的课程设计,我对C语言有了更深入的了解,同时也建立起了一个对C语言的整体架构和编程思想;我还学到了很多课本上没有学到的东西,也了解了很多以前不了解的计算机语言方面的知识;他扩充了我的知识,也开拓了我的视野,让我们了解了我们学习计算机语言的目的和将来发展的方向。

通过该程序设计,我深刻体会到要编好一个程序必须具备扎实的基础知识由于以前学习的相关知识比较浅显,所以一开始我便感觉无从下手,但通过与同学间的互相讨论交流及上网搜索的相关资料,我渐渐掌握了做设计报告的基本方法和步骤,在自己的努力最终圆满完成了老师要求设计任务。

其实这次最大的收获还是发现自己的不足,原来自己所掌握的知识只是皮毛而已,还有对于计算机的基本操作知道的真是少的可怜,虽然受了点小小的打击,但总比一直错下去、学了等于没学强,这样至少不会一直迷迷糊糊下去了。另外我也深深理解上机操作的重要性,有时候觉得自己很认真很仔细,对于编写的程序非常自信,可实际一上机操作就不行了,会出现错误,虽然会打击自信心,但总比一直错下去、学了等于没学强,那样学习也将失去意义,学习就是一个不断犯错又不断修正的过程,我觉得我每犯一个错误都会从中收获一些东西,这也叫经验吧,是这样通过不断犯错积累的,所以对于学习中的错误更要无惧无畏。 尽管这次课设做的可谓坎坎坷坷,但现在想来还是不错的,最起码让我对程序啊、函数啊的理解加深了,对于课本上忽略的东西也有所了解,最重要的是发现自己还不行,要努力,而且很努力才行。

19

第七章 附录

第一节 附录A 源程序

#include #include #include #include\static int t; int a[100];

extern startf();/*外部说明*/ extern menu();/*外部说明*/ extern backf();/*外部说明*/ extern tuichu();/*外部说明*/ extern shuomingf();/*外部说明*/ extern guanyuf();/*外部说明*/ //学生基本信息保存模块 void Save(int x) {

FILE *fp; int i; a[t]=x; t++;

fp=fopen(\for(i=0;i

20

fwrite(&a[i],sizeof(int),1,fp);

//每次写一个条录入或一个结构体数组至文件

}

if(i>0) { } else { }

fclose(fp);//关闭文件

system(\

printf(\文件为空,没有保存一个文件\\n\ system(\

printf(\完成%d个文件的保存\\n\ system(\

//显示模块 void display() { }

void main()/*主函数*/ {

int count=0; FILE *fp; int i;

for(i=0;i

printf(\没有分数\

printf(\printf(\

system(\

system(\

21

fp=fopen(\保存在c:youxi.txt,以读写创建一个新的文本 if(fp==NULL)//打开头文件失败 { }

printf(\文件打开错误!\\n\ exit(0);

while(!feof(fp))

{ }

t=count+t; fclose(fp); menu();

printf(\

if(fread(&a[count],sizeof(int),1,fp)==1)

//一次从文件中读取一条学生信息 count++;

printf(\ }

int menu()/*菜单模块*/ {

int k;

printf(\猜数字游戏..................\\n\ printf(\printf(\欢 迎 使 用 MS 版 ............ |\\n\\n\ printf(\经 典 猜 数 字 游 戏 .......... |\\n\\n\ printf(\感 谢 您 的 参 与 .............|\\n\\n\ printf(\谢 谢 ...................|\\n\\n\

printf(\printf(\printf(\罗超超编制 \\n\

22

printf(\printf(\printf(\开 始 <==**************|\\n\ printf(\printf(\退出系统 <==**************|\\n\ printf(\printf(\游戏说明 <==**************|\\n\ printf(\printf(\关 于 <==**************|\\n\ printf(\printf(\显示分数 <==**************|\\n\ printf(\printf(\printf(\printf(\

printf(\请按提示输入:\ scanf(\switch(k) /*选择项*/ { case 1:

{

system(\startf();

};break;

case 2:

{

system(\break;

};break;

case 3:

{ system(\

23

}

return shuomingf(); }

case 4:

{

system(\return guanyuf(); }

case 5:

{ }

system(\ display(); system(\return menu();

default : }

{ }

printf(\您的输入有误,请重新输入!\\n\ system(\system(\return menu();

int startf( )/*游戏模块*/ {

int n,m=0,g,s,b,q,cs,C=0,f;//**cs表示测试数据**// do {

printf(\是否自定义数值:1/0 (1:是 /0:否)\\n\

24

scanf(\switch(f) { case 0:

srand((int)time(0));/*随机数据的产生*/

n=1+(int)(10000.1*rand()/(RAND_MAX+1.0));

break;

default:

printf(\你输入有误,请重新输入!!\ system(\

case 1:printf(\请输入你要自定义的数据\\n\ }

g=n;

s=n0/10; scanf(\break;

b=n/100;

if(n<1000)

q=0;

}while((g==s)||(g==b)||(g==q)||(s==b)||(s==q)||(b==q)||(n<=124)||(n>=10000)

);/*随机数据的产生*/

int a[4]={q,b,s,g};/*将随机数据重组*/ system(\

printf(\欢迎进入MS版猜数字游戏...\\n\\n\

printf(\数字正确,且位置正确 .......\\n\温馨提示*/ printf(\数字正确,但位置错误 .......\\n\ printf(\实验次数 .......\\n\\n\

do

{

int c;

printf(\请输入四个0到9之间的数字,且不重复,如:1234\\n\

25

scanf(\判断随机数据是否合格*/

int g1,s1,b1,q1,A=0,B=0; g1=cs;///**拆分测试数据**// s1=cs0/10; b1=cs/100;{

if(cs<1000)

q1=0;

else

q1=cs/1000;///**拆分测试数据**// }

int p[4]={q1,b1,s1,g1},i,j;/*比较各位数是否相等*/ }

while(m<8);//游戏区// {

if(m<8||cs==n)//游戏得分情况// if (cs==n)//游戏区// break; {

for(i=0;i<4;i++)

for(j=0;j<4;j++) if (p[i]==a[j])

if (i==j) A++; else B++; m++;

system (\

printf(\printf(\printf(\}

26

{ switch(m) {

case 1: system(\

printf(\ case 2: system(\

printf(\ case 3: system(\

printf(\ case 4: system(\

printf(\ case 5: system(\

printf(\ case 6:;

case 7: system(\ printf(\

default: system(\

printf(\

wonderful!!!\\n\\t\\t\\t\\tscore:100\\t\\t\\t\\t\\n\ Save(100);

}

}

else

27

are

}

}

printf(\判断胜利与否//

system(\system(\return tuichu();

int tuichu()/*提示模块*/ {

int h;

printf(\

printf(\猜数字游戏...................\\n\

printf(\

printf(\

printf(\继 续 <==******************|\\n\ printf(\printf(\游戏退出 <==******************|\\n\ printf(\printf(\printf(\printf(\

printf(\请按提示输入:\ scanf(\switch(h) { case 1:

{

system(\menu();

};break;

case 2:

{

28

}

system(\break;

};break;

default : }

{ }

system(\

printf(\您的输入有误,请重新输入!\ return menu();

int shuomingf()/*说明模块*/ {

printf(\游戏说明................\\n\\n\ }

int guanyuf()/*关于模块*/ {

printf(\游戏关于..............\\n\

printf(\printf(\该游戏可以由程序随机产生或者自定义四个\\n\\n\ printf(\到9之间的数字,且不重复。玩游戏者通过\\n\\n\ printf(\游戏提示输入八次来匹配上面所输入的数字。\\n\\n\ printf(\表示位置正确且数字正确,\\n\\n\ printf(\表示数字正确而位置错误,\\t\\n\\n\ printf(\表示实验的次数。\\t\\n\\n\

printf(\system(\system(\

return menu();

printf(\

printf(\版本:MS.11.4 <==******|\\n\

29

}

printf(\printf(\作者:罗超超 <==******|\\n\ printf(\printf(\版 权 所 有 <==******|\\n\ printf(\printf(\翻 版 必 究 <==******|\\n\ printf(\printf(\printf(\

printf(\system(\system(\menu();

第二节 附录B 参考文献

[1]贾宗噗 许合利. C语言程序设计.人民邮电大学出版社,2006年12月 [2]熊壮.程序设计技术. 重庆大学出版社 [3]互联网

30

课程设计评分表

课题名称: 猜 数 字 游 戏

项 目 评 价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩

教师签名: 日 期:

31

课程设计评分表

课题名称: 猜 数 字 游 戏

项 目 评 价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩

教师签名: 日 期:

31

本文来源:https://www.bwwdw.com/article/brzx.html

Top