java扫雷代码漂亮界面 java扫雷项目总结

怎样用JAVA实现扫雷游戏要详细代码?还是只要启动?
java编写实现,代码如下:import Java.awt.*;
import java.awt.event.*;
import javax.Swing.*;
/*按扭类*/
class Bomb extends JButton
{
public int num_x,num_y;//第几号方块
public int BombRoundCount;//周围雷数
public boolean isBomb;//是否为雷
public boolean isClicked;//是否被点击
public int BombFlag;//探雷标记
public boolean isRight;//是否点击右键
public Bomb(int x,int y)
{
BombFlag = 0;
num_x = x;
num_y = y;
BombRoundCount = 0;
isBomb = false;
isClicked = false;
isRight = false;
}
}
/*窗口及算法实现类*/
class MainBomb extends JFrame implements ActionListener,MouseListener
{
public JTextField text;
public Label nowBomb,setBomb;
public int BlockNum,BombNum;//当前方块数当前雷数
public Icon icon_bomb = new ImageIcon("Bomb.gif");//踩雷
public Icon icon_bomb_big = new ImageIcon("bomb_big.gif");//踩雷标记
public Icon icon_flag = new ImageIcon("flag.gif");//雷标记
public Icon icon_question = new ImageIcon("question.gif");//疑惑是否有雷
public JButton start = new JButton(" 开始 ");
public Panel MenuPamel = new Panel();
public Panel mainPanel = new Panel();
public Bomb[][] bombButton;
/*界面设计*/
public MainBomb()
{
super("扫雷Aaron2004制作 2004.8 ");
BlockNum = 64;
BombNum = 10;
Container c=getContentPane();
c.setBackground(Color.gray);
c.setLayout(new BorderLayout());
text=new JTextField("10 ",3);
nowBomb = new Label("当前雷数" "" BombNum "");
setBomb= new Label("设置地雷数");
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
BombNum = Integer.parseInt(text.getText().trim());
if(BombNum = 10BombNum50 )
replay();
else
{
JOptionPane msg = new JOptionPane();
JOptionPane.showMessageDialog(null,"您设置的地雷数太多了,请重设!","错误",2);
}
}
} );
MenuPamel.add(setBomb);
MenuPamel.add(text);
MenuPamel.add(start);
MenuPamel.add(nowBomb);
c.add(MenuPamel,"North");
mainPanel.setLayout(new GridLayout( (int)Math.sqrt(BlockNum) , (int)Math.sqrt(BlockNum)) );
bombButton=new Bomb[ (int)Math.sqrt(BlockNum) ][];
for(int i = 0 ; i(int)Math.sqrt(BlockNum) ; i)
{
bombButton[ i ]=new Bomb[ (int)Math.sqrt(BlockNum) ];
}
for(int i = 0 ; i(int)Math.sqrt(BlockNum) ; i)
for(int j = 0 ; j(int)Math.sqrt(BlockNum) ; j)
{
bombButton[ i ][ j ]=new Bomb(i,j);
bombButton[ i ][ j ].setForeground( Color.gray);
bombButton[ i ][ j ].addActionListener(this);
bombButton[ i ][ j ].addMouseListener(this);
}
for(int i = 0 ; i(int)Math.sqrt(BlockNum) ; i)
for(int j = 0 ; j(int)Math.sqrt(BlockNum) ; j)
mainPanel.add(bombButton[ i ][ j ]);
c.add(mainPanel,"Center");
startBomb();
setSize(400,400);
setLocation(350,200);
setResizable(false);
}
/*布雷*/
public void startBomb()
{
for(int i=0;iBombNum;i)
{
int x =(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));
int y =(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));
if(bombButton[ x ][ y ].isBomb==true)
i--;
else
bombButton[ x ][ y ].isBomb=true ;
}
}
/*重新开始*/
public void replay()
{
nowBomb.setText("当前雷数" "" BombNum "");
for(int i = 0 ; i(int)Math.sqrt(BlockNum) ; i)
for(int j = 0 ; j(int)Math.sqrt(BlockNum) ; j)
{
bombButton[ i ][ j ].isBomb=false;
bombButton[ i ][ j ].isClicked=false;
bombButton[ i ][ j ].setEnabled(true);
bombButton[ i ][ j ].setText("");
bombButton[ i ][ j ].setIcon(null);
}
startBomb();
}
/*是否挖完了所有的雷*/
public void isWin()
{
int findBomb=0;//找到的地雷数
for(int i = 0;i(int)Math.sqrt(BlockNum) ; i)
for(int j = 0;j(int)Math.sqrt(BlockNum ); j)
{
if(bombButton[ i ][ j ].isBomb == truebombButton[ i ][ j ].isRight == true)
findBomb;
}
if( findBomb == Integer.parseInt(text.getText().trim()) )
{
JOptionPane msg = new JOptionPane();
JOptionPane.showMessageDialog(this,"您挖完了所有的雷,您胜利了!","您胜利了",2);
}
}
/*计算方块周围雷数 */
public void CountRoundBomb()
{
for (int i = 0; i(int)Math.sqrt(BlockNum); i) {
for (int j = 0; j(int)Math.sqrt(BlockNum); j) {
int count = 0;
//当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数
if (bombButton[ i ][ j ].isBomb != true) {
if ( (i - 1 = 0)(j - 1 = 0)) {
if (bombButton[i - 1][j - 1].isBomb == true) {
count= 1; //检测左上方空格是否是地雷
}
}
if ( (i - 1 = 0)) {
if (bombButton[i - 1][ j ].isBomb == true) {
count= 1; //检测上方空格是否为地雷
}
}
if ( (i - 1 = 0)(j1 = (int)Math.sqrt(BlockNum)-1)) {
if (bombButton[i - 1][j1] .isBomb == true) {
count= 1; //检测右上方是否为地雷
}
}
if ( (j - 1 = 0)) {
if (bombButton[ i ][j - 1] .isBomb == true) {
count= 1; //检测左边是否为地雷
}
}
if ( (i = 0)(j1 = (int)Math.sqrt(BlockNum)-1)) {
if (bombButton[ i ][j1].isBomb == true) {
count= 1; //右边
}
}
if ( (j - 1 = 0)(i1 = (int)Math.sqrt(BlockNum)-1)) {
if (bombButton[i1][j - 1].isBomb == true) {
count= 1; //左下
}
}
if ( (i1 = (int)Math.sqrt(BlockNum)-1)) {
if (bombButton[i1][ j ].isBomb == true) {
count= 1; //下
}
}
if ( (j1 = (int)Math.sqrt(BlockNum)-1)(i1 = Math.sqrt(BlockNum)-1)) {
if (bombButton[i1][j1].isBomb == true) {
count= 1; //右下
}
}
bombButton[ i ][ j ].BombRoundCount = count;
}
}
}
}
/**当选中的位置为空,则翻开周围的地图**/
public void isNull(Bomb[][] bombButton,Bomb ClickecButton)
{
int i,j;
i=ClickecButton.num_x;
j=ClickecButton.num_y;
if (ClickecButton.isBomb==true) {
}
else {
if ( (i - 1 = 0)(j - 1 = 0)) { //检测左上方空格是否是空
if (bombButton[i - 1][j - 1].isBomb == falsebombButton[i - 1][j - 1].isClicked == falsebombButton[i - 1][j - 1].isRight == false) {
bombButton[i - 1][j - 1].setText((bombButton[i - 1][j - 1].BombRoundCount) "");
bombButton[i - 1][j - 1].setEnabled(false);
bombButton[i - 1][j - 1].isClicked=true;
}
}
if ( (i - 1 = 0)) { //检测上方空格是否为空
if (bombButton[i - 1][ j ] .isBomb == falsebombButton[i - 1][ j ].isClicked == falsebombButton[i - 1][ j ].isRight == false) {
bombButton[i - 1][ j ].setText((bombButton[i - 1][ j ].BombRoundCount) "");
bombButton[i - 1][ j ].setEnabled(false);
bombButton[i - 1][ j ].isClicked=true;
}
}
if ( (i - 1 = 0)(j1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测右上方是否为空
if (bombButton[i - 1][j1] .isBomb == falsebombButton[i - 1][j1].isClicked == falsebombButton[i - 1][j1].isRight == false) {
bombButton[i - 1][j1].setText((bombButton[i - 1][j1].BombRoundCount) "");
bombButton[i - 1][j1].setEnabled(false);
bombButton[i - 1][j1].isClicked=true;
}
}
if ( (j - 1 = 0)) { //检测左边是否为空
if (bombButton[ i ][j - 1].isBomb == falsebombButton[ i ][j - 1].isClicked == falsebombButton[ i ][j - 1].isRight == false) {
bombButton[ i ][j - 1].setText((bombButton[ i ][j - 1].BombRoundCount) "");
bombButton[ i ][j - 1].setEnabled(false);
bombButton[ i ][j - 1].isClicked=true;
}
}
if ( (i = 0)(j1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测右边空格是否是空
if (bombButton[ i ][j1].isBomb == falsebombButton[ i ][j1].isClicked == falsebombButton[ i ][j1].isRight == false) {
bombButton[ i ][j1].setText((bombButton[ i ][j1].BombRoundCount) "");
bombButton[ i ][j1].setEnabled(false);
bombButton[ i ][j1].isClicked=true;
}
}
if ( (j - 1 = 0)(i1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测左下空格是否是空
if (bombButton[i1][j - 1].isBomb == falsebombButton[i1][j - 1].isClicked == falsebombButton[i1][j - 1].isRight == false) {
bombButton[i1][j - 1].setText((bombButton[i1][j - 1].BombRoundCount) "");
bombButton[i1][j - 1].setEnabled(false);
bombButton[i1][j - 1].isClicked=true;
}
}
if ( (i1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测下边空格是否是空
if (bombButton[i1][ j ].isBomb == falsebombButton[i1][ j ].isClicked == falsebombButton[i1][ j ].isRight == false) {
bombButton[i1][ j ].setText((bombButton[i1][ j ].BombRoundCount) "");
bombButton[i1][ j ].setEnabled(false);
bombButton[i1][ j ].isClicked=true;
}
}
if ( (j1 = ((int)Math.sqrt(BlockNum)-1) )(i1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测右下边空格是否是空
if (bombButton[i1][j1].isBomb == falsebombButton[i1][j1].isClicked == falsebombButton[i1][j1].isRight == false) {
bombButton[i1][j1].setText((bombButton[i1][j1].BombRoundCount) "");
bombButton[i1][j1].setEnabled(false);
bombButton[i1][j1].isClicked=true;
}
}
if ( (i - 1 = 0)(j - 1 = 0))//检测左上
isNull(bombButton,bombButton[i - 1][j - 1]);
if ( (i - 1 = 0))
isNull( bombButton,bombButton[i - 1][ j ]);//检测上方
if ( (i - 1 = 0)(j1 = (int)Math.sqrt(BlockNum)-1))
isNull( bombButton,bombButton[i - 1][j1]);//检测右上
if ( (j - 1 = 0))
isNull(bombButton,bombButton[i][j - 1]);//检测左边
if ( (i = 0)(j1 = ((int)Math.sqrt(BlockNum)-1)) )
isNull(bombButton,bombButton[i][j1]);//检测右边
if ( (j - 1 = 0)(i1 = ((int)Math.sqrt(BlockNum)-1)) )
isNull(bombButton,bombButton[i1][j - 1]); //检测左下
if ( (i1 = ((int)Math.sqrt(BlockNum)-1)) ) //检测下
isNull(bombButton,bombButton[i1][ j ]);
if ( (j1 = ((int)Math.sqrt(BlockNum)-1))(i1 = ((int)Math.sqrt(BlockNum)-1)) ) //检测右下
isNull(bombButton,bombButton[i1][j1]);
}
}
public void actionPerformed(ActionEvent e)
{
CountRoundBomb();
if(((Bomb)e.getSource()).isBomb==false((Bomb)e.getSource()).isClicked == false)
{
((Bomb)e.getSource()).setText(( ((Bomb)e.getSource()).BombRoundCount ) "");
((Bomb)e.getSource()).isClicked=true;
((Bomb)e.getSource()).setIcon(null);
((Bomb)e.getSource()).setEnabled(false);
if((((Bomb)e.getSource()).BombRoundCount) == 0)
isNull(bombButton,(Bomb)e.getSource());
isWin();
}
else if(((Bomb)e.getSource()).isBomb == true)
{
for(int i=0;i(int)Math.sqrt(BlockNum);i)
for(int j=0;j(int)Math.sqrt(BlockNum);j)
{
if(bombButton[ i ][ j ].isBomb == true)
bombButton[ i ][ j ].setIcon(icon_bomb);
}
((Bomb)e.getSource()).setIcon(icon_bomb_big);
JOptionPane msg = new JOptionPane();
JOptionPane.showMessageDialog(this,"你踩到地雷了,按确定重来","你踩到地雷了",2);
replay();
}
}
public void mouseClicked(MouseEvent e)
{
Bomb bombSource = (Bomb)e.getSource();
boolean right = SwingUtilities.isRightMouseButton(e);
if((right == true)(bombSource.isClicked == false))
{
bombSource.BombFlag = (bombSource.BombFlag1)%3;
if(bombSource.BombFlag == 1)
{
if(BombNum0bombSource.isRight == false ){
bombSource.setIcon(icon_flag);
bombSource.isRight = true;
BombNum--;
}
isWin();
nowBomb.setText("当前雷数" "" BombNum "");
}
else if(bombSource.BombFlag == 2)
{
if( (BombNum !=0 ) ||(BombNum ==0 (bombSource.getIcon()==icon_flag)) )
BombNum;
bombSource.setIcon(icon_question);
nowBomb.setText("当前雷数" "" BombNum "");
}
else if(bombSource.BombFlag == 0)
{
bombSource.setIcon(null);
bombSource.isRight = false;
}
}
}
public void mouseEntered(MouseEvent e)
{}
public void mouseReleased(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{}
}
/*主类*/
public class Main
{
public static void main(String args[])
{
(new MainBomb()).show();
}
}
java中如何写扫雷界面,特别是方格布局可以用GridLayout布局
JPanel pa = new JPanel(new GridLayout(30,30,0,0);
创建一个面板并采用表格布局java扫雷代码漂亮界面,横向30个单元java扫雷代码漂亮界面 , 竖向30个单元java扫雷代码漂亮界面 , 单元java扫雷代码漂亮界面的间隔为0
然后再创建数组用于管理按钮,按钮在add到这个面板时会自动按以上布局排列
怎样用Java语言在Eclipse中写个和windows自带的那样的“扫雷”游戏 , 一模一样的import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
*
* @author zhan
*
*N年前写的扫雷了 。。有没有BUG也懒得改了 。。
*最少是3年前写的了 。。如果我现在写肯定不这样写了 。。。汗
*/
public class Minesweeper extends JFrame implements ActionListener {
ArrayListInteger random = new ArrayListInteger();
LButton[] bombs = new LButton[81];
boolean finish = false;
boolean win = false;
//设置窗口
public void lanchFrame() {
this.setBounds(0, 0, 500, 500);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setTitle("Minesweeper0.1");
addBombArea();
setVisible(true);
}
//显示所有炸弹
public void showBombs() {
for (int i = 0; i10; i) {
bombs[random.get(i)].setBackground(Color.BLACK);
}
}
//添加组件
public void addBombArea() {
JPanel bombArea = new JPanel();
bombArea.setLayout(new GridLayout(9, 9, 1, 1));
for (int i = 0; i81; i) {
bombs[i] = new LButton();
bombs[i].setPosition(i);
bombs[i].addActionListener(this);
bombArea.add(bombs[i]);
}
setBombs();
this.add(bombArea, BorderLayout.CENTER);
}
//设置炸弹的方法
public void setBombs() {
randomNo();
for (int i = 0; i10; i) {
bombs[random.get(i)].setBomb();
}
}
//获胜的条件
public boolean youWIn() {
for (int i = 0; i10; i) {
bombs[random.get(i)].setShow(true);
}
win = true;
for (int i = 0; i81; i) {
if (!bombs[i].isShow()) {
win = false;
}
}
for (int i = 0; i10; i) {
bombs[random.get(i)].setShow(false);
}
return win;
}
//取得随机数字的方法
public void randomNo() {
random.clear();
for (int i = 0; i81; i) {
random.add(new Integer(i));
}
Collections.shuffle(random);
}
//扫雷的方法 。。。。用的递归
public void sweeping(LButton checkButton) {
int[] girdNum = new int[8];
int sum = 0;
if (checkButton.isBomb()) {
finish = true;
JOptionPane.showMessageDialog(null, "you lose", "System:",
JOptionPane.INFORMATION_MESSAGE, null);
showBombs();
} else {
if (!checkButton.isShow()) {
girdNum[0] = checkButton.getPosition() - 10;
girdNum[0] = (girdNum[0]0 || (girdNum[0] % 8) == 0) ? -1
: girdNum[0];
girdNum[1] = checkButton.getPosition() - 9;
girdNum[1] = (girdNum[1]0) ? -1 : girdNum[1];
girdNum[2] = checkButton.getPosition() - 8;
girdNum[2] = (girdNum[2]0 || (girdNum[2] % 9) == 0) ? -1
: girdNum[2];
girdNum[3] = checkButton.getPosition() - 1;
girdNum[3] = (girdNum[3] % 8 == 0) ? -1 : girdNum[3];
girdNum[4] = checkButton.getPosition()1;
girdNum[4] = (girdNum[4] % 9 == 0) ? -1 : girdNum[4];
girdNum[5] = checkButton.getPosition()8;
girdNum[5] = (girdNum[5]80 || (girdNum[5] % 8) == 0) ? -1
: girdNum[5];
girdNum[6] = checkButton.getPosition() |9;
girdNum[6] = (girdNum[6]80) ? -1 : girdNum[6];
girdNum[7] = checkButton.getPosition()10;
girdNum[7] = (girdNum[7]80 || (girdNum[7] % 9) == 0) ? -1
: girdNum[7];
for (int i = 0; i8; i) {
if (girdNum[i] != -1) {
if (bombs[girdNum[i]].isBomb()
!bombs[girdNum[i]].isShow())
sum;
}
}
if (sum0) {
checkButton.setShow(true);
checkButton.setBackground(Color.gray);
checkButton.setText(""sum);
sum = 0;
} else if (sum == 0) {
checkButton.setShow(true);
checkButton.setBackground(Color.gray);
for (int i = 0; i8; i) {
if (girdNum[i] != -1!bombs[girdNum[i]].isShow()) {
sweeping(bombs[girdNum[i]]);
}
}
}
}
if (youWIn()) {
JOptionPane.showMessageDialog(null, "You win?。?, "System: ",
JOptionPane.INFORMATION_MESSAGE, null);
showBombs();
finish = true;
}
}
}
public static void main(String[] args) {
Minesweeper myMinesweeper = new Minesweeper();
myMinesweeper.lanchFrame();
}
public void actionPerformed(ActionEvent e) {
LButton a = (LButton) (e.getSource());
if (!finish) {
sweeping(a);
}
}
//自定义的Jbutton用于更好的显示扫雷界面
public class LButton extends JButton {
private int position;
private boolean bomb;
private boolean show;
public LButton() {
super();
}
public LButton(Action a) {
super(a);
}
public LButton(Icon icon) {
super(icon);
}
public LButton(String text, Icon icon) {
super(text, icon);
}
public LButton(String text) {
super(text);
}
public boolean isShow() {
return show;
}
public void setShow(boolean show) {
this.show = show;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
public boolean isBomb() {
return bomb;
}
public void setBomb() {
this.bomb = true;
}
}
}
【java扫雷代码漂亮界面 java扫雷项目总结】java扫雷代码漂亮界面的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于java扫雷项目总结、java扫雷代码漂亮界面的信息别忘了在本站进行查找喔 。

    推荐阅读