logo资料库

南邮课程设计之挖地雷游戏.doc

第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
资料共45页,剩余部分请下载后查看
三、概要设计
四、源程序代码
五、测试数据及其结果分析
六、调试过程中的问题
七、课程设计总结
程序设计报告 ( 2017 / 2018 学年 第 一 学期) 题 目:挖地雷 专 业 计算机科学与技术 组长 学号姓名 组员 学号姓名 指 导 教 师 指 导 单 位 计算机学院软件教学中心 日 期 2017/11/17 -
设计程序框架和核心算法,分配任务,完成大部分 代码,测试并完善程序,撰写实验报告。 编写 Open,Close,Delay,InitGraph,SelectLevel, NumOfMine,gotoxyWithFullwidth,setColor,End 函数,对程序提出修改意见。 组员() 评分项 优秀 良好 中等 差 遵守机房规章制度 上机时的表现 学习态度 程序准备情况 程序设计能力 团队合作精神 课题功能实现情况 算法设计合理性 用户界面设计 报告书写认真程度 内容详实程度 文字表达熟练程度 回答问题准确度 使用 STL 排序,既简洁又快速。 除设计图形界面外,功能要求、选作要求、其他要求全部达到。 代码规范,注释详尽,风格良好。 教师签名: 年 月 日 成 员 分 工 评 分 细 则 简 短 评 语 级 评 分 等 优秀 备 注 评分等级共五种:优秀、良好、中等、及格、不及格 -
挖地雷 一、课题内容和要求 【问题描述】 你玩过扫雷游戏吧?Windows 操作系统中带了这个小游戏,那个系统叫什么来着? 在 游戏中要想过关,就必须要在一个 NxM 的区域上找出所有的地雷。游戏过程中,计算机 会在地图上显示一些数字从而帮助你确定哪里有地雷。例如,在下面这个有两颗地雷的 4x4 的地图(*表示地雷): *... .... .*.. .... 根据上面的地图,可以计算出应该提供给游戏者的数字如下所示: *100 2210 1*10 1110 每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有 八个。 【功能要求】 代码要能提供以下几个基本功能。 (1) 定义一个矩阵,随机产生地雷的分布并由此产生提供给游戏者的数字信息。 (2) 定义成绩排行榜,记录前五名的用户名及时间。 (3) 提供菜单功能,定义不同等级的地雷地图供选择。 (4) 游戏者通过坐标(如 1(1,2)、0(3,4)判定第一行第二列位置为地雷,第 3 行第四列不是地雷)判定是否为地雷,标记地雷位置正确,则正确位置显示 @符号,如触碰地雷,游戏结束,没有触碰地雷,显示该坐标位置周边地雷分 布情况,如果周边有地雷不显示。 (5) 成绩排行榜以文件形式保存。 (6) 数据结构 -
struct game_player { char name[10]; char password[10]; int time; int best_time; //姓名 //密码 //累计时间 //最佳成绩 …… } 【选做要求】 (1) 对用户的输入进行一定的正确性检查。 (2) 游戏者可以查看游戏累计时间。 【其他要求】 (1) 界面美观,交互方便。 (2) 注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、 返回值也要以注释的形式说明用途;关键的语句段要求有注—释解释。 (3) 程序的层次清晰,可读性强。 (4) 变量、函数命名符合规范。 (5) 如有可能,可使用 MFC 等开发工具,实现彩色或图形操作界面。 【开发环境】 可以选择 TC2.0、TC3.0、VC++6.0 等开发环境,或者与老师讨论,选择自己熟悉的开 发工具与平台。 二、需求分析 挖地雷的功能框架图如图 1 所示。 -
图 1 功能框架图 -
(1)提供可操作的主菜单:注册或登录、开始游戏、显示用户信息、查看排行榜、 修改密码、选择难度、自定义行数列数和雷的个数、继续游戏、切换账号、结束游戏。根 据用户输入的选项来运行不同的功能,运行不同的函数。 (2)为了用户账号的安全,用户输入密码时,要显示*而不显示密码,且可以回删。 (3)在用户错误的输入下也能给出提示,让用户重新输入,继续运行。 (4)保证用户第一次点击必不踩雷,使游戏不靠运气靠技术,提升用户的游戏体验。 (5)第一行总是显示程序名称,第二行显示登录的用户名。 (6)在雷区第一行第一列显示行数列数,方便用户看是第几行第几列,提升用户的 游戏体验。 (7)可以随时查看排行榜,排行榜中简单、普通、困难难度分开计,自定义难度不 算排行榜。 (8)可以随时查看用户信息,用户信息中包括用户名、游戏累计时间、最快成绩、 总游戏局数、胜局数、负局数、游戏胜率。 (9)像微软扫雷一样,如果点击到没有地雷的地方,要向四周扩散。 (10)登录后继续游戏无需再登录,可以切换账号。 三、概要设计 1 主要存储结构 struct GamePlayer { char Name[10]; char Password[10]; double Time; double AllTime; double BestTime; int GameCount; int NumOfWin; int NumOfLose; double Rate; }Gameplayer, gameplayer[1010]; //游戏用户 //用户名 //密码 //当前游戏所用时间 //累计游戏时间 //最佳成绩,即最短时间 //总游戏局数 //历史胜利次数 //历史失败次数 //总胜率 //Gameplayer 存储当前游戏用户 //gameplayer 存储用户文件中的用户 -
struct GRAPH { int s[110][110]; char Show[110][110]; int Row; int Col; int Lei; }Graph; struct RANK { //雷区地图 //矩阵存储,0 表示没有雷,1 表示有雷 //显示给用户的雷区地图 //雷区的行数 //雷区的列数 //雷的个数 //雷区地图 //存储排行榜 char Name[10]; double Time; bool operator < (const RANK& r) const { //用户名 //时间 //重载小于号,使排序更简单 if(Time != r.Time) //先按照时间从小到大排序 return Time < r.Time; else { int len1 = strlen(Name); int len2 = strlen(r.Name); return len1 < len2; } } }Rank[6]; 2 主要函数流程 //时间相同则按照用户名从短到长排序 //用于排名的结构体数组 (1)InitPlayer 函数:用于从文本中载入用户信息并存入结构体数字,返回文本中用 户个数和当前用户所在文件中的位置。提示用户输入用户名密码,若为新用户则自动注册, 若 为 老 用 户 则 核 对 密 码 是 否 正 确 。 InitPlayer 函 数 流 程 图 如 图 2 所 示 。 -
图 2 InitPlayer 函数 (2)Sweep 函数:一次扫雷操作,如果越界就返回,如果翻开过就返回,如果标记过 且 k=0 就重新标记,如果是雷且 k=0 就返回踩雷了,如果 k=1 就直接标记,如果周围有雷 就显示数字,如果周围没雷就向四周调用八个 Sweep 函数,Sweep 函数流程图如图 3 所示。 -
分享到:
收藏