扫雷

来源:互联网 发布:java自学书籍推荐 编辑:程序博客网 时间:2024/05/01 21:13
package bomb.test.view;import javax.swing.JButton;public class Block extends JButton{public int x;public int y;public int bombNumber;public boolean isBomb;public boolean isClicked;public int rightClick;public Block(int x,int y) {// TODO Auto-generated constructor stubthis.x = x;this.y = y;bombNumber = 0;isBomb = false;isClicked = false;rightClick = 0;}}package bomb.test.view;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class MainForm extends JFrame implements ActionListener,MouseListener{private int count = 0;private int xBlocks,yBlocks;private int bombNumber = 40;private Block[][] block;private JPanel menu;private JPanel mainpanel;private JButton start;private ImageIcon flag,unknow,smile,sad,bomb,redbomb;public MainForm(int x,int y) {// TODO Auto-generated constructor stubthis.xBlocks =x;this.yBlocks = y;//initPicture();start = new JButton("开始");menu = new JPanel();mainpanel = new JPanel();mainpanel.setLayout(new GridLayout(xBlocks, yBlocks));initBlocks(xBlocks, yBlocks);menu.add(start);Container c = getContentPane();c.setBackground(Color.gray); c.setLayout(new BorderLayout()); c.add(menu,"North");c.add(mainpanel, "Center");this.setSize(700, 700);this.setLocation(0, 0);setBomb(40);}public void initBlocks(int x,int y) {block = new Block[x][y];for(int i=0;i<x;i++) {for(int j=0;j<y;j++) {block[i][j] = new Block(i, j);mainpanel.add(block[i][j]);block[i][j].addActionListener(this);block[i][j].addMouseListener(this);//block[i][j].setIcon(new ImageIcon(getClass().getResource("/picture/flag.jpg")));block[ i ][ j ].setForeground( Color.gray); //block[ i ][ j ].setOpaque(false);//block[ i ][ j ].setContentAreaFilled(false);//block[i][j].setText((3)+"");block[i][j].setIcon(flag);//block[i][j].setEnabled(false);}}}public void initPicture() {flag = new ImageIcon("flag.png");//bomb = new ImageIcon("src/picture/bomb.jpg");//redbomb = new ImageIcon("src/picture/rebomb.jpg");//sad = new ImageIcon("src/picture/sad.jpg");//smile = new ImageIcon("src/picture/smile.jpg");//unknow = new ImageIcon("src/picture/unknow.jpg");}public void setBomb(int bombNumber) {for(int k =0;k<bombNumber;k++) {//int x = ((int)Math.random())*(xBlocks-1);//int y = ((int)Math.random())*(yBlocks-1);int x =(int)(Math.random()*(xBlocks-1)); int y =(int)(Math.random()*(xBlocks-1)); System.out.println(x+"-"+y);if(block[x][y].isBomb==false) {block[x][y].isBomb=true;}else {k++;}}//数雷 for(int i=0;i<=(xBlocks-1);i++) {for(int j=0;j<=(yBlocks-1);j++) {if(block[i][j].isBomb){System.out.print("1-");}else {System.out.print("0-");}//上if(j-1>=0) {if(block[i][j-1].isBomb) {block[i][j].bombNumber++;}}//下if(j+1<=(yBlocks-1)) {if(block[i][j+1].isBomb) {block[i][j].bombNumber++;}}//左if(i-1>=0) {if(block[i-1][j].isBomb) {block[i][j].bombNumber++;}} //右if(i+1<=(xBlocks-1)) {if(block[i+1][j].isBomb) {block[i][j].bombNumber++;}} //左上 if(i-1>=0&&j-1>=0) {if(block[i-1][j-1].isBomb) {block[i][j].bombNumber++;}} //左下 if(i-1>=0&&j+1<=(yBlocks-1)) { if(block[i-1][j+1].isBomb) { block[i][j].bombNumber++; } } //右上 if(j-1>=0&&i+1<=(xBlocks-1)) { if(block[i+1][j-1].isBomb) { block[i][j].bombNumber++; } } //右下 if(i+1<=(xBlocks-1)&&j+1<=(yBlocks-1)) { if(block[i+1][j+1].isBomb) { block[i][j].bombNumber++; } }}System.out.print("\n");}}public void showAround(Block b) {count++;System.out.println(count);int i = b.x;int j = b.y; //点开它周围的格子//上if(j-1>=0) {if(!(block[i][j-1]).isClicked){showAround(block[i][j-1]);}}//下if(j+1<=(yBlocks-1)) {if(!(block[i][j+1]).isClicked){showAround(block[i][j+1]);}}//左if(i-1>=0) {if(!(block[i-1][j]).isClicked){showAround(block[i-1][j]);}} //右if(i+1<=(xBlocks-1)) {if(!(block[i+1][j]).isClicked){showAround(block[i+1][j]);}} //左上 if(i-1>=0&&j-1>=0) { if(!(block[i-1][j-1]).isClicked){showAround(block[i-1][j-1]);}} //左下 if(i-1>=0&&j+1<=(yBlocks-1)) { if(!(block[i-1][j+1]).isClicked){showAround(block[i-1][j+1]);} } //右上 if(j-1>=0&&i+1<=(xBlocks-1)) { if(!(block[i+1][j-1]).isClicked){showAround(block[i+1][j-1]);} } //右下 if(i+1<=(xBlocks-1)&&j+1<=(yBlocks-1)) { if(!(block[i+1][j+1]).isClicked){showAround(block[i+1][j+1]);} }//结束 b.isClicked=true; b.setEnabled(false); return;}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubBlock b = (Block)e.getSource();int i = b.x;int j = b.y;if(b.isBomb) {//显示本炸弹b.setText("B");//显示所有炸弹//终止游戏//点开始重新来}else {if(b.bombNumber==0) {b.setText("");showAround(b);}else {b.setText(b.bombNumber+""); }}b.isClicked=true;b.setEnabled(false); }@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}}package bomb.test.view;public class Teset {public static void main(String args[]) {MainForm mainform = new MainForm(16,16);mainform.setVisible(true);}}
原创粉丝点击