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

绝世美人儿
919次浏览
2021年01月01日 03:05
最佳经验
本文由作者推荐

风筝的图片-幼儿小班舞蹈

2021年1月1日发(作者:仲子陵)







程 设 计 报 告

课程名称 C语言程序设计
课题名称 猜 数 字 游 戏
专 业 自 动 化
班 级 1095班
学 号 2
姓 名 XXXXXXXX
指导教师 XXXXXXXX

2016年6月28日



猜数字游戏

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

二、功能要求:
1、本游戏显示这样的菜单:
(1) 随机产生数据
(2) 用户输入数据
(3) 退出游戏
2、游戏成功与否都能返回主菜单

三、
算法提示

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

四、测试数据:

测试数据: 3792
第一次输入: 1234
0A2B
第二次输入: 5678
0A1B
第三次输入: 0867
0A1B
第四次输入: 9786
1A1B
第五次输入: 1794
2A0B
第六次输入: 2793
2A2B

2


第七次输入: 3792
4A0B
游戏成功!!!

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




































3


目录
第一章 绪论 ......................... .................................................. .................................................. ........ 5
第一节 项目背景 .......................... .................................................. ......................................... 5
第二节 本课题所做的工作 ................................. .................................................. .................. 5
第三章 程序设计 ................ .................................................. .................................................. ......... 7
第一节 程序的功能 ........................ .................................................. ....................................... 7
第二节 输入输出的要求 .......................................... .................................................. ............. 7
第三节 程序模块 ..................... .................................................. .............................................. 7
第一条 模块组成 ..................................... .................................................. ...................... 7
第二条 层次结构 ............ .................................................. ............................................... 8
第三条 模块调用 ..................................... .................................................. ...................... 9
第四章 分析 .............. .................................................. .................................................. ................. 10
第一条 模块解释与功能 ............. .................................................. ................................ 10
第五章 调试 ... .................................................. .................................................. ............................ 14
第一节 菜单测试 ..... .................................................. .................................................. .......... 14
第二节 游戏测试 ....................... .................................................. .......................................... 15
第一条 在自定义中 .................................... .................................................. ................. 15
第二条 在随机游戏中 .............. .................................................. ................................... 16
第六章 总结 .................................................. .................................................. ............................... 18
第七章 附录 .... .................................................. .................................................. ........................... 19
第一节 附录A 源程序 .. .................................................. .................................................. . 19
第二节 附录B 参考文献 ........................... .................................................. ...................... 29
课程设计评分表 ............ .................................................. .................................................. ............. 30





















4


第一章 绪论
第一节 项目背景

C语言是一种优秀的程序设计语言,其功能丰富,表达能 力强,程序执行效
率高,可移植性好;C语言既有高级计算机程序设计语言的特点,同时又具有部
分汇编语言的特点,因而C语言具有较强的系统处理能力。通过C语言函数结
构可以方便的实现程序的 模块化;在C语言的基础上发展起来的面向对象程序
设计语言如C++,java,c#等于C语言有许 多的共同特征,掌握C语言对学习进
而应用这些面向对象的程序设计语言有极大的帮助。因为其独特的语 言机制在计
算机科学领域中得到了广泛的应用。目前,大部分工科专业的计算机程序语言都
是C 语言,主要学习面向过程的程序设计方法。
C语言课程设计是综合性比较强的一门设计课程,它 考察了学生对C语言的
掌握及运用情况。有助于提高学生的分析,理解及动手实践能力。是计算机的基< br>础课程。本题目运用了结构体变量的定义及初始化,for,do- while循环,
if,switch-case语句,文件打开,文件保存及其复合使用。
第二节 本课题所做的工作
本课题设计一个猜数字游戏,用户根据自己的爱好与兴趣进行随机 游戏与自
定义游戏,如果用户想自定义一个数字来猜,可以由用户自己进行输入,如果想
挑战高 难度,用户可以猜测由电脑产生的一个随机数,具体工作有:系统自动产
生一个随机数或用户自己定义一 个随机数,制作游戏主菜单,制作游戏继续菜单,
设计游戏程序,设计友好的界面提示与帮助。
本课程设计分为六个章节,每个章节为课题展开,重程序的需求分析,程序
总体设计,程 序设计等逐步向读者介绍,说明本课题。还提供了源程序供读者参
考。






5


第二章 需求分析


本程序为猜数字游戏,用户可以根据自己的爱好与兴趣进行随机游戏与自定
义游戏,如果用户想 自定义一个数字来猜,可以由用户自己进行输入,如果想挑
战高难度,用户可以猜测由电脑产生的一个随 机数;
每个游戏者都想在自己游戏结束时看到自己的得分情况,因此需要对游戏结
果进行打分;
游戏 者在游戏时,可能想到在任意时候都可以退出游戏,因此,无论游戏进
行到任何阶段,都能够返回到主菜 单或退出游戏;
在退出游戏之前,如果游戏者要再次进行挑战,应该设置一个提示游戏继续
提示模块;
为了能够更好的迎合游戏者,界面设置要和谐,要能给用户有足够的提示,
因此,系统 菜单应该包括游戏开始,游戏退出,游戏说明,关于,游戏得分榜五
个部分。
























6


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

按提示输入0-9之间的数字进行操作
① 输入 如:在菜单页面时
输入1进入游戏;
输入2退出游戏;
输入3进入游戏说明页面;
输入4查看游戏版本及版权;
输入5查看游戏得分榜。
② 输出 如:
在游戏成功与失败时输出游戏得分与 挑战成功与否!如果当输入的选项出现
错误时,则系统输出游戏提示“你输入有误,请确定后重新输入! ”。
第三节 程序模块
第一条 模块组成
本程序分为八个模块,mai n()主模块,menu()菜单模块,startf()开始模块,save()
存储模块,disp lay()排行榜模块,,shuomingf()说明模块,tuichu()退出模块,guanyuf()关于模块。

7


第二条 层次结构


8


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


9


第四章 分析
第一条 模块解释与功能
main()--主模块,操作系统的开始与结束运行;
void main()*主函数*
{
menu();调用菜单模块进行菜单选择
}
menu()--菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执
行;
main()--主模块,操作系统的开始与结束运行;
void main()*主函数*
{
menu();调用菜单模块进行菜单选择
}
menu()--菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执
行;
scanf(












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




{


system(
startf(); 开始游戏
};break;
case 2:




{


system(
break;
};break;

10

















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


}
11
scanf(
break;


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




{






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


































int g1,s1,b1,q1,A=0,B=0;
g1=cs%10;**拆分测试数据**
s1=cs%10010;
b1=cs100%10;{



if(cs<1000)
q1=0;
else
q1=cs1000;**拆分测试数据**
}
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(
}
12




}
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()--关于模块,向游戏者介绍本游戏的版本及版权。






13


第五章
调试

第一节
菜单测试

在主菜单中

输入 1:进入游戏;
输入 2:退出游戏;
输入 3:进入游戏说明;
输入 4:进入关于;
输入 5:进入游戏排行榜;
输入其它数据或按键时:提示“你输入有误,请重新输入”;
2) 在自定义数值中

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



输入 1:继续进行游戏;
输入 2:退出游戏;
输入 3:系统报错,提示“你输入有误,请重新输入”;

14


第二节 游戏测试
第一条 在自定义中
自定义:输入1234
1) 第一次 1234
结果如下图:



2) 第一次 1356
第二次 2345 0A3B;
第三次 3456 2A0B;
第四次 5678 0A0B
第五次 7890 0A0B;
第六次 0123 0A2B;
第七次 2357 0A2B;
第八次 1234
结果如下图:




15


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


结果如上图:
第二条 在随机游戏中
随机数据 1234

第一次 1356 1A0B;
第二次 2345 0A3B;
第三次 3456 2A0B;
第四次 5678 0A0B ;
第五次 7890 0A0B;
第六次 0123 0A2B;
第七次 2357 0A2B;
第八次 1234
结果如下图:

16

























17


第六章 总结

在一周的时间里,我们每天几乎都要面对着电脑十个小时以上,上课时去机
房写程序,回到宿 舍还要继续奋斗;要是只是在电脑面前坐着也没有什么难过的,
但是在电脑面前还要想着怎么去写代码, 怎么去安排程序结构,怎么去实现想要
的程序功能等等一系列的事情;特别是在调试程序的时候更是让人 头痛,辛辛苦
苦的写好了函数,等到调试运行就出现一堆错误,真的拿它没办法呀!不过还好
有 书本的基础知识、发达的网络通信、知识渊博的老师以及热心的同学的帮助,
才使我能将那些问题一一解 决!
在还没有进行课程设计实训之前,我对C语言知识的掌握真的只能说是很肤
浅,我 只知道分开来使用那些语句和语法,对他们根本没有整体感念,所以在学
习C语言时经常会感觉很盲目, 甚至不知道自己学这些东西是为了什么。通过
一周的课程设计,我对C语言有了更深入的了解,同时也建 立起了一个对C语
言的整体架构和编程思想;我还学到了很多课本上没有学到的东西,也了解了很
多以前不了解的计算机语言方面的知识;他扩充了我的知识,也开拓了我的视野,
让我们了解了我们学 习计算机语言的目的和将来发展的方向。
通过该程序设计,我深刻体会到要编好一个程序必须 具备扎实的基础知识由
于以前学习的相关知识比较浅显,所以一开始我便感觉无从下手,但通过与同学< br>间的互相讨论交流及上网搜索的相关资料,我渐渐掌握了做设计报告的基本方法
和步骤,在自己的 努力最终圆满完成了老师要求设计任务。
其实这次最大的收获还是发现自己的不足,原来自己所 掌握的知识只是皮毛
而已,还有对于计算机的基本操作知道的真是少的可怜,虽然受了点小小的打击,< br>但总比一直错下去、学了等于没学强,这样至少不会一直迷迷糊糊下去了。另外
我也深深理解上机 操作的重要性,有时候觉得自己很认真很仔细,对于编写的程
序非常自信,可实际一上机操作就不行了, 会出现错误,虽然会打击自信心,但
总比一直错下去、学了等于没学强,那样学习也将失去意义,学习就 是一个不断
犯错又不断修正的过程,我觉得我每犯一个错误都会从中收获一些东西,这也叫
经验 吧,是这样通过不断犯错积累的,所以对于学习中的错误更要无惧无畏。
尽管这次课设做的 可谓坎坎坷坷,但现在想来还是不错的,最起码让我对
程序啊、函数啊的理解加深了,对于课本上忽略的 东西也有所了解,最重要的是
发现自己还不行,要努力,而且很努力才行。

18


第七章 附录
第一节 附录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{



}

19
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{


}
if(t==0)
printf(没有分数
printf(
printf(
system(
system(


20








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


}
printf(文件打开错误!n
exit(0);
while(!feof(fp))









{



}
t=count+t;
fclose(fp);
menu();
print f(
if(fread(&a[count],sizeof(int),1,fp)==1)


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








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



int k;
printf(猜数字游戏..................n
printf(
printf(欢 迎 使 用 MS 版 ............ |nn
printf(经 典 猜 数 字 游 戏 .......... |nn
printf(感 谢 您 的 参 与 .............|nn
printf(谢 谢 ...................|nn
printf(
printf(
printf(罗超超编制 n

21

































printf(
printf(
printf(开 始 <==**************|n
printf(
printf(退出系统 <==**************|n
printf(
printf(游戏说明 <==**************|n
printf(
printf(关 于 <==**************|n
printf(
printf(显示分数 <==**************|n
printf(
printf(
prin tf(
printf(
printf(请按提示输入:
scanf(
switch(k) *选择项*
{
case 1:




{


system(
startf();
};break;
case 2:




{


system(
break;
};break;
case 3:
{ system(

22


























}


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(是否自定义数值:10 (1:是 0:否)n

23






















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%10;
s=n%10010;
scanf(
break;
b=n100%10;


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版猜数字游戏...nn
printf(数字正确,且位置正确 .......n温馨提示*
printf(数字正确,但位置错误 .......n
printf(实验次数 .......nn
do
{




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

24


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






































int g1,s1,b1,q1,A=0,B=0;
g1=cs%10;**拆分测试数据**
s1=cs%10010;
b1=cs100%10;{



if(cs<1000)
q1=0;
else
q1=cs1000;**拆分测试数据**
}
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(
}

25


{
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!!!nttttscore:100ttttn
Save(100);

}
}
else

26
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:
{

27












}





system(
break;
};break;
default :





}





{



}
system(
printf(您的输入有误,请重新输入!
return menu();
int shuomingf()*说明模块*
{
printf(游戏说明................nn










}
int guanyuf()*关于模块*
{
printf(游戏关于..............n
printf(
printf(该游戏可以由程序随机产生或者自定义四个nn
printf(到9之间的数字,且不重复。玩游戏者通过nn
printf(游戏提示输入八次来匹配上面所输入的数字。nn
printf(表示位置正确且数字正确,nn
printf(表示数字正确而位置错误,tnn
printf(表示实验的次数。tnn
printf(
system(
system(
return menu();
printf(
printf(版本:MS.11.4 <==******|n

28















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








printf(
system(
system(
menu();
第二节 附录B 参考文献
[1]贾宗噗 许合利. C语言程序设计.人民邮电大学出版社,2006年12月
[2]熊壮.程序设计技术. 重庆大学出版社
[3]互联网













29



课程设计评分表

课题名称: 猜 数 字 游 戏











设计方案的合理性与创造性

设计与调试结果

设计说明书的质量

答辩陈述与回答问题情况

课程设计周表现情况

综合成绩









教师签名:
日 期:




30

佛说人生-国球大典


香水百合歌曲-生物的特征


爱本无罪-销售打电话的技巧


qq群的名称-一桃杀三士


参数化-幼儿音乐游戏


八下语文复习提纲-一片冰心在玉壶的前一句


qq名字男生-电视剧国防生


猪蹄汤怎么做-警示教育片