C语言课程设计报告猜数字游戏.docx
《C语言课程设计报告猜数字游戏.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告猜数字游戏.docx(12页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告猜数字游戏
《高级语言程序设计》
课程设计报告
专业:
班级学号:
姓名:
指导教师:
二0一0年7月7日
一、
课程设计题目描述
猜数字游戏
用户从键盘输入4位不重复的数,且开头不为0,来匹配计算机给出的4位随机数,若数字和位置均等同。
表示用户赢了。
每猜一次,计算机均给出提示信息(x,y),x表示数字、位置都匹配的个数,y表示数字匹配但位置不匹配的个数。
二、课程设计目的和要求
要求:
1.交互界面友好;
2.给定H键作为帮助键,帮助用户尽快达到目的,无论何时,按下H键,均能得到详细信息,如:
第一位数字正确,第2,3位数字位置不对等
3.给定K键作为管理键,按下后可以查看计算机所给的4位数,但查看前需要输入密码,密码自定。
4.设置游戏分值,将每次猜的结果以分值的形式给出,如初始分值1000分,每猜一次扣100分,若猜对一个数,奖励20分。
5.将得分最高的前3位的分值在每次开始新游戏前显示出来,同时,在每次游戏结束后将前3位的分值存盘,文件名自定。
三、系统分析与设计
1.程序分为说明区、游戏区、排行榜、帮助模块以及管理模块
2.说明区:
介绍游戏规则及部分必要说明
游戏区:
玩家可以在游戏区逐次猜数字,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。
排行榜:
当玩家成功完成一轮猜数字游戏后,可通过和排行榜中相应记录的比较判断玩家是否可以进入排行榜,进入排行榜的资格游戏成绩在前三名的玩家。
帮助:
给定H键作为帮助键,帮助用户尽快达到目的,无论何时,按下H键,均能得到详细信息,如:
第一位数字正确,第2,3位数字位置不对等
管理:
给定K键作为管理键,按下后可以查看计算机所给的4位数,但查看前需要输入密码,密码自定。
3.流程图:
4.用到的库函数:
#include
#include/*随机库函数*/
#include/*时间库函数*/
#include
5.部分函数说明:
文件调用:
FILE*inp,*ou;//文件输入输出流
inp=fopen("D:
\\rank.txt","r");//导入之前排名
fscanf(inp,"%d%d%d",&e,&b,&a);
fclose(inp);
……
ou=fopen("D:
\\rank.txt","w");//打开文件
fprintf(ou,"%d\n%d\n%d\n",top[0],top[1],top[2]);//将新排名重新保存
fclose(ou);//关闭文件
时间随机函数:
srand(time(NULL));//随机函数初始化,利用时间设置随机种子
四、系统调试出现的问题
错误一:
最后得分输出的全是 -858993460,排行榜无法正常工作,存盘数据不能正常调用
错误代码:
inp=fopen("D:
\\rank.txt","r");
fscanf(inp,"%d%d%d",&top[0],&top[1],&top[2]);
fclose(inp);
修改后:
inp=fopen("D:
\\rank.txt","r");
fscanf(inp,"%d%d%d",&e,&b,&a);
fclose(inp);
错误二:
输入以9开头的数无反应
错误代码:
scanf("%s",&d);//这里输入任意字符串包括四位数字HhYy
m=atoi(d);
if(d[0]>'0'&&d[0]<'9')
修改后:
scanf("%s",&d);
m=atoi(d);
if(d[0]>'0'&&d[0]<='9')
五、系统运行报告
游戏开始:
随便输入4位数字,回车得到提示信息:
输入H获得帮助:
输入K键验证密码并获取答案:
输入正确结果回车,输出最后得分:
六、总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在将近两周的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
七、参考书目
作 者:
黄明,梁旭,万洪莉编著
书名:
C语言课程设计——程序设计语言课程设计丛书
出版社:
电子工业出版社
出版时间:
2006-6-1
作 者:
陈清华,朱红主编
书名:
C语言课程设计:
案例精选与编程指导
出版社:
东南大学出版社
出版时间:
2003-6-1
作 者:
姜灵芝,余健 编著
书名:
C语言课程设计案例精编
出版社:
清华大学出版社
出版时间:
2008-1-1
作者:
王新,孙雷 编著
书名:
C语言课程设计(21世纪计算机科学与技术实践型教程)
出版社:
清华大学出版社
出版时间:
2009-7-1
八、附录
源程序清单:
1.头文件及各定义
#include
#include/*随机库函数*/
#include/*时间库函数*/
#include
voidmain()
{
intn[4]={0};//产生的随机数的每一位
intnum=0;//产生的随机数
intm=0;//用户输入的4位数字
intx=0,y=0;//x表示数字、位置都匹配的个数,y表示数字匹配但位置不匹配的个数。
intc[4]={0};//输入的数字的每一位
inti,j;
chard[4]={0};//输入字符
intgrade=1000;//初始得分
charch='a';//判断第一个while循环
charpw[15]={0};//玩家设置的密码
charpassw[15]={0};//玩家输入的验证的密码
FILE*inp,*ou;//文件输入输出流
inttop[3];//最高得分
intmin=0;//得分最高的3个中最小的那个
inta,b,e;
inttemp=0;
2.游戏主界面
printf("--------------------------------------------------------------------------------\n");
printf("|◎※猜数字游戏※◎|\n");
printf("|制作者:
肖毅王越坤|\n");
printf("|游戏规则如下:
|\n");
printf("|输入4位不相同的数字,且第一位数字不为0|\n");
printf("|初始1000分,每猜一次扣100分,猜对奖励20分|\n");
printf("|每猜一次,计算机均给出提示信息(x,y)|\n");
printf("|x表示数字、位置都匹配的个数|\n");
printf("|y表示数字正确、位置错误的个数|\n");
printf("|◎H键为帮助键K键为管理键◎|\n");
printf("----------------------------------------------------------------------------------\n");
3.排行榜系统
inp=fopen("D:
\\rank.txt","r");//导入之前排名
fscanf(inp,"%d%d%d",&e,&b,&a);
fclose(inp);
printf("|游戏前三名得分为NO.1:
%dNO.2:
%dNO.3:
%d\n",a,b,e);//得分排名
……
//排名系统
top[0]=e;
top[1]=b;
top[2]=a;
min=top[0];
for(i=1;i<3;i++)
{
if(top[i]}
for(i=0;i<3;i++)
{
if(min==top[i])
{
if(grade>top[i]){top[i]=grade;break;}//修改最小的值
}
}
if(top[0]>top[1])
{
temp=top[0];
top[0]=top[1];
top[1]=temp;
}
if(top[1]>top[2])
{
temp=top[1];
top[1]=top[2];
top[2]=temp;
}
ou=fopen("D:
\\rank.txt","w");//打开文件
fprintf(ou,"%d\n%d\n%d\n",top[0],top[1],top[2]);//将新排名重新保存
fclose(ou);//关闭文件
4.帮助键
if(d[0]=='H'||d[0]=='h')//帮助键H
{
for(i=0;i<4;i++)
{
if(c[i]==n[i])
{
printf("第%d位数字正确\n",4-i);//判断计算位置和数字都正确的数
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(c[i]==n[j]&&(i!
=j))
{
printf("第%d位数字位置不对\n",4-i);//计算位置错误,但数字正确的数
}
}
}
}//if循环在这里结束
5.管理键
if(d[0]=='K'||d[0]=='k')//查看键K
{
printf("请输入密码\n");
if(pw[0]==NULL)
{
scanf("%s",pw);
printf("计算机产生的随机数为%d,并记牢您的密码\n",num);//第一次输入密码先保存密码
}
else
{
scanf("%s",passw);//以后输入密码要先与以前的密码进行比较
if(strcmp(pw,passw)==0)
{
printf("计算机产生的随机数为%d\n",num);
}
else
printf("密码不正确\n");
}
}//if循环在这里结束
6.答案正确,退出整个循环
while(ch!
='Y'&&ch!
='y')//满足这个条件则退出while循环
{
……
//while循环这里结束
printf("您的最后得分为%d\n",grade);
printf("是否要退出?
\n");
printf("按下Y则退出,按下任意键继续(除Y/y)\n");
scanf("%s",&ch);
}
------------------------------------------------------------------------------------------------------------END