?? allbuttonpanel.java
字號:
package cleanmine;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import tmine.CleanMine;
import tmine.MineButton;
public class AllButtonPanel extends JPanel implements ActionListener{
private int row;
private int col;
private int minecount;
private JButton[][] buttons;
private int[][] buttonsMark;
public static int index = 0;
public AllButtonPanel(int row,int col, int minecount){
this.row= row;
this.col = col;
this.minecount= minecount;
buttons = new JButton[row][col];
buttonsMark = new int[row][col];
creatmine();
// creatButtons();
createButtons();
init();
}
// public void stop(){
// for(int i =0;i<buttons.length;i++){
// for(int j = 0;j<buttons[i].length;j++){
// if()
// }
// }
// }
//
public void init(){
this.setLayout(new GridLayout(row,col));
for(int i = 0;i<buttons.length;i++){
for(int j= 0;j<buttons[i].length;j++){
this.add(buttons[i][j]);
}
}
}
public void creatmine(){
int n = 0;
while(n<=minecount){
int i =(int)(Math.random()*row);
int j = (int)(Math.random()*col);
if(buttonsMark[i][j]!=-1){
buttonsMark[i][j]=-1;
n++;
}
}
for(int i = 0;i<buttons.length;i++){
for(int j = 0;j<buttons[i].length;j++){
if(buttonsMark[i][j]!=-1){
buttonsMark[i][j] = getSurroundMineCount(buttonsMark,i,j);
}
}
}
}
public int getSurroundMineCount(int[][] data,int i,int j){
int num=0;//統計周圍的雷數
if(i-1>=0&&j-1>=0){
num+=(data[i-1][j-1]==-1?1:0);
}
if(i-1>=0){
num+=(data[i-1][j]==-1?1:0);
}
if(i-1>=0&&j+1<data[0].length){
num+=(data[i-1][j+1]==-1?1:0);
}
if(j-1>=0){
num+=(data[i][j-1]==-1?1:0);
}
if(j+1<data[0].length){
num+=(data[i][j+1]==-1?1:0);
}
if(i+1<data.length&&j-1>=0){
num+=(data[i+1][j-1]==-1?1:0);
}
if(i+1<data.length){
num+=(data[i+1][j]==-1?1:0);
}
if(i+1<data.length&&j+1<data[0].length){
num+=(data[i+1][j+1]==-1?1:0);
}
return num;
}
//
// public void creatButtons(){
// for(int i = 0;i<buttons.length;i++){
// for(int j= 0;j<buttons[i].length;j++){
// buttons[i][j]= new MineButton(i, j);
// buttons[i][j].setSize(6, 6);
// buttons[i][j].addActionListener(this);
// buttons[i][j].addMouseListener(new MouseAdapter(){
//
// public void mouseClicked(MouseEvent e) {
// if(e.getButton()== MouseEvent.BUTTON3){
//// int remain = Integer.parseInt(CleanMine.remainMine.getText());
// int remain=Integer.parseInt(CleanMine.remainMine.getText());
// JButton jb =(JButton) e.getSource();
// if(jb.getText().equals("")){
// remain--;
// CleanMine.remainMine.setText(remain+"");
// jb.setText("@");
// }else if(jb.getText().equals("@")){
// remain++;
// CleanMine.remainMine.setText(remain+"");
// jb.setText("");
// }
// }
// }
//
//
//
// });
// }
// }
// }
//
private void createButtons(){
for(int i=0;i<buttons.length;i++){
for(int j=0;j<buttons[i].length;j++){
buttons[i][j]=new MineButton(i,j);
buttons[i][j].setSize(6,6);
buttons[i][j].addActionListener(this);
buttons[i][j].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
if(e.getButton()==MouseEvent.BUTTON3){//?????
int remain=Integer.parseInt(CleanMine.remainMine.getText());
JButton b=(JButton)e.getSource();
if(b.getText().equals("")){
remain--;
CleanMine.remainMine.setText(remain+"");
b.setText("&");
}else if(b.getText().equals("&")){
remain++;
CleanMine.remainMine.setText(remain+"");
b.setText("");
}
}
}
});
}
}
}
public void actionPerformed(ActionEvent e) {
MineButton b=(MineButton)e.getSource();
int r=b.getRow();
int c=b.getCol();
if(buttonsMark[r][c]==-1){//如果是地雷
for(int i=0;i<buttons.length;i++){
for(int j=0;j<buttons[i].length;j++){
if(buttonsMark[i][j]==-1){
buttons[i][j].setText("$");
}else if(buttonsMark[i][j]==0){
buttons[i][j].setText("");
buttons[i][j].setBackground(Color.CYAN);
}else{
buttons[i][j].setText(buttonsMark[i][j]+"");
buttons[i][j].setBackground(Color.CYAN);
}
}
}
}else{//如果不是雷
showEmpty(buttonsMark,r,c);
}
}
private void showEmpty(int[][] data,int i,int j){
MineButton b=(MineButton)buttons[i][j];
if(b.isCleared()){
return;
}
if(buttonsMark[i][j]==0){
b.setBackground(Color.CYAN);
b.setCleared(true);
if(i-1>=0&&j-1>=0){
showEmpty(data,i-1,j-1);
}
if(i-1>=0){
showEmpty(data,i-1,j);
}
if(i-1>=0&&j+1<data[0].length){
showEmpty(data,i-1,j+1);
}
if(j-1>=0){
showEmpty(data,i,j-1);
}
if(j+1<data[0].length){
showEmpty(data,i,j+1);
}
if(i+1<data.length&&j-1>=0){
showEmpty(data,i+1,j-1);
}
if(i+1<data.length){
showEmpty(data,i+1,j);
}
if(i+1<data.length&&j+1<data[0].length){
showEmpty(data,i+1,j+1);
}
}else if(buttonsMark[i][j]>0){
b.setText(buttonsMark[i][j]+"");
b.setBackground(Color.CYAN);
b.setCleared(true);
index++;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -