(最新版)C语言毕业课程设计猜数字游戏姚成
更新时间:2024-04-18 19:31:01 阅读量: 综合文库 文档下载
- c语言课程设计猜数字游戏推荐度:
- 相关推荐
课 程 设 计 报 告
课程名称 C语言课程设计 课题名称 猜数字游戏系统
专 业 土木工程 班 级 1183 学 号
姓 名 周帅 指导教师 段焰
2012年9月3日
1 目 录
第一章 前言............................................................................................ 第二章 需求分析……………………………………………….....…... 2.1系统概述......................................................... 2.2功能需求描述.................................................. 第三章 总体设计………………………………………..……….….. 3.1模块设计........................................................................................ 3.2程序的模块组成……………………………………………… 3.3各个函数的主要功能…………………………….………...….. 第四章 详细设计………………………………………………….... 4.1 系统的总体框图…………………………………………..
4.2 相关的数据类型.........................................................................
4.3 函数间的调用图......................................................................... 4.4 流程图…………………………………………………… .....… 第五章 测试和结果………………………………………………....
5.1 调试分析……………………………………………………..….
5.2 使用说明......................................................................................
5.3 运行结果截屏及说明……………………………………….. 第六章 源程序…………………………………………………...…... 第七章 总结………………………………………………………...... 附录 1、计算机应用与通信学院评分标
准………………..…………………….....
2 第一章
前 言
《C语言程序设计》课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了八个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。学习委员将课程设计报告与磁盘收齐后交指导老师。
第二章
需求分析
猜数字游戏是一个运行在Windows
平台下的小型游戏软件,依据猜数字游戏的基本规则,给用户进行成绩排行,在排行榜中排出前五名玩家的游戏记录,并可以随着玩家的游戏记录进行更新。
1、系统概述
该软件在Windows系统上为玩家提
供猜数字游戏的基本功能,游戏用户可以选择开始游、排行榜查看、帮助等主要功能。当用户选择开始游戏时,系统会提示用户
3 排行榜上猜数字成绩的最好记录,并让用户逐次猜数字,用户每次猜数字后系统会给出本次猜数字的结果提示,如位置和数字都正确的数字个数、数字正确介位置不正确的数字个数。如果用户猜数字的次数超过8次,则提示用户游戏失败,如果在8次之内猜出4个数字和正确的顺序,则提示用户猜数字成功,并到排行榜中进行比较,如果排名在前一名,则计入排行榜中,以便其他用户查看。在排行榜查看功能中,用户可以查看当前的游戏排行,排行榜中总共显示5名玩家的排行,如有新的记录产生,则插入到排行榜中,并把排行榜中位次最末的记录挤出排行榜。在帮助模块,用户可以查看游戏规则,当熟悉规则后可以退出帮助模块。
2、功能需求描述
猜数字游戏软件的总体目标是按
照特定游戏规则为用户提供一个方便友好的游戏界面,同时给用户提供排行榜的功能使用户能够按照特定的目标提高自己的成绩,并且提供相应的帮助功能。游戏规则如下。
①游戏软件随机产生4个数字,但
不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。
②玩家有8次猜数字的机会,如果
在8次之内仍末猜出正确的数字值和数字位置顺序,则提示用户游戏失败。
③一旦玩家在8次的次数限制内猜
出正确的数字值和位置顺序,则赢得游戏。
④当玩家赢得游戏后,会与排行榜
中的前五名玩家的游戏记录比较,如果排名能够进入前五名,则更新排行榜,使当前玩家成为入榜选手。
⑤记分规则:猜数字所用次数即为
分数,所以分数越少证明玩家水平越高,排行榜中也是排列份数最少的前五名选手。
4 本游戏软件需要实现以下一些基
本功能。
①游戏区:玩家可以在游戏区逐次
猜数字,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。
②刷新排行榜:当玩家成功完成一
轮猜数字游戏后,可通过和排行榜中相应记录的比较判断玩家是否可以进入排行榜,进入排行榜的资格游戏成绩在前五名的玩家。
③查看排行榜:玩家可以查看当前
排行榜中的排名顺序,从而确定自己的游戏目标。排行榜的查看按一定顺序显示给用户,便于查看。
④清除排行榜:玩家可以选择清除
排行榜功能,使得排行榜上的玩家姓名和玩家游戏记录从系统中清除,只留下系统默认的玩家名(player)和系统默认记录8次。
⑤帮助:玩家通过帮助功能了解游
戏规则和排行榜设置规则。
⑥退出:玩家想结束并退出游戏系
统。
第三章
总体设计
在前面对猜数字游戏进行需求分析的过程中,已
经初步明确了系统的主要功能模块和用户需求,下面将在总体设计的过程中,给出猜数字游戏的模块结构、流程描述以及界面布局,并使得系统的总体设计符合软件工程中总体设计的基本原则。
开发与设计的总体思想
猜数字游戏是一种大众娱乐游戏,开发与设计的
重点在于游戏供玩家进行猜数字游戏的原始数字的产生和用户每次进行猜数字操作之后的游戏提示,这两方面的规则设计往往决定了软件运行的正确性和质
5
量。
1、模块设计:
1)、游戏区模块
该模块为玩家提供猜数字游戏的主休功能,由系
统自动产生4个随机排列的整数,并给用户8次机会猜测数字的数值和排列顺序。如果用户在8次之内没有猜出正确的结果,则提示用户游戏失败,否则提示用户猜数字成功,并调用产生新记录模块对玩家游戏成绩进行处理。(因精力有限且只能用画图来画个框架,所以就不再有图了)
①产生原始数字:由系统产生4个随机数,并按
任意顺序排列,作为游戏的原始数字供玩家进行猜数字游戏。
②游提示:提示用户数值和位置全对的数字个数,
和只有数值但位置不对的数字个数。
③原始数字显示:当用户在8次之内仍未能猜出
原始数字和顺序时,系统提示玩家失败,并给玩家显示出原始数字和顺序。
2)、排行榜模块
该模块为玩家提供排行榜的浏览和清除功能,包
括按玩家成绩顺序浏览、按玩家姓名浏览和清除排行榜3个子功能。
①按玩家成绩顺序浏览子功能中,将玩家的姓名、
游戏成绩按猜数字次数从少到多的顺序列表显示,即将玩家记录从高到底显示。
②按玩家姓名浏览的子功能中,为了玩家便于查
找到自己的游戏成绩,将玩家的姓名和猜数字次数记录按照玩家姓名的字母顺序列表显示。
③清除排行榜:当用户选择清除排行榜功能时,
系统会将所有玩家的历史游戏记录和玩家姓名一起从排行榜中清除,在排行榜中只留下默认的游戏记录和默认的玩家姓名,即系统默认玩家姓名player和系统默认记录8次。
3)、产生新记录模块
该模块的功能是当玩家成功完成游戏时,判断用户
可否进入排行榜,如果可以进入,则刷新排行榜中的记录,将当前玩家的游戏
6 记录写入排行榜,并将排行榜目前结果显示给用户。
4)读取最好记录模块
读取最好记录模块的主要功能是当用户选择游戏开
始选项时,首先提示用户目前排行榜中的最游戏记,如果目前没有排行的玩家记录,则初始化排行榜,给出系统默认的玩家姓名和默认的游戏记录。如果目前排行榜中有玩家记录,则判断出最好记录显示给用户。
5)、帮助模块
帮助模块提供的功能是当玩家选项为帮助功能对
应的选项数字时,进入帮助模块,给出用户猜数字的游戏规则和游戏中相关提示的含义。
数据结构设计
猜数字游戏软件涉及到对玩家信息和排行榜的操
作。为将玩家的姓名和游戏成绩描述成一个玩家的两个重要方面,使用C语中的结构体来描述
2、程序的模块组成: 主函数: int main() 创立结构体:struct p1()
使数字产生循环: int rand1()
调用读取破记录: goread() 输入数字: void input1();
初始化随机数发生器:getnumber() 清除文本模式窗口:clrscr();
读入字符串的时候,直到回车为止 :gets()
3、各个函数的主要功能:
随机产生4个数的函数: 随机产生4个数字。
7
randomize()是c函数库提供的一个函数,功能给产生随机数的进行初始化 清除文本模式窗口
第四章
详细设计
1、系统的总体框图
图 4-1
8 2、相关的数据类型:
#include * 提示用户输入四个要猜的4位整数 * for(i=1;i<=4;i++) { printf(\ scanf(\ } for(i=1;i<=4;i++) { if(a[i]==b[i])* 位置数字都对的 * { n1++; continue; } for(j=1;j<=4;j++)* 计算数字相同但位置不相同的个数 * if(b[i]==a[j]) n2++; } printf(\ printf(\ printf(\ if(n1==4) break;* 如果四次都猜对了就结束循环。 * } * while循环结束 * 9 if(n3>=10) printf(\ else { printf(\ ResetRecord(n3); } printf(\ fflush(stdin); getch(); } getnumber()* 随机产生四个数的函数 * { randomize(); * 产生随机数的初始化函数 * for(i=1;i<=4;i++) { loop2: { * 产生的随机数处理为1位的整数 * a[i]=rand();* rand函数用于产生随机数 * * 循环判断,随机数要求不重复,如果重复则重新产生 * for(j=i-1;j>=1;j--) if(a[i]==a[j]) goto loop2; } } } #ifndef PLAYER #define PLAYER 10 #include printf(\ perror(\ fflush(stdin); getch(); return; } * 将文件中要排序的信息存入结构体数组 * while(fread(&s[recNumber],sizeof(player),1,fp)!=(int)NULL) { recNumber++; } fclose(fp); * 如果文件中有记录,则将各记录按游戏成绩值排序 * if(recNumber>1) { for(i=0;i for(j=i+1;j if(strcmp(s[k].name,s[j].name)>0) k=j; } if(k!=i) { strcpy(TempS.name,s[k].name); TempS.score=s[k].score; 11 strcpy(s[k].name,s[i].name); s[k].score=s[i].score; strcpy(s[i].name,TempS.name); s[i].score=TempS.score; } } * 将排序好的记录写入文件 * fp=fopen(DataFile,\ if(fp==NULL) { printf(\ perror(\ fflush(stdin); getch(); return; } for (i=0;i if(fwrite(&s[i],sizeof(player),1,fp)!=1) { printf(\ perror(\ fflush(stdin); getch(); return; } } fclose(fp); } 12 * 显示排序后的文件 * printf(\fp=fopen(DataFile,\if(fp==NULL) { printf(\ perror(\ fflush(stdin); getch(); return; } printf(\ while(fread(&TempS,sizeof(player),1,fp)!=(int)NULL) { printf(\} fclose(fp); printf(\fflush(stdin); getch(); } #include printf(\ printf(\ correct value and correct position +\\n\ printf(\ correct value but incorrectness position +\\n\ 13 count count printf(\ printf(\ about the score list +\\n\ printf(\the score list is store the five player's score on top +\\n\ printf(\ fflush(stdin); getch(); } * SortByName按游戏成绩排序 * #include printf(\ perror(\ fflush(stdin); getch(); return; } * 将文件中要排序的信息存入结构体数组 * while(fread(&s[recNumber],sizeof(player),1,fp)!=(int)NULL) { recNumber++; } fclose(fp); * 如果文件中有记录,则将各记录按游戏成绩值排序 * if(recNumber>1) { for(i=0;i 14 k=i; for(j=i+1;j if(s[k].score>s[j].score) k=j; } if(k!=i) { strcpy(TempS.name,s[k].name); TempS.score=s[k].score; strcpy(s[k].name,s[i].name); s[k].score=s[i].score; strcpy(s[i].name,TempS.name); s[i].score=TempS.score; } } * 将排序好的记录写入文件 * fp=fopen(DataFile,\ if(fp==NULL) { printf(\ perror(\ fflush(stdin); getch(); return; } for (i=0;i if(fwrite(&s[i],sizeof(player),1,fp)!=1) { 15 printf(\ perror(\ fflush(stdin); getch(); return; } } fclose(fp); } * 显示排序后的文件 * printf(\fp=fopen(DataFile,\if(fp==NULL) { printf(\ perror(\ fflush(stdin); getch(); return; } printf(\ while(fread(&TempS,sizeof(player),1,fp)!=(int)NULL) { printf(\} fclose(fp); printf(\fflush(stdin); getch(); 16 } #include int i,j; int recnum=0; int maxscore=0; player r[5]; FILE *fp=NULL; player Pro; player TempS; fp=fopen(\ if(fp==NULL) { printf(\ perror(\ fflush(stdin); getch(); exit(0); } * 将文件中的记录读入数组中. * while((fread(&r[recnum],sizeof(player),1,fp)!=(int)NULL) (recnum<5)) { recnum++; } fclose(fp); * 如果记录成员没有5个,则顺次入数组中添加记录 * if(recnum<4) { 17 && printf(\让玩家输入姓名 * scanf(\ r[recnum].score=n; recnum++; } * 如果记录成员已经有5个,则找出猜数字次数最多的记录,即最差玩家 * * 如果当前记录比此记录快,则替换 * else { for(i=0;i<5;i++) { if(r[i].score>maxscore)* maxscor初始值为0 * { maxscore=r[i].score; j=i; } } * 如果当前人的记录比最慢记录快,或相等则替换,使玩家入榜,最差玩家落榜 * if(n<=r[j].score) { printf(\让玩家输入姓名 * scanf(\ r[j].score=n; } } fp=fopen(\以写的方式打开排行榜文件 * if(fp==NULL) { 18 printf(\ perror(\ fflush(stdin); getch(); exit(0); } * 循环把更新过的排行情况写入排行榜 * for(i=0;i if(fwrite(&r[i],sizeof(player),1,fp)!=1) { printf(\ perror(\ getch(); exit(0); } } fclose(fp); * 显示更新排行过的排行榜 * fp=fopen(\ if(fp==NULL) { printf(\ perror(\ fflush(stdin); getch(); exit(0); } printf(\ 19 printf(\ while(fread(&TempS,sizeof(player),1,fp)!=(int)NULL) { printf(\ } fclose(fp); } #include printf(\the score sort file fail!end with any key!\\n\ perror(\ fflush(stdin); getch(); exit(0); } * 将系统默认记录以履盖的方式写入排行榜 * if(fwrite(&TempS,sizeof(player),1,fp)!=1) { printf(\ perror(\ fflush(stdin); getch(); exit(0); } fclose(fp); printf(\ fflush(stdin); 20
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 最新版
- 语言
- 课程
- 毕业
- 数字
- 设计
- 游戏
- 自考公共关系学重点笔记(2011年版本)
- 35kV输电线路典型设计设计条件
- 山东省计划生育技术服务中心名录2018版562家
- 智能小车论文单片机循迹测速避障液晶显示 - 图文
- 高中英语:Unit 5 Nelson Mandela Grammar(新人教必修1)
- 《口译》第三次作业
- 阳光建材家居策划
- 防洪度汛(最终)
- 汽车4s店发展规划
- 大学生就业指导课程教案图文
- 工会送清凉主持词
- 班级励志名言1
- 人教版二年级语文(上下册)生字表(二)生字的形近字、多音字、
- 当阳二高高三地理第3周周周清训练题
- 市城市管理局城市精细化管理经验交流发言材料
- 高温风机高压变频器操作步骤
- 二层模拟实验gyx2
- 干挂石材施工技术交底 - 图文
- 初三化学总复习资料知识点大全整理版
- 中国天气试题