猜数游戏设计报告含代码.docx
《猜数游戏设计报告含代码.docx》由会员分享,可在线阅读,更多相关《猜数游戏设计报告含代码.docx(11页珍藏版)》请在冰豆网上搜索。
猜数游戏设计报告含代码
浙江传媒学院
课程设计(实训)报告
学院_专业_
班级_学号
姓名__课题_猜数游戏_
指导教师_____报告成绩______________
日期:
2009年12月2日
目录
一、需求分析……………………………………………………………2
二、总体设计……………………………………………………………2
2.1主函数……………………………………………………………2
2.2主界面显示………………………………………………………2
2.3结果输出界面显示………………………………………………2
2.4简单等级随机数获取……………………………………………2
2.5中等等级随机数获取……………………………………………2
2.6困难等级随机数获取……………………………………………2
三、详细设计……………………………………………………………2
3.1主界面显示函数…………………………………………………2
3.2main函数………………………………………………………3
3.3结果输出界面显示函数…………………………………………5
3.4简单(中等,困难)等级随机数获取函数………………………5
四、测试…………………………………………………………………5
五、设计心得与总结……………………………………………………6
六、用户使用手册………………………………………………………6
6.1系统简介与功能介绍……………………………………………6
6.2用户操作说明、注意事项………………………………………6
七、附录(完整源程序清单)……………………………………………6
八、评阅意见……………………………………………………………10
参考书目………………………………………………………………10
《高级语言程序设计》课程设计
――猜数游戏
一、需求分析
1.获取随机数(根据玩家要可获得不同范围的随机数)。
2.对玩家输入的数字进行判断大小,给出提醒以便玩家进一步选择。
3.玩家猜中时给出所用时间和游戏水平的判断,给出是否继续的提示及判断。
4.游戏在于娱乐,因此需要一个人性化的界面。
二、总体设计
2.1主函数:
选择游戏等级(获取不同范围的随机数范围越大难度越大);对玩家输入的数字进行判断和提示;算出所用时间在玩家猜中时给出其所用时间,对其水平的判断和是否继续的提示;对玩家要求判断执行。
2.2主界面显示:
游戏界面显示和必要提醒文字的输出。
2.3结果输出界面显示:
结果界面显示;输出玩家所用时间和水平评价;输出是否继续的文字提醒。
2.4简单等级随机数获取:
获取1到1000内的随机数。
2.5中等等级随机数获取:
获取1到2000内的随机数。
2.6困难等级随机数获取:
获取1到10000内的随机数。
系统模块图
三、详细设计
3.1主界面显示函数
功能描述:
游戏界面显示和必要提醒文字的输出
主界面显示流程图
3.2main函数
功能描述:
选择游戏等级(获取不同范围的随机数范围越大难度越大);对玩家输入的数字进行判断和提示;算出所用时间在玩家猜中时给出其所用时间,对其水平的判断和是否继续的提示;对玩家要求判断执行。
函数参数说明:
clock_tc_start,c_end;分别用定义开始时间和终止时间。
f1接收获得的随机数。
f2接收玩家输入的数字。
ch接收玩家输入的选择字符。
time表示玩家所用时间。
s[]必要的提醒和输出字符串。
函数调用关系描述:
wd1();调用主界面显示函数。
getf1();getf2();getf3();调用获取不同范围的随机数函数。
wd2();调用结果输出界面显示函数。
main函数流程图
3.3结果输出界面显示函数
功能描述:
结果界面显示;输出玩家所用时间和水平评价;输出是否继续的文字提醒。
结果输出界面显示流程图
3.4简单(中等,困难)等级随机数获取函数
功能描述:
获取1到1000内的随机数。
函数参数说明:
time_tt;定义时间变量。
函数调用关系描述:
srand((unsigned)time(&t));以系统时间为种子,初始化rand()。
rand()%1000;获取0到999的随机数。
简单(中等,困难)等级随机数获取流程图
四、测试
1.在游戏开始输入等级选择字符时,如果输入a,b,c以外的字符游戏就会出现错误,此时随机数为0。
为了改正从而达到输入其他字符时从新提示要输入a,b,c。
我用了不常用的goto函数。
判断为其他字符时,函数从新回到最初。
2.开始时,用do,while函数做到了在一轮游戏过后输入y可以继续游戏,但没有做到输入n结束游戏,此时输入除y的字符都会终止。
我将要达到的目标分成了两步。
第一步,当输入除y,n外的字符时,再次输出游戏继续输y退出输n的提醒。
我用一个for(;ch!
='n'&&ch!
='y';)的循环,只有当遇y或n时才能跳出循环,否则要继续输入选择。
第二步,为了实现输入n时终止程序,我将do,while函数放在循环for(;;)内,并在while后加入了语句if(ch=='n')break;这样便做到了输入n时跳出循环继而终止了程序。
五、设计心得与总结
1.猜数游戏是计算机给出数字有玩家进行猜测,首先是要计算机给出数字而且是随机的。
怎样获得随机数以前的学习中并没有遇到过。
在网上找到了随机数获取函数rand(),当然开始并不会用这函数每次随机数产相同,然后去找资料了解到计算机产生的随机数是伪随机数。
原来每次产生随机数都要一个随机种子。
进一步查找资料我了解到可以将系统时间转化为种子这需要srand函数将系统时间转化,写成语句就是srand((unsigned)time(&t));。
最后成功获得了随机数。
2.游戏需要一个界面,这在以前的学习也未有遇到。
和随机数获取一样先去网上找但没有获得进展,无奈求助同学。
我选择了用矩形图形做界面。
在原界面上覆盖上矩形图形做界面。
3.作为一个游戏,界面上的文字要简单,每次的提醒要显眼。
为了做到这一点我先将原来的清掉然后再输出,这用到了clrscr();语句。
4.最初程序完成很不完善,有许多漏洞需要改正。
比如,选择时输入规定字符之外的字符怎么办。
怎样做到只输入y,n来断定游戏是否继续。
这些在不断地调试中发现的。
(这些在标题四中有解释这里不多做解释)。
看到这个题目时意识到这里有没学过的东西,通过自己找资料问同学做成一个程序我有了一种小小的成就感。
做程序也好,其他的什么也好总会遇到自己不懂得,没接触过的。
这是一个挑战,通过自己一步步的努力完成时,是一种很大的进步不只是技术上的进步。
六、用户使用手册
6.1系统简介与功能介绍:
该程序基于win-tc编写,选用win-tc是界面设计所需。
随机产生一个数字,可根据玩家选择给出不同范围的数字。
玩家输入所猜数字时给出与真实数字的大小比较。
在玩家猜中时,可给出其所用时间,并给出评价。
最后,游戏的结束与继续可由玩家控制。
6.2用户操作说明、注意事项:
1.游戏开始选择游戏等级。
2.输入所猜数字,根据提示输入,直到输入与所给随机数相同。
3.猜中时系统会给出您所用时间和对您的评价和是否继续的提示,选择是否继续。
注意:
在游戏过程中猜数阶段只能输入数字,输入其他字符不予判断(这一点在游戏开始时会有提示文字)。
玩家在玩游戏时要注意看提示文字。
七、附录(完整源程序清单)
#include/*准输入输出头文件*/
#include/*时间函数*/
intf1,f2;
charch,*s[]={"GUESSTHEDIGITALGAME","GOODLUCK!
",
"PLAYAGAIN(y/n)","YOURRESULTS:
",
"PLEASESELECTTHECLASS:
A,B,C(Simple=A,Medium=B,Difficulty=C)\n",
"PLAYAGAIN(y/n)","(Onlyallowedtoenternumbers)\n"};
wd1()
{
textbackground(6);
clrscr();
window(25,3,55,4);
textbackground
(1);
textcolor(12);
clrscr();
cputs(s[0]);/*主界面背景设置*/
window(25,5,55,6);
textbackground
(2);
textcolor(15);
clrscr();
cputs(s[1]);
window(25,6,55,16);
textbackground(4);
textcolor(15);
clrscr();
}
wd2()
{
window(15,17,65,19);/*结果输出界面*/
textbackground
(2);
textcolor(12);
clrscr();
}
getf1()
{
time_tt;/*系统时间定义*/
srand((unsigned)time(&t));/*将系统时间强行转化作为随机种子*/
f1=1+rand()%1000;/*获取1-1000内的随机数*/
}
getf2()
{
time_tt;
srand((unsigned)time(&t));
f1=1+rand()%2000;/*获取1-2000内的随机数*/
}
getf3()
{
time_tt;
srand((unsigned)time(&t));
f1=1+rand()%10000;/*获取1-10000内的随机数*/
}
main()
{
clock_tc_start,c_end;/*时间函数*/
doubletime;
for(;;)
{
do
{
clrscr();/*清屏*/
wd1();
cputs(s[4]);
cputs(s[6]);
lp1:
{
ch=getch();
if(ch=='a')/*选择困难等级*/
{
getf1();
clrscr();
cprintf("Simple:
Pleaseenterthenumber\n");printf("%d",f1);
}
elseif(ch=='b')
{
getf2();
clrscr();
cprintf("Medium:
Pleaseenterthenumber\n");printf("%d",f1);
}
elseif(ch=='c')
{
getf3();
clrscr();
cprintf("Difficulty:
Pleaseenterthenumber\n");printf("%d",f1);
}
else
{
clrscr();
cputs(s[4]);
gotolp1;/*在输入错误时重回输入*/
}
}
c_start=clock();/*开始计时*/
while
(1)/*对玩家输入的数字进行地判断*/
{
scanf("%d",&f2);/*输入所猜数字*/
if(f1==f2)/*所猜数字与随机数比较*/
{
clrscr();
cprintf("congratulations!
\n");
c_end=clock();/*结束计时*/
break;
}
elseif(f2{
clrscr();
cprintf("little\n");
continue;/*输入不匹配时重输*/
}
else
{
clrscr();
cprintf("big\n");
continue;/*输入不匹配时重输*/
}
}
time=(double)(c_end-c_start)/18.55;/*计算时间*/
wd2();/*结果输出界面显示*/
cputs(s[3]);/*输出提示*/
if(time>60.000000)printf("Notgood!
\n");/*判断评估*/
elseif(time<30.000000)printf("Good!
\n");
elseif(time>30.000000||time<50.000000)printf("General\n");
printf("TIME:
%.2fseconds",time);
cputs(s[2]);/*输出提示*/
ch=getch();/*接收控制*/
for(;ch!
='n'&&ch!
='y';)/*继续玩游戏与否的判断*/
{
clrscr();
cputs(s[5]);/*输出提示*/
ch=getch();
}
}while(ch=='y');/*遇y结束*/
if(ch=='n')break;/*遇n结束*/
}
}
八、评阅意见
教师签名:
年月日
参考书目
[1]谭浩强,《C程序设计》,清华大学出版社,北京,2005年7月第3版