扫雷游戏实验报告.docx

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扫雷游戏实验报告剖析

课程设计软件综合课程设计班 级:姓 名:学 号:指导教师:成 绩:电子与信息工程学院信息与通信工程系目录1.任务概述------------------------------------32.功能及模块设计------------------------------33.数据结构与算法设计--------------------------44.程序描述------------------------------------65.设计感想------------------------------------96.参考文献------------------------------------10附录1 程序源码--------------------------------101.任务概述1.1设计题目扫雷游戏1.2规则要求 1) 图形用户界面。2) 类似 windows 附件的扫雷游戏。3) 其余功能自行扩展。1.3目标锻炼自学能力、办公软件操作能力、程序设计能力、培养学生的编程思想、编程兴趣。1.4运行环境Java , esclipse 1.5条件与限制1)图形界面美观大方。2)功能必须正确,扩展功能自行丰富。3)程序设计要注意健壮性。2.功能及模块设计2.1具体的功能介绍过程分析:在屏幕中显示一个雷区,雷区范围内预先埋设了一定数量的随机分布的地雷;玩家可以对雷区进行标记,如果能正确标记出雷区中的所有地雷,则游戏胜利;如果踩雷,则游戏失败。1)开局:开局默认初级难度,有三个难度供选择-初级:12*12、中级:15*15、高级:20*20;各级地雷数分别为:10,25,50;雷区每个方块下或有地雷,或者没有地雷;2)挖雷:将鼠标移动到某个方格上,并点击鼠标左键,可挖开它;若所揭开方块下有雷,则游戏失败;如果没有雷,则显示数字,数字为这个方格周围八个方格的雷的数目。3)标记地雷:在鼠标所在的某个方格上右击一次或两次,则标记该区域;一次表示认为此区域有雷,两次表示不确定这个区域是否有雷。每标记一个区域,则显示的地雷数减1。4)判断胜负:如果挖出了其它所有无雷区,或者标记出了所有的雷区,则游戏胜利。如果在游戏中挖到任何地雷则游戏失败。2.2软件模块划分表1-11)选择游戏难度2)重新开始按钮3) 存放未找到的雷的个数4)雷区3.数据结构与算法设计3.1数据结构 在存放雷区信息时用到了二维数组。3.2算法3.2.1 随机函数随机布雷扫雷游戏要求在M 行、N 列的一块网格游戏区内随机地布上MineNum 个雷,且MineNum 的取值应该小于M 和N 的乘积。这可以在一张M×N 的网格上通过满足均匀分布的随机算法实现。其中有MineNum 个网格是雷区,剩下的网格为非雷区。游戏的目标是尽可能快地找到所有的雷区,而不踩到地雷。JAVA 提供了实现随机算法的类Math,通过Math 类的random () 方法,这可以很方便的实现随机布雷功能。这可以通过以下的代码实现随机布雷算法。for (int i = 0; i mineNum; ) { int x = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1)); int y = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1)); if (mineButton[x][y].isMine != true) { mineButton[x][y].isMine = true; i++; } }3.2.2计算点击位置周围雷的数目扫雷游戏中相邻的九个格子关系密切,因此需要一个简便的算法对这九个格子进行遍历。(i-1,j-1)(i-1,j)(i-1,j+1)(I,j-1)(i,j)(I,j+1)(i+1,j-1)(i+1,j)(i+1,j+1)可以用以下算法来实现:for (int x = i - 1; x i + 2; x++) { for (int y = j - 1; y j + 2; y++) { if ( ( (x != i) || (y != j)) (x = 0) (y = 0)………………….. }3.2.2 递归算法无雷区自动翻开,点击一个位置,如果是0,也即是无雷,那么就翻开他的上下左右8个格子,然后对这八个格子进行检查,如果当中某个格子也是0,那么继续对这格子的上下左右进行检查,如此反复。 递归算法(){周围有地雷未打开 {打开方块标记该块地雷数量 }周围没有地雷 {递归算法

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档