您好,欢迎访问三七文档
题目二扫雷游戏2.1题目需求简要阐述设计题目的功能要求等。首先,对游戏了解的多少分别设置了不同的级别,玩家可以随着自己对游戏的熟悉程度不断加深而选择万更高的级别,可谓趣味百出,其乐无穷啊!2.2设计的内容及要求设计内容:设计要求:1、扫雷游戏氛围初级、中级、高级三个级别,扫雷英雄榜存储每个级别的好成绩,即挖出的全部地雷且用时最少者。单击游戏菜单选择“初级”、“中级”、“高级”或“查看英雄榜”;2、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个地方便启动计时器;3、用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷;4、如果用户认为某个方块下埋着雷,单击右键可以在方块上标记一个用户可以识别的记号,级给出一个扫雷图标。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个;5、扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。2.3总体设计通常包括功能模块划分、功能模块层次、相关类文件及类的调用关系等。在设计扫雷游戏时,需要编写7个Java源文件:MineGame.java、MineArea.java、Block.java、BlockView.java、LayMines.java、Record.java和ShowRecord.java。1,利用布局管理器设计计算器整体布局,整个系统采用borderlayout,GridLayout布局,其中使用了2个面板和一个二位数组面板。2,利用按钮设计地雷和提示语,通过按钮的事件处理实现按钮操作功能。2.4详细设计及实现2.4.1操作界面设计阐述软件的运行及用户操作的界面方案,包括窗口大小位置、控件布局、文字颜色、字体及操作逻辑等。扫雷只有一个类,这个类包含多个函数,每个函数具有不同的功能,在主函数里调用,从而生成扫雷。2.4.2类成员变量及方法设计介绍各个类的成员变量及方法的设计细节,详细阐述主要方法的算法逻辑。2.4.3类图及关键算法流程图初始化设置雷数退出?Y左右键点击失败?胜利?N重新开局?局部初始化YY退出2.4.4源代码分析详细阐述主要功能实现涉及的类及方法,要求对关键代码段进行分析,简述其设计思路。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassFrameextendsJFrame{JTextFieldtext;JLabelnowBomb,setBomb;intBombNum,BlockNum;//当前雷数,当前方块数intrightBomb,restBomb,restBlock;//找到的地雷数,剩余雷数,剩余方块数/*JMenuBarBar;JMenufileMenu;JMenuItem初级,中级,高级,扫雷英雄榜;*/JButtonstart=newJButton(重新开始);JPanelMenuPanel=newJPanel();JPanelbombPanel=newJPanel();Bomb[][]bombButton;JPanelc;BorderLayoutborderLayout1=newBorderLayout();GridLayoutgridLayout1=newGridLayout();publicFrame(){try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exceptionexception){exception.printStackTrace();}}privatevoidjbInit()throwsException{c=(JPanel)getContentPane();setTitle(扫雷);c.setBackground(Color.YELLOW);MenuPanel.setBackground(Color.GRAY);c.setLayout(borderLayout1);setSize(newDimension(600,600));setResizable(false);/*fileMenu=newJMenu(游戏);初级=newJMenuItem(初级);中级=newJMenuItem(中级);高级=newJMenuItem(高级);扫雷英雄榜=newJMenuItem(扫雷英雄榜);fileMenu.add(初级);fileMenu.add(中级);fileMenu.add(高级);fileMenu.add(扫雷英雄榜);初级.addActionListener(this);*/BlockNum=169;BombNum=10;text=newJTextField(10,2);//“10”是默认地雷数,3是文本框的长度nowBomb=newJLabel(当前雷数+:+BombNum);setBomb=newJLabel(设置地雷数);start.addActionListener(newFrame1_start_actionAdapter(this));MenuPanel.add(setBomb);//设置地雷数标签MenuPanel.add(text);//设置地雷数文本框MenuPanel.add(start);//重新开始MenuPanel.add(nowBomb);//当前地雷数标签c.add(MenuPanel,java.awt.BorderLayout.SOUTH);//设置菜单面板,下方bombPanel.setLayout(gridLayout1);//地雷边框gridLayout1.setColumns((int)Math.sqrt(BlockNum));gridLayout1.setRows((int)Math.sqrt(BlockNum));bombButton=newBomb[(int)Math.sqrt(BlockNum)][(int)Math.sqrt(BlockNum)];for(inti=0;i(int)Math.sqrt(BlockNum);i++){for(intj=0;j(int)Math.sqrt(BlockNum);j++){bombButton[i][j]=newBomb(i,j);//bombButton[i][j].setSize(12,12);bombButton[i][j].setFont(newFont(,Font.PLAIN,14));//设置字体大小bombButton[i][j].setForeground(Color.YELLOW);//..............................?bombButton[i][j].addMouseListener(newBomb_mouseAdapter(this));bombButton[i][j].addActionListener(newBomb_actionAdapter(this));bombPanel.add(bombButton[i][j]);}}c.add(bombPanel,java.awt.BorderLayout.CENTER);startBomb();}/*开始按钮*/publicvoidstart_actionPerformed(ActionEvente){intnum=Integer.parseInt(text.getText().trim());if(num=10&&num100){BombNum=num;startBomb();}elseif(num10){JOptionPane.showMessageDialog(null,您设置的地雷数太少了,请重设!,错误,JOptionPane.ERROR_MESSAGE);//错误提示num=10;BombNum=num;}else{JOptionPane.showMessageDialog(null,您设置的地雷数太多了,请重设!,错误,JOptionPane.ERROR_MESSAGE);//错误提示num=10;BombNum=num;}//////////////////}/*开始,布雷*/publicvoidstartBomb(){nowBomb.setText(当前雷数+:+BombNum);for(inti=0;i(int)Math.sqrt(BlockNum);i++){for(intj=0;j(int)Math.sqrt(BlockNum);j++){bombButton[i][j].isBomb=false;bombButton[i][j].isClicked=false;bombButton[i][j].isRight=false;bombButton[i][j].BombFlag=0;bombButton[i][j].BombRoundCount=0;bombButton[i][j].setEnabled(true);bombButton[i][j].setText();bombButton[i][j].setFont(newFont(,Font.PLAIN,14));//设置字体大小bombButton[i][j].setForeground(Color.BLUE);rightBomb=0;restBomb=BombNum;restBlock=BlockNum-BombNum;}}for(inti=0;iBombNum;){intx=(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));//?inty=(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));//?if(bombButton[x][y].isBomb!=true)//!什么作用{bombButton[x][y].isBomb=true;i++;}}CountRoundBomb();}/*计算方块周围雷数*/publicvoidCountRoundBomb(){for(inti=0;i(int)Math.sqrt(BlockNum);i++){for(intj=0;j(int)Math.sqrt(BlockNum);j++){intcount=0;//当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数if(bombButton[i][j].isBomb!=true){for(intx=i-1;xi+2;x++){for(inty=j-1;yj+2;y++){if((x=0)&&(y=0)&&(x((int)Math.sqrt(BlockNum)))&&(y((int)Math.sqrt(BlockNum)))){if(bombButton[x][y].isBomb==true){count++;}}}}bombButton[i][j].BombRoundCount=count;}}}}/*是否挖完了所有的雷*/publicvoidisWin(){restBlock=BlockNum-BombNum;for(inti=0;i(int)Math.sqrt(BlockNum);i++){for(intj=0;j(int)Math.sqrt(BlockNum);j++){if(bombButton[i][j].isClicked==true){restBlock--;}}}if(rightBomb==BombNum||restBlock==0){JOptionPane.showMessageDialog(this,您挖完了所有的雷,您胜利了!,胜利,JOptionPane.INFORMATION_MESSAGE);//信息提示,标题:胜利。。。。startBomb();}}/*当选中的位置为空,则翻开周围的方块*/
本文标题:题目二扫雷游戏
链接地址:https://www.777doc.com/doc-6463223 .html