




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
装订线目 录目 录11 实训目的22 扫雷系统的分析与设计22.1 系统功能描述22.2 系统模块设计23 主要代码清单34 程序运行与测试35 实训总结4附:图表的格式:413课程实训报告书扫雷系统的设计与实现1 实训目的Java程序设计实训是计算机专业一门重要的专业技术基础实践课程。为了能够较好的完成实训任务,学生应具备软件开发技术的基础知识,实训的主要目的在于将理论与实际应用相结合,使用程序设计语言java,以及相关软件MyEclipse 6.0.1设计开发知识完成软件的设计开发任务。本实训课程通过对扫雷小游戏的设计开发将为整个专业的学习以及软件设计水平的提高打下良好的基础,提高学生项目分析、设计、编写、调试和测试的能力,并培养基本的、良好的团队合作能力。2 扫雷系统的分析与设计2.1 系统功能描述通过此系统可以实现如下功能:1)进行游戏游戏分为初级、中级、高级三个等级,可以进行选择游戏。2)统计时间 当鼠标点击雷区开始计时,直到点到雷或找出全部的雷时,计时结束。3)雷数、高度和宽度可自定义4)实时的显示未扫出的雷数5)实现扫雷英雄榜 当找出全部的雷破纪录时,跳出对话框“请留下大名”,此时单击确定会将你的时间和名称记录到扫雷英雄榜中。6)改变界面颜色 分为黑色和白色两种。2.2 系统模块设计1、界面设计包括主窗口界面:菜单设计、面板panel1的设计(添加控件)、面板panel2的设计(布雷);附属对话框(或窗口)界面:自定义对话框、扫雷英雄榜对话框、请留下大名对话框、扫雷帮助窗口。2、功能模块设计包括实现游戏初级、中级、高级转换、使用线程计时、自定义雷区方块数及 雷数、记录下破纪录时的人名和所用时间、改变面板的背景颜色。3 主要代码清单全部代码定义了三个类,其中dialog_zidingyi类是定义“自定义”对话框并对其添加部分单击事件;SaoleiJFrame类是主类,除dialog_zidingyi类和Bomb类中的内容外,包含其他所有的操作及定义(包括对dialog_zidingyi类和Bomb类进行对象初始化)。class Bomb extends JButton /定义雷类 public int num_x,num_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;class dialog_zidingyi extends JDialog implements ActionListener .public class SaoleiJFrame extends JFrame implements ActionListener,MouseListener,WindowListener /主类./定义控件的代码在这里不详细列出了public SaoleiJFrame()height=9;weight=9;num =10;mineDim=18;/默认雷区尺寸及类数目 replay();. class Timestart extends Thread. public void startBomb() . public void replay() . public void isWin() . public void CountRoundBomb(). public void isNull(Bomb bombButton,Bomb ClickecButton) . public void actionPerformed(ActionEvent e). public void mouseClicked(MouseEvent e). ./其它事件不详细列出了public static void main(String args)new SaoleiJFrame();3.1 界面设计 1、功能:添加菜单、面板及面板上的控件、定义雷区 代码:public SaoleiJFrame() super(扫雷); /默认BorderLayout布局this.setResizable(false);this.setDefaultCloseOperation(EXIT_ON_CLOSE);JMenuBar menubar=new JMenuBar(); /菜单栏this.setJMenuBar(menubar);JMenu menu_game=new JMenu(游戏(G);menu_game.setMnemonic(G);menubar.add(menu_game); popupmenu=new JPopupMenu(); /快捷菜单对象menuitem_start=new JMenuItem(开始(N);menuitem_start.setMnemonic(N);menuitem_start.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,InputEvent.BUTTON1_MASK);popupmenu.add(menuitem_start);menu_game.add(menuitem_start);menuitem_start.addActionListener(this); menu_game.addSeparator(); /加分隔线 。 。其它菜单以同样的方式添加 。 。panel1=new JPanel(); label_1eishu=new JLabel();label_1eishu.setSize(50,25);label_1eishu.setHorizontalAlignment(JLabel.CENTER); label_1eishu.setVerticalAlignment(JLabel.CENTER); button=new JButton();button.setSize(25,25); button.setIcon(new ImageIcon(src/qq1.gif);button.setBackground(Color.lightGray );button.setBorder(BorderFactory.createRaisedBevelBorder(); button.addActionListener(this);/突出了label_jishi=new JLabel(0);label_jishi.setSize(50,25); label_jishi.setHorizontalAlignment(JLabel.CENTER); label_jishi.setVerticalAlignment(JLabel.CENTER);/界面布局panel2=new JPanel();panel2.setBackground(Color.lightGray ); panel2.setBorder(BorderFactory.createLoweredBevelBorder();. 2、功能:扫雷英雄榜对话框(9个label放在一个面板panel_dialog_h1上,2个button在面板panel_dialog_h2上)及破纪录对话框(label、text、button各一个,在一个3行1列的面板上) 代码:dialog_pojilu=new JDialog(dialog_hero,请留下大名); 。 。其它代码此处不详细列出了。 图: 3、功能:计时4、功能:自定义对话框(类dialog_zidingyi中),对话框中用到3个面板,各放3个label、3个text、2个button(此处控件添加不详细列出了);主要 代码:public dialog_zidingyi(JFrame SaoleiJFrame) super(SaoleiJFrame,自定义雷区,true);this.setSize(200, 140); this.setResizable(false);this.setLayout(new GridLayout(1,3); weightnum=9; heightnum=9; BombNum=10;public void actionPerformed(ActionEvent e) if(e.getSource()=button_dialog_z1) try weightnum=Integer.parseInt(text_dialog_z2.getText(); heightnum=Integer.parseInt(text_dialog_z1.getText(); BombNum=Integer.parseInt(text_dialog_z3.getText();/对输入数据进行判断,是否有效赋值给boolean型变量judge judge=(heightnum24|heightnum30|weightnumheightnum*weightnum-24|BombNum0); /对非法、有效两种情况作响应处理 if (judge) messageBox.showMessageDialog(null,输入超出范围,错误!,JOptionPane.ERROR_MESSAGE); heightnum=9; weightnum=9; BombNum=10; setVisible(false); catch(NumberFormatException e1) messageBox.showMessageDialog(null,输入数据格式有错!,错误!,JOptionPane.ERROR_MESSAGE); setVisible(false); if(e.getSource()=button_dialog_z2) setVisible(false); /Dialog的三个方法,用于返回有效的输入值 public int getH() return heightnum; public int getW() return weightnum; public int getN() return BombNum;3.2 雷区设计 1、功能:布雷(startBomb())、初始化(replay())、代码:public void startBomb() for(int i=0;inum;i+) int x =(int)(Math.random()*(int)(height-1); int y =(int)(Math.random()*(int)(weight-1); if(bombButton x y .isBomb=true) i-; else bombButton x y .isBomb=true ; public void replay() loseJudge=false; winJudge=false;/输赢标志初始化 bombhavenum=0;/已找到的雷数目初始化 leftNum=num;/剩余的雷数目初始化 label_1eishu.setText(String.valueOf(leftNum);panel1.removeAll(); panel2.removeAll(); panel1.setBackground(Color.lightGray );panel1.setBorder(BorderFactory.createLoweredBevelBorder();/凹下去啦this.setLayout(null); panel1.setLayout(null); panel2.setLayout(new GridLayout(height,weight); this.setSize(mineDim*weight,mineDim*height+60+20); panel1.setBounds(0,0,mineDim*weight,30); panel2.setBounds(0,30,mineDim*weight,mineDim*height); label_1eishu.setBounds(mineDim*weight/4-26,0,50,30); button.setBounds(mineDim*weight/2-16,0,30,30); label_jishi.setBounds(mineDim*weight/4*3-26,0,50,30); bombButton=new Bombheightweight; /设置雷区for(int i = 0 ; i height; i+ ) for(int j = 0 ; j weight; j+ ) bombButton i j =new Bomb(i,j); bombButtonij.setBackground(Color.white);bombButton i j .setBorder(BorderFactory.createRaisedBevelBorder(); bombButton i j .addActionListener(this); bombButton i j .addMouseListener(this); bombButton i j .setSize(mineDim,mineDim);panel2.add(bombButton i j );panel1.add(label_jishi);panel1.add(button);panel1.add(label_1eishu);this.add(panel1,North);this.add(panel2);this.show(true);startBomb(); /布雷 2、功能:判断是否赢了(即找出所有的雷)代码:public void isWin() int findBomb=0; /找到的地雷数 for(int i = 0;i height; i+) for(int j = 0;j weight; j+) if(bombButton i j .isBomb = true & bombButton i j .isRight = true) findBomb+; if(findBomb=num) thread1.b=false;button.setIcon(new ImageIcon(src/qq3.gif);dialog_pojilu.setVisible(true);replay(); 3、功能:计算一个方块周围雷数,假设bombButton i j 这个位置没有雷时,分别判断它周围八个位置是否有雷。代码:public void CountRoundBomb()for (int i = 0; i height; i+) for (int j = 0; j = 0) & (j - 1 = 0) /检测左上方空格是否是地雷 if (bombButtoni - 1j - 1.isBomb = true) count += 1; 。 。其他方向同理。 。bombButton i j .BombRoundCount = count; 4、功能:当选中位置为空,翻开周围的地图,显示其周围有多少雷。也是站在一个位置当没点到雷时,判断它周围八个位置是否为空;再站在它的周围八个位置上,看它们各自周围八个位置是否为空,以此类推。代码:public void isNull(Bomb bombButton,Bomb ClickecButton) int i,j; i=ClickecButton.num_x; j=ClickecButton.num_y; if (ClickecButton.isBomb=true) else if ( (i - 1 = 0) & (j - 1 = 0) /检测左上方空格是否是空 if (bombButtoni - 1j - 1.isBomb = false & bombButtoni - 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 = 0) & (j - 1 = 0)/检测在左上位置上时,它周围的八个位置isNull(bombButton,bombButtoni - 1j - 1); 。 。其余七个位置以相同方式判断。 。 5、功能:是写在雷区的单击事件中,当鼠标点击雷区时触发。 代码:CountRoundBomb(); if(Bomb)e.getSource().isBomb=false & (Bomb)e.getSource().isClicked = false) (Bomb)e.getSource().isClicked=true;(Bomb)e.getSource().setEnabled(false); (Bomb)e.getSource().setText( (Bomb)e.getSource().BombRoundCount )+); (Bomb)e.getSource().setIcon(null); if(Bomb)e.getSource().BombRoundCount) = 0) isNull(bombButton,(Bomb)e.getSource(); isWin(); /当翻开为空时 else if(Bomb)e.getSource().isBomb = true) for(int i=0;iheight;i+) for(int j=0;j 0 & bombSource.isRight = false ) bombSource.se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康教育培训知识题课件
- 俱乐部饮水安全培训计划课件
- 集团档案组管理办法
- 建行岗位考试题库及答案
- 2025年病理学乳腺癌组织病理学特征分析答案及解析
- 税务违法检举管理办法
- 企业安全管理培训目的课件
- 食品安全风险评估模型-洞察及研究
- 出行安全课件
- 出行安全培训课件
- 2025-2026学年苏教版小学数学五年级上册教学计划及进度表
- GB/T 18705-2002装饰用焊接不锈钢管
- 苏教版数学六年级上册《全册课件》教学精品ppt
- 数控机床概述课件
- 电路板维修培训教材PPT模板
- “国培计划”优秀工作案例推荐表——“八张清单”撬动送教下乡的兴奋点
- 《色彩基础知识》PPT课件(详解)
- 《综合布线系统培训》PPT课件.ppt
- 交流电源控制和保护
- 中医痹症ppt课件
- 女儿墙安装电动吊篮相关安全计算
评论
0/150
提交评论