当前位置:文档之家› 扫雷的课程设计报告

扫雷的课程设计报告

西安文理学院信息工程学院课程设计报告设计名称:数据结构课程设计设计题目:实现一个N*M的扫雷游戏学生学号: 07专业班级:软件13级四班学生姓名:樊秀琳学生成绩:指导教师(职称):谢巧玲(讲师)课题工作时间:至说明:1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个学生。

2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。

3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。

答辩由指导教师实施。

4、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设计的情况另行规定。

5、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按不及格处理。

信息工程学院课程设计任务书指导教师:院长:日期:2015年6月22日信息工程学院课程设计进度安排表学生姓名:樊秀琳学号: 07 专业:软件工程班级: 13级四班指导教师签名:2014年6月22日成绩评定表学生姓名:樊秀琳学号: 07 专业:软件工程班级: 13级四班摘要?摘??要?:扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。

扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C++,VB,JAVA等。

我利用eclipse编写了与它功能相似的扫雷游戏,寓学于乐。

程序的功能是随机生成地雷数,通过鼠标操作玩游戏,不接受键盘,按任意键结束程序。

单击屏幕上的笑脸可以重新开始游戏。

所有地雷标出后胜利,当鼠标左键单击到地雷时提示游戏失败。

其功能类似于Windows操作系统自带的扫雷游戏。

论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。

重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作。

清除未靠近地雷区的方块较为复杂。

关键词:算法设计;事件;Eclipse目录摘要? ------------------------------------------------------------ II 第一章课题背景(或绪论、概述)------------------------------------ 1设计目的------------------------------------------------------- 1基本理论依据和主要工作内容-------------------------------------- 1第二章设计简介及设计方案论述-------------------------------------- 2功能需求? ------------------------------------------------------- 2功能模块-------------------------------------------------------- 2第三章详细设计---------------------------------------------------- 3总体设计------------------------------------------------------- 3总体功能图--------------------------------------------------- 3主要技术------------------------------------------------------- 4第四章设计结果及分析---------------------------------------------- 5设计结果截图---------------------------------------------------- 5参考文献------------------------------------------------------------ 7源代码-------------------------------------------------------------- 8第一章课题背景(或绪论、概述)设计目的1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。

2.培养学生综合运用所学知识独立完成课题的能力。

3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。

4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。

5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。

6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。

基本理论依据和主要工作内容扫雷游戏主要用了一个10行10列的二维数组,刚开始利用random随机布雷。

每一个程序最主要的是算法。

扫雷游戏算法的重点是一开始统计好每个格子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围8个格子有雷则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围3个格子,其它边缘的格子显示周围5个的状态),我们在主函数中用两个for语句来判断周围雷数。

我们还加了鼠标处理函数。

如果格子上有雷则调用函数actionpeformed (),显示“你踩到地雷了,按确定重来", "踩到地雷”,游戏结束。

若所有的雷都标出,且所有的格子都处理过,则调用函数isWin (),显示“您挖完了所有的雷,您胜利了!", "胜利",游戏结束。

游戏结束后,按任意键出去。

第二章设计简介及设计方案论述功能需求?1.本游戏结构较为简单,可以自行设置设置雷数,以此来控制扫雷的难度系数;?2.提示区下方将显示总雷数,并可以通过点击右键来标明疑似有雷的区域的数目;???3.单击鼠标左键于未知区域,如果未知区域有雷,游戏提示:“你踩到地雷了,按确定重来”;如果没有雷,当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数,则显示周围雷数,然后判断是否挖完所有的雷;如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止,并显示周围雷的数目;4.单击鼠标右键于未知区域,则显示F,将其标识有雷。

在该位置再次单击右键则视为不确定,显示Q,单击第三次,取消设置,Q消失;?5.如果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快速翻开所有周围不是地雷的方块,并显示,直到有雷为止;?6.将雷全部扫完后,会出现一个提示框,显示游戏胜利。

功能模块(1)游戏界面?(2)布雷?(3)鼠标事件?(4)地雷判断?(5)游戏胜利(结束)?(6)游戏失败(结束)?(7)游戏设置(地雷数量)?第三章详细设计总体设计游戏的操作方面主要以鼠标为主,当鼠标左键单击方块时即表示打开方块,当鼠标右键单击方块时即表示标识或疑似地雷,反复单击右键则方块会以“未标识→标识→疑似”三者关系不断循环。

游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若打开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。

?当打开的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被打开方块的八个方向将空白方块打开。

?系统的总体设计是对整个系统的结构化设计,包括系统基本功能的设计、系统流程的设计和各个功能模块的设计等。

?总体功能图主要技术1.鼠标消息处理函数;actionPerformed(ActionEvent e)mouseClicked(MouseEvent e)2.分模块实现较复杂的程序设计①设置地雷数②布雷③计算周围雷数④判断是否挖完所有雷3.扫雷游戏算法开始统计好每个格子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围8个格子有雷则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围3个格子,其它边缘的格子显示周围5个的状态),我们在主函数中用两个for语句来判断周围雷数。

我们还加了鼠标处理函数。

第四章设计结果及分析设计结果截图图4-1图4-2总结主要包括:正文(小四号字宋体)(1)对设计工作及所设计的系统特性的概括和总结,所采用的关键技术及算法介绍,运行结果分析评价及效率评价,系统还有待于改进的方面等等;(2)本次课程设计/项目设计的感悟等。

参考文献参考文献采用顺序编码制格式着录。

主要责任者,三名以内的,全部列出;超过三名时,后面加“等.”字样。

参考文献类型及标识:其他未作说明的文献,建议采用单字母“Z”。

参考文献编排格式(注意严格使用格式中的符号,特别注意区分“,”与“.”):(1)对于专着、论文集、学位论文、报告,格式如下:[序号] 主要责任者.文献题名[X].出版地:出版者,出版年.起止页码.其中X代表文献类型标识。

(2)对于期刊文章,格式如下:[序号] 主要责任者.文献题名[J].刊名,年,卷(期):起止页码.(3)对于报纸文章,格式如下:[序号] 主要责任者.文献题名[N].报纸名,出版日期(版次).(4)对于国际、国家标准,格式如下:[序号] 标准编号,标准名称[S].(5)对于专利,格式如下:[序号] 专利所有者.专利题名[P].专利国别:专利号,出版日期.(6)对于未定义类型的文献[序号] 主要责任者.文献题名[Z].出版地:出版者,出版年.例:(1)参考文献为书籍的,格式如下:[1] 胡克. 常用不等式[M]. 武汉: 武汉大学出版社, 2003.(2)参考文献为期刊上的文章的,格式如下:[1] 孟志青. 时态数据采掘中的时态型与时间粒度研究, 湘潭大学学报(自然科学版)[J]. 2000, 22(3): 1-4.注:参考文献中的标点符号一律采用英文格式下的。

源代码import .*;import .*;public class Frameextends JFrame {JTextField text;JLabel nowBomb, setBomb;int BombNum, BlockNum; etSize(10, 10);bombButton[i][j].setFont(new Font("", , 14));etForeground;bombButton[i][j].addMouseListener(newBomb_mouseAdapter(this));bombButton[i][j].addActionListener(new Bomb_actionAdapter(this));(bombButton[i][j]);}}(bombPanel, startBomb();}/* 开始按钮 */public void start_actionPerformed(ActionEvent e) { int num=().trim());if (num >= 5 && num < 50) {BombNum = num;startBomb();}else if (num < 5) {(null, "您设置的地雷数太少了,请重设!", "错误", ;num=10;BombNum = num;}else {(null, "您设置的地雷数太多了,请重设!", "错误", ;num=10;BombNum = num;}}/* 开始,布雷 */public void startBomb() {("当前雷数" + ":" + BombNum);for (int i = 0; i < (int) (BlockNum); i++) {for (int j = 0; j < (int) (BlockNum); j++) {bombButton[i][j].isBomb = false;bombButton[i][j].isClicked = false;bombButton[i][j].isRight = false;bombButton[i][j].BombFlag = 0;bombButton[i][j].BombRoundCount = 9;bombButton[i][j].setEnabled(true);bombButton[i][j].setText("");bombButton[i][j].setFont(new Font("", , 14));etForeground;rightBomb = 0;restBomb = BombNum;restBlock = BlockNum - BombNum;}}for (int i = 0; i < BombNum; ) {int x = (int) () * (int) (BlockNum) - 1));int y = (int) () * (int) (BlockNum) - 1));if (bombButton[x][y].isBomb != true) {bombButton[x][y].isBomb = true;i++;}}CountRoundBomb();}/* 计算方块周围雷数 */public void CountRoundBomb() {for (int i = 0; i < (int) (BlockNum); i++) {for (int j = 0; j < (int) (BlockNum); j++) {int count = 0;sBomb != true) {for (int x = i - 1; x < i + 2; x++) {for (int y = j - 1; y < j + 2; y++) {if ( (x >= 0) && (y >= 0) && (x < ( (int) (BlockNum))) && (y < ( (int) (BlockNum)))) {if (bombButton[x][y].isBomb == true) {count++;}}}}bombButton[i][j].BombRoundCount = count;}}}}/* 是否挖完了所有的雷 */public void isWin() {restBlock = BlockNum - BombNum;for (int i = 0; i < (int) (BlockNum); i++) {for (int j = 0; j < (int) (BlockNum); j++) { if (bombButton[i][j].isClicked == true) { restBlock--;}}}if (rightBomb == BombNum || restBlock == 0) { (this, "您挖完了所有的雷,您胜利了!", "胜利", ;startBomb();}}/** 当选中的位置为空,则翻开周围的地图* */public void isNull(Bomb ClickedButton) {int i, j;i = ;j = ;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) && (x < ( (int) (BlockNum)))&& (y < ( (int) (BlockNum)))) {if (bombButton[x][y].isBomb == false&& bombButton[x][y].isClicked == false&& bombButton[x][y].isRight == false) {turn(bombButton[x][y]);}}}}}/* 翻开 */public void turn(Bomb ClickedButton) {(false);= true;if > 0) {+ "");}else {isNull(ClickedButton);}/* 左键点击 */public void actionPerformed(ActionEvent e) {if ( ( (Bomb) ()).isClicked == false&& ( (Bomb) ()).isRight == false) {if ( ( (Bomb) ()).isBomb == false) {turn( ( (Bomb) ()));isWin();}else {for (int i = 0; i < (int) (BlockNum); i++) {for (int j = 0; j < (int) (BlockNum); j++) {if (bombButton[i][j].isBomb == true) {bombButton[i][j].setText("b");}}}( (Bomb) ()).setForeground;( (Bomb) ()).setFont(new Font("", , 20));( (Bomb) ()).setText("X");(this, "你踩到地雷了,按确定重来", "踩到地雷", 2); startBomb();}}/* 右键点击 */public void mouseClicked(MouseEvent e) { Bomb bombSource = (Bomb) ();boolean right = (e);if ( (right == true) && == false)) { = + 1) % 3;if == 1) {if (restBomb > 0) {;("F");= true;restBomb--;}else {= 0;}}else if == 2) {restBomb++;("Q");= false;}else {("");}if == true) {if == 1) {rightBomb++;}else if == 2) {rightBomb--;}}("当前雷数" + ":" + restBomb);isWin();}}public static void main(String[] args) {Frame frame = new Frame();//初始化界面(true);//显示界面}}class Frame1_start_actionAdapterimplements ActionListener {private Frame adaptee;Frame1_start_actionAdapter(Frame adaptee) { = adaptee;}public void actionPerformed(ActionEvent e) { (e);}}//定义一个炸弹类继承按钮类class Bomb extends JButton {int num_x, num_y; // 第几号方块int BombRoundCount; // 周围雷数boolean isBomb; // 是否为雷boolean isClicked; // 是否被点击int BombFlag; // 探雷标记boolean isRight; // 是否点击右键public Bomb(int x, int y) {num_x = x;num_y = y;BombFlag = 0;BombRoundCount = 9;isBomb = false;isClicked = false;isRight = false;}}class Bomb_actionAdapterimplements ActionListener {private Frame adaptee;Bomb_actionAdapter(Frame adaptee) {= adaptee;}public void actionPerformed(ActionEvent e) { (e);}}class Bomb_mouseAdapterextends MouseAdapter {private Frame adaptee;Bomb_mouseAdapter(Frame adaptee) {= adaptee;}public void mouseClicked(MouseEvent e) {(e);}}。

相关主题