Java扫雷游戏课程设计实训报告.doc

上传人:文库蛋蛋多 文档编号:2386918 上传时间:2023-02-17 格式:DOC 页数:22 大小:251.50KB
返回 下载 相关 举报
Java扫雷游戏课程设计实训报告.doc_第1页
第1页 / 共22页
Java扫雷游戏课程设计实训报告.doc_第2页
第2页 / 共22页
Java扫雷游戏课程设计实训报告.doc_第3页
第3页 / 共22页
Java扫雷游戏课程设计实训报告.doc_第4页
第4页 / 共22页
Java扫雷游戏课程设计实训报告.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《Java扫雷游戏课程设计实训报告.doc》由会员分享,可在线阅读,更多相关《Java扫雷游戏课程设计实训报告.doc(22页珍藏版)》请在三一办公上搜索。

1、Java应用技术实训报告题 目 起讫日期 所在院系 学生姓名 专 业 班 级 学 号 指导教师 职称 所在单位 年 月 日一总体设计本系统共包括3个java源文件和4个图像文件。1类之间的关系如图1.1所示。2java源文件及其功能如表1所示。表1 源文件及其功能序号文件名主要功能1Main.java生成的类负责创建程序窗口,含有main方法,游戏从该类开始执行。2MainBomb.java为主类创建整个挖雷游戏的对象,包括窗口,布雷,判断等等。3Bomb.java负责创建游戏所需要的按钮。3.图像文件Bomb.gif:地雷方块上的图标。question.gif:疑惑探雷是否正确。bomb_b

