猜数游戏课程设计报告.doc_第1页
猜数游戏课程设计报告.doc_第2页
猜数游戏课程设计报告.doc_第3页
猜数游戏课程设计报告.doc_第4页
猜数游戏课程设计报告.doc_第5页
免费预览已结束,剩余36页可下载查看

下载本文档

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

文档简介

C 课程设计 1 课程设计 论文 任务书 一 课程设计 论文 题目 猜数游戏猜数游戏 二 课程设计 论文 工作自 20082008 年 1212 月 2222 日起至 20092009 年 1 1 月 2 2 日止 三 课程设计 论文 地点 多媒体实验室多媒体实验室 四 课程设计 论文 内容要求 1 本课程设计的目的 本课程设计的目的 1 熟练掌握 C 语言的基本知识和技能 2 基本掌握面向对象程序设计的基本思路和方法 3 利用所学的基本知识和技能 解决简单的面向对象程序设计问题 4 提高学生的科技论文写作能力 2 课程设计的任务及要求 课程设计的任务及要求 1 基本要求 基本要求 1 课程设计前必须根据课程设计题目认真准备实验源程序及调试时所需的数据 2 要求采用简明 严格的问题描述 设计求解算法 3 数据结构选用得当 程序结构合理 4 程序简明易懂 多运用输出提示 程序运行正确 5 对设计进行总结和讨论 2 课程设计论文编写要求 课程设计论文编写要求 1 要按照书稿的规格打印撰写课设论文 2 论文包括中文摘要 目录 绪论 正文 总结和体会 参考文献 附录等 3 正文中要有问题描述 设计求解算法 算法的实现 调试分析 调试时出现 的主要问题 编译语法错误及修改 重点是运行逻辑问题修改和调整 4 课设论文装订按学校的统一要求完成 3 课设考核 课设考核 从以下几方面来考查 1 出勤情况 2 设计任务的难易程度及饱满程度 3 课设任务完成情况 4 动手调试能力 5 论文撰写的原理分析 设计思路以及论述的层次性 条理性 格式的规范性 4 参考文献 参考文献 1 吕鳯翥 C 清华大学出版社 2 http www bc 3 4 C 编程思想 Prentice Hill 美 Bruce Eckel 同作者作品 5 课程设计进度安排 课程设计进度安排 C 课程设计 2 内容内容 天数天数 地点地点 构思及收集资料 2 图书馆 程序设计与调试 5 计算机房 撰写论文 3 图书馆 6 选择课程设计题目具体要求 选择课程设计题目具体要求 猜数字游戏 1 任务描述 用户从键盘输入 4 位不重复的数 来匹配计算机给出的 4 位随机数 若数字和位数均等同 表示用户赢了 每猜一次 计算 机均给出提示信息 x y x 表示数字 位置都匹配的个数 y 表示数字匹配但位置不匹配的个数 2 要求 1 设计友好的中文交互界面 2 按 H 键 可得到更详细的帮助信息 如 第一位数字正确 第 2 3 位数字位置不对等 3 按 K 键 后 可以查看计算机所给出的 4 位数 但查看前需要输入密码 密码自定 4 猜的结果以分值的形式给出 每猜错一次扣 10 分 若猜对 1 个数 奖励 50 分 5 每次游戏结束后将分值存盘 文件名自定 学生签名 2008 年 12 月 22 日 课程设计课程设计 论文论文 评审意见评审意见 1 任务难易及完成情况 优 良 中 一般 差 2 调试能力评价 优 良 中 一般 差 3 论文撰写水平评价 优 良 中 一般 差 4 论文格式规范性评价 优 良 中 一般 差 5 考勤 优 良 中 一般 差 猜数字游戏 C 课程设计 3 摘要摘要 为了到达友好交互界面的设计要求 设计了四个 Menu 函数 提供友好界面解决方案 在所有函数设计中也都融入了友好交互的思想 会提示要求玩家输入的信息 除了开始满足基本的游戏要求之 外 为了解决输入 K H 时可以提供答案和进一步的帮助 特意定义了 Key 和 MoreHelp a c 两个函数 Key 提供了解决密码的读取比较和返回的解决方案 为程序的后步执行提供了依据 MoreHelp 用来比较给 出的随机数 即答案 与玩家所猜的数 并根据比较结果给出进一步的帮助信息 除此之外 还提供了 SetKey 函数为用户更改密码提供了途径 Win na j 函数为每次游戏结束记录玩家信 息并存盘提供解决方案 Clear 函数用于将原有记录清除 并且写入初始数据 Hero 函数会将存盘数据取出 并按高分的顺序显示出玩家信息 Guess 函数提供交互式界面 为玩家选择功能提供方便 这些函数大都将被 Start 调用来完成必要的功能 而且为了满足重新输入或退出界面的要求 本程序大量使用了转向语句 goto 猜数字游戏 C 课程设计 4 目录目录 绪论绪论 4 第一章第一章流程图流程图 5 第二章第二章模块分析模块分析 6 第三章第三章调试过程调试过程 17 第四章第四章运行过程运行过程 19 第五章第五章心得体会心得体会 25 第六章第六章附录附录 25 猜数字游戏 C 课程设计 5 绪论绪论 为方便阅读本报告 将报告分六章 包括流程图 模块分析 调试过程 运行结果 心得体会及附录 在第一章流程图中 将给大家一个对本程序的初步整体的了解 包括有那些函数并对其作用有感性的认识 在第二章模块分析中 将会详细的介绍每一个函数的编程思想 实现过程甚至详尽到没一个变量的作用 在第三章调试过程一章中 将会介绍我在编程中遇到的问题 还有解决的方法 为以后的实践打下基础 在第四章运行结果中 将一起检验程序是否符合要求及使用的方法 在第五章心得体会中 将介绍我在课程设计过程中的所得与感想 附录中将附上参考文献及完整的源代码 在模块分析中虽然有部分代码 但是多数有省略 故附上完整代码方 便读者对照 希望在阅读完本报告以后能对本程序有更加深入的了解 并且也希望您能对本程序提出修改的意见 让程序更 加的完善 猜数字游戏 C 课程设计 6 第一章第一章 流程图流程图 Guess 若无 pai dat 创建一个 pai dat Menu1 1 2 3 4 5 6 Hero Menu2 Clear SetKey exit 0 Start 导入数 据 显 示排行 榜 M e n u 3 M e n u 4 将原 pai dat 文件中的数 据用 与 0 代替 重写数据 修改 code dat 文 件内容前 调用 Key 判 断是否有权 限更密码 Key Guess K H 输入任意整数 Key MoreHelp 直接给出答案完 成 游 戏 Win cahr na int j 与 pai dat 文件内数据比 较 排序后存入 pai dat 文件中 main 猜数字游戏 C 课程设计 7 第二章第二章 模块分析模块分析 1 引入的头文件引入的头文件 include 使用了 time 函数 调用系统时间作为种子产生随机数 include getch include Sleep include strcpy strcmp include include 说明 引入 time h 使用到 time 函数 用 time 获得系统时间 为 srond 产生随机数提供种子 若不提供种子的 话 在需要产生随机数的数的时候 每次产生的数抖相同 不符合设计要求 引入 conio h 使用到其中的 getch 函数 用于接收玩家输入的字符或在需要时暂停程序的执行 引入 windows h 使用到其中的 Sleep 用于让程序执行时延迟 本来用的是用空的 for 循环语句来实现延迟效果 但 是违背了程序要高效性的原则 故引入该头文件 引入 string 使用到其中包含的 strcpy 字符串拷贝函数与 strcmp 字符串比较函数 引入 iostream 使用了标准输入输出流如 cin cout endl 等 引入 fstream 使用到其中定 义的两个类 ifstream 与 ofstream 分别用与创建输入流对象与输出流对象 实现对磁盘文件的读取与数据的存盘 2 定义的结构体定义的结构体 本程序中仅定义了一个结构类型 即 player 其中包含两个成员变量 char name 20 与 int goa 分别对应玩家的姓 名与游戏得分 struct player char name 20 int goal play 7 在定义的同时 创建程序级的结构类型数组 play 7 这样做的话每次需显示或使用到玩家信息时都是最新的 3 函数分析函数分析 0 int Key 设计思路 提供判断密码比较的功能 并在密码匹配时返回 1 不匹配时返回 0 要求是玩家输入的密码与磁盘文件中储存 的密码比较 然后返回 1 或 0 为程序后步执行提供依据 实现的方法是 定义一个输入流并打开密码文件 code dat in code dat 将文件中数据导入字符数组 key 16 中 并与玩家输入并储存在 code 16 中的内容通过 strcmp char char 比较并判断内容是否一致 具体实现 int Key 判断密码是否与文件中保存的密码一致 一致则返回 1 否则返回 2 猜数字游戏 C 课程设计 8 int i 1 控制字符位置 char code 16 用于接收玩家从键盘输入的密码 char key 16 用于接收从 code dat 中读取的密码 cout n 请输入密码 while 1 code i getch if code i r code i 0 若回车 则插入结束符 并退出循环 break cout key 取出 code dat 文件中存的密码 cout endl if strcmp key code strcmp 字符串比较函数 相同返回 0 不同返回 1 比较 key 与 code 是否相等 return 1 注意 code key 不能判断 code 是否与 key 相同 因为比较的是地址 else return 0 1 void SetKey 设计思路 提供密码设置功能 但是修改密码之前必须先输入就密码 输入正确之后才能设置新的密码 首先调用 Key 利用其 返回值作为依据判断是允许修改密码还是不允许 若密码正确 则可以修改密码 修改后的密码需要重新巨鹿到磁盘 文件 code dat 中 这样就需要定义一个输出流对象同时打开文 code dat ofstream out code dat 而后将新密码导入 code dat 中储存起来 具体实现 void SetKey 修改密码 char code1 16 code2 16 s cout s if s y 猜数字游戏 C 课程设计 9 if Key loop cout n 请输入新密码 int i 1 while 1 code1 i getch if code1 i r code1 i 0 break cout cout endl i 1 cout n 请再次输入密码 while 1 cout endl if strcmp code1 code2 cout 两次输入的密码不一致 cout s if s y goto loop else Guess else 猜数字游戏 C 课程设计 10 ofstream out code dat out code1 cout 密码修改成功 按任意键返回 out close getch Guess else cout 密码错误 按任意键返回 getch Guess else Guess 2 void MoreHelp int a int c a 设计思路 提供实现问玩家提供进一步帮助功能 首先调用 Key 依据其返回值选择执行语句 若错误 则返回或继 续输入密码 若正确 则判断 a 与 b 中是否有相同的数字 若有则继续判断改数字在 c 中是否与在 a 中储存 顺序相同 若相同则提示数字与位置都正确 否则输出其正确位置 若没有一个数字猜测正确 则提示无法提供 进一步帮助 具体实现 void MoreHelp int a int c 提供更多帮助 但是需要密码 漏洞若输入相同数字可能会在 位置正确 和 数 字正确 上都输出 int tip 0 用来记录是否有猜对的数字 有自增 1 没有则为 0 控制帮助语句的输出 for int i 1 i 4 i for int k 1 k 4 k if a i c k 首先找出与答案相同的数字 if i k 再判断位置是否一致 一致则输出下一语句 cout c k 位置正确 n 猜数字游戏 C 课程设计 11 else 否则告知玩家该数字的正确位置 cout c k 数字正确 但应该为第 i 个数 n 输出 a i 所在位置 tip if tip 0 cout n 对不起 您一个数都没猜对 无法提供帮助 n 3 int Win char na int j a 设计思路 实现将顺利完成游戏的玩家姓名及得分的存盘 将玩家姓名及得分作为参数传递给 paly 6 并定义输入流对象 同时打开文件 pai dat istream in pai dat 将文件内储存的信息取出 存入 paly 7 1 5 然后与 play 6 一起用冒 泡法排序 最后再创建 ofstream out pai dat 并将排序后的数据依次存入 pai dat 中 其中做高分为第条记录 具体实现 int Win char na 20 int j cout n 恭喜你过关了 int i k 冒泡法排序 控制变量 struct player temp 把当前玩家姓名 得分存入 paly 6 中 play 6 goal j strcpy play 6 name na ifstream in pai dat 打开 pai dat 将所有记录玩家的信息取出并存入 play i 中 for i 1 i play i name play i goal in close cout n 您的最终成绩为 play 6 name play 6 goal for i 1 i 5 i 将成绩与原纪录一起排序 冒泡法升序排列 for k i 1 k 6 k if play i goal play k goal strcpy temp name play i name temp goal play i goal strcpy play i name play k name play i goal play k goal strcpy play k name temp name play k goal temp goal 猜数字游戏 C 课程设计 12 4 int Start a 设计思路 实现游戏功能的函数 要求产生四个不同的随机数 提供的解决方案是用 sround 为随机数初始化 然后用 rand 产 生随机数 定义三个 int 数组 a b c 分别用来储存产生的随机数 记录玩家输入的数 记录玩家前一 次输入的数 c 主要是为了在调用 MoreHelp 函数时作为参数用 为了可以及时在输入 K 或 H 时做出判断 采 用 getch 来接收键入的数 当为 H 或 K 时就带调用 Key 然后一 Key 的返回值作为依据选择执行程序 调用 MoreHelp 或直接输出答案 最后在完成游戏后 即全部猜对 4 个数后 调用 Win char na int j 来将玩家信息存 入磁盘文件 pai dat 中 具体实现 int Start struct player no 创建临时玩家 暂时储存玩家信息 int j k s b 6 b 存放每次从键盘键入的数字 int a 6 a 存储四个随机数 int c 6 c 存放每次所猜的数字 int i n 0 m 0 n 为数值和位置都正确的个数 m 是数值正确但位置不正确的个数 char ch 接收键盘取得的字符 cout no name 用系统时间作为产生随机数的种子传递给操作系统 需要头文件 time h srand unsigned time NULL 生成四个不同的随机数 for i 1 i 2 for n 1 n i 1 n for m n 1 m i m if a n a m i goto L 若发现有相同的数 则返回重新生成一个随机数 并退出循环 break 猜数字游戏 C 课程设计 13 cout 请输入四个 0 9 的整数 例如 1234 n for j 1 j 10 j 有 10 次机会猜数字 用 for 循环控制 N cout n 您还有 11 j 次机会 n for i 1 i 5 i ch getch 取得字符 if ch k 按 k 则进入输入密码界面 若正确则输出答案 cout ch endl Z if Key cout 密码正确 答案为 for int p 1 p 4 p 答案输出 cout a p cout s if s 1 goto N else Guess else cout s if s 1 goto Z if s 2 goto N if s 3 Guess if ch h 按 h 则进入输入密码界面 正确则可获得进一步的帮助信息 猜数字游戏 C 课程设计 14 cout ch endl if Key cout 密码正确 为您提供进一步的帮助 n MoreHelp a c 将答案与玩家前一次所猜的数传递给 MoreHelp else cout s if s 1 goto Z if s 2 goto N if s 3 Guess if ch b goto N 若退格 则重新输入 一定程度上弥补无法退格的漏洞 if ch r break b i ch 48 转化为数字 方便与生成的随机数比较 cout b i for i 1 i 4 i 将输入的猜测记录在 c 中 为 MoreHelp 提供第二个参数 完成提供进一步帮助的要求 c i b i for i 1 i 4 i for k 1 k 4 k if a i b k 一层判断所猜的数为随机生成数的其中一个 if i k 二层判断是否与生成的随机数顺序一致 n 位置数字都对的 else m 计算数字相同但位置不相同的个数 猜数字游戏 C 课程设计 15 if n 4 当 n 4 时 即全猜对时 将玩家姓名及成绩输入到排行榜中 cout a a 响铃转义符 no goal 50 n j 1 10 分数计算 Win no name no goal 将玩家姓名和得分传递给 Win 排名并储存 break if 10 j 0 当猜过 10 次还未猜对时 输出提示信息 for i 1 i 4 i cout a i cout endl n A m B return 0 5 void Clear 设计思路 在完成课程设计基本要求后 增加此项删除记录功能 思路很明朗 即给 play 两个属性赋值以后 用一个输出 流对象将新的数据导入 覆盖掉原有的记录 具体实现 void Clear int i k char s for i 1 i 5 i strcpy play i name play i goal 0 ofstream out pai dat for i 1 i 5 i out play i name n play i goal n 猜数字游戏 C 课程设计 16 out close getch Guess int Hero 设计思路 为满足设计要求所定义的函数 解决了显示历史玩家姓名得分的问题 解决方案是定义一个输入流 in 将 pai dat 中储存的数据取出并显示 由于在 Win char na int j 中 所有的数据都是按由高到低的时候女婿存入的 所以只要直接取出并显示就可以了 无需再次排序 具体实现 int Hero ifstream in pai dat cout t t 欢迎进入英雄榜 n n 将记录玩家的姓名及成绩读出 存入 play i 中并输出 for int i 1 i play i name play i goal cout n 第 i 名为 play i name t play i goal endl in close return 0 int Guess 设计思路 提供菜单选择界面 并根据玩家选择 调用所需要的函数 具体实现 见附录 有完整程序 int main 设计思路 在游戏开始前 所有的函数几乎都要用到 pai dat 的数据 若每次都判断是否打开失败 则会增加很多重复代码 故在 游戏开始前 在 main 中即判断是否已经建立 pai dat 文件 若无 则创建一个并写入初始数据 若有 则执行菜单选择 函数 Guess 猜数字游戏 C 课程设计 17 具体实现 int main system cls ifstream in pai dat 写入方式打开 pai dat 若失败则创建 pai dat 并写入初始数据 if in cout 没有记录 正在创建记录文本 n 初始记录设定 for int i 1 i 5 i strcpy play i name play i goal 0 ofstream out pai dat for i 1 i 5 i out play i name n play i goal n out close in close cout n 文本创建完毕 n 按任意键继续 getch else in close Guess return 0 猜数字游戏 C 课程设计 18 第三章第三章 调试过程调试过程 1 随机数每次都相同随机数每次都相同 此程序要开始的第一步变是产生思维不同随机数 开始仅仅使用 rand 函数 而每次产生的随机数抖是相 同的四位 比如第一次是 2785 而第二次仍然是 2785 为解决次问题需要引入一个 srand 函数为 rand 提供产生随机数的初始化种子 且常用的做法是调用系统时间作为 srand 参数 这样有需要引入一个函数 time 并且因此而引入一个 windows h 的头文件 修改后的代码如下 用系统时间作为产生随机数的种子传递给操作系统 需要头文件 time h srand unsigned time NULL 生成四个不同的随机数 for i 1 i 2 for n 1 n i 1 n for m n 1 m i m if a n a m i goto L 若发现有相同的数 则返回重新生成一个随机数 并退出循环 break 2 排行榜数据出错排行榜数据出错 排行榜显示是出现 0 0 0 0 0 0 0 0 的现象 出现此问题的原因在于 Win 函数在输出数据时没有注意 out play i name n play i goal n 这样做是会出错的 因为 n 是字符而 n 是字符串 所以自爱读取数据是好 ichuxian 上述错误 3 无法在游戏过程中提供进一步帮助无法在游戏过程中提供进一步帮助 由于最开始并没有考虑到提供进一步帮助或显示答案 故采用的是整体读入的方式进行比较 cout s for i 1 i 4 i Int p 1 int b i p s 1000 猜数字游戏 C 课程设计 19 p i 10 这样靠求余的方法没有办法识别其中是否输入了 k 或 h 而且只要输入 k 或 h 时 程序会无法继续运行 采用的解决方案便是单个字符的接收 在接收时就判断是否为 k 或 h 若不是便将字符转化为整数存到数组 中去 解决问题后的代码如下 for i 1 i 5 i ch getch 取得字符 if ch k 按 k 则进入输入密码界面 若正确则输出答案 cout ch endl Z if Key cout 密码正确 答案为 for int p 1 p 4 p 答案输出 cout a p cout s if s 1 goto N else Guess else cout s if s 1 goto Z if s 2 goto N if s 3 Guess if ch b goto N 若退格 则重新输入 一定程度上弥补无法退格的漏洞 if ch r break b i ch 48 转化为数字 方便与生成的随机数比较 cout b i 但是此代码仍然会有漏洞 即无法退格修改输入错误的数字 采用的弥补的做法是让玩家将所有的数字抖重 新输入 即接收到 b 时 返回到输入语句 具体如上述代码 猜数字游戏 C 课程设计 20 第四章第四章 运行过程运行过程 1 执行执行 main 函数 函数 若没有 pai dat 文件 则先创建一个 pai dat 并将初始数据写入文件中 1 若有 pai dat 文件 则直接调用 Guess 函数 进入主菜单 2 执行执行 Start 函数 函数 猜数字游戏 C 课程设计 21 首先执行 system cls 清屏命令 而后输入玩家姓名 储存在 player no name 中 同时产生随机数 每次玩家猜测之后 都会提示还剩下几次机会 并给出提示 告诉玩家有几个数是位置和数字抖正确 几个是数字正确 而位置错误即几 A 几 B 当玩家输入 k 时 会要求玩家输入密码 密码错误则 若密码正确则输出正确答案 猜数字游戏 C 课程设计 22 按 1 继续游戏 输入 h 若错误 则 若正确 则 按 1 继续游戏 并将正确答案输入 猜数字游戏 C 课程设计 23 此时调用函数 Win 已经将 123 玩家信息储存到 pai dat 文件中 打开 pai dat 文件 3 执行执行 Clear 函数 函数 返回后 选择 4 调用 Clear 将原有数据重写 即完成删除操作 再次打开 pai dat 文件 猜数字游戏 C 课程设计 24 4 执行执行 Hero 函数函数 返回后选择 2 查看排行榜 5 执行执行 SetKey 函数函数 返回后按 5 此时掉用 Key 判断玩家是否有权限更改密码 若错误 猜数字游戏 C 课程设计 25 首先我们打开 code dat 文件 看更改前的内容 再次按 5 正确输入密码 要求管理员两次输入密码 以防错误更改密码 我们两次输入都是 111 更改完成 再次打开 code dat 文件 猜数字游戏 C 课程设计 26 第五章第五章 心得体会心得体会 通过一周的 c 课程设计时间 我从中体会到研究问题的艰辛和问题的到解决的成就感所带来的快乐 从最初 的构思到做出手写稿到上机验证 修改完善程序的过程都是自己亲手完成 当然在其中也有不少同学和网友给了我 不少的灵感和帮助 这一次在完成 c 的课程设计和前一次 Java 课程设计时最大的不同在于自己求解的途径和过程 前一次主要是通过老师给的提示和询问同学 并没有很多自主的成分在里头 而此次老师并没有给任何的提示也没 有进行分组完成课程设计 这样就是真正要求我们有自主完成任务的能力 没有提示 没有组员 所有的事情都必 须自己去完成 这既是压力 但也同样是机遇 因为有压力 你才会去竭尽全力完成任务 才会激发你的潜力 也 许不这样的话 你根本不会去努力 去等我的同伴做好了抄一下 还是灯老师给个提示再做吧 不 这回你必须 自己完成 完全的 自学 也许这是除了本程序以外 这次 c 课程设计留给我最大的财富 像结构类型的定义 转向语句 goto 的用法及输入输出流的用法都是需要自己去学习和运用到本次课程设计当中 还有在查找资料的过程中 也接触到 许许多多新的函数 而且如果运用的合理的话可以很好的简化代码 也减小编程的难度和出错率如在本程序中用到 的 getch Sleep strcmp 等 而且除了书本上的内容外 还有其他的途径来更快的解决问题 例如网路 在网络上有很多热情的高手们 他们很愿意帮你解决你遇到的疑惑 而且通常会比自己对着一本书的效率和针对性 要高得多 第六章第六章 附录附录 1 参考文献参考文献 a C 语言基础教程 吕鳯翥 清华大学出版社 b C 程序开发与设计 第二版 Gary J Bronson 著 刘勇译 人民邮电出版社 c http www bc d 2 完整源代码完整源代码 include 使用了 time 函数 调用系统时间作为种子产生随机数 include getch include Sleep include strcpy strcmp include include using namespace std 函数声明 int Key 判断密码函数 正确则返回 1 否则返回 0 猜数字游戏 C 课程设计 27 int Guess 系统主界面 int Hero 排行榜 void SetKey 密码修改 void Clear 原有记录删除 int Start 游戏运行 void Menu1 void Menu2 void Menu3 void Menu4 int Win char na 20 int j 过关玩家信息储存 void MoreHelp int a int c 提供进一步的帮助 定义 palyer 结构类型 有姓名和得分两个成员 struct player char name 20 int goal play 7 创建 player 结构的结构变量数组 play 用来接收 pai dat 储存的玩家信息 int Key 判断密码是否与文件中保存的密码一致 一致则返回 1 否则返回 2 int i 1 控制字符位置 char code 16 用于接收玩家从键盘输入的密码 char key 16 用于接收从 code dat 中读取的密码 cout n 请输入密码 while 1 code i getch if code i r code i 0 若回车 则插入结束符 并退出循环 break cout key 取出 code dat 文件中存的密码 cout endl if strcmp key code strcmp 字符串比较函数 相同返回 0 不同返回 1 比较 key 与 code 是否相等 return 1 注意 code key 不能判断 code 是否与 key 相同 因为比较的是地址 else return 0 void MoreHelp int a int c 提供更多帮助 但是需要密码 漏洞若输入相同数字可能会在 位置正确 和 数字正 确 上都输出 int tip 0 用来记录是否有猜对的数字 有自增 1 没有则为 0 控制帮助语句的输出 for int i 1 i 4 i for int k 1 k 4 k if a i c k 首先找出与答案相同的数字 if i k 再判断位置是否一致 一致则输出下一语句 cout c k 位置正确 n else 否则告知玩家该数字的正确位置 cout c k 数字正确 但应该为第 i 个数 n 输出 a i 所在位置 tip if tip 0 cout n 对不起 您一个数都没猜对 无法提供帮助 n 游戏 过关函数 int Win char na 20 int j cout n 恭喜你过关了 冒泡法排序 控制变量 猜数字游戏 C 课程设计 29 int i k struct player temp 把当前玩家姓名 得分存入 paly 6 中 play 6 goal j strcpy play 6 name na 打开 pai dat 将所有记录玩家的信息取出并存入 play i 中 ifstream in pai dat for i 1 i play i name play i goal in close cout n 您的最终成绩为 play 6 name play 6 goal 将成绩与原纪录一起排序 冒泡法升序排列 for i 1 i 5 i for k i 1 k 6 k if play i goal play k goal strcpy temp name play i name temp goal play i goal strcpy play i name play k name play i goal play k goal strcpy play k name temp name play k goal temp goal 新记录写到名为 pai dat 的文件中 ofstream out pai dat for i 1 i 5 i out play i name n play i goal n out close cout n 按任意键返回 getch Guess 猜数字游戏 C 课程设计 30 return 0 开始游戏 case 1 int Start struct player no 创建临时玩家 暂时储存玩家信息 int j k s b 6 b 存放每次从键盘键入的数字 int a 6 a 存储四个随机数 int c 6 c 存放每次所猜的数字 int i n m n 为数值和位置都正确的个数 m 是数值正确但位置不正确的个数 char ch 接收键盘取得的字符 system cls cout play 1 name play 1 goal 取出第一条记录 并写入 play 1 中 这跟数据存入文件的顺序有关 in close 关闭 pai dat 文件 cout play 1 name t play 1 goal cout no name 用系统时间作为产生随机数的种子传递给操作系统 需要头文件 time h srand unsigned time NULL 生成四个不同的随机数 for i 1 i 2 for n 1 n i 1 n for m n 1 m i m if a n a m i goto L 若发现有相同的数 则返回重新生成一个随机数 并退出循环 break 猜数字游戏 C 课程设计 31 cout 请输入四个 0 9 的整数 例如 1234 n 调试时使用 直接显示答案 cout The answer is for i 1 i 4 i cout a i for j 1 j 10 j 有 10 次机会猜数字 用 for 循环控制 n 0 记录位置数字都对的的个数 m 0 计算数字相同但位置不相同的个数 N cout n 您还有 11 j 次机会 n for i 1 i 5 i ch getch 取得字符 if ch k 按 k 则进入输入密码界面 若正确则输出答案 cout ch endl Z if Key cout 密码正确 答案为 for int p 1 p 4 p 答案输出 cout a p cout s if s 1 goto N else Guess else cout s if s 1 goto Z 猜数字游戏 C 课程设计 32 if s 2 goto N if s 3 Guess if ch h 按 h 则进入输入密码界面 正确则可获得进一步的帮助信息 cout ch endl if Key cout 密码正确 为您提供进一步的帮助 n MoreHelp a c 将答案与玩家前一次所猜的数传递给 MoreHelp cout s if s 1 goto N if s 2 Guess else cout s if s 1 goto Z if s 2 goto N if s 3 Guess if ch b goto N 若退格 则重新输入 一定程度上弥补无法退格的漏洞 if ch r break b i ch 48 转化为数字 方便与生成的随机数比较 cout b i for i 1 i 4 i 将输入的猜测记录在 c 中 为 MoreHelp 提供第二个参数 完成提供进一步帮助的要求 c i b i for i 1 i 4 i for k 1 k 4 k 猜数字游戏 C 课程设计 33 if a i b k 一层判断所猜的数为随机生成数的其中一个 if i k 二层判断是否与生成的随机数顺序一致 n 位置数字都对的 else m 计算数字相同但位置不相同的个数 if n 4 当 n 4 时 即全猜对时 将玩家姓名及成绩输入到排行榜中 cout a a 响铃转义符 no goal 50 n j 1 10 分数计算 Win no name no goal 将玩家姓名和得分传递给 Win 排名并储存 break if 10 j 0 当猜过 10 次还未猜对时 输出提示信息 cout n 呵呵 还要努力啊 n cout 正确答案是 for i 1 i 4 i cout a i M cout ch switch ch case 1 Start break case 2 Guess break case 3 exit 0 break default 猜数字游戏 C 课程设计 34 goto M break cout endl n A m B return 0 游戏排行 case 2 int Hero int i system cls ifstream in pai dat cout t t 欢迎进入英雄榜 n n 将记录玩家的姓名及成绩读出 存入 play i 中并输出 for i 1 i play i name play i goal cout n 第 i 名为 play i name t play i goal endl in close cout t t 按任意键返回 getch Guess return 0 删除记录 case 4 void Clear int i k char s system cls 猜数字游戏 C 课程设计 35 cout s if s y for i 1 i 5 i strcpy play i name play i goal 0 ofstream out pai dat for i 1 i 5 i out play i name n play i goal n out close cout n for k 1 k 30 k cout Sleep 100 cout n cout 删除完毕 n cout 按任意键返回 getch Guess else Guess void SetKey 修改密码 case 5 char code1 16 code2 16 s cout s if s y 猜数字游戏 C 课程设计 36 if Key loop cout n 请输入新密码 int i 1 while 1 code1 i getch if code1 i r code1 i 0 break cout cout endl i 1 cout n 请再次输入密码 while 1 code2 i getch if cod

温馨提示

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

评论

0/150

提交评论