62,620
社区成员
发帖
与我相关
我的任务
分享import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MyFirstGame
{
private JFrame f;
private Container con;
private JPanel pUp, pDown;
private JMenuItem item1;
private JMenuItem item2;
private JMenuItem exitItem;
private JButton btn;
private MyButton[][] btns;
private JLabel l1;
private JLabel l2;
private Timer timer;
private int sum;
private int rows;
private int cols;
private int temp;
private boolean flag;
public MyFirstGame(){
f = new JFrame("");
con = f.getContentPane();
pUp = new JPanel();
pDown = new JPanel();
con.add(pUp, BorderLayout.NORTH);
con.add(pDown);
//处理Game菜单!!
JMenuBar bar=new JMenuBar();
JMenu menu=new JMenu("Game");
item1=new JRadioButtonMenuItem("Normal");
item2=new JRadioButtonMenuItem("Hard");
exitItem=new JMenuItem("Exit");
MenuActionListener listener = new MenuActionListener();
item1.addActionListener(listener);
item2.addActionListener(listener);
exitItem.addActionListener(listener);
menu.addSeparator();
menu.add(item1);
menu.add(item2);
menu.addSeparator();
menu.add(exitItem);
bar.add(menu);
f.setJMenuBar(bar);
ButtonGroup bg=new ButtonGroup();
bg.add(item1);
bg.add(item2);
reset(9, 9, 10);
timer = new Timer(1000, new TimerActionListener());
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
private void reset(int rows, int cols, int sum){
this.rows = rows;
this.cols = cols;
this.sum = sum;
temp = rows*cols-sum;
flag = false;
if(sum==10)
item1.setSelected(true);
if(sum==40)
item2.setSelected(true);
pUp.removeAll();
pUp.setLayout(new GridLayout(1, 3));
l1 = new JLabel(sum + "");
pUp.add(l1);
btn = new JButton("Restart");
btn.addActionListener(new StartActionListener());
pUp.add(btn);
l2 = new JLabel("0");
pUp.add(l2);
pDown.removeAll();
pDown.setLayout(new GridLayout(rows, cols));
btns = new MyButton[rows][cols];
initBtns();
f.pack();
f.validate();
}
private void initBtns(){
double temp = (double)sum/(rows*cols);
int num1 = sum;
int num2 = rows*cols;
for(int i=0; i<btns.length; i++){
for(int j=0; j<btns[i].length; j++){
double random = Math.random();
if(num1==0){
btns[i][j] = new MyButton("ㅂ", i, j);
num2--;
}else if(num1==num2){
btns[i][j] = new MyButton("ㅂ", false, true, i, j);
num1--;
num2--;
}else if(random>temp){
btns[i][j] = new MyButton("ㅂ", i, j);
num2--;
}else if(random<=temp){
btns[i][j] = new MyButton("ㅂ", false, true, i, j);
num1--;
num2--;
}
pDown.add(btns[i][j]);
btns[i][j].addMouseListener(new NormalMouseListener());
}
}
}
class TimerActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
l2.setText(Integer.parseInt(l2.getText())+1+"");
}
};
class MenuActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object source=e.getSource();
//get information of the button that be push
if(source==item1)
{
item1.setSelected(true);
//the method setSelected:set up the menu is selected or not!
reset(9,9,10);
}
else if(source==item2)
{
item2.setSelected(true);
reset(16,16,40);
}
else
{
System.exit(0);
}
}
};
class StartActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(item1.isSelected()==true)
reset(9, 9, 10);
else if(item2.isSelected()==true)
reset(16, 16, 40);
}
};
class NormalMouseListener extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
if(!flag){
timer.start();
flag = true;
}
MyButton btn = (MyButton)e.getSource();
if(btn.isEnabled()==false)
return;
if(e.getButton()==MouseEvent.BUTTON1/*鼠标左键*/){
if(btn.getText().equals("*"))
l1.setText(Integer.parseInt(l1.getText())+1 + "");
if(btn.getB2()==true){
l2.setText("Game over ,You lose!!!!");
showAll();
}
else{
showLeave(btn.getRow(), btn.getCol());
}
}else if(e.getButton()==MouseEvent.BUTTON3/*鼠标右键*/){
if(btn.getText().equals("*")){
btn.setText("ㅂ");
l1.setText(Integer.parseInt(l1.getText())+1 + "");
}else{
btn.setText("*");
l1.setText(Integer.parseInt(l1.getText())-1 + "");
}
}
f.validate();
}
//显示所有MyButton信息
private void showAll()
{
timer.stop();
for(int i=0; i<btns.length; i++){
for(int j=0; j<btns[i].length; j++){
if(btns[i][j].getB2()==true)
btns[i][j].setText("*");
else{
int num = check(i, j);
if(num==0)
btns[i][j].setText("");
else
btns[i][j].setText(""+num);
}
btns[i][j].setEnabled(false);
}
}
}
//显示点击MyButton应显示的信息!
private void showLeave(int row, int col)
{
int num = check(row, col);
btns[row][col].setB1(true);
if(--temp == 0)
{
l2.setText("you win take " + l2.getText() + "seconds!");
showAll();
}
btns[row][col].setEnabled(false);
if(num>0)
btns[row][col].setText(""+num);
else{
btns[row][col].setText("");
if(row-1>=0 && col-1>=0 && btns[row-1][col-1].getB1()==false){
showLeave(row-1,col-1);
}
if(row-1>=0 && btns[row-1][col].getB1()==false){
showLeave(row-1, col);
}
if(row-1>=0 && col+1<cols && btns[row-1][col+1].getB1()==false){
showLeave(row-1, col+1);
}
if(col-1>=0 && btns[row][col-1].getB1()==false){
showLeave(row, col-1);
}
if(col+1<cols && btns[row][col+1].getB1()==false){
showLeave(row, col+1);
}
if(row+1<rows && col-1>=0 && btns[row+1][col-1].getB1()==false){
showLeave(row+1, col-1);
}
if(row+1<rows && btns[row+1][col].getB1()==false){
showLeave(row+1, col);
}
if(row+1<rows && col+1<cols && btns[row+1][col+1].getB1()==false){
showLeave(row+1, col+1);
}
}
}
//检查周围地雷数量
private int check(int row, int col)
{
int count=0;
if(row-1>=0 && col-1>=0 && btns[row-1][col-1].getB2()==true)
count++;
if(row-1>=0 && btns[row-1][col].getB2()==true)
count++;
if(row-1>=0 && col+1<cols && btns[row-1][col+1].getB2()==true)
count++;
if(col-1>=0 && btns[row][col-1].getB2()==true)
count++;
if(col+1<cols && btns[row][col+1].getB2()==true)
count++;
if(row+1<rows && col-1>=0 && btns[row+1][col-1].getB2()==true)
count++;
if(row+1<rows && btns[row+1][col].getB2()==true)
count++;
if(row+1<rows && col+1<cols && btns[row+1][col+1].getB2()==true)
count++;
return count;
}
};
public static void main(String[] args)
{
new MyFirstGame();
}
}
/************************************************************************************/
import javax.swing.*;
public class MyButton extends JButton
{
private boolean b1;
private boolean b2;
private int row;
private int col;
public MyButton(String text, boolean b1, boolean b2, int row, int col)
{
setText(text);
this.b1 = b1;
this.b2 = b2;
this.col = col;
this.row = row;
}
public MyButton(int row, int col)
{
this("", false, false, row, col);
}
public MyButton(String text, int row, int col)
{
this(text, false, false, row, col);
}
public void setB1(boolean b1)
{
this.b1=b1;
}
public void setB2(boolean b2)
{
this.b2=b2;
}
public boolean getB1()
{
return b1;
}
public boolean getB2()
{
return b2;
}
public int getRow(){
return row;
}
public int getCol(){
return col;
}
}