189 8069 5689

java扫雷可设代码详解 java扫雷设计报告

求高手帮忙一个“扫雷”游戏的JAVA的程序代码

import javax.swing.ImageIcon; //程序入口

网站设计制作、成都网站建设服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联公司把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!

public class Block {

String name; //名字,比如"雷"或数字

int aroundMineNumber; //周围雷的数目

ImageIcon mineIcon; //雷的图标

boolean isMine=false; //是否是雷

boolean isMark=false; //是否被标记

boolean isOpen=false; //是否被挖开

public void setName(String name) {

this.name=name;

}

//设置周围的雷数基绝

public void setAroundMineNumber(int n) {

aroundMineNumber=n;

}

//获得周围的雷数

public int getAroundMineNumber() {

return aroundMineNumber;

}

public String getName() {

return name;

}

//判断是否是雷

public boolean isMine() {

return isMine;

}

//设置是否为雷

public void setIsMine(boolean b) {

isMine=b;

}

//设置雷的图标

public void setMineIcon(ImageIcon icon){

mineIcon=icon;

}

//获得雷的图标

public ImageIcon getMineicon(){

return mineIcon;

}

//确定雷是否被挖开搏逗姿

public boolean getIsOpen() {

return isOpen;

}

//设置为已经被挖开

public void setIsOpen(boolean p) {

isOpen=p;

}

//返回此处是否已经被标记

public boolean getIsMark() {

return isMark;

}

//设置此处是否已经被标记

public void setIsMark(boolean m) {

isMark=m;

}

import javax.swing.*;

import java.awt.*;

public class BlockView extends JPanel{

JLabel blockNameOrIcon; //用来显示Block对象的name、指轿number和mineIcon属性

JButton blockCover; //用来遮挡blockNameOrIcon.

CardLayout card; //卡片式布局

BlockView(){

card=new CardLayout();

setLayout(card);

blockNameOrIcon=new JLabel("",JLabel.CENTER);

blockNameOrIcon.setHorizontalTextPosition(AbstractButton.CENTER);

blockNameOrIcon.setVerticalTextPosition(AbstractButton.CENTER);

blockCover=new JButton();

add("cover",blockCover);

add("view",blockNameOrIcon);

}

//给出视觉效果变化

public void giveView(Block block){

// 如果是雷,将对应的图标和文字更改

if(block.isMine){

blockNameOrIcon.setText(block.getName());

blockNameOrIcon.setIcon(block.getMineicon());

}

else {

int n=block.getAroundMineNumber();

if(n=1)

blockNameOrIcon.setText(""+n);

else

blockNameOrIcon.setText(" ");

}

}

public void seeBlockNameOrIcon(){

card.show(this,"view");

validate();

}

public void seeBlockCover(){

card.show(this,"cover");

validate();

}

public JButton getBlockCover(){

return blockCover;

}

}

怎样用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 = 10 BombNum 50 )

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 == true bombButton[ 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) (j + 1 = (int)Math.sqrt(BlockNum)-1)) {

if (bombButton[i - 1][j + 1] .isBomb == true) {

count += 1; //检测右上方是否为地雷

}

}

if ( (j - 1 = 0)) {

if (bombButton[ i ][j - 1] .isBomb == true) {

count += 1; //检测左边是否为地雷

}

}

if ( (i = 0) (j + 1 = (int)Math.sqrt(BlockNum)-1)) {

if (bombButton[ i ][j + 1].isBomb == true) {

count += 1; //右边

}

}

if ( (j - 1 = 0) (i + 1 = (int)Math.sqrt(BlockNum)-1)) {

if (bombButton[i + 1][j - 1].isBomb == true) {

count += 1; //左下

}

}

if ( (i + 1 = (int)Math.sqrt(BlockNum)-1)) {

if (bombButton[i + 1][ j ].isBomb == true) {

count += 1; //下

}

}

if ( (j + 1 = (int)Math.sqrt(BlockNum)-1) (i + 1 = Math.sqrt(BlockNum)-1)) {

if (bombButton[i + 1][j + 1].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 == false bombButton[i - 1][j - 1].isClicked == false bombButton[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 == false bombButton[i - 1][ j ].isClicked == false bombButton[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) (j + 1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测右上方是否为空

if (bombButton[i - 1][j + 1] .isBomb == false bombButton[i - 1][j + 1].isClicked == false bombButton[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 ( (j - 1 = 0)) { //检测左边是否为空

if (bombButton[ i ][j - 1].isBomb == false bombButton[ i ][j - 1].isClicked == false bombButton[ 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) (j + 1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测右边空格是否是空

if (bombButton[ i ][j + 1].isBomb == false bombButton[ i ][j + 1].isClicked == false bombButton[ 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 ( (j - 1 = 0) (i + 1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测左下空格是否是空

if (bombButton[i + 1][j - 1].isBomb == false bombButton[i + 1][j - 1].isClicked == false bombButton[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 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测下边空格是否是空

if (bombButton[i + 1][ j ].isBomb == false bombButton[i + 1][ j ].isClicked == false bombButton[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 ( (j + 1 = ((int)Math.sqrt(BlockNum)-1) ) (i + 1 = ((int)Math.sqrt(BlockNum)-1)) ) { //检测右下边空格是否是空

if (bombButton[i + 1][j + 1].isBomb == false bombButton[i + 1][j + 1].isClicked == false bombButton[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) (j - 1 = 0))//检测左上

isNull(bombButton,bombButton[i - 1][j - 1]);

if ( (i - 1 = 0))

isNull( bombButton,bombButton[i - 1][ j ]);//检测上方

if ( (i - 1 = 0) (j + 1 = (int)Math.sqrt(BlockNum)-1))

isNull( bombButton,bombButton[i - 1][j + 1]);//检测右上

if ( (j - 1 = 0))

isNull(bombButton,bombButton[i][j - 1]);//检测左边

if ( (i = 0) (j + 1 = ((int)Math.sqrt(BlockNum)-1)) )

isNull(bombButton,bombButton[i][j + 1]);//检测右边

if ( (j - 1 = 0) (i + 1 = ((int)Math.sqrt(BlockNum)-1)) )

isNull(bombButton,bombButton[i + 1][j - 1]); //检测左下

if ( (i + 1 = ((int)Math.sqrt(BlockNum)-1)) ) //检测下

isNull(bombButton,bombButton[i + 1][ j ]);

if ( (j + 1 = ((int)Math.sqrt(BlockNum)-1)) (i + 1 = ((int)Math.sqrt(BlockNum)-1)) ) //检测右下

isNull(bombButton,bombButton[i + 1][j + 1]);

}

}

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.BombFlag + 1)%3;

if(bombSource.BombFlag == 1)

{

if(BombNum 0 bombSource.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扫雷游戏的程序源代码,尽量多点注释,要确实可用的!急急急急急急急急急急急急!!!!!

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Insets;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.Timer;

public class ScanLei1 extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;

private Container contentPane;

private JButton btn;

private JButton[] btns;

private JLabel b1;

private JLabel b2;

private JLabel b3;

private Timer timer;

private int row=9;

private int col=9;

private int bon=10;

private int[][] a;

private int b;

private int[] a1;

private JPanel p,p1,p2,p3;

public ScanLei1(String title){

super(title);

contentPane=getContentPane();

setSize(297,377);

this.setBounds(400, 100, 400, 500);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

timer =new Timer(1000,(ActionListener) this);

a = new int[row+2][col+2];

initGUI();

}

public void initGUI(){

p3=new JPanel();

b=bon;

JMenuBar menuBar=new JMenuBar();

JMenu menu1=new JMenu("游戏");

JMenu menu2=new JMenu("帮助");

JMenuItem mi1=new JMenuItem("初级");

JMenuItem mi2 = new JMenuItem("中级");

JMenuItem mi3 =new JMenuItem("高级");

mi1.addActionListener(this);

menu1.add(mi1);

mi2.addActionListener(this);

menu1.add(mi2);

mi3.addActionListener(this);

menu1.add(mi3);

menuBar.add(menu1);

menuBar.add(menu2);

p3.add(menuBar);

b1=new JLabel(bon+"");

a1=new int[bon];

btn =new JButton("开始");

btn.addActionListener(this);

b2=new JLabel("0");

b3=new JLabel("");

btns=new JButton[row*col];

p=new JPanel();

p.setLayout(new BorderLayout());

contentPane.add(p);

p.add(p3,BorderLayout.NORTH);

//combo=new JComboBox(new Object[]{"初级","中级","高级"} );

//加监听

/*combo.addItemListener(new ItemListener(){

}});*/

p1=new JPanel();

//在那个位置

//(( FlowLayout)p1.getLayout()).setAlignment( FlowLayout.RIGHT);

p1.add(b1);

p1.add(btn);

p1.add(b2);

p1.add(b3);

p.add(p3,BorderLayout.NORTH);

p.add(p1,BorderLayout.CENTER);

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;irow*col;i++){

btns[i]=new JButton("");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

contentPane.add(p,BorderLayout.NORTH);

contentPane.add(p2,BorderLayout.CENTER);

}

public void go(){

setVisible(true);

}

public static void main(String[] args){

new ScanLei1("扫雷").go();

}

public void out(int[][] a,JButton[] btns,ActionEvent e,int i,int x,int y){

int p=1;

if(a[x][y]==0){

a[x][y]=10;

btns[i].setEnabled(false); //33

for(int l=y-1;l=y+1;l++){

int m=x-1-1;

int n=l-1;

p=1;

System.out.println(a[1][2]);

if(n-1ncolm-1mrow)

{

for(int q=0;qrowp==1;q++){//col--row;

if(((n+col*q)=(m*col))((n+col*q)(m+1)*col)){

if(a[x-1][l]!=0a[x-1][l]!=10){

btns[n+col*q].setText(a[x-1][l]+"");

a[x-1][l]=10;

btns[n+col*q].setEnabled(false);

}

else if(a[x-1][l]==0){

//a[x-1][l]=10;

btns[n+col*q].setEnabled(false);

out(a,btns,e,n+col*q,x-1,l); ////55////

a[x-1][l]=10;

btns[n+col*q].setEnabled(false);

}

p=0;

}

}

}

p=1;

m=x;

if(n-1ncolm-1mcol)

{

for(int q=0;qrowp==1;q++){

if(((n+col*q)=(m*col))((n+col*q)(m+1)*col)){

if(a[x+1][l]!=0a[x+1][l]!=10){

btns[n+col*q].setText(a[x+1][l]+"");

a[x+1][l]=10;

btns[n+col*q].setEnabled(false);

}

else if(a[x+1][l]==0){

out(a,btns,e,n+col*q,x+1,l);///55////

a[x+1][l]=10;

btns[n+col*q].setEnabled(false);

}

p=0;

}

}

}

}

int m=x-1;

int n=y-1-1;

p=1;

if(n-1ncolm-1mcol)

{

for(int q=0;qrowp==1;q++){

if(((n+col*q)=(m*col))((n+col*q)(m+1)*col)){

if(a[x][y-1]!=0a[x][y-1]!=10){

btns[n+col*q].setText(a[x][y-1]+"");

a[x][y-1]=10;

btns[n+col*q].setEnabled(false);

}

else if(a[x][y-1]==0){

out(a,btns,e,n+col*q,x,y-1);

a[x][y-1]=10;

btns[n+col*q].setEnabled(false);

}

p=0;

}

}

}

p=1;

m=x-1;

n=y+1-1;

if(n-1ncolm-1mcol)

{

for(int q=0;qrowp==1;q++){

if(((n+col*q)=(m*col))((n+col*q)(m+1)*col)){

if(a[x][y+1]!=0a[x][y+1]!=10){

btns[n+col*q].setText(a[x][y+1]+"");

a[x][y+1]=10;

btns[n+col*q].setEnabled(false);

}

else if(a[x][y+1]==0){

out(a,btns,e,n+col*q,x,y+1);

a[x][y+1]=10;

btns[n+col*q].setEnabled(false);

}

p=0;

}

}

}

}

}

public void actionPerformed(ActionEvent e) {

if(e.getActionCommand()=="初级"){

row=9;

col=9;

bon=10;

a1=new int[bon];

b=bon;

//setSize(297,377);

a = new int[row+2][col+2];

this.remove(p2);

timer.stop();

b1.setText("10");

b2.setText("0");

b3.setText("");

btns=new JButton[row*col];

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;irow*col;i++){

btns[i]=new JButton(" ");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

contentPane.add(p2,BorderLayout.CENTER);

//setSize(297,377);

this.pack();

for(int i=0;irow*col;i++){

btns[i].setText(" ");

btns[i].setEnabled(true);

}

for(int i=0;irow+2;i++){

for(int j=0;jcol+2;j++){

a[i][j]=0;

}

}

}else if(e.getActionCommand()=="中级"){

row=16;

col=16;

bon=40;

//setSize(33*col,33*row+80);

a1=new int[bon];

a = new int[row+2][col+2];

b=bon;

this.remove(p2);

timer.stop();

b1.setText("40");

b2.setText("0");

b3.setText("");

btns=new JButton[row*col];

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;irow*col;i++){

btns[i]=new JButton(" ");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

contentPane.add(p2,BorderLayout.CENTER);

this.pack();

//setSize(33*col,33*row+80);

for(int i=0;irow*col;i++){

btns[i].setText("");

btns[i].setEnabled(true);

}

for(int i=0;irow+2;i++){

for(int j=0;jcol+2;j++){

a[i][j]=0;

}

}

}else if(e.getActionCommand()=="高级"){

row=16;

col=32;

bon=99;

setSize(33*col,33*row+80);

a1=new int[bon];

a = new int[row+2][col+2];

b=bon;

this.remove(p2);

timer.stop();

b1.setText("99");

b2.setText("0");

b3.setText("");

btns=new JButton[row*col];

p2=new JPanel();

p2.setLayout(new GridLayout(row,col,0,0));

for(int i=0;irow*col;i++){

btns[i]=new JButton(" ");

btns[i].setMargin(new Insets(0,0,0,0));

btns[i].setFont(new Font(null,Font.BOLD,25));

btns[i].addActionListener(this);

btns[i].addMouseListener(new NormoreMouseEvent());

p2.add(btns[i]);

}

contentPane.add(p2,BorderLayout.CENTER);

//setSize(33*col,33*row+80);

this.pack();

for(int i=0;irow*col;i++){

btns[i].setText("");

btns[i].setEnabled(true);

}

for(int i=0;irow+2;i++){

for(int j=0;jcol+2;j++){

a[i][j]=0;

}

}

}

if(e.getSource()==btn){

timer.start();

b=bon;

b3.setText("");

//System.out.println(bon);

//清空

for(int i=0;irow*col;i++){

btns[i].setText("");

btns[i].setEnabled(true);

}

for(int i=0;irow+2;i++){

for(int j=0;jcol+2;j++){

a[i][j]=0;

}

}

//产生随机数

for(int i=0;ibon;i++)

{ int p=1;

int m=(int)(Math.random()*row*col);

while(p==1){

int l=1;

int j;

for( j=0;jil==1;j++){

if(a1[j]==m){

m=(int)(Math.random()*row*col);

l=0;

}

}

if(j==i){

a1[i]=m;

p=0;

}

}

}

b1.setText(bon+"");

b2.setText("0");

//布雷

for(int i=0;ibon;i++){

int x=(a1[i]/col+1);

int y=(a1[i]%col+1);

a[x][y]=100;

}

for(int i=0;irow+2;i++){

for(int j=0;jcol+2;j++){

if(i==0||j==0||i==row+1||j==col+1){

a[i][j]=0;

}

}

}

for(int i=1;i=row;i++){

for(int j=1;j=col;j++){

if(a[i][j]!=100){

for(int l=j-1;l=j+1;l++){

if(a[i-1][l]==100){

a[i][j]++;

}

if(a[i+1][l]==100){

a[i][j]++;

}

}

if(a[i][j-1]==100){

a[i][j]++;

}

if(a[i][j+1]==100){

a[i][j]++;

}

}

}

}

}

if(e.getSource()==timer)

{

String time=b2.getText().trim();

int t=Integer.parseInt(time);

//System.out.println(t);

if(t=600){

timer.stop();

}else{

t++;

b2.setText(t+"");

}

}

for(int i=0;icol*row;i++){

if(btns[i].getText()!="★")

{

int x=i/col+1;

int y=i%col+1;

if(e.getSource()==btns[i]a[x][y]==100){

btns[i].setText("★");

btns[i].setEnabled(false);

a[x][y]=10;

for(int k=0;kcol*row;k++){

int m1=k/col+1;

int n1=k%col+1;

if(a[m1][n1]!=10btns[k].getText()=="★"){

btns[k].setText("*o*");

}

}

for(int j=0;jcol*row;j++){

int m=j/col+1;

int n=j%col+1;

if(a[m][n]==100){

btns[j].setText("★");

btns[j].setEnabled(false);

b3.setText("你输了 !!");

}

btns[j].setEnabled(false);

a[m][n]=10;

}

timer.stop();

}

else if(e.getSource()==btns[i]){

if(a[x][y]==0){

out(a,btns,e,i,x,y);

a[x][y]=10;

btns[i].setEnabled(false);

}

if(a[x][y]!=0a[x][y]!=10){

btns[i].setText(a[x][y]+"");

btns[i].setEnabled(false);

a[x][y]=10;

}

}

}else if(btns[i].getText()=="★"){

}

}

}

class NormoreMouseEvent extends MouseAdapter{

public void mouseClicked(MouseEvent e) {

System.out.println(b);

for(int i=0;icol*row;i++){

int x1=i/col+1;

int y1=i%col+1;

if(e.getSource()==btns[i]btns[i].getText()!="★"a[x1][y1]!=10)

{

if(e.getButton()==MouseEvent.BUTTON3){

btns[i].setText("★");

b--;

if(b==0){

int flag=0;

for(int j=0;jcol*row;j++){

int x=j/col+1;

int y=j%col+1;

if(a[x][y]==100btns[j].getText()=="★"){

flag++;

}

}

if(flag==bon){

timer.stop();

b3.setText("你赢了!");

}

}

b1.setText(b+"");

}

}else if(e.getSource()==btns[i]btns[i].getText()=="★"a[x1][y1]!=-1){

if(e.getButton()==MouseEvent.BUTTON3){

btns[i].setText("");

b++;

if(bbon){

b1.setText(bon+"");

}

else{

b1.setText(b+"");

}

btns[i].setEnabled(true);

}

}

}

}

}

}

JAVA代码解释及流程图 有会编JAVA的 讲一扫雷游戏的题 将明白的分都给你

扫雷游戏的算法概述:

你可以把地雷所在的区域抽象成一个二维数组。数组里的元素是该地周围的雷数。然后根据玩家所设定的地雷个数用一个随机数生成器来撒雷。有雷的地方可以用-1来表示,没有雷的地方在撒雷的时候数它旁边的雷数,然后将值填入对应的数组元素嫌谨里。这样,你的雷阵已经部署完毕。

接下来是玩家的操作了。如果你有仔细观察的话,当你点击一个位置的是后发生的情况有3种:

1. 如果该处有雷的话,枣巧很简单,游戏结束

2. 如果该处没有雷,但是这个地方附近有至少一个雷的话,只将当前的位置周围雷数显示出来。

3. 如果该处没有雷,并且附近也没有雷的话,就用一个循环或是递归的方法将它四周的没有雷的地方也显示出来。如果他四周的位置的四周也没有雷的话,继续这个过程,知道四周至少有一个雷时候停止。

玩家事件的处理:

玩家的事件有三种:单击,左右键同时点击,和右击。

单击可以想象成走到该处,如果有雷的话就游戏结束,没有的话就根据我以上讲的三点来判断该做什么。

左右键同时点击的话就将该处四周可能有雷的地方显示出来,如果玩家错将没有雷的地方放了小红旗的话,游戏结束。

右击是放小红旗。

当所有雷都被清凳者键楚的时候,游戏结束,玩家胜利。


本文名称:java扫雷可设代码详解 java扫雷设计报告
网页链接:http://cdxtjz.cn/article/ddpcpdj.html

其他资讯