`
today2008
  • 浏览: 6079 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

扫雷游戏

阅读更多
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;i<BombNum;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扫雷游戏完整项目代码

    【Java扫雷游戏完整项目代码】是一个基于Java编程语言实现的经典扫雷游戏的代码实现。在计算机科学领域,扫雷游戏通常被用作一个教学工具,帮助初学者理解逻辑推理、算法设计以及基本的图形用户界面(GUI)编程。在...

    java实现扫雷游戏.zip

    java实现扫雷游戏java实现扫雷游戏java实现扫雷游戏 java实现扫雷游戏java实现扫雷游戏java实现扫雷游戏 java实现扫雷游戏java实现扫雷游戏java实现扫雷游戏 java实现扫雷游戏java实现扫雷游戏java实现扫雷游戏 java...

    AS3扫雷游戏

    AS3扫雷游戏是一款基于ActionScript 3.0(AS3)编程语言开发的经典小游戏,旨在帮助初学者理解和掌握AS3的基本语法、事件处理、显示对象以及游戏逻辑。以下是关于AS3扫雷游戏的一些关键知识点: 1. **ActionScript ...

    Qt实现扫雷游戏(毕设/课设/项目开发皆适用)

    Qt扫雷游戏是一款基于Qt框架开发的经典游戏,旨在为毕设、课设或其他项目开发提供一个有趣而具有挑战性的实践案例。这款游戏不仅实现了扫雷的核心玩法,而且在界面设计和用户体验方面进行了精心雕琢。 主要特点: ...

    C#扫雷游戏源代码 C#扫雷游戏源代码 C#扫雷游戏源代码

    扫雷游戏是一款广为人知的益智游戏,它考验玩家的逻辑推理能力和观察力。通过分析提供的C#源代码,我们可以学习到游戏的核心算法、用户界面设计以及事件处理等方面的知识。 首先,扫雷游戏的实现离不开数据结构的...

    python扫雷游戏设计(课程设计版)

    【Python扫雷游戏设计】是计算机科学与工程学院的一次课程设计任务,旨在培养学生面向对象程序设计的能力,提高代码质量和效率。在这个项目中,学生需要使用Python语言来实现经典的游戏——扫雷。通过这个设计,学生...

    扫雷游戏源程序

    【扫雷游戏源程序】是一种基于C++编程语言开发的小型桌面游戏,旨在帮助程序员提升C++语言的应用技能,特别是对于Visual C++(VC)环境的掌握。扫雷游戏是微软Windows操作系统内置的经典游戏之一,它通过逻辑推理和...

    扫雷游戏源代码

    【扫雷游戏源代码】是基于C#编程语言在Visual Studio(VS)环境中开发的一款经典数字游戏。扫雷游戏的设计和实现涉及多个编程和技术知识点,包括窗口应用开发、事件处理、数组逻辑、随机数生成以及游戏规则的算法...

    Python 扫雷游戏 完整源代码+图片素材

    Python扫雷游戏是一款经典的逻辑推理游戏,通过编程实现可以让我们深入了解Python编程语言的特性以及游戏逻辑的设计。在这款基于Python3.7版本编写的扫雷游戏中,开发者充分展示了Python的面向对象编程思想、条件...

    cocos creator 扫雷游戏资源工程

    【Cocos Creator 扫雷游戏资源工程】 Cocos Creator 是一款强大的2D游戏开发引擎,它提供了便捷的可视化编辑工具和高效的游戏开发框架,使得开发者能够轻松创建各种类型的游戏,包括经典的扫雷游戏。扫雷游戏,作为...

    java编写的扫雷游戏

    用java编写的扫雷游戏,有兴趣的可以研究研究

    html实现扫雷游戏

    通过html+css+jquery实现经典扫雷游戏,可以直接在浏览器上运行

    Android扫雷游戏Mine源码

    【Android扫雷游戏Mine源码】是一个专门为Android平台设计的扫雷游戏的源代码实现,旨在帮助开发者了解和学习Android游戏开发。这个项目不仅提供了完整的扫雷游戏逻辑,还包含了丰富的注释,使得初学者能够更容易地...

    扫雷游戏Java源代码

    扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码扫雷游戏Java源代码...

    扫雷游戏图片素材:数字图标,空白,地雷等

    扫雷游戏图片素材:数字图标,空白,地雷等

    QT扫雷游戏源码

    QT扫雷游戏源码是一个基于QT框架,使用C++编程语言实现的经典扫雷游戏项目。对于初学者来说,这是一个极好的学习资源,可以帮助他们深入理解QT框架和C++编程语言在实际项目中的应用。 首先,QT是一个跨平台的C++...

    C++MFC扫雷游戏

    【C++ MFC扫雷游戏】是一个典型的C++面向对象编程项目,主要应用于计算机专业的课程设计,通过实现扫雷游戏来巩固和应用MFC(Microsoft Foundation Classes)框架的知识。MFC是微软提供的一套用于构建Windows应用...

    扫雷游戏-Swing

    【扫雷游戏-Swing】是一款基于Java Swing图形用户界面(GUI)开发的经典益智游戏,旨在帮助初学者提升编程逻辑,巩固数组运用和深化位运算理解。Swing是Java提供的一个用于创建桌面应用的库,它允许开发者构建美观且...

    java课程设计作业-基于java实现的扫雷游戏(源码+设计说明文档+可执行文件),直接点击“扫雷.exe”即可运行

    java课程设计作业——基于java实现的扫雷游戏(源码+设计说明文档+可执行文件),直接点击“扫雷.exe”即可运行 --利用swing做出的扫雷桌面游戏,运行时直接双击可执行文件夹下的“扫雷.exe”即可 java课程设计...

    基于QT的扫雷游戏

    【扫雷游戏与QT框架】 扫雷游戏,作为一款经典的逻辑推理游戏,旨在锻炼玩家的空间想象和逻辑思维能力。在这款基于QT开发的扫雷游戏中,我们能够看到开发者充分利用了QT框架的优势,构建了一个功能丰富的游戏环境。...

Global site tag (gtag.js) - Google Analytics