ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java--扫雷

2022-01-04 21:00:28  阅读:204  来源: 互联网

标签:constant -- combobox int 扫雷 && new Java counts


今天借鉴网上写了一个扫雷游戏

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class SaoLei implements MouseListener,ActionListener {
    JPanel p=new JPanel();
    JFrame frame=new JFrame("扫雷");
    @SuppressWarnings("rawtypes")
    JComboBox combobox=new JComboBox();
    JButton reset=new JButton("重新开始");
    Container container=new Container();
    SaoLeiConstant constant=new SaoLeiConstant();
    JButton[][] buttons=new JButton[constant.row][constant.col];//按钮
    int[][] counts=new int[constant.row][constant.col];
    public SaoLei(){//构造
        frame.setSize(600,700);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        addtopButton();//选择
        addButtons();
        addLei();//加雷
        calcNeiboLei();//雷数
        frame.setVisible(true);
    }
    void addtopButton() {
        p.removeAll();
        p.add(reset);
        reset.setBackground(Color.green);
        reset.setOpaque(true);
        reset.addActionListener(this);
        //combobox.addItem("选择难度");
        combobox.addItem("新手难度");
        combobox.addItem("初级难度");
        combobox.addItem("中级难度");
        combobox.addItem("高级难度");
        combobox.addItem("大师难度");
        combobox.setBackground(Color.GREEN);
        combobox.setOpaque(true);
        combobox.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                String item = e.getItem().toString();
                if (item == "新手难度") {
                    constant.leiCount = 20;
                    ResetGame();
                } else if (item == "初级难度") {
                    constant.leiCount = 43;
                    ResetGame();
                } else if (item == "中级难度") {
                    constant.leiCount = 63;
                    ResetGame();
                } else if (item == "高级难度") {
                    constant.leiCount = 99;
                    ResetGame();
                } else if (item == "大师难度") {
                    constant.leiCount = 119;
                    ResetGame();
                }

            }

        });
        p.add(combobox);
        frame.add(p, BorderLayout.NORTH);
    }

    void addLei() {
        Random rand = new Random();
        int randRow,randCol;
        for(int i=0; i<constant.leiCount; i++) {
            randRow = rand.nextInt(constant.row);
            randCol = rand.nextInt(constant.col);
            if(counts[randRow][randCol] == constant.LEICODE) {
                i--;
            } else {
                counts[randRow][randCol] = constant.LEICODE;
                //buttons[randRow][randCol].setText("X");
            }
        }
    }

    void addButtons() {
        frame.add(container,BorderLayout.CENTER);
        container.setLayout(new GridLayout(constant.row,constant.col));
        for(int i=0;i<constant.row;i++) {
            for(int j=0;j<constant.col;j++) {
                JButton button = new JButton();
                button.setBackground(Color.white);
                button.setOpaque(true);
                button.addActionListener(this);
                button.addMouseListener((MouseListener) this);
                buttons[i][j] = button;
                container.add(button);
            }
        }
    }

    void calcNeiboLei() {
        int count;
        for(int i=0;i<constant.row;i++) {
            for(int j=0;j<constant.col;j++) {
                count =0;
                if(counts[i][j] == constant.LEICODE) continue;
                if(i>0 && j>0 && counts[i-1][j-1] == constant.LEICODE) count++;
                if(i>0 && counts[i-1][j] == constant.LEICODE) count++;
                if(i>0 && j<19 &&counts[i-1][j+1] == constant.LEICODE) count++;
                if(j>0 && counts[i][j-1] == constant.LEICODE) count++;
                if(j<19 && counts[i][j+1] == constant.LEICODE) count++;
                if(i<19 && j>0 && counts[i+1][j-1] == constant.LEICODE) count++;
                if(i<19 && counts[i+1][j] == constant.LEICODE) count++;
                if(i<19 && j<19 && counts[i+1][j+1] == constant.LEICODE) count++;
                counts[i][j] = count;
                buttons[i][j].setMargin(new Insets(0,0,0,0));//让按钮随按钮上的图案变化
                //buttons[i][j].setText(counts[i][j] + "");
            }
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        JButton button = (JButton)e.getSource();
        if(button.equals(reset)) {
            ResetGame();//重新开始游戏
        } else {
            int count = 0;
            for(int i=0;i<constant.row;i++) {
                for(int j=0;j<constant.col;j++) {
                    if(button.equals(buttons[i][j])) {
                        count = counts[i][j];
                        if(count == constant.LEICODE) {
                            loseGame();
                        } else {
                            openCell(i,j);
                            checkWin();
                        }
                        return;
                    }
                }
            }
        }
    }
public void mouseClicked(MouseEvent e){
        JButton button=(JButton)e.getSource();
        if(e.getButton()==MouseEvent.BUTTON3){
            for(int i=0;i<constant.row;i++){
                for(int j=0;i<constant.col;j++){
                    if(button.equals(buttons[i][j])){
                        if(buttons[i][j].isEnabled()==true){
                            buttons[i][j].setMargin(new Insets(0,0,0,0));
                            buttons[j][j].setText("?");
                            return;
                        }
                    }
                }
            }
        }
    }
    void ResetGame() {
        for(int i=0;i<constant.row;i++) {
            for(int j=0;j<constant.col;j++) {
                buttons[i][j].setText("");
                buttons[i][j].setEnabled(true);
                buttons[i][j].setBackground(Color.white);
                counts[i][j] = 0;
            }
        }
        addLei();
        calcNeiboLei();
    }

    void checkWin() {
        for(int i=0;i<constant.row;i++) {
            for(int j=0;j<constant.col;j++) {
                if(buttons[i][j].isEnabled() == true && counts[i][j] != constant.LEICODE ) return;
            }
        }
        JOptionPane.showMessageDialog(frame,"Yeah,你赢了!");
    }

    //使用递归方法打开格子
    void openCell(int i, int j) {
        if(buttons[i][j].isEnabled() == false) return;
        buttons[i][j].setBackground(Color.yellow);
        buttons[i][j].setOpaque(true);
        buttons[i][j].setEnabled(false);
        if(counts[i][j] == 0) {
            if(i>0 && j>0 && counts[i-1][j-1] != constant.LEICODE) openCell(i-1,j-1);
            if(i>0 && j<19 && counts[i-1][j] != constant.LEICODE) openCell(i-1,j);
            if(i>0 && j<19 &&counts[i-1][j+1] != constant.LEICODE) openCell(i-1,j+1);
            if(j>0 && counts[i][j-1] != constant.LEICODE) openCell(i,j-1);
            if(j<19 && counts[i][j+1] != constant.LEICODE) openCell(i,j+1);
            if(i<19 && j>0 && counts[i+1][j-1] != constant.LEICODE) openCell(i+1,j-1);
            if(i<19 && counts[i+1][j] != constant.LEICODE) openCell(i+1,j);
            if(i<19 && j<19 && counts[i+1][j+1] != constant.LEICODE) openCell(i+1,j+1);
        } else {
            buttons[i][j].setMargin(new Insets(0,0,0,0));
            buttons[i][j].setText(counts[i][j] + "");
        }
    }

    void loseGame() {
        for(int i=0;i<constant.row;i++) {
            for(int j=0;j<constant.col;j++) {
                int count = counts[i][j];
                if(count == constant.LEICODE) {
                    buttons[i][j].setMargin(new Insets(0,0,0,0));
                    buttons[i][j].setText("雷");
                    buttons[i][j].setBackground(Color.red);
                    buttons[i][j].setEnabled(false);
                } else {
                    buttons[i][j].setMargin(new Insets(0,0,0,0));
                    buttons[i][j].setText(count + "");
                    buttons[i][j].setEnabled(false);

                }
            }
        }
        JOptionPane.showMessageDialog(frame,"error,你输了!");
    }

    public static void main(String[] args) {
        new SaoLei();
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }
}

  初始数据定义

public class SaoLeiConstant {
    final int row=20;//行数
    final int col=20;//列数
    final int LEICODE=10;//定义雷下放的数字
    protected int temp=20;
    protected int leiCount=temp;//雷数量
}

  

标签:constant,--,combobox,int,扫雷,&&,new,Java,counts
来源: https://www.cnblogs.com/Yjiaw/p/15764048.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有