目录
摘要 ......................................................................................... 错误!未定义书签。第一章绪论............................................................................................
第二章需求分析……………………………………………….....…...
第三章总体设计………………………………………..……….…..
3.1模块设计........................................................................................
3.2程序的模块组成………………………………………………
3.3各个函数的主要功能…………………………….………...…..
第四章详细设计…………………………………………………....
4.1 系统的总体框图…………………………………………..
4.2 相关的数据类型.........................................................................
4.3 函数间的调用图.........................................................................
4.4 流程图…………………………………………………… .....…
第五章测试和结果………………………………………………....
5.1 调试分析……………………………………………………..….
5.2 使用说明......................................................................................
第六章总结………………………………………………………......
附录1-用户手册
附录2-源程序
摘要
猜数字游戏是一个运行在Wi nd ow s平台下的小型游戏软件,依据猜数字游戏的基本规则,给用户进行成绩排行,在排行榜中排出前五名玩家的游戏记录,并可以随着玩家的游戏记录进行更新。
第一章
绪论
该软件在Wi nd ow s系统上为玩家提供猜数字游戏的基本功能,游戏用户可以选择开始游、排行榜查看、帮助等主要功能。当用户选择开始游戏时,系统会提示用户排行榜上猜数字成绩的最好记录,并让用户逐次猜数字,用户每次猜数字后系统会给出本次猜数字的结果提示,如位置和数字都正确的数字个数、数字正确介位置不正确的数字个数。如果用户猜数字的次数超过10次,则提示用户游戏失败,如果在10次之内猜出4个数字和正确的顺序,则提示用户猜数字成功,并到排行榜中进行比较,如果排名在前一名,则计入排行榜中,以便其他用户查看。在排行榜查看功能中,用户可以查看当前的游戏排行,排行榜中总共显示5名玩家的排行,如有新的记录产生,则插入到排行榜中,并把排行榜中位次最末的记录挤出排行榜。在帮助模块,用户可以查看游戏规则,当熟悉规则后可以退出帮助模块。
第二章
需求分析
猜数字游戏软件的总体目标是按照特定游戏规则为用户提供一个方便友好的游戏界面,同时给用户提供排行榜的功能使用户能够按照特定的目标提高自己的成绩,并且提供相应的帮助功能。游戏规则如下。
①游戏软件随机产生4个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。
②玩家有10次猜数字的机会,如果在10次之内仍末猜出正确的数字值和数字位置顺序,则提示用户游戏失败。
③一旦玩家在10次的次数限制内猜出正确的数字值和位置顺序,则赢得游戏。
④当玩家赢得游戏后,会与排行榜中的前五名玩家的游戏记录比较,如果排名能够进入前五名,则更新排行榜,使当前玩家成为入榜选手。
⑤记分规则:猜数字所用次数即为分数,所以分数越少证明玩家水平越高,排行榜中也是排列份数最少的前五名选手。
本游戏软件需要实现以下一些基本功能。
①游戏区:玩家可以在游戏区逐次猜数字,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。
②刷新排行榜:当玩家成功完成一轮猜数字游戏后,可通过和排行榜中相应记录的比较判断玩家是否可以进入排行榜,进入排行榜的资格游戏成绩在前五名的玩家。
③查看排行榜:玩家可以查看当前排行榜中的排名顺序,从而确定自己的游戏目标。排行榜的查看按一定顺序显示给用户,便于查看。
④清除排行榜:玩家可以选择清除排行榜功能,使得排行榜上的玩家姓名和玩家游戏记录从系统中清除,只留下系统默认的玩家名(p la ye r)和系统默认记录8次。
⑤帮助:玩家通过帮助功能了解游戏规则和排行榜设置规则。
⑥退出:玩家想结束并退出游戏系统。
第三章
总体设计
在前面对猜数字游戏进行需求分析的过程中,已经初步明确了系统的主要功能模块和用户需求,下面将在总体设计的过程中,给出猜数字游戏的模块结构、流程描述以及界面布局,并使得系统的总体设计符合软件工程中总体设计的基本原则。
开发与设计的总体思想
猜数字游戏是一种大众娱乐游戏,开发与设计的重点在于游戏供玩家进行猜数字游戏的原始数字的产生和用户每次进行猜数字操作之后的游戏提示,这两方面的规则设计往往决定了软件运行的正确性和质量。
1、模块设计:
1)、游戏区模块
该模块为玩家提供猜数字游戏的主休功能,由系统自动产生4个随机排列的整数,并给用户8次机会猜测数字的数值和排列顺序。如果用户在8次之内没有猜出正确的结果,则提示用户游戏失败,否则提示用户猜数字成功,并调用产生新记录模块对玩家游戏成绩进行处理。(因精力有限且只能用画图来画个框架,所以就不再有图了)
①产生原始数字:由系统产生4个随机数,并按任意顺序排列,作为游戏的原始数字供玩家进行猜数字游戏。
②游提示:提示用户数值和位置全对的数字个数,和只有数值但位置不对的数字个数。
③原始数字显示:当用户在8次之内仍未能猜出原始数字和顺序时,系统提示玩家失败,并给玩家显示出原始数字和顺序。
2)、排行榜模块
该模块为玩家提供排行榜的浏览和清除功能,包括按玩家成绩顺序浏览、按玩家姓名浏览和清除排行榜3个子功能。
①按玩家成绩顺序浏览子功能中,将玩家的姓名、游戏成绩按猜数字次数从少到多的顺序列表显示,即将玩家记录从高到底显示。
②按玩家姓名浏览的子功能中,为了玩家便于查找到自己的游戏成绩,将玩家的姓名和猜数字次数记录按照玩家姓名的字母顺序列表显示。
③清除排行榜:当用户选择清除排行榜功能时,系统会将所有玩家的历史游戏记录和玩家姓名一起从排行榜中清除,在排行榜中只留下默认的游戏记录和默认的玩家姓名,即系统默认玩家姓名player和系统默认记录8次。
3)、产生新记录模块
该模块的功能是当玩家成功完成游戏时,判断用户可否进入排行榜,如果可以进入,则刷新排行榜中的记录,将当前玩家的游戏记录写入排行榜,并将排行榜目前结果显示给用户。
4)读取最好记录模块
读取最好记录模块的主要功能是当用户选择游戏开始选项时,首先提示用户目前排行榜中的最游戏记,如果目前没有排行的玩家记录,则初始化排行榜,给出系统默认的玩家姓名和默认的游戏记录。如果目前排行榜中有玩家记录,则判断出最好记录显示给用户。
5)、帮助模块
帮助模块提供的功能是当玩家选项为帮助功能对应的选项数字时,进入帮助模块,给出用户猜数字的游戏规则和游戏中相关提示的含义。
数据结构设计
猜数字游戏软件涉及到对玩家信息和排行榜的操作。为将玩家的姓名和游戏成绩描述成一个玩家的两个重要方面,使用C语中的结构体来描述
2、程序的模块组成:
主函数: int main()
创立结构体:struct p1()
使数字产生循环:int rand1()
调用读取破记录: goread()
输入数字:void input1();
初始化随机数发生器:getnumber()
清除文本模式窗口:clrscr();
读入字符串的时候,直到回车为止:gets()
3、各个函数的主要功能:
随机产生4个数的函数: 随机产生4个数字。
randomize()是c函数库提供的一个函数,功能给产生随机数的进行初始化
清除文本模式窗口
第四章
详细设计
1、系统的总体框图
2、相关的数据类型:
#include
#include
#include
#include
void rand2();
int rand1();
void input1();
void compare1();
int i,j,k,c,d,b[4];
char a[24];
将数字定义为整型
3、函数间的调用关系图如下:
图 4-2
4、流程图
图 4-3
第五章
测试和结果
1、调试分析;
输入的游戏玩家人数太多时,屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录,十七左右为最佳。
刚开始执行输入函数,按数字顺序输入,输完后执行显示功能,数字、字母的位置显示不对,试着在其中增加一些语句,希望能把所需结果按正常顺序显示,但暂时没有成功,最后在老师的帮助下,所需结果能按正常顺序输出了。
在前面对猜数字游戏进行需求分析的过程中,已经初步明确了系统的主要功能模块和用户需求,下面将在总体设计的过程中,给出猜数字游戏的模块结构、流程描述以及界面布局,并使得系统的总体设计符合软件工程中总体设计的基本原则。
开发与设计的总体思想
猜数字游戏是一种大众娱乐游戏,开发与设计的重点在于游戏供玩家进行猜数字游戏的原始数字的产生和用户每次进行猜数字操作之后的游戏提示,这两方面的规则设计往往决定了软件运行的正确性和质量。同时,要谨记调试失败的原因,以免下次犯同类错误。
2、使用说明:
1)、打开程序:
2)、进入选择页面:
(1)选择1为查看记录
(2)选择2为新游戏
(3)选择0为退出
3)、进行游戏4)、退出
:
第七章
总结
猜数字游戏的课程设计看似简单,却需要能对C语言知识进行应用。尤其是循环语句和数组要进行大量的应用。
首先,C语言课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识,再次,我在课程设计中碰到了很多的问题,我通过查阅相关书籍,资料,通过自己钻研,当然,通过这次课程设计,我也发现了自身的很多不足之处。
想起这次课程设计的这些日子,至今我仍感慨颇多。以前上课时学的都是一些最基本的东西,觉得很枯燥无味。但当自己能把所学的知识转换为有用的东西时,心中却不知何时有了一种莫名的动力,在电脑前面一坐就是好几个小时。或许这就是有压力才有动力吧!
在整整一星期的日子里,面对一件新事物,从理论到实践,可以说是苦多于甜。这一周的课程设计,不仅使我巩固了以前所学过的知识,更使我获得了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实践中得出结论,才能真正掌握好所学知识,才能够实现理论到使用的升华!
毕竟这是我进行的第一次课程设计,所以在该过程中遇到问题,可以说是数不胜数。此外,在设计的过程中发现了自己对以前所学过的知识理解得不够透彻、掌握得不够牢固的不足之处。
好的学习方法在学习中很多时候都起着至关重要的作用!尤其是在这次课程设计过程中,深深地体会到,善于总结是学习过程中不可缺少的重要的一个环节。每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的调试和运行状况,随时总结,找到自己的错误与不足之处,这样所编写的程序才能逐步提高。就如生活那样,汗水预示着结果也见证着收获。直到实际动手做,我才真正领略到“一份耕耘,一份收获。”这一句话的真正含义。这次的c语言设计,对我们而言,知识上的收获重要,但是在一个团队间的团结合作的幕幕更让我们记忆终生。挫折是一份财富,经历是一份拥有。虽然这些日子很短暂但我相信这次实际操作必会成为我人生路上的一段美好的回忆!
最后我想对给过我帮助的所有同学和各位指导老师表示忠心的感谢。.附录1-用户手册
游戏初始画面
选择一进入游戏系统随机显示四个数字提供让游戏者猜测:
如果连续四次输入错误将出现如下结果,并出现提示:
选择四进入帮助显示结果
如果继续则可以输入姓名并保存记录如果按任意键则返回首页:
附录2-源程序
源程序
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
int A=0,B=0;
int pd(int a[])/*判断是否有相同位相等与否*/ {int i,j,leap=1;
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
if(a[i]==a[j])
leap=0;
return leap;
}
int sl(int a)/*判断输入的数字是否合法*/ {int b=0,leap=0,dl[4];
if(a>=1000&&a<=9999)
{dl[0]=a/1000;
dl[1]=a%1000/100;
dl[2]=a%100/10;
dl[3]=a%10;
b=pd(dl);/*判断四位数的合法性*/
}
if(b==1)
return leap;
}
void chuli(int a[],int b[])/*判断猜测情况*/
{int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[i]==b[j])
{
printf("%d 对,",b[j]);
if(i==j)
printf("位置也对!\n");
else printf("但位置不对!\n");
}
}
void main()
{int a[4],b[4],k,m,z,i=0,j,c;
printf(" 这是一个猜数字的游戏,根据系统提示猜一个四位数。\n (注意:正确的数字是每一位都不重复的四位数)祝你好运~~\n");
while(1)
{srand((unsigned)time(NULL));
z=(rand()%100)*(rand()%100);
if(sl(z))
{k=z;
break;
}
}
for(j=3;j>=0;j--)
{ a[j]=k%10; k/=10;}
while(1)
{ printf("输入你猜的数字:\n");
scanf("%d",&m);
if(m==z)
{ printf("恭喜你答对了O(∩_∩)O\n");
break;
}
i++;
for(j=3;j>=0;j--)
{ b[j]=m%10; m/=10;}
chuli(a,b);
{ printf("你都错了8次了,还要猜吗?(1:yes,2:no)\n");
scanf("%d",&c);
if(c==2)
break;
}
else if(i==15)
{
printf("别猜了,正确答案:%d\n",k);
break;
}
else
printf("猜的不正确,还差点,加油啊!\n");
}
}