户输掉本局,若该方块下无雷,actionPerformed(ActionEvent)方法将显示BlockView对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的8个方块中共有多少颗雷。
③Show( )方法是一个递归方法。actionPerformed(ActionEvent)方法执行时将调用方法进行扫雷。
④mousePressed(MouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,actionPerformed(ActionEvent)方法负责让方块上线是一个探雷标记。
⑤inquireWin( )方法用来判断用户是否扫雷成功,如果成功该方法负责让record对话框可见。所谓扫雷成功是指不仅找到全部的雷而且用时最少。
4.3 Block类
Block类创建的对象是数组block的单元中的对象。Block型数组block是MineArea类的重要成员之一。标明Block类的主要成员变量和方法以及和MineArea类之间组合关系的UML图如图4-4所示。
Block name:String isMine:boolean aroundMineNumber:int isMine:boolean mineIcon:ImageIcon isOpenboolean setAroundMineNumber(int):void get AroundMineNumber():int 图4-4 Block类的UML图
MineArea block:Block[][]
以下是UML图中有关数据和方法的详细说明。 (1) 成员变量
①name是方块上的名字。
②aroundMineNumber是方块周围雷的数目。 ③mineIcon是方块上雷的图标。 ④isMine用来表示方块是否是雷。 ⑤isMark用来表示方块是否被标记。 ⑥isOpen用来表示方块是否被挖开。 (2) 方法
11
①setAroundMineNumber(int)方法用来设置aroundMineNumber的值。 ②getAroundMineNumber()方法用来获取aroundMineNumber的值。
4.4 BlockView类
BlockView类是javax.swing包中JPanel类的子类,创建的对象是数组blockView的单元中的对象。blockView是BlockView类的最重要的成员之一。标明BlockView类的主要成员变量和方法以及和MineArea类之间组合关系的UML图如图4-5所示。
JPanel BlockView blockNameOrIcon:JLabel blockCover:JButton card:Cardlayout setAroundMineNumber(Block block):void seeBlockNameOrIcon();void 图4-5 BlockView类的UML图
MineArea blockView:BlockView[][]
以下是UML图中有关数据和方法的详细说明。 (1) 成员变量
①blockNameOrIcon用来显示Block对象的name、number和mineIcon属性。 ②blockCover用来遮挡card卡片式布局。 (2) 方法
①giveView(Block block)方法给参数指定的Block对象提供视图,如果Block对象的isMine属性为true,即方块是雷,那么blockNameOrIcon标签上设置的文本就是Block对象的name属性的值,同时blockNameOrIcon标签上设置的图标就是Block对象的mineIcon制定的图标。如果Block对象的isMine属性为false,blockNameOrIcon标签上设置的文本是Block对象的aroundMineNumber属性的值,即周围雷的数目。
②seeBlockNameOrIcon( )方法让用户看见视图中的标签,无法看见按钮。 ③seeBlockCover( )方法让用户看见视图中的按钮,无法看见标签。
4.5 LayMines类
12
LayMines类创建的对象lay是MineArea中最重要的成员。标明该类的主要成员变量和方法以及和MineArea类之间组合关系的UML图如图4-6所示。
LayMines mineIconImageIcon layMinesForBlock(Block[][],int) MineArea lay:LayMines 图4-6 LayMines类的UML图
以下是UML图中有关数据和方法的详细说明。 (1) 成员变量
mineIcon用来存放一个格式gif的图像。 (2) 方法
layMinesForBlock(Block[][],int)方法对参数指定的Block数组进行设置,其中int参数制定雷的数目。当指定Block数组中某个单元中的方块是雷时,就将该方块上的图标设置为mineIcon。当指定Block数组中某个单元中的方块不是雷时,就将该方块上的名字设置为周围的雷的数目。
4.6 Record类
Record是javax.swing包中JDialog对话框的子类,并实现了ActionListener接口。Record创建的对象:record是MineArea类的成员之一,当用户扫雷成功时,该对象提供了保存成绩到文件的界面。标明Record类的主要成员变量、方法以及和MineArea类之间组合关系的UML图如图4-7所示。
JDialog ActionListener Record textName:JTextField 确定:JButton actionPerformed(ActionEvent):void writeRecord(String,String):void MineArea record:Record
图4-7 Record类的UML图
以下是UML图中有关数据和方法的详细说明。
13
(1) 成员变量
①textName提供用户扫雷优胜者输出姓名。 ②用户单击“确定”按钮,可以保存成绩。 (2) 方法
①actionPerformed(ActionEvent)方法是Record类实现的ActionListener接口中的方法,当用户单击“确定”按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时,然后调用writeRecord(String,String)方法将信息写入到“英雄榜”中。
②writeRecord(String,String)负责将有关信息,例如扫雷的用时、扫雷的级别以及扫雷优胜者的姓名等信息写入到“英雄榜”文件。
4.7 ShowRecord类
ShowRecord是javax.swing包中JDialog对话框的子类,并实现了ActionListener接口。ShowRecord创建的对象showHeroRecord是MineGame类(主类)的成员之一,当用户查看“英雄榜”菜单项时,该对画框可见,提供了查看扫雷的最好成绩的界面。标明ShowRecord类的主要成员变量、方法以及和MineGame类之间组合关系的UML图如图4-8所示。
JDialog ActionListener ShowRecord file:Fild 显示成绩,重新记分:JButton actionPerformed(ActionEvent):void readAndShow():void MineArea showHeroRecord:ShowRecord
图4-8 ShowRecord类的UML图
以下是UML图中有关数据和方法的详细说明。 (1) 成员变量
①File存放文件的引用。
②用户单击“显示成绩”按钮,可以查看各个级别扫雷的最好成绩。 ③用户单击“重新记分”按钮,可以将“英雄榜”中的成绩恢复为初始值。 (2) 方法
14
①actionPerformed(ActionEvent)方法是ShowRecord类实现的ActionListener接口中的方法,当用户单击“显示成绩”按钮后,该方法被执行,所执行的操作就是调用readAndShow( )方法。
②readAndShow( )方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些先关信息。
15