java课程设计(扫雷游戏)
Java 课程设计 扫雷

自己写用Java写的扫雷游戏-----------做课程设计的可以参考一下。
运行界面截图:扫雷游戏主界面以下是游戏代码(共分三个文件即三个类:MySaoLei.java;Area.java 和ZiDingYi.java)://(1) MySaoLei.javapackage com.test;import java.awt.*;import javax.imageio.ImageIO;import javax.swing.*;import javax.swing.border.Border;import javax.swing.border.LineBorder;import java.awt.event.*;import java.io.File;import java.security.acl.Owner;import java.util.*;public class MySaoLei extends JFrame implements ActionListener,MouseListener{ //w表示横向可以放多少雷,h表示纵向可以放多少雷static int w=35,h=20;//设置雷的个数static int leisum=180;//用二维向量a[][]来存放雷Area a[][]=null;//win用于判断是否完成扫雷int win=0;Image image = null;JPanel jp=null;JPanel jp0=null;JMenuBar jmb;JMenu jm1,jm2;JMenuItem jm1_1,jm1_2,jm1_3,jm1_4,jm1_5,jm2_1; //主函数public static void main(String[] args) {// TODO Auto-generated method stubMySaoLei msl = new MySaoLei(w,h,leisum);}///////////////////////////////////////////////////构造函数public MySaoLei(int w,int h,int leisum){a=new Area[h][w];this.w=w;this.h=h;this.leisum=leisum;jmb=new JMenuBar();jm1=new JMenu("游戏(G)");jm1_1=new JMenuItem("初级");jm1_1.addActionListener(this);jm1_2=new JMenuItem("中级");jm1_2.addActionListener(this);jm1_3=new JMenuItem("高级");jm1_3.addActionListener(this);jm1_4=new JMenuItem("自定义");jm1_4.addActionListener(this);jm1_5=new JMenuItem("退出");jm1_5.addActionListener(this);jm1.add(jm1_1);jm1.add(jm1_2);jm1.add(jm1_3);jm1.add(jm1_4);jm1.add(jm1_5);jm2=new JMenu("帮助(H)");jm2_1=new JMenuItem("游戏规则"); jm2_1.addActionListener(this);jm2.add(jm2_1);jmb.add(jm1);jmb.add(jm2);//创建一个网格布局g1GridLayout gl=new GridLayout(h,w); gl.setHgap(1);gl.setVgap(1);jp=new JPanel();jp.setLayout(gl);//初始化雷区for(int i=0;i<h;i++){for(int j=0;j<w;j++){a[i][j]=new Area();a[i][j].addActionListener(this);a[i][j].addMouseListener(this);a[i][j].show(0);jp.add(a[i][j]);}}//添加每个按钮周围的按钮addAround();//设置雷int ii=0;int jj=0;for(int i=0;i<leisum;i++){ii=(int)(Math.random()*h);jj=(int)(Math.random()*w);a[ii][jj].isLei=1;a[ii][jj].Type=9;}//给每个按钮写上数据for(int i=0;i<h;i++){for(int j=0;j<w;j++){if(a[i][j].isLei==0){a[i][j].Type=getAroundsum(a[i][j]);}}}/////////////////////////////////////////////////////////////////////设置JFrametry{//image =ImageIO.read(new File("/me.jpg"));image=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/me.jpg")) ;this.setIconImage(image);}catch(Exception e){e.printStackTrace();}this.setJMenuBar(jmb);this.add(jp);this.setSize(w*35+10,h*35);this.setLocation(10, 10);this.setTitle("韦德爱扫雷");this.setIconImage(image);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}//为每个按钮添加周围的按钮的函数public void addAround(){for(int i=0;i<h;i++){for(int j=0;j<w;j++){a[i][j].around=new Vector<Area>();if(i>0 && j>0){//左上角a[i][j].around.add(a[i-1][j-1]);//System.out.println(i+" "+j+"左上角");}if(j>0){//上方a[i][j].around.add(a[i][j-1]);//System.out.println(i+" "+j+"上方");}if(i<h-1 && j>0){//右上角a[i][j].around.add(a[i+1][j-1]);//System.out.println(i+" "+j+"右上角");}if(i<h-1){//右边a[i][j].around.add(a[i+1][j]);//System.out.println(i+" "+j+"右边");}if(i<h-1 && j<w-1){//右下角a[i][j].around.add(a[i+1][j+1]);//System.out.println(i+" "+j+"右下角");}if(j<w-1){//下方a[i][j].around.add(a[i][j+1]);//System.out.println(i+" "+j+"下方");}if(i>0 && j<w-1){//左下角a[i][j].around.add(a[i-1][j+1]);//System.out.println(i+" "+j+"左下角");}if(i>0){//左边a[i][j].around.add(a[i-1][j]);//System.out.println(i+" "+j+"左边");}}}}//得到按钮周边雷的个数的函数public int getAroundsum(Area area){int sum=0;Area a=null;for(int i=0;i<area.around.size();i++){a=area.around.get(i);if(a.isLei==1)sum++;}return sum;}//自动挖开空白区域public void wakai(Area a){Area a2=null;for(int i=0;i<a.around.size();i++){a2=a.around.get(i);if(a2.show==0 && a2.Type!=0){a2.show(1);}if(a2.show==0 && a2.Type==0){a2.show(1);wakai(a2);}}}//判断是否完成扫雷的函数public void win(){//判断是否挖完win=0;for(int i=0;i<h;i++){for(int j=0;j<w;j++){if(a[i][j].isLei==1 && a[i][j].show!=2){win++;}}}if(win==0){for(int i=0;i<h;i++){for(int j=0;j<w;j++){if(a[i][j].isLei==0 && a[i][j].show==0)a[i][j].show(1);}}JOptionPane.showMessageDialog(this, "恭喜你!扫雷完成!");}}//菜单响应函数public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource()==jm1_1){new MySaoLei(20,15,60);this.dispose();}if(e.getSource()==jm1_2){new MySaoLei(30,18,90);this.dispose();}if(e.getSource()==jm1_3){new MySaoLei(35,20,140);this.dispose();}if(e.getSource()==jm1_4){ZiDingYi zdy=new ZiDingYi(this,"自定义游戏等级",true);if(zdy.closeOwner)this.dispose();}if(e.getSource()==jm1_5){this.dispose();}if(e.getSource()==jm2_1){//System.out.println("点击了游戏规则");String message="游戏规则:\n每个小方块上都可能是雷、1~8的数字或者空白(空白表示0)。
JAVA扫雷课程设计

《JAVA程序设计》课程设计报告系别:计算机与电子系专业班级:计算机科学与技术0801班学生姓名:XXXXXXX指导教师:XXXX(课程设计时间:2011年6月13日——2011年6月24日)目录1.课程设计目的 (1)2.课程设计题目描述和要求 (1)3.课程设计报告内容 (1)3.1总体设计 (1)3.2详细设计 (3)3.3编码实现 (7)3.4系统测试 (19)3.5系统运行 (19)4.总结 (21)参考文献 (21)1.课程设计目的本次课程设计旨在加强JA V A程序编译的能力和对JA V A程序的理解能力,通过本次课设,加强大家的自学能力,为大家做毕业设计做好铺垫。
2.课程设计题目描述和要求2.1扫雷游戏的基本要求Windows 7系统提供的扫雷游戏是一个很有趣的游戏。
我选的课程设计题目是使用Java语言编写一个与其类似的扫雷游戏。
具体要求如下:(1)玩家可以设置雷数,没有初级中级高级之分,设置完雷数后点击开始重新不布置雷区,开始游戏。
(2) 用户要揭开某个方块,可单击它。
若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(3) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(4)用户可以选择标记疑问的方块,用可以勾选游戏菜单下的标记(或者用快捷键alt+G 然后M)即可,此时双击右键并可出现“?”标记。
另有颜色选项,当用户勾选此项时,游戏将以最低图像像素来显示。
3.课程设计报告内容3.1 总体设计(1)总体功能图图3-1总体功能图(2)总体流程图图3-2 总体流程图3.2 详细设计(1)扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板…等组件,菜单主要包括开始,选择级别,标记,扫雷英雄榜,退出,按钮的功能是重新开始新的游戏。
java 扫雷游戏课程设计报告