2、ig.gif:触雷时方块上的图标。flag.gif:探雷标记。二、详细设计1主类Main(1)成员变量(见表2)表2 成员变量描述变量类型备注游戏运行MainBomb临时变量(2)成员变量(见表3)表3 名称功能备注main游戏开始(3)源代码见文件Main.javaimport java.awt.*; import java.awt.event.*; import javax.swing.*;/*主类*/public class Main public static void main(String args) (new MainBomb().show(); 2挖雷游戏 MainBomb(1

3、)成员变量(见表4)表4成员变量描述变量类型名称雷数设置JTextFieldtext当前方块数intBlockNum当前雷数intBombNum开始JButtonstart踩雷Iconicon_bomb踩雷标记Iconicon_bomb_big雷标记Iconicon_flag疑惑是否有雷Iconicon_question目录面板PanelMenuPamel主面板PanelmainPanel雷BombbombButton该方块是否有雷boolean周围无雷方块周围的雷数int周围的雷数方块上的雷标记int探雷标记显示方块信息JLabelLabel方块在雷区的位置PointP布雷RandomSet

4、set判断标记是否正确DetermineDetermine是否获得胜利WinnerWin雷标数目intcount周围方块的雷数intcount1(2)方法见(表5)表5 方法名功能备注Game创建程序窗口barnewGame新开局actionPerformed处理ActionEvent事件接口方法设置方块是否有雷设置雷的值设置是雷时的图标设置label上的图标设置无雷时的图标设置label上的图标设置有雷时的名字设置label上的文字设置周围的雷数设置周围的雷数获取名字返回方块label上的文字获取周围雷数返回周围的雷数设置雷区位置设置属性P获取雷区位置返回属性P获取探雷标记返回探雷标记mou

5、sePressed处理鼠标按下事件接口方法mouseClicked处理鼠标双击事件接口方法mouseReleased处理鼠标释放事件接口方法mouseExited处理鼠标退出事件接口方法mouseEntered处理鼠标进入事件接口方法MinesSquare创建雷区gameOver游戏失败判断雷标是否正确正确返回true错误返回false布雷随机布雷判断是否成功成功返回true失败返回false(3)源代码见文件MainBomb.javaimport java.awt.*; import java.awt.event.*; import javax.swing.*;/*窗口及算法实现类*/cla

6、ss MainBomb extends JFrame implements ActionListener,MouseListener public JTextField text; public Label nowBomb,setBomb; public int BlockNum,BombNum; /当前方块数当前雷数 public Icon icon_bomb = new ImageIcon(Bomb.gif); /踩雷 public Icon icon_bomb_big = new ImageIcon(bomb_big.gif); /踩雷标记 public Icon icon_flag =

7、 new ImageIcon(flag.gif); /雷标记 public Icon icon_question = new ImageIcon(question.gif); /疑惑是否有雷 public JButton start = new JButton( 开始 ); public Panel MenuPamel = new Panel(); public Panel mainPanel = new Panel(); public Bomb bombButton; /*界面设计*/ public MainBomb() super(成型04-2 李超 JAVA课程设计 ); BlockNu

8、m = 64; BombNum = 10; Container c=getContentPane(); c.setBackground(Color.gray); c.setLayout(new BorderLayout(); text=new JTextField(10 ,3); nowBomb = new Label(当前雷数+ +BombNum+); setBomb= new Label(设置地雷数); start.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) BombNu

9、m = Integer.parseInt(text.getText().trim(); if(BombNum = 10 & BombNum 50 ) replay(); else JOptionPane msg = new JOptionPane(); JOptionPane.showMessageDialog(null,您设置的地雷数太多了,请重设!,错误,2); ); MenuPamel.add(setBomb); MenuPamel.add(text); MenuPamel.add(start); MenuPamel.add(nowBomb); c.add(MenuPamel,North

10、); mainPanel.setLayout(new GridLayout( (int)Math.sqrt(BlockNum) , (int)Math.sqrt(BlockNum) ); bombButton=new Bomb (int)Math.sqrt(BlockNum) ; for(int i = 0 ; i (int)Math.sqrt(BlockNum) ; i+) bombButton i =new Bomb (int)Math.sqrt(BlockNum) ; for(int i = 0 ; i (int)Math.sqrt(BlockNum) ; i+ ) for(int j

11、= 0 ; j (int)Math.sqrt(BlockNum) ; j+ ) bombButton i j =new Bomb(i,j); bombButton i j .setForeground( Color.gray); bombButton i j .addActionListener(this); bombButton i j .addMouseListener(this); for(int i = 0 ; i (int)Math.sqrt(BlockNum) ; i+ ) for(int j = 0 ; j (int)Math.sqrt(BlockNum) ; j+ ) main

12、Panel.add(bombButton i j ); c.add(mainPanel,Center); startBomb(); setSize(400,400); setLocation(350,200); setResizable(false); /*布雷*/ public void startBomb() for(int i=0;iBombNum;i+) int x =(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1); int y =(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1); if(

13、bombButton x y .isBomb=true) i-; else bombButton x y .isBomb=true ; /*重新开始*/ public void replay() nowBomb.setText(当前雷数+ +BombNum+); for(int i = 0 ; i (int)Math.sqrt(BlockNum) ; i+) for(int j = 0 ; j (int)Math.sqrt(BlockNum) ; j+) bombButton i j .isBomb=false; bombButton i j .isClicked=false; bombBut

14、ton i j .setEnabled(true); bombButton i j .setText(); bombButton i j .setIcon(null); startBomb(); /*是否挖完了所有的雷*/ public void isWin() int findBomb=0; /找到的地雷数 for(int i=0;i (int)Math.sqrt(BlockNum); i+) for(int j=0;j (int)Math.sqrt(BlockNum ); j+) if(bombButton i j .isBomb = true & bombButton i j .isRi

15、ght = true) findBomb+; if( findBomb = Integer.parseInt(text.getText().trim() ) JOptionPane msg = new JOptionPane(); JOptionPane.showMessageDialog(this,您挖完了所有的雷,您胜利了!,您胜利了,2); /*计算方块周围雷数 */ public void CountRoundBomb() for (int i=0; i (int)Math.sqrt(BlockNum); i+) for (int j = 0; j = 0) & (j - 1 = 0)

16、 if (bombButtoni - 1j - 1.isBomb = true) count += 1; /检测左上方空格是否是地雷 if ( (i - 1 = 0) if (bombButtoni - 1 j .isBomb = true) count += 1; /检测上方空格是否为地雷 if ( (i - 1 = 0) & (j + 1 = 0) if (bombButton i j - 1 .isBomb = true) count += 1; /检测左边是否为地雷 if ( (i = 0) & (j + 1 = 0) & (i + 1 = (int)Math.sqrt(BlockNu

17、m)-1) if (bombButtoni + 1j - 1.isBomb = true) count += 1; /左下 if ( (i + 1 = (int)Math.sqrt(BlockNum)-1) if (bombButtoni + 1 j .isBomb = true) count += 1; /下 if ( (j + 1 = (int)Math.sqrt(BlockNum)-1) & (i + 1 = 0) & (j - 1 = 0) /检测左上方空格是否是空 if (bombButtoni - 1j - 1.isBomb = false & bombButtoni - 1j -

18、 1.isClicked = false & bombButtoni - 1j - 1.isRight = false) bombButtoni-1j-1.setText(bombButtoni-1j-1.BombRoundCount)+);bombButtoni - 1j - 1.setEnabled(false);bombButtoni - 1j - 1.isClicked=true; if ( (i - 1 = 0) /检测上方空格是否为空 if (bombButtoni-1 j.isBomb = false & bombButtoni - 1 j .isClicked = false

19、& bombButtoni - 1 j .isRight = false) bombButtoni-1 j.setText(bombButtoni- 1 j .BombRoundCount)+); bombButtoni - 1 j .setEnabled(false); bombButtoni - 1 j .isClicked=true; if ( (i - 1 = 0) & (j + 1 = 0) /检测左边是否为空 if (bombButton i j - 1.isBomb = false & bombButton i j - 1.isClicked = false & bombButt

20、on i j - 1.isRight = false) bombButton i j - 1.setText(bombButton i j - 1.BombRoundCount)+); bombButton i j - 1.setEnabled(false); bombButton i j - 1.isClicked=true; if ( (i = 0) & (j + 1 = 0) & (i + 1 = (int)Math.sqrt(BlockNum)-1) ) /检测左下空格是否是空 if (bombButtoni + 1j - 1.isBomb = false & bombButtoni

21、+ 1j - 1.isClicked = false & bombButtoni + 1j - 1.isRight = false) bombButtoni + 1j - 1.setText(bombButtoni + 1j - 1.BombRoundCount)+); bombButtoni + 1j - 1.setEnabled(false); bombButtoni + 1j - 1.isClicked=true; if ( (i + 1 = (int)Math.sqrt(BlockNum)-1) ) /检测下边空格是否是空 if (bombButtoni + 1 j .isBomb =

22、 false & bombButtoni + 1 j .isClicked = false & bombButtoni + 1 j .isRight = false) bombButtoni + 1 j .setText(bombButtoni + 1 j .BombRoundCount)+); bombButtoni + 1 j .setEnabled(false); bombButtoni + 1 j .isClicked=true; if ( (j + 1 = (int)Math.sqrt(BlockNum)-1) ) & (i + 1 = 0) & (j - 1 = 0)/检测左上 i

23、sNull(bombButton,bombButtoni - 1j - 1); if ( (i - 1 = 0) isNull( bombButton,bombButtoni - 1 j );/检测上方 if ( (i - 1 = 0) & (j + 1 = 0) isNull(bombButton,bombButtonij - 1);/检测左边 if ( (i = 0) & (j + 1 = 0) & (i + 1 = (int)Math.sqrt(BlockNum)-1) ) isNull(bombButton,bombButtoni + 1j - 1); /检测左下 if ( (i +

24、1 = (int)Math.sqrt(BlockNum)-1) ) /检测下 isNull(bombButton,bombButtoni + 1 j ); if ( (j + 1 = (int)Math.sqrt(BlockNum)-1) & (i + 1 = (int)Math.sqrt(BlockNum)-1) )/检测右下 isNull(bombButton,bombButtoni + 1j + 1); public void actionPerformed(ActionEvent e) CountRoundBomb();if(Bomb)e.getSource().isBomb=fals

25、e&(Bomb)e.getSource().isClicked =false) (Bomb)e.getSource().setText( (Bomb)e.getSource().BombRoundCount)+); (Bomb)e.getSource().isClicked=true; (Bomb)e.getSource().setIcon(null); (Bomb)e.getSource().setEnabled(false); if(Bomb)e.getSource().BombRoundCount) = 0) isNull(bombButton,(Bomb)e.getSource();

26、isWin(); else if(Bomb)e.getSource().isBomb = true) for(int i=0;i(int)Math.sqrt(BlockNum);i+) for(int j=0;j 0 & bombSource.isRight = false ) bombSource.setIcon(icon_flag); bombSource.isRight = true; BombNum-; isWin(); nowBomb.setText(当前雷数+ +BombNum+); else if(bombSource.BombFlag = 2) if( (BombNum!=0

27、) |(BombNum=0 &(bombSource.getIcon()=icon_flag) )BombNum+; bombSource.setIcon(icon_question); nowBomb.setText(当前雷数+ +BombNum+); else if(bombSource.BombFlag = 0) bombSource.setIcon(null); bombSource.isRight = false; public void mouseEntered(MouseEvent e) public void mouseReleased(MouseEvent e) public

28、 void mouseExited(MouseEvent e) public void mousePressed(MouseEvent e) 3按钮 Bomb(1)成员变量(见表6)表6成员变量描述变量类型名称第几号方块intnum_x,num_y是否点击右键booleanisRight是否被点击booleanisClicked(2)源代码见文件Bomb.javaimport java.awt.*; import java.awt.event.*; import javax.swing.*;/*按扭类*/class Bomb extends JButton public int num_x,n

29、um_y; /第几号方块 public int BombRoundCount; /周围雷数 public boolean isBomb; /是否为雷 public boolean isClicked; /是否被点击 public int BombFlag; /探雷标记 public boolean isRight; /是否点击右键public Bomb(int x,int y) BombFlag = 0; num_x = x; num_y = y; BombRoundCount = 0; isBomb = false; isClicked = false; isRight = false; 三

30、运行效果点击开始运行游戏,即可点选方格、根据方格数字推断雷的位置。如下图1-3。图1图2图3四工作总结通过此次课程设计,将我所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计不仅让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。不过与其临渊羡鱼,不如退而结网。这次JAVA课程设计给我的最大的收获就是如果让自己有了兴趣,那么任何困难在你的勇气和毅力下都算不得什么。完成了课程设计只是一小步,未来的日子还要继续努力。 最后衷心感谢在课程设计过程中给予过我帮助的老师和同学们!没有他们的帮助课程设计就不能圆满完成。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号