c语言课程设计猜数字游戏[1]_第1页
c语言课程设计猜数字游戏[1]_第2页
c语言课程设计猜数字游戏[1]_第3页
c语言课程设计猜数字游戏[1]_第4页
c语言课程设计猜数字游戏[1]_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告 课程名称 C 语言程序设计报告 课题名称 猜数字游戏 专 业 电气工程及其自动化 班 级 1104 学 号 33 姓 名 张腾 指导教师 黄晓宇 丁敬忠 谭小兰 2012 年 6 月 24 日 湖南工程学院 课 程 设 计 任 务 书 课程名称 C 课程设计 课 题 猜数字游戏 专业班级 电气工程及其自动化 学生姓名 张腾 学 号 201101010433 指导老师 黄晓宇 审 批 黄晓宇 任务书下达日期 2012 年 6 月 18 日 任务书完成日期 2012 年 6 月 24 日 目 录 第一章 前言 第二章 需求分析. 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、计算机应用与通信学院评分标 准. 第一章 前 言 C 语 言 程 序 设 计 课 程 设 计 是 对 学 生 的 一 种 全 面 综 合 训 练 , 它 包 括 问 题 分 析 , 总 体 结 构 设 计 , 用 户 界 面 设 计 , 程 序 设 计 基 本 技 能 和 技 巧 , 多 人 合 作 , 以 至 一 整 套 软 件 工 作 规 范 的 训 练 和 科 学 作 风 的 培 养 。 是 与 课 堂 听 讲 、 自 学 和 练 习 相 辅 相 成 的 必 不 可 少 的 一 个 教 学 环 节 。 通 常 , 课 程 设 计 的 课 题 比 平 时 的 习 题 复 杂 得 多 , 也 更 接 近 实 际 。 课 程 设 计 着 眼 于 与 应 用 的 结 合 点 , 使 学 生 学 会 如 何 把 书 上 学 到 的 知 识 用 于 解 决 实 际 问 题 , 培 养 软 件 工 作 所 需 要 的 动 手 能 力 ; 另 一 方 面 , 能 使 书 上 的 知 识 变 “活 ”, 使 学 生 更 好 地 深 化 理 解 和 灵 活 掌 握 教 学 内 容 。 为 了 达 到 上 述 目 的 , 本 课 程 设 计 安 排 了 八 个 设 计 课 题 , 训 练 重 点 在 于 基 本 的 程 序 设 计 方 法 和 分 析 问 题 的 能 力 , 而 不 强 调 面 面 俱 到 。 学 生 可 任 选 其 中 一 题 进 行 设 计 , 设 计 完 毕 写 出 课 程 设 计 报 告 , 用 A4 纸 打 印 成 册 ; 并 将 课 程 设 计 报 告 与 源 程 序 存 盘 。 学 习 委 员 将 课 程 设 计 报 告 与 磁 盘 收 齐 后 交 指 导 老 师 。 第 二 章 需 求 分 析 猜 数 字 游 戏 是 一 个 运 行 在 Windows 平 台 下 的 小 型 游 戏 软 件 , 依 据 猜 数 字 游 戏 的 基 本 规 则 , 给 用 户 进 行 成 绩 排 行 , 在 排 行 榜 中 排 出 前 五 名 玩 家 的 游 戏 记 录 , 并 可 以 随 着 玩 家 的 游 戏 记 录 进 行 更 新 。 1、 系 统 概 述 该 软 件 在 Windows 系 统 上 为 玩 家 提 供 猜 数 字 游 戏 的 基 本 功 能 , 游 戏 用 户 可 以 选 择 开 始 游 、 排 行 榜 查 看 、 帮 助 等 主 要 功 能 。 当 用 户 选 择 开 始 游 戏 时 , 系 统 会 提 示 用 户 排 行 榜 上 猜 数 字 成 绩 的 最 好 记 录 , 并 让 用 户 逐 次 猜 数 字 , 用 户 每 次 猜 数 字 后 系 统 会 给 出 本 次 猜 数 字 的 结 果 提 示 , 如 位 置 和 数 字 都 正 确 的 数 字 个 数 、 数 字 正 确 介 位 置 不 正 确 的 数 字 个 数 。 如 果 用 户 猜 数 字 的 次 数 超 过 8 次 , 则 提 示 用 户 游 戏 失 败 , 如 果 在 8 次 之 内 猜 出 4 个 数 字 和 正 确 的 顺 序 , 则 提 示 用 户 猜 数 字 成 功 , 并 到 排 行 榜 中 进 行 比 较 , 如 果 排 名 在 前 一 名 , 则 计 入 排 行 榜 中 , 以 便 其 他 用 户 查 看 。 在 排 行 榜 查 看 功 能 中 , 用 户 可 以 查 看 当 前 的 游 戏 排 行 , 排 行 榜 中 总 共 显 示 5 名 玩 家 的 排 行 , 如 有 新 的 记 录 产 生 , 则 插 入 到 排 行 榜 中 , 并 把 排 行 榜 中 位 次 最 末 的 记 录 挤 出 排 行 榜 。 在 帮 助 模 块 , 用 户 可 以 查 看 游 戏 规 则 , 当 熟 悉 规 则 后 可 以 退 出 帮 助 模 块 。 2、 功 能 需 求 描 述 猜 数 字 游 戏 软 件 的 总 体 目 标 是 按 照 特 定 游 戏 规 则 为 用 户 提 供 一 个 方 便 友 好 的 游 戏 界 面 , 同 时 给 用 户 提 供 排 行 榜 的 功 能 使 用 户 能 够 按 照 特 定 的 目 标 提 高 自 己 的 成 绩 , 并 且 提 供 相 应 的 帮 助 功 能 。 游 戏 规 则 如 下 。 游 戏 软 件 随 机 产 生 4 个 数 字 , 但 不 显 示 , 给 用 户 提 供 输 入 提 示 符 , 让 用 户 猜 4 个 数 字 的 值 和 位 置 顺 序 。 如 果 数 字 值 和 位 置 顺 序 均 正 确 , 则 猜 数 字 成 功 。 玩 家 有 8 次 猜 数 字 的 机 会 , 如 果 在 8 次 之 内 仍 末 猜 出 正 确 的 数 字 值 和 数 字 位 置 顺 序 , 则 提 示 用 户 游 戏 失 败 。 一 旦 玩 家 在 8 次 的 次 数 限 制 内 猜 出 正 确 的 数 字 值 和 位 置 顺 序 , 则 赢 得 游 戏 。 当 玩 家 赢 得 游 戏 后 , 会 与 排 行 榜 中 的 前 五 名 玩 家 的 游 戏 记 录 比 较 , 如 果 排 名 能 够 进 入 前 五 名 , 则 更 新 排 行 榜 , 使 当 前 玩 家 成 为 入 榜 选 手 。 记 分 规 则 : 猜 数 字 所 用 次 数 即 为 分 数 , 所 以 分 数 越 少 证 明 玩 家 水 平 越 高 , 排 行 榜 中 也 是 排 列 份 数 最 少 的 前 五 名 选 手 。 本 游 戏 软 件 需 要 实 现 以 下 一 些 基 本 功 能 。 游 戏 区 : 玩 家 可 以 在 游 戏 区 逐 次 猜 数 字 , 系 统 给 出 玩 家 每 次 猜 数 字 后 的 提 示 , 包 括 数 值 、 位 置 均 正 确 的 数 字 个 数 和 数 值 正 确 但 位 置 不 正 确 的 数 字 个 数 。 刷 新 排 行 榜 : 当 玩 家 成 功 完 成 一 轮 猜 数 字 游 戏 后 , 可 通 过 和 排 行 榜 中 相 应 记 录 的 比 较 判 断 玩 家 是 否 可 以 进 入 排 行 榜 , 进 入 排 行 榜 的 资 格 游 戏 成 绩 在 前 五 名 的 玩 家 。 查 看 排 行 榜 : 玩 家 可 以 查 看 当 前 排 行 榜 中 的 排 名 顺 序 , 从 而 确 定 自 己 的 游 戏 目 标 。 排 行 榜 的 查 看 按 一 定 顺 序 显 示 给 用 户 , 便 于 查 看 。 清 除 排 行 榜 : 玩 家 可 以 选 择 清 除 排 行 榜 功 能 , 使 得 排 行 榜 上 的 玩 家 姓 名 和 玩 家 游 戏 记 录 从 系 统 中 清 除 , 只 留 下 系 统 默 认 的 玩 家 名 (player)和 系 统 默 认 记 录 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、 系 统 的 总 体 框 图 图 4-1 开始游戏 刷新排行榜 查看排行榜 清除排行榜 帮助 退出 开始 功能菜单显示 clearsort help exit Startprogramresertracordreadrecord 2、相关的数据类型: #include #include #include #include void rand2(); int rand1(); void input1(); void compare1(); int i,j,k,c,d,b4; char a24; 将数字定义为整型 3、函数间的调用关系图如下: 图 4-2 显示玩家积分 函数: display() 记录积分函数: record() 自定义清屏函数 my clear() 读取破纪录者 函数: goread() 初始化记录 者函数; newest() 随机产生 4 个数 函数; getnumber(_) 主函数; int main() 新记录者函数; breakrecord() 4、流程图 图 4-3 you are right 恭喜正确 退出 输入记录 名字 Main() 查看积分 比较输入的数和随机生 成的数.给出提示.A 表示 数对位置也对,B 表示数 对位置不对 1 退出 纪录判断结果 和积分 输入四位不相同的数字,如果输入的不是数 字或者输入的数字有重复,则重新输入 第五章 测试和结果 1、调试分析; 输入的游戏玩家人数太多时,屏幕显示不能控制为一页一页显示,所以为 了方便起见,不要输入太多记录,十七左右为最佳。 刚开始执行输入函数,按数字顺序输入,输完后执行显示功能,数字、字母 的位置显示不对,试着在其中增加一些语句,希望能把所需结果按正常顺序显 示,但暂时没有成功,最后在老师的帮助下,所需结果能按正常顺序输出了。 在 前 面 对 猜 数 字 游 戏 进 行 需 求 分 析 的 过 程 中 , 已 经 初 步 明 确 了 系 统 的 主 要 功 能 模 块 和 用 户 需 求 , 下 面 将 在 总 体 设 计 的 过 程 中 , 给 出 猜 数 字 游 戏 的 模 块 结 构 、 流 程 描 述 以 及 界 面 布 局 , 并 使 得 系 统 的 总 体 设 计 符 合 软 件 工 程 中 总 体 设 计 的 基 本 原 则 。 开 发 与 设 计 的 总 体 思 想 猜 数 字 游 戏 是 一 种 大 众 娱 乐 游 戏 , 开 发 与 设 计 的 重 点 在 于 游 戏 供 玩 家 进 行 猜 数 字 游 戏 的 原 始 数 字 的 产 生 和 用 户 每 次 进 行 猜 数 字 操 作 之 后 的 游 戏 提 示 , 这 两 方 面 的 规 则 设 计 往 往 决 定 了 软 件 运 行 的 正 确 性 和 质 量 。 同 时 , 要 谨 记 调 试 失 败 的 原 因 , 以 免 下 次 犯 同 类 错 误 。 2、使用说明: 1)、打开程序: 2)、进入选择页面: (1)选择 1 为查看记录 (2)选择 2 为新游戏 (3)选择 0 为退出 3)、进行游戏 4)、退出 3、运行结果截屏及说明: 游戏初始画面 选择一进入游戏系统随机显示四个数字提供让游戏者猜测: 如果连续四次输入错误将出现如下结果,并出现提示: 选择四进入帮助显示结果 如果继续则可以输入姓名并保存记录如果按任意键则返回首页: 第六章 源程序 #include #include #include #include int a5,b5,n1,n2,n3,i,j;/* a,b,只用了从 14 的四个下标. */ /* n1 计算位置数字相同的数字个数 */ /* n2 计算数字相同但位置不相同的数字个数 */ /* n3 计算所猜次数 */ char ch; StartProgram() ReadRecord(); /*调用读取破记者函数 */ n1=0; n3=0; getnumber();/*调用随机产生 4 个数的函数*/ for(j=i-1;j=1;j-) printf(“%d “,aj); getchar(); printf(“nnnnn“); /* 循环猜数 */ while(n1=10) printf(“You blew it ,the answer is %d,%d,%d“,a1,a2,a3,a4); else printf(“Configrafulastions!You finish it by %d timesn“,n3); ResetRecord(n3); printf(“press any key to continue.n“); fflush(stdin); getch(); getnumber()/* 随机产生四个数的函数 */ randomize(); /* 产生随机数的初始化函数 */ for(i=1;i=1;j-) if(ai=aj) goto loop2; #ifndef PLAYER #define PLAYER #include #include #include #define SIZE 5 typedef struct char name20;/* field of name */ int score;/* field of score */ player; #endif# /* SortByName 按游戏成绩排序 */ #include void SortByName() int i,j,k; player TempS;/* 定义进行操作时的临时结构体变量 */ player s5;/* SIZE 在 score.h 头文件中定义的常量,值为 5 */ int recNumber=0; char DataFile10=“record“; FILE *fp=NULL; clrscr(); /* 以读的方式打开文件,如文件不存在,提示错误 */ fp=fopen(DataFile,“rb“); if(fp=NULL) printf(“nOpen file %s fial !End with any key.n“,DataFile); perror(“Open file fail“); fflush(stdin); getch(); return; /* 将文件中要排序的信息存入结构体数组 */ while(fread( fclose(fp); /* 如果文件中有记录,则将各记录按游戏成绩值排序 */ if(recNumber1) for(i=0;i0) k=j; if(k!=i) strcpy(TempS.name,); TempS.score=sk.score; strcpy(,); sk.score=si.score; strcpy(,TempS.name); si.score=TempS.score; /* 将排序好的记录写入文件 */ fp=fopen(DataFile,“wb+“); if(fp=NULL) printf(“nOpen file %s fial!End with any key.n“,DataFile); perror(“Open file fail“); fflush(stdin); getch(); return; for (i=0;i /* 显示帮助信息 */ PrintHelp() clrscr(); printf(“n“); printf(“+- +n“); printf(“+ you hava 10 opportunities to guess num +n“); printf(“+ every time the system will hint you : +n“); printf(“+ correct value and correct position count +n“); printf(“+ correct value but incorrectness position count +n“); printf(“+- +n“); printf(“+ about the score list +n“); printf(“+ the score list is store the five players score on top +n“); printf(“+- +n“); fflush(stdin); getch(); /* SortByName 按游戏成绩排序 */ #include void SortByScore() int i,j,k; player TempS;/* 定义进行操作时的临时结构体变量 */ player s5;/* SIZE 在 score.h 头文件中定义的常量,值为 5 */ int recNumber=0; char DataFile10=“record“; FILE *fp=NULL; clrscr(); /* 以读的方式打开文件,如文件不存在,提示错误 */ fp=fopen(DataFile,“rb“); if(fp=NULL) printf(“nOpen file %s fial !End with any key.n“,DataFile); perror(“Open file fail“); fflush(stdin); getch(); return; /* 将文件中要排序的信息存入结构体数组 */ while(fread( fclose(fp); /* 如果文件中有记录,则将各记录按游戏成绩值排序 */ if(recNumber1) for(i=0;isj.score) k=j; if(k!=i) strcpy(TempS.name,); TempS.score=sk.score; strcpy(,); sk.score=si.score; strcpy(,TempS.name); si.score=TempS.score; /* 将排序好的记录写入文件 */ fp=fopen(DataFile,“wb+“); if(fp=NULL) printf(“nOpen file %s fial!End with any key.n“,DataFile); perror(“Open file fail“); fflush(stdin); getch(); return; for (i=0;i ResetRecord(int n) /* n 所用次数 */ int i,j; int recnum=0; int maxscore=0; player r5; FILE *fp=NULL; player Pro; player TempS; fp=fopen(“record“,“rb“); if(fp=NULL) printf(“nOpen file fail!End with any keyn“); perror(“Open file fail“); fflush(stdin); getch(); exit(0); /* 将文件中的记录读入数组中. */ while(fread( j=i; /* 如果当前人的记录比最慢记录快,或相等则替换,使玩家入榜,最差玩家落 榜 */ if(n ClearSort() player TempS;/* 定义进行操作时的临时结构体变量,用于存放系统默认记 录 */ char DataFile10=“record“;/* 存放排行榜文件名 */ FILE * fp=NULL; strcpy(TempS.name,“player“);/* 初始化系统默认记录的玩家姓名 */ TempS.score=10;/* 初始化系统默认记录的玩家成绩 */ fp=fopen(DataFile,“wb+“);/* 打开排行榜文伯 */ if(fp=NULL)/* 打开不成功给出错误提示 */ printf(“nOpen the score sort file fail!end with any key!n“,DataFile); perror(“Open file fail!“); fflush(stdin); getch(); exit(0); /* 将系统默认记录以履盖的方式写入排行榜 */ if(fwrite( perror(“write file fail!“); fflush(stdin); getch(); exit(0); fclose(fp); printf(“nThe sort file is cleared!n“); fflush(stdin); getch(); #include void main() int choice=1; while(1) clrscr(); printf(“#=#n“); printf(“# Welcome to GuessNum Program #n“); printf(“#=#n“); printf(“# 1.to start game #n“); printf(“# 2.to browse the sort by scor #n“); printf(“# 3.to browse the sort by name #n“); printf(“# 4.to view the help #n“); printf(“# 5.to clear the sort #n“); printf(“# 0.Exit #n“); printf(“#=#n“); printf(“Please input you choice here:“); scanf(“%d“, switch(choice) case 1: StartProgram(); break; case 2: SortByScore(); break; case 3: SortByName(); break; case 4: PrintHelp(); break; case 5: ClearSort(); break; case 0: exit(0); break; default: printf(“select error!nPress any key to countinue.“); fflush(stdin); getch(); break; #include “stdio.h“ ReadRecord() FILE * fp; player TempS; player Min; Min.score=11; /* 打开记录保持文,如果不能以读方式打,说明记录不存在,则他建记录, 写入文件 */ if(fp=fopen(“record“,“rb“)=NULL) SetRecord();/* 调用初始化记录函数 */ fp=fopen(“record“,“rb“); /* 循环读取文件,取得最少猜中次数的记录 */ while(fread( Min.score=TempS.score; fclose(fp); printf(“the recore keeper is %s,guessed out in %d timesn“,M,Min.score); SetRecord() player Pro; FILE *fp; /* 给初始记录赋值 */ s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论