ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:361.35KB ,
资源ID:8168531      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8168531.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA扫雷课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA扫雷课程设计.docx

1、JAVA扫雷课程设计JAVA程序设计课程设计报告系 别: 计算机与电子系 专业班级: 计算机科学与技术0801班 学生姓名: XXXXXXX 指导教师: XXXX (课程设计时间:2011年6月13日2011年6月24日)课程设计报告撰写内容、格式与成绩评定一、课程设计报告的撰写内容与要求1.课程设计总结报告应包括:前言、基本原理或理论、设计计算书或实验报告、结论、图纸(框图、流程图)、参考资料等;或调查、访谈报告、调查问卷、调查提纲等。2.课程设计总结报告应书写工整,文句通顺、精炼、逻辑性强,图纸和曲线的绘制应符合规范。3.调查型课程设计应根据调查结果撰写调查报告。调查报告内容包括:题目、参

2、加时间、地点、方式、过程、调查对象一般情况、调查内容、发现的问题、调查结果和调查分析及体会等。调查报告要求语言简练、准确;叙述清楚、明白;数据、资料可靠;结论有理、有据。4.图纸应布局合理,比例恰当,线条分明,字体工整,符合国家制图标准。5.课程设计报告字数要求:理工、艺术类不少于2000字,其他专业不少于3000字。二、课程设计成绩评定1.学生的课程设计成绩由平时成绩、业务考核成绩两部分组成,均为百分制记分,其中平时成绩占总成绩的30%,业务考核成绩占70%。业务考核含设计报告(计算说明书、调查提纲、调查问卷等)、绘制的图纸、编制的软件、制作的模型、撰写的论文或问卷统计、调查分析等的完成及质

3、量情况;平时成绩含设计表现、到课率等。2. 教师按学生实际成绩(百分制,含平时成绩和业务考核成绩两部分)登记并录入教务MIS系统,由系统自动转化为“优秀(90100分)、良好(8089分)、中等(7079分)、及格(6069分)和不及格(60分以下)”五等。目 录1课程设计目的12课程设计题目描述和要求 13课程设计报告内容13.1总体设计13.2详细设计33.3编码实现73.4系统测试193.5系统运行194总结21参考文献 21(要求:目录题头用三号黑体字居中书写,隔行书写目录内容。目录中各级题序及标题用小四号黑体)1课程设计目的本次课程设计旨在加强JAVA程序编译的能力和对JAVA程序的

4、理解能力,通过本次课设,加强大家的自学能力,为大家做毕业设计做好铺垫。2.课程设计题目描述和要求2.1扫雷游戏的基本要求Windows 7系统提供的扫雷游戏是一个很有趣的游戏。我选的课程设计题目是使用Java语言编写一个与其类似的扫雷游戏。具体要求如下:(1)玩家可以设置雷数,没有初级中级高级之分,设置完雷数后点击开始重新不布置雷区,开始游戏。(2) 用户要揭开某个方块,可单击它。若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。(3) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷

5、标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。(4)用户可以选择标记疑问的方块,用可以勾选游戏菜单下的标记(或者用快捷键alt+G 然后M)即可,此时双击右键并可出现“?”标记。另有颜色选项,当用户勾选此项时,游戏将以最低图像像素来显示。3.课程设计报告内容3.1 总体设计(1)总体功能图图3-1总体功能图(2)总体流程图图3-2 总体流程图3.2 详细设计(1)扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板等组件,菜单主要包括开始,选择级别,标记,扫雷英雄榜,退出, 按钮的功能是重新开始新的游戏。(2)雷区的设

6、计MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。标明MineArea类的主要成员变量、方法以及和MineGame类之间组合关系的UML图如图3-3所示。图3-3 MineArea类的UML图以下是UML图中有关数据和方法的详细说明。2.1 成员变量(1)block是Block类型的数组,用来确定雷区有多少需进行扫雷的方块。(2)blockView是BlockView类型的数组,负责为blo

7、ck数组中的Block对象提供视图。(3)lay是LayMines类型的对象,负责设置block数组中的哪些方块是雷或不是雷。(4)record负责提供保存成绩的界面,是一个对话框,默认不可见。用户只有扫雷成功后(用时最少),才可以看见对话框。(5)reStart是一个按钮对象,用户单击它重新开始游戏。(6)time是计时器对象,负责计算用户的用时。2.2 方法(1)initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度、高度、雷的数目以及雷区的级别。(2)actionPerformed(ActionEvent)是MineArea类实现的ActionL

8、istener接口中的方法。当用户单击blockView中的某个方块时,actionPerformed(ActionEvent)方法负责执行有关算法,例如,当用鼠标左键单击方块上的按钮后,若该方块下有雷,actionPerformed(ActionEvent)方法将使用户输掉本局,若该方块下无雷,actionPerformed(ActionEvent)方法将显示blockView对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的8个方块中共有多少颗雷。(3)show()方法是一个递归方法。actionPerformed(ActionEvent)方法执行时将调用show方法进行扫雷。(

9、4)mousePressed(MouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标有件事mousePressed(MouseEvent)方法负责让方块上显示一个探雷标记。(5)inquireWin()方法用来判断用户是否扫雷成功,如果成功该方法负责让record对话框可见。所谓扫雷成功是指不仅找到了全部的累而且用时最少。(6)雷区设计流程图图3-4 雷区设计流程图2.3音效的设计(1)music类是java.awt包中Frame的子类,通过构造音效声音方法,在MainFrame主类中,通过ActionListener来监视是否已开始游戏,来

10、决定播放计时声,之后又通过ActionListener来监视是否踩到雷和是否完成来决定,播放相应的音乐。下面标明music类的主要成员变量、方法以及和MineFrame类之间组合关系的UML图如图3-2所示。图3-5 MineArea类的UML图(2)音效设计流程图图3-6 音效设计流程图(3)类之间关系图图3-7 类之间关系图3.3. 编码实现import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Frame extends JFrame JTextField text; JLabel nowBo

11、mb, setBomb; int BombNum, BlockNum; / 当前雷数,当前方块数 int rightBomb, restBomb, restBlock; / 找到的地雷数,剩余雷数,剩余方块数 JButton start = new JButton( 开始 ); JPanel MenuPamel = new JPanel(); JPanel bombPanel = new JPanel(); Bomb bombButton; JPanel c; BorderLayout borderLayout1 = new BorderLayout(); GridLayout gridLay

12、out1 = new GridLayout(); public Frame() try setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); catch (Exception exception) exception.printStackTrace(); private void jbInit() throws Exception c = (JPanel) getContentPane(); setTitle(扫雷); c.setBackground(Color.WHITE); MenuPamel.setBackground(Color.GRAY

13、); c.setLayout(borderLayout1); setSize(new Dimension(600, 600); setResizable(false); BlockNum = 144; BombNum = 10; text = new JTextField(10 , 3); nowBomb = new JLabel(当前雷数 + : + BombNum); setBomb = new JLabel(设置地雷数); start.addActionListener(new Frame1_start_actionAdapter(this); MenuPamel.add(setBomb

14、); MenuPamel.add(text); MenuPamel.add(start); MenuPamel.add(nowBomb); c.add(MenuPamel, java.awt.BorderLayout.SOUTH); bombPanel.setLayout(gridLayout1); gridLayout1.setColumns( (int) Math.sqrt(BlockNum); gridLayout1.setRows( (int) Math.sqrt(BlockNum); bombButton = new Bomb (int) Math.sqrt(BlockNum) (i

15、nt) Math.sqrt(BlockNum); for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j = 5 & num 50) BombNum = num; startBomb(); else if (num 5) JOptionPane.showMessageDialog(null, 您设置的地雷数太少了,请重设!, 错误, JOptionPane.ERROR_MESSAGE); num=10; BombNum = num; else JOptionPane.showMessageDialog(null, 您

16、设置的地雷数太多了,请重设!, 错误, JOptionPane.ERROR_MESSAGE); num=10; BombNum = num; /* 开始,布雷 */ public void startBomb() nowBomb.setText(当前雷数 + : + BombNum); for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j (int) Math.sqrt(BlockNum); j+) bombButtonij.isBomb = false; bombButtonij.isClicked = fals

17、e; bombButtonij.isRight = false; bombButtonij.BombFlag = 0; bombButtonij.BombRoundCount = 9; bombButtonij.setEnabled(true); bombButtonij.setText(); bombButtonij.setFont(new Font(, Font.PLAIN, 14);/设置字体大小 bombButtonij.setForeground(Color.BLUE); rightBomb = 0; restBomb = BombNum; restBlock = BlockNum

18、- BombNum; for (int i = 0; i BombNum; ) int x = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1); int y = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1); if (bombButtonxy.isBomb != true) bombButtonxy.isBomb = true; i+; CountRoundBomb(); /* 计算方块周围雷数 */ public void CountRoundBomb() for (

19、int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j (int) Math.sqrt(BlockNum); j+) int count = 0; / 当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数 if (bombButtonij.isBomb != true) for (int x = i - 1; x i + 2; x+) for (int y = j - 1; y = 0) & (y = 0) & (x ( (int) Math.sqrt(BlockNum) & (y ( (int) Math.sqrt(Bl

20、ockNum) if (bombButtonxy.isBomb = true) count+; bombButtonij.BombRoundCount = count; /* 是否挖完了所有的雷 */ public void isWin() restBlock = BlockNum - BombNum; for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j (int) Math.sqrt(BlockNum); j+) if (bombButtonij.isClicked = true) restBlock-; if

21、 (rightBomb = BombNum | restBlock = 0) JOptionPane.showMessageDialog(this, 您挖完了所有的雷,您胜利了!, 胜利, JOptionPane.INFORMATION_MESSAGE); startBomb(); /* 当选中的位置为空,则翻开周围的地图* */ public void isNull(Bomb ClickedButton) int i, j; i = ClickedButton.num_x; j = ClickedButton.num_y; for (int x = i - 1; x i + 2; x+) f

22、or (int y = j - 1; y = 0) & (y = 0) & (x ( (int) Math.sqrt(BlockNum) & (y 0) ClickedButton.setText(ClickedButton.BombRoundCount + ); else isNull(ClickedButton); /* 左键点击 */ public void actionPerformed(ActionEvent e) if ( ( (Bomb) e.getSource().isClicked = false & ( (Bomb) e.getSource().isRight = fals

23、e) if ( ( (Bomb) e.getSource().isBomb = false) turn( ( (Bomb) e.getSource(); isWin(); else for (int i = 0; i (int) Math.sqrt(BlockNum); i+) for (int j = 0; j 0) bombSource.setForeground(Color.RED); bombSource.setText(F); bombSource.isRight = true; restBomb-; else bombSource.BombFlag = 0; else if (bombSource.BombFlag = 2) restBomb+; bombSource.setText(Q); bombSource.isRight = false; else bombSource.setText(); if (bombSource.isBomb = true) if (bombSource.BombFlag = 1) rightBomb+; else if (bombS

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1