版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题目二扫雷游戏2.1 题目需求简要阐述设计题目的功能要求等。首先,对游戏了解的多少分别设置了不同的级别,玩家可以随着自己对游戏的熟悉程度不断加深而选择万更高的级别,可谓趣味百出,其乐无穷啊!2.2 设计的内容及要求设计内容:设计要求:1、扫雷游戏氛围初级、中级、高级三个级别,扫雷英雄榜存储每个级别的好成绩,即挖出的全部地雷且用时最少者。单击游戏菜单选择“初级”、“中级”、“高级”或“查看英雄榜”;2、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个地方便启动计时器;3、用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下五雷,则显示一个数字
2、,该数字代表方块的周围的8 个方块中共有多少颗雷;4、如果用户认为某个方块下埋着雷,单击右键可以在方块上标记一个用户可以识别的记号,级给出一个扫雷图标。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个;5、扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。2.3 总体设计通常包括功能模块划分、功能模块层次、相关类文件及类的调用关系等。在设计扫雷游戏时,需要编写7个Java源文件:MineGame.java、MineArea.java、Block.java、BlockView.java、LayMines.java、Record.java和ShowRecord.j
3、ava。1,利用布局管理器设计计算器整体布局,整个系统采用borderlayout,GridLayout布局,其中使用了2个面板和一个二位数组面板。2,利用按钮设计地雷和提示语,通过按钮的事件处理实现按钮操作功能。2.4 详细设计及实现2.4.1 操作界面设计阐述软件的运行及用户操作的界面方案,包括窗口大小位置、控件布局、文字颜色、字体及操作逻辑等。扫雷只有一个类,这个类包含多个函数,每个函数具有不同的功能,在主函数里调用,从而生成扫雷。2.4.2 类成员变量及方法设计介绍各个类的成员变量及方法的设计细节,详细阐述主要方法的算法逻辑。2.4.3 类图及关键算法流程图设置雷数初始化左右键点击N失
4、败?胜利?YY 重新开局?退出?Y局部初始化退出2.4.4 源代码分析详细阐述主要功能实现涉及的类及方法,要求对关键代码段进行分析,简述其设计思路。import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Frame extends JFrameJTextField text;JLabel nowBomb,setBomb;int BombNum,BlockNum;/当前雷数,当前方块数int rightBomb,restBomb,restBlock;/找到的地雷数,剩余雷数,剩余方块数/*JMenuB
5、ar Bar;JMenu fileMenu;JMenuItem 初级,中级,高级,扫雷英雄榜;*/JButton start=new JButton(重新开始);JPanel MenuPanel=new JPanel();JPanel bombPanel=new JPanel();BombbombButton;JPanel c;BorderLayout borderLayout1=new BorderLayout();GridLayout gridLayout1=new GridLayout();public Frame()trysetDefaultCloseOperation(EXIT_ON
6、_CLOSE);jbInit();catch(Exception exception)exception.printStackTrace();private void jbInit() throws Exceptionc=(JPanel)getContentPane();setTitle(扫雷);c.setBackground(Color.YELLOW);MenuPanel.setBackground(Color.GRAY);c.setLayout(borderLayout1);setSize(new Dimension(600,600);setResizable(false);/*fileM
7、enu=new JMenu(游戏);初级=new JMenuItem(初级);中级=new JMenuItem(中级);高级=new JMenuItem(高级);扫雷英雄榜=new JMenuItem(扫雷英雄榜);fileMenu.add(初级);fileMenu.add(中级);fileMenu.add(高级);fileMenu.add(扫雷英雄榜);初级.addActionListener(this);*/BlockNum=169;BombNum=10;text=new JTextField(10,2);/“10”是默认地雷数,3是文本框的长度nowBomb=new JLabel(当前雷
8、数+:+BombNum);setBomb=new JLabel(设置地雷数);start.addActionListener(new Frame1_start_actionAdapter(this);MenuPanel.add(setBomb);/设置地雷数标签MenuPanel.add(text);/设置地雷数文本框MenuPanel.add(start);/重新开始MenuPanel.add(nowBomb);/当前地雷数标签c.add(MenuPanel,java.awt.BorderLayout.SOUTH);/设置菜单面板,下方bombPanel.setLayout(gridLayo
9、ut1);/地雷边框gridLayout1.setColumns(int)Math.sqrt(BlockNum);gridLayout1.setRows(int)Math.sqrt(BlockNum);bombButton=new Bomb(int)Math.sqrt(BlockNum)(int)Math.sqrt(BlockNum);for(int i=0;i(int)Math.sqrt(BlockNum);i+)for(int j=0;j=10&num100)BombNum=num;startBomb();else if(num10)JOptionPane.showMessageDialo
10、g(null,您设置的地雷数太少了,请重设!,错误,JOptionPane.ERROR_MESSAGE);/错误提示num=10;BombNum=num;elseJOptionPane.showMessageDialog(null,您设置的地雷数太多了,请重设!,错误,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
11、=0;j(int)Math.sqrt(BlockNum);j+)bombButtonij.isBomb=false;bombButtonij.isClicked=false;bombButtonij.isRight=false;bombButtonij.BombFlag=0;bombButtonij.BombRoundCount=0;bombButtonij.setEnabled(true);bombButtonij.setText();bombButtonij.setFont(new Font(,Font.PLAIN,14);/设置字体大小bombButtonij.setForeground
12、(Color.BLUE);rightBomb=0;restBomb=BombNum;restBlock=BlockNum-BombNum;for(int i=0;iBombNum;)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();/*计算方块周围雷数*/pub
13、lic void CountRoundBomb()for(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;xi+2;x+)for(int y=j-1;y=0)&(y=0)&(x(int)Math.sqrt(BlockNum)&(y(int)Math.sqrt(BlockNum)if(bombButtonxy.isBomb=
14、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(rightBomb=BombNum|restBlock=0)JOptionPane.showMessageDialog(this,您挖完
15、了所有的雷,您胜利了!,胜利,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;xi+2;x+)for(int y=j-1;y=0)&(y=0)&(x(int)Math.sqrt(BlockNum)&(y0)ClickedButton.setText(ClickedButton.Bo
16、mbRoundCount+);elseisNull(ClickedButton);/*左键点击*/public void actionPerformed(ActionEvent e)if(Bomb)e.getSource().isClicked=false&(Bomb)e.getSource().isRight=false)if(Bomb)e.getSource().isBomb=false)turn(Bomb)e.getSource();isWin();elsefor(int i=0;i(int)Math.sqrt(BlockNum);i+)for(int j=0;j0)bombSource
17、.setForeground(Color.RED);bombSource.setFont(new Font(,Font.BOLD,11);bombSource.setText(F);/玩家用鼠标右键标注发现的地雷 单击bombSource.isRight=true;restBomb-;elsebombSource.BombFlag=0;else if(bombSource.BombFlag=2)restBomb+;bombSource.setText(Q);/玩家用鼠标右键标注发现的地雷 双击bombSource.isRight=false;elsebombSource.setText();i
18、f(bombSource.isBomb=true)if(bombSource.BombFlag=2)rightBomb+;else if(bombSource.BombFlag=2)rightBomb-;nowBomb.setText(当前雷数+:+restBomb);isWin();public static void main(Stringargs)Frame frame=new Frame();frame.setVisible(true);class Frame1_start_actionAdapter implements ActionListenerprivate Frame ada
19、pter;Frame1_start_actionAdapter(Frame adapter)this.adapter=adapter;public void actionPerformed(ActionEvent e)adapter.start_actionPerformed(e);/class Bomb extends JButtonint 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=fal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铜熔剂行业深度研究报告
- 2025年气压容积泵项目可行性研究报告
- 自考培训行业发展概况及行业投资潜力预测报告
- 健康管理股权投资居间合同
- 智能化装修保修合同模板
- 旅行团包机运输合同
- 2025年度知识产权许可合同的标的为新型专利2篇
- 2025年文化艺术节舞台租赁及舞台艺术指导合同3篇
- 2025年新型设备融资租赁合同大全5篇
- 2025年度销售合同发票管理台账模板(企业定制)2篇
- 公路工程施工现场安全检查手册
- 公司组织架构图(可编辑模版)
- 1汽轮机跳闸事故演练
- 陕西省铜川市各县区乡镇行政村村庄村名居民村民委员会明细
- 礼品(礼金)上交登记台账
- 北师大版七年级数学上册教案(全册完整版)教学设计含教学反思
- 2023高中物理步步高大一轮 第五章 第1讲 万有引力定律及应用
- 青少年软件编程(Scratch)练习题及答案
- 浙江省公务员考试面试真题答案及解析精选
- 系统性红斑狼疮-第九版内科学
- 全统定额工程量计算规则1994
评论
0/150
提交评论