自定义JButton子类:
//ExtendButton.java
package ly.java;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ExtendButton extends JButton
{
private int Button_Pos;
private boolean Button_Status;
private boolean Button_Visited;
public int SetPostion(int pos)
{
this.Button_Pos &#61; (pos >&#61; 0 && pos <&#61; 81) ? pos : 0;
return this.Button_Pos ;
}
public int GetPostion()
{
return this.Button_Pos;
}
public boolean SetStatus(boolean sta)
{
this.Button_Status &#61; sta;
return this.Button_Status;
}
public boolean GetStatus()
{
return this.Button_Status;
}
public boolean Visited()
{
return this.Button_Visited;
}
public boolean SetVisited(boolean vis)
{
this.Button_Visited &#61; vis;
return this.Button_Visited;
}
}
游戏类
//Game.java
package ly.java.game;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import ly.java.ExtendButton;
public class Game extends JFrame implements ActionListener{
private Container myContainer;
private GridLayout myLayout;
ExtendButton[] myButton &#61; new ExtendButton[81];
private Game()
{
this.setTitle("Game");
this.setSize( 500,500 );
this.InitButton();
}
private void InitButton()
{
myContainer &#61; getContentPane();
myLayout &#61; new GridLayout( 9, 9, 1, 1 );
myContainer.setLayout( myLayout );
for(int i&#61;0; i <81; i&#43;&#43;)
{
myButton[i] &#61; new ExtendButton();
myButton[i].SetPostion(i);
myContainer.add(myButton[i]);
myButton[i].addActionListener( this );
}
System.gc();
this.SetBomb(13);
show();
}
private void SetBomb(int count)
{
int counter &#61; 0;
int tempint;
while(counter !&#61; count)
{
tempint &#61; ( int )(Math.random() * 81);
if(!myButton[tempint].GetStatus())
{
myButton[tempint].SetStatus(true);
counter&#43;&#43;;
}
}
}
private void ShowBomb()
{
for(int i &#61; 0; i <81; i&#43;&#43;)
{
if(myButton[i].GetStatus())
{
myButton[i].setBackground( new Color(0,0,0) );
}
}
}
private void CheckButton(ExtendButton TempButton)
{
if(TempButton.GetStatus())
{
JOptionPane.showMessageDialog( null, "You Failed!", "Game",JOptionPane.INFORMATION_MESSAGE );
this.ShowBomb();
return;
}
int[] CircleNum &#61; new int[8];
int temp &#61; 0;
if(!TempButton.Visited())
{
CircleNum[0] &#61; TempButton.GetPostion() - 9;
CircleNum[0] &#61; (CircleNum[0] <0) ? -1 : CircleNum[0];
CircleNum[1] &#61; TempButton.GetPostion() - 8;
CircleNum[1] &#61; (CircleNum[1] <0 || CircleNum[1] % 9 &#61;&#61; 0) ? -1 : CircleNum[1];
CircleNum[2] &#61; TempButton.GetPostion() &#43; 1;
CircleNum[2] &#61; (CircleNum[2] % 9 &#61;&#61; 0) ? -1 : CircleNum[2];
CircleNum[3] &#61; TempButton.GetPostion() &#43; 10;
CircleNum[3] &#61; (CircleNum[3] > 80 || CircleNum[3] % 9 &#61;&#61; 0) ? -1 : CircleNum[3];
CircleNum[4] &#61; TempButton.GetPostion() &#43; 9;
CircleNum[4] &#61; (CircleNum[4] > 80) ? -1 : CircleNum[4];
CircleNum[5] &#61; TempButton.GetPostion() &#43; 8;
CircleNum[5] &#61; (CircleNum[5] > 80 || CircleNum[5] % 8 &#61;&#61; 0) ? -1 : CircleNum[5];
CircleNum[6] &#61; TempButton.GetPostion() - 1;
CircleNum[6] &#61; (CircleNum[6] % 8 &#61;&#61; 0) ? -1 : CircleNum[6];
CircleNum[7] &#61; TempButton.GetPostion() - 10;
CircleNum[7] &#61; (CircleNum[7] <0 || CircleNum[7] % 8 &#61;&#61; 0) ? -1 : CircleNum[7];
for(int i &#61; 0; i <8; i&#43;&#43;)
{
if(CircleNum[i] !&#61; -1)
{
if(myButton[CircleNum[i]].GetStatus() && !myButton[CircleNum[i]].Visited()) temp&#43;&#43;;
}
}
if(temp > 0)
{
TempButton.SetVisited( true );
TempButton.setText( String.valueOf(temp) );
temp &#61; 0;
}
else if(temp &#61;&#61; 0)
{
TempButton.SetVisited( true );
TempButton.setBackground(new Color( 125,152,0 ));
for(int i &#61; 0; i <8; i&#43;&#43;)
{
if(CircleNum[i] !&#61; -1 && !myButton[CircleNum[i]].Visited())
{
CheckButton(myButton[CircleNum[i]]);
}
}
}
}
}
public void actionPerformed(ActionEvent e)
{
CheckButton((ExtendButton)e.getSource());
}
public static void main(String[] args)
{
Game newGame &#61; new Game();
newGame.addWindowListener(
new WindowAdapter(){
public void windowClosing( WindowEvent e )
{
System.exit(0);
}
}
);
}
}