高级语言课程设计猜数字游戏.docx
《高级语言课程设计猜数字游戏.docx》由会员分享,可在线阅读,更多相关《高级语言课程设计猜数字游戏.docx(27页珍藏版)》请在冰豆网上搜索。
高级语言课程设计猜数字游戏
课程设计报告
课程名称高级语言程序设计
课题名称猜数字游戏
目录
第一章本课题所做的工作
第二章程序设计
第一节程序的功能
第二节输入输出的要求
第三节程序模块
第一条模块组成
第二条层次结构
第三条模块调用
第三章分析
第一条模块解释与功能
第四章调试
第一节菜单测试
第二节游戏测试
第一条在自定义中
第二条在随机游戏中
附录源程序
第一章本课题所做的工作
本课题设计一个猜数字游戏,用户根据自己的爱好与兴趣进行随机游戏与自定义游戏,如果用户想自定义一个数字来猜,可以由用户自己进行输入,如果想挑战高难度,用户可以猜测由电脑产生的一个随机数,具体工作有:
系统自动产生一个随机数或用户自己定义一个随机数,制作游戏主菜单,制作游戏继续菜单,设计游戏程序,设计友好的界面提示与帮助。
猜数字游戏
一、问题描述:
该游戏可以由程序随机产生或由用户输入五个0到9之间的数字,且不重复。
玩游戏者通过游戏提示输入十次来匹配上面所输入的数字。
A表示位置正确且数字正确,B表示数字正确而位置不正确。
二、功能:
1、本游戏的菜单:
(1)随机产生数据
(2)用户输入数据
(3)退出游戏
2、游戏成功与否都能返回主菜单
三、算法提示:
1、数据结构:
数组
2、用简单的程序设计方法
第二章程序设计
第1节 程序的功能
该游戏可以由程序随机产生或由用户自定义五个0到9之间的数字,且不重复。
玩游戏者通过游戏提示输入十次来匹配上面所输入的数字。
输入正确则为成功,累计十次错误则游戏失败。
游戏成功根据猜测次数给出相应的得分!
该游戏还能自动判断你输入是否有误,如果输入有误,则自动提示您正确的操作。
第2节 输入输出的要求
按提示输入0-9之间的数字进行操作
①输入如:
在菜单页面时
输入1进入游戏;
输入2退出游戏;
输入3进入游戏说明页面;
输入4查看游戏版本及版权;
输入5查看游戏得分榜。
②输出如:
在游戏成功与失败时输出游戏得分与挑战成功与否!
如果当输入的选项出现错误时,则系统输出游戏提示“你输入有误,请确定后重新输入!
”。
第3节 程序模块
第1条 模块组成
本程序分为八个模块,main()主模块,menu()菜单模块,startf()开始模块,save()存储模块,display()排行榜模块,,shuomingf()说明模块,tuichu()退出模块,guanyuf()关于模块。
第2条 层次结构
第3条 模块调用
第三章分析
第1条 模块解释与功能
vmain()--主模块,操作系统的开始与结束运行;
voidmain()/*主函数*/
{
menu();//调用菜单模块进行菜单选择
}
vmenu()--菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执行;
vmain()--主模块,操作系统的开始与结束运行;
voidmain()/*主函数*/
{
menu();//调用菜单模块进行菜单选择
}
vmenu()--菜单模块,打印菜单选项给游戏者进行选择,进入相应的模块并执行;
scanf("%d",&k);
switch(k)/*选择项*/
{
case1:
{
system("cls");
startf();//开始游戏
};break;
case2:
{
system("cls");
break;
};break;
case3:
{system("cls");
returnshuomingf();///跳到说明
}
case4:
{
system("cls");
returnguanyuf();//跳到关于
}
default:
{printf("\t\t您的输入有误,请重新输入!
\n");
system("pause");
system("cls");
returnmenu();//返回主菜单
}
vstartf()--开始模块,猜数字游戏开始,游戏者按照自己的意愿来进行游戏,系统对游戏的输入进行判断,真正实现了系统与游戏者完美融合;
scanf("%d",&f);//进行是否自定义选择
switch(f)
{
case0:
//进行随机游戏
srand((int)time(0));/*随机数据的产生*/
n=1+(int)(10000.1*rand()/(RAND_MAX+1.0));
break;
default:
printf("你输入有误,请重新输入!
!
");
system("pause");
case1:
printf("请输入你要自定义的数据\n");
scanf("%d",&n);
break;
}
Do//进行游戏,知道猜对或10次才结束
{
intc;
printf("请输入五个0到9之间的数字,且不重复,如:
12345\n");
scanf("%d",&cs);/*判断随机数据是否合格*/
intt1,g1,s1,b1,q1,A=0,B=0;
//**拆分测试数据**//
t1=cs%10;//个位数
g1=cs/10%10;//十位数
s1=cs/100%10;//百位
b1=cs/1000%10;//千位
{
if(cs<1000)
q1=0;
else
q1=cs/1000;///**拆分测试数据**//
}
intp[5]={q1,b1,s1,g1,t1},i,j;/*比较各位数是否相等*/
if(cs==n)//游戏区//
break;
{
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(p[i]==a[j])
if(i==j)
A++;
else
B++;
m++;//次数累计
system("cls");
printf("\t\t\t%dA%dB,m=%d",A,B,m);
printf("\n");
printf("\n");
}
}
while(m<10);//进行游戏,直到猜对或10次才结束
vphangb()--排行榜模块,进入排行榜查看自己及以往的游戏排行情
vTuichu()--退出模块,退出整个游戏系统;
scanf("%d",&h);
switch(h)//是否退出模块选择
{
case1:
{
system("cls");
menu();//返回主菜单
};break;
case2:
{
system("cls");
break;
};break;
default:
{
system("cls");
printf("您的输入有误,请重新输入!
");//提示报错
returnmenu();
vShuomingf--说明模块(),向游戏者介绍游戏的规则,并提示游戏者如何进行游戏;
vGuanyuf()--关于模块,向游戏者介绍本游戏的版本及版权。
第4章调试
第1节 菜单测试
在主菜单中
输入1:
进入游戏;
输入2:
退出游戏;
输入3:
进入游戏说明;
输入4:
进入关于;
输入5:
进入游戏排行榜;
输入其它数据或按键时:
提示“你输入有误,请重新输入”;
2)在自定义数值中
输入1:
进入自定义,提示请输入你要自定义的数据;
输入0:
进入随机游戏,系统将自动生成数据给游戏者猜;
输入3:
系统报错,提示“你输入有误,请重新输入!
”;
3)在继续菜单中
输入1:
继续进行游戏;
输入2:
退出游戏;
输入3:
系统报错,提示“你输入有误,请重新输入”;
第2节 游戏测试
第1条 在自定义中
自定义:
输入12345
1)第一次12345
结果如下图:
2)第一次127892A0B;
第二次146781A1B;
第三次234560A4B;
第四次356790A2B;
第五次782452A1B;
第六次023653A0B;
第七次453211A4B;
第八次12345
结果如下图:
自定义:
输入12
提示报错,--“是否自定义数值”,直至定义正确;
结果如上图:
第2条 在随机游戏中
随机数据12345
第一次127892A0B;
第二次146781A1B;
第三次234560A4B;
第四次356790A2B;
第五次782452A1B;
第六次023653A0B;
第七次453211A4B;
第八次12345
结果如下图:
附录源程序
#include
#include
#include
#include"math.h"
staticintt;
inta[100];
externstartf();/*外部说明*/
externmenu();/*外部说明*/
externbackf();/*外部说明*/
externtuichu();/*外部说明*/
externshuomingf();/*外部说明*/
externguanyuf();/*外部说明*/
//学生基本信息保存模块
voidSave(intx)
{
FILE*fp;
inti;
a[t]=x;
t++;
fp=fopen("c:
\\youxi.txt","w+");
for(i=0;i{
fwrite(&a[i],sizeof(int),1,fp);
//每次写一个条录入或一个结构体数组至文件
}
if(i>0)
{
printf("\n完成%d个文件的保存\n",t);
system("pause");
}
else
{
system("cls");
printf("\n文件为空,没有保存一个文件\n");
system("pause");
}
fclose(fp);//关闭文件
}
//显示模块
voiddisplay()
{
inti;
for(i=0;i{
printf("\n\t\t\t\t%d",a[i]);
printf("\n");
}
if(t==0)
printf("没有分数");
system("pause");
system("cls");
}
//主函数
voidmain()/*主函数*/
{
intcount=0;
FILE*fp;
fp=fopen("d:
\\youxi.txt","a+");//保存在c:
youxi.txt,以读写创建一个新的文本
if(fp==NULL)//打开头文件失败
{
printf("\n文件打开错误!
\n");
exit(0);
}
while(!
feof(fp))
{
if(fread(&a[count],sizeof(int),1,fp)==1)
//一次从文件中读取一条学生信息
count++;
}
t=count+t;
fclose(fp);
menu();
printf("\n\n\n\n\n\n\n");
printf("\t\t|*********************************************|\n");
printf("\t\t||\n\n");
printf("\t\t|............欢迎使用...........|\n\n");
printf("\t\t|.........经典猜数字游戏..........|\n\n");
printf("\t\t|...........感谢您的参与.............|\n\n");
printf("\t\t|...............谢谢...................|\n\n");
printf("\t\t|.................^_^...................|\n\n");
printf("\t\t|*********************************************|\n\n");
printf("\n\n\n\n\t\t\t\t\t\t\t\t..徐宏伟编制\n");
}
//菜单
intmenu()/*菜单模块*/
{
intk;
printf("\n\n\n\n\t\t...................猜数字游戏..................\n");
printf("\t\t|***********************************************|\n");
printf("\t\t|***************==><==**************|\n");
printf("\t\t|***************==>1.开始<==**************|\n");
printf("\t\t|***************==><==**************|\n");
printf("\t\t|***************==>2.退出系统<==**************|\n");
printf("\t\t|***************==><==**************|\n");
printf("\t\t|***************==>3.游戏说明<==**************|\n");
printf("\t\t|***************==><==**************|\n");
printf("\t\t|***************==>4.关于<==**************|\n");
printf("\t\t|***************==><==**************|\n");
printf("\t\t|***************==>5显示分数<==**************|\n");
printf("\t\t|***************==><==**************|\n");
printf("\t\t|***********************************************|\n");
printf("\t\t|...............................................|\n");
printf("\n\n\n\n");
printf("\t\t请按提示输入:
");
scanf("%d",&k);
switch(k)/*选择项*/
{
case1:
{
system("cls");
startf();
};break;
case2:
{
system("cls");
break;
};break;
case3:
{system("cls");
returnshuomingf();
}
case4:
{
system("cls");
returnguanyuf();
}
case5:
{
system("cls");
display();
system("pause");
returnmenu();
}
default:
{
printf("\t\t您的输入有误,请重新输入!
\n");
system("pause");
system("cls");
returnmenu();
}
}
}
//开始开始
intstartf()/*游戏模块*/
{
intn,m=0,g,s,b,q,t,cs,C=0,f;//**cs表示测试数据**//
do
{
printf("是否自定义数值:
1/0(1:
是0:
否)\n");
scanf("%d",&f);
switch(f)
{
case0:
srand((int)time(0));/*随机数据的产生*/
n=rand()%(99999-10000+1)+10000;/*n为X~Y之间的随机数*/
//n=1+(int)(10000.1*rand()/(RAND_MAX+1.0));
break;
case1:
printf("请输入你要自定义的数据\n");
scanf("%d",&n);
break;
default:
printf("你输入有误,请重新输入!
!
");
system("pause");
}
t=n%10;//个位数
g=n/10%10;//十位数
s=n/100%10;//百位
b=n/1000%10;//千位
{
if(n<10000)
q=0;
else
q=n/10000;
}
}
while((g==s)||(g==b)||(g==t)||(g==q)||(s==b)||(s==q)||(b==q)||(n<=124)||(n<=10000));/*随机数据的产生*/
inta[5]={q,b,s,g,t};/*将随机数据重组*/
system("cls");
printf("….欢迎进入猜数字游戏…....\n\n");
printf("\t\t.......A:
数字正确,且位置正确.......\n");/*温馨提示*/
printf("\t\t.......B:
数字正确,但位置错误.......\n");
printf("\t\t.......m:
实验次数.......\n\n");
do
{
intc;
printf("请输入五个0到9之间的数字,且不重复,如:
12345\n");
scanf("%d",&cs);/*判断随机数据是否合格*/
intt1,g1,s1,b1,q1,A=0,B=0;
///**拆分测试数据**//
t1=cs%10;//个位数
g1=cs/10%10;//十位数
s1=cs/100%10;//百位
b1=cs/1000%10;//千位
{
if(cs<10000)
q1=0;
else
q1=cs/10000;///**拆分测试数据**//
}
intp[5]={q1,b1,s1,g1,t1},i,j;/*比较各位数是否相等*/
if(cs==n)//游戏区//
break;
{
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(p[i]==a[j])
if(i==j)
A++;
else
B++;
m++;
system("cls");
printf("\t\t\t%dA%dB,m=%d",A,B,m);
printf("\n");
printf("\n");
}
}
while(m<10);//游戏区//
{
if(m<10||cs==n)//游戏得分情况//
{
switch(m)
{
case1:
system("cls");
printf("\t\t\t\tscore:
90\n\t\t\t\tsuccess!
!
!
\n");Save(90);break;
case2:
system("cls");
printf("\t\t\t\tscore:
80\n\t\t\t\tsuccess!
!
!
\n");Save(80);break;
case3:
system("cls");
printf("\t\t\t\tscore:
70\n\t\t\t\tsuccess!
!
!
\n");Save(70);break;
case4:
system("cls");
printf("\t\t\t\tscore:
60\n\t\t\t\tsuccess!
!
!
\n");Save(60);break;
case5:
system("cls");
printf("\t\t\t\tscore:
50\n\t\t\t\tsuccess!
!
!
\n");Save(50);break;
case6:
;
case7:
system("cls");
printf("\t\t\t\tscore:
30\n");Save(30);break;
default:
system("cls");
printf("\t\t\t\tyouarewonderful!
!
!
\n\t\t\t\tscore:
100\t\t\t\t\n");
Save(100);
}
}
else
printf("\t\t\t\tfail\n");//判断胜利与否//
}
system("pause");
system("cls");
returntuichu();
}
//退出退出
inttuichu()/*提示模块*/
{
inth;
printf("\n\n\n\n\n\n\n");
printf("\t\t.....................猜数字游戏...................\n");
printf("\t\t|********************************