Java课程设计报告姓名胡建新罗云冯亮学号20074390127 2007439012420074390126院系南华大学信息与计算科学班级071班专业计算机科学与技术专业指导教师贺慧琳1.设计内容及要求1.1 扫雷游戏的基本要求Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。
本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。
具体要求如下:(1) 扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。
单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。
(2) 选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(3) 用户要揭开某个方块,可单击它。
若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(5) 扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。
(6)用户可以选择标记疑问的方块,用可以勾选游戏菜单下的标记(或者用快捷键alt+G 然后M)即可,此时双击右键并可出现“?”标记。
另有颜色选项,当用户勾选此项时,游戏将以最低图像像素来显示。
(7)如果用户需要即使提示声,并可选中声音选项,此时将听到计时的卡塔声。
当用户点中雷时,将有爆炸声产生,胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。
1.2 需实现的主要功能(1)用户可以自定义级别并且可以任意输入雷数;(2)具有计时功能,即显示用户完成移动盘子所花费的时间;(3)用户可以选择是否有音效;(4)自动保存扫雷英雄榜;2.需求分析2.1 扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板…等组件,菜单主要包括开始,选择级别,标记,扫雷英雄榜,退出,按钮的功能是重新开始新的游戏。
基于Java的扫雷课程设计(DOC)

《算法设计与分析》课程设计扫雷游戏设计班级计科1003班姓名指导教师开发时间2012.12.18湖南涉外经济学院信息科学与工程学院2012年12月摘要扫雷游戏是Windows操作系统自带的一个小游戏,过去的几年里Windows 操作系统历经数次换代,变得越来越庞大、复杂,但这个可爱的小游戏在任何版本的Windows操作系统里去地依然保持着原貌。
但几乎每个电脑使用者都接触过它,并且深爱着这款小游戏。
游戏上手极其简单,但是要熟练地掌握其中的操作及找出雷的技巧,难度却不低。
作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。
游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。
当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。
扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法和语言实现,如C,C++,VB,Jave,C#等。
本论文研究的是以java为开发环境,设计并开发一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。
论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为重要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作。
关键词:java;扫雷;课程设计;目录第一章引言 (2)1.1 课题背景及意义 (2)1.2开发的目的以及意义 (2)1.3关于本课题 (3)第二章游戏的总体分析 (4)2.1 游戏功能简介 (4)2.2 扫雷游戏的基本要求 (4)2.3 功能需求分析 (5)第三章游戏的具体分析 (6)3.1 总体功能图 (6)3.2 主要功能设计流程 (7)3.2.1 总体流程图 (7)图3-2-1 总体流程图 (7)3.2.2雷区设计流程图 (8)3.2.3排行榜设计流程图 (9)3.3各个类的详细介绍与关键代码 (9)3.3.1 类之间关系图 (9)3.3.2 MainFrame类 (10)3.3.3 LEDNumber类 (12)3.3.4 MineGrid类 (13)3.3.5 AboutDialog类 (13)3.3.6 CustomDialog类 (14)3.3.7 ImageFactory类 (15)3.3.8 UserDialog类 (15)3.3.9 LevelInfo类 (15)3.3.10 LogDialog类 (17)第四章游戏的实现 (19)4.1游戏的初级界面 (19)4.2游戏的中级界面 (20)4.3游戏的高级界面 (21)4.3 游戏的打包发布过程 (22)第五章结论 (24)参考文献 (25)第一章引言1.1 课题背景及意义扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。
基于JAVA的扫雷游戏的设计与实现(含源文件)

JAVA程序设计A课程设计题目基于JA V A的扫雷游戏的设计与实现院(系)信息工程学院专业班级计算机科学与技术(2)班学生姓名学号设计地点教(13)软件实验室指导教师起止时间:2014年6月9日至2014年6月13日《Java程序设计A》课程设计任务分工及成绩院(系):信息工程学院教研室:软件教研室课程设计题目基于JA V A的扫雷游戏的设计与实现课程设计内容用JAVA实现扫雷游戏,了解扫雷游戏的基本结构,和理解扫雷的算法,并努力对算法进行改进,调试过程中修复程序中的bugg,使该扫雷游戏尽可能完善。
设计内容:1、扫雷游戏分为初级、中级和高级三个级别。
单击游戏菜单可以选择“初级”、“中级”和“高级”。
2、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。
3、用户要揭开某个方块,可左键单击它。
若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
4、如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
小组成员及任务分配姓名学号承担任务成绩算法实现游戏布局设置监听器基于JAVA的扫雷游戏的设计与实现摘要随着时代的发展,电脑进入了普通老百姓的生活,越来越多的人使用电脑办公、娱乐、上网,游戏行业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。
扫雷游戏是Windows 操作系统自带的一款小游戏,本系统要是模仿WINDOWS 系统的扫雷,对于实现过程中出现的 bug 进行调试解决。
我这里用的是 C#编写了与它功能相似的扫雷游戏。
扫地雷java课程设计

扫地雷java课程设计
1.课程设计目的
本次课程设计的主要目的是为了通过具体的程序来加深对Java 语言的掌握,提高自己的编程水平。
选择的题目来自《.Java课程设计(第二版)》中的扫雷游戏,这是一个综合性的题目,可以对Java 中的各项功能有更好的理解和使用,同时也为以后的工作打下一定的基础。
2.课程设计题目描述和要求
Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。
本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。
具体要求如下:
(⑴)扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。
单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。
(2)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一·个方块使启动计时器。
(3)用户要揭开某个方块,可单击它。
若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(1))如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减
少一个。
(5)扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。
扫雷游戏程序课程设计报告书

Java扫雷游戏课程设计一、课程设计目的通过选择《Java课程设计》中扫雷游戏,这个综合性的题目作为本次的课程设计。
可以让我们更加熟悉Java程序设计这门课程,学会熟练使用Eclipse这个编程软件,加深对Java语言中相关知识的掌握,提高编程水平。
同时培养独立思考和同学间团结合作的能力,为毕业设计以及将来的工作和学习打下坚实的基础。
并且通过这次课程设计,我们也可以得到一下能力的锻炼:(1)进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)熟练掌握JAVA语言的GUI设计,灵活运用各种类库。
二、设计内容及要求Windows 游戏提供的扫雷游戏是一个很有趣的游戏。
我所做的的课程设计使用Java语言编写一个与其类似的扫雷游戏。
内容:设计一个类似windows的扫雷游戏,达到中级水平,即:196个方块,40个雷。
具体内容如下:(1) 我的程序刚进入界面时便会有一张漂亮的画面,以此来吸引用户的兴趣。
(2)我的扫雷游戏只有一个级别中级,扫雷英雄榜存储最好成绩,即挖出全部的地雷且用时最少者。
单击游戏菜单可以选择“开始游戏”或“查看英雄版”。
(3)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(4) 用户要揭开某个方块,可单击它。
若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(5) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
java课程设计——扫雷

java课程设计——扫雷⼀、团队课程设计博客链接:⼆、个⼈负责模块或任务说明:模块:⽂件操作 Minefield类实现三、⾃⼰的代码提交记录截图四、⾃⼰负责模块或任务详细说明1.Minefield类实现Minefield是我们主要的算法实现模块。
在正式开始扫雷游戏时,看见的是如下界⾯:⼀格⼀格的蓝⾊格⼦表⽰可点击区域。
点击后,分三个情况:1)标记该区域为雷(右击)2)该区域是点击到雷,游戏结束 3)该区域⽆雷,显⽰区域九宫格范围内的雷的个数。
(此处有9种情况)4)游戏提前结束,显⽰所有未被点击的雷。
下图囊括四种情况:选项区域:这⾥涉及到的保存进度,下条中讲解。
对于以上游戏功能,我们是这样实现的。
先根据所选等级,初始化⼀个map数组,数组的⾏数和列数取决于等级。
然后⽤Math.random()数结合循环语句和判断语句⽣成,将类的区域置9。
其余位置元素值属于0~8,分别表⽰以当前位置为中⼼的九宫格中雷的数⽬。
⾄此,map数组⽣成完毕。
由于游戏界⾯中,真正显⽰出来的状态有13种(0~8九个数字九种,标记该位置为雷、该位置是被点击的雷、游戏成功后未被点击的雷、当前可点击区域各⼀种),⽤map数组来控制游戏界⾯的显⽰会有冲突,所以此处引⼊hiddenmap数组,元素数值范围为0~12,分别表⽰上述13种情况。
对于游戏界⾯,其实是⼀个JButton数组,由于界⾯的美观性,⽤hiddenmap数组值为每个按钮分配图⽚,根据hiddenmap数组值分配对应的功能图⽚。
⽣成雷:⽣成map数组其他位置的数字:for (int i = 0; i < getWidth(); i++)for (int j = 0; j < getLength(); j++) {if (map[i][j] != 9) // 只对不为雷的区域进⾏雷数判断{int number = 0;if (i == 0) {if (j == 0) {if (map[i][j + 1] == 9)number++;if (map[i + 1][j] == 9)number++;if (map[i + 1][j + 1] == 9)number++;} else if (j == getLength() - 1) {if (map[i][j - 1] == 9)number++;if (map[i + 1][j] == 9)number++;if (map[i + 1][j - 1] == 9)number++;} else {if (map[i][j - 1] == 9)number++;if (map[i][j + 1] == 9)number++;if (map[i + 1][j - 1] == 9)number++;if (map[i + 1][j] == 9)number++;if (map[i + 1][j + 1] == 9)number++;}}if (i == getWidth() - 1) {if (j == 0) {if (map[i][j + 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i - 1][j + 1] == 9)number++;} else if (j == getLength() - 1) {if (map[i][j - 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i - 1][j - 1] == 9)number++;} else {if (map[i][j - 1] == 9)number++;if (map[i][j + 1] == 9)number++;if (map[i - 1][j - 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i - 1][j + 1] == 9)number++;}}if (i != 0 && i != (getWidth() - 1)) {if (j == 0) {if (map[i - 1][j + 1] == 9)number++;if (map[i][j + 1] == 9)number++;if (map[i + 1][j + 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i + 1][j] == 9)number++;}if (j == getLength() - 1) {if (map[i - 1][j - 1] == 9)number++;if (map[i][j - 1] == 9)number++;if (map[i + 1][j - 1] == 9)number++;if (map[i - 1][j] == 9)number++;if (map[i + 1][j] == 9)number++;}}if ((i != 0) && (j != 0) && (i != getWidth() - 1) && (j != getLength() - 1)) { // 不在边缘的情况// 单位九宫格内的雷数for (int n = i - 1; n <= i + 1; n++)for (int m = j - 1; m <= j + 1; m++)if (map[n][m] == 9)number++;}map[i][j] = number;}}}所有过程中我们的操作都是对我们的hiddenmap做修改,我们的map是我们的真实雷区不做改动,接下来讲讲核⼼的具体实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成 绩 评 定 表 学生 班级学号
专 业 课程设计题目 基于Java的扫雷游戏软件设计
评 语 组长签字:
成绩 日期 2014 年 月 日 课程设计任务书 学 院 专 业 学生 班级学号 课程设计题目 基于Java的扫雷游戏软件设计 实践教学要求与任务: 采用java技术设计扫雷游戏软件,设计要求如下: (1) 扫雷游戏风味初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄榜”。 (2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块便启动计时器。 (3) 用户要揭开摸个方块,可以单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。 (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上表示一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户是否正确),程序将显示的剩余雷数减少一个。 (5) 扫雷胜利后(用时最少者),程序将弹出保存成绩的对话框。
工作计划与进度安排: 第19周:布置课程设计任务,查阅资料,分组设计,程序调试。 第20周:程序调试,编写课程设计报告,验收,答辩。
指导教师: 2014年 月 日 专业负责人: 2014年 月 日 学院教学副院长: 2014年 月 日 目 录 1.设计目的 ----------------------------------------------------------------------------- 4 2.总体设计 ----------------------------------------------------------------------------- 4 2.1 设计需求 ------------------------------------------------------------------------------------------ 4 2.2 程序功能模块图 ----------------------------------------------------------------------------------- 4 3.关键技术 ----------------------------------------------------------------------------- 7 4.程序流程 ----------------------------------------------------------------------------- 8 5.主要源代码 -------------------------------------------------------------------------- 8 6.运行结果及结论 ------------------------------------------------------------------- 27 7.参考文献 --------------------------------------------------------------------------- 29 1.设计目的 通过选择扫雷游戏软件设计,这个综合性的题目作为本次的课程设计。可以让我们更加熟悉Java程序设计这门课程,学会熟练使用Java这个软件,加深对Java语言的掌握,提高编程水平。同时培养独立思考和同学间团结合作的能力,为毕业设计以及将来的工作打下坚实的基础。 2.总体设计
2.1 设计需求 在设计扫雷游戏时,需要编写7个源文件:MineGame.java,MineArea.java,Block.java,BlockView.java,LayMines.java,ShowRecord.java,Record.java 除了这七个源文件外,还需要Java系统提供一些重要的类,如File,JButton和JLabel等类。 2.2 程序功能模块图
2.2 程序功能模块图 2.2.1 MineGame.java(主类): 成员变量
bar和fileMenu 提供菜单操作,单击菜单操作中的选项为“初级”,“中级”,“高级”或“扫雷英雄榜”;mineArea 是扫雷区域,提供有关雷的主要功能;英雄榜”负责存放三个级别的扫雷最好成绩;showHeroRecord负责显示英雄榜中的数据 方法
MineGame()是构造窗口,负责完成窗口的初始化。 ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。 Main(String[])方法是程序运行的入口方法。 2.2.2 MineArea.java: 成员变量
block和Block类型的数组,用来确定雷区有多少需进行扫雷的方块; blockView是BlockView类型的数组,负责block数组中Block对象提供视图; lay是LayMines类型的对象,负责设置block数组中的哪些方块不是雷; record负责提供保存成绩的界面,是一个对话框,默认为不可见,用户只有扫雷成功后,才可以看见该对话框; reStart是一个按钮对象,用户单击它重新开始游戏; time是计时器对象,负责计算用户用时。 方法
initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。 actionPerformed(actionEvent)是MineArea类实现的ActionListener接口中的方法。当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。 Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show方法进行扫雷。 mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。 inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让record对话框可见。 2.2.3 Block.java: 成员变量
name方块上的名字 aroundMineNumber是方块周围雷的数目 mineIcon是方块上雷的图标 isMine用来表示方块是否是雷 isMark用来表示方块是否被标记 isOpen用来表示方块是否被挖开 方法
setAroundMineNumber(int)方法用来设置aroundMineNumber的值;getAroundMineNumber()方法用来获取aroundMineNumber的值。 2.2.4 BlockView.java 成员变量
blockNameOrIcon用来显示Block对象的name,number和mineIcon属性;blockCover用来遮挡blockNameOrIcon;card卡片式布局。 方法
giveView(Block block)方法给参数指定的Block对象提供视图;seeBlockNameOrIcon()方法让用户看见视图中的标签,无法看见按钮;seeBlockCover()方法让用户看见视图中的按钮,无法看见标签。 2.2.5 LayMines.java: 成员变量
mineIcon用来存放一个格式为gif的图像。 方法
layMinesForBlock(Block[][],int)方法对参数指定的Block数组进行设置,其中int参数指定雷的数目。 2.2.6 Record.java: 成员变量
textName提供用户扫雷优胜者出入;用户单击“确定”按钮,可以保存成绩。 方法
actionPerformed(ActionEvent)方法是Record类实现的ActionListener接口中的方法,当用户单击“确定”按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时,然后调用writeRecord(String,String)方法将信息写入英雄榜中;writeRecord(String,String)负责将有关信息写入“英雄榜”文件。 2.2.7 ShowRecord: 成员变量
file存放文件的引用,用户单击“显示成绩”按钮,可以查看各个级别的最好成绩;用户单击“重新计分”按钮,可以将“英雄榜”中的成绩恢复为初始值。 方法 actionPerformed(ActionEvent)方法是ShowRecord类实现的ActionListener接口中的方法,当用户单击“显示成绩”按钮后,该方法被执行,所执行的操作就是调用readAndShow()方法;readAndShow()方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者,并显示这些相关信息。 3.关键技术 3.1 实现窗口的初始化:利用MineGame.java实现 MineGame()是构造窗口,负责完成窗口的初始化。 ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。 3.2 利用产生随机数的方法完成游戏中随机布雷的要求:利用MineArea.java实现
initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。 actionPerformed(actionEvent)是MineArea类实现的ActionListener接口中的方法。当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。 Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show方法进行扫雷。 mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。 inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让record对话框可见。