import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.ActionListener;

public class Minesweeper extends JFrame implements MouseListener, ActionListener
{
public int gridRows;
public int gridColumns;
int mines;
private JMenuBar menuBar;
private JMenu Difficulty;
private JMenu Options;
private int numberofMines;
private int row, col;
JMenuItem Expert, Intermediate, Easy;
JButton[][] easyGrid;
Tile[][] squares = new Tile[9][9];
Container box = getContentPane();
private JLabel flagcounter;
private JLabel timecounter;
private Font f1 = new Font("Brush Script", Font.BOLD,20);
int easyflags = 10;

public static void main(String args[])
{

    Minesweeper myGui = new Minesweeper();
    myGui.setVisible(true);
}
public Minesweeper()
{
    super();
    setLayout(null);
    makeBoard(9, 9);
    initUI();
    setJMenuBar(menuBar);
    menuBar.add(Difficulty);
    menuBar.add(Options);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocation(800,200);
    setSize(500, 600);
    setTitle("Minesweeper");
    setVisible(true);

    flagcounter = new JLabel("0"+easyflags, SwingConstants.CENTER);
    flagcounter.setBounds(20, 20, 50, 40);
    flagcounter.setFont(f1);
    flagcounter.setBackground(Color.black);
    flagcounter.setForeground(Color.red);
    flagcounter.setOpaque(true);
    flagcounter.setBorder(BorderFactory.createLineBorder(Color.black));
    flagcounter.setVisible(true);
    add(flagcounter);

}


private void makeBoard(int rowsX, int columnsY)
{

gridRows = rowsX;
gridColumns = columnsY;


easyGrid = new JButton[rowsX][columnsY]; // sets the grid size from the parameters given
squares = new Tile[gridRows][gridColumns];

    for (int i = 0; i<rowsX; i++)
    {
        for (int j = 0; j<columnsY; j++)
        {
            squares[i][j] = new Tile(i, j);
            squares[i][j].setBounds(25+(i*50),(j*50) + 100,50,50);
            squares[i][j].setHorizontalAlignment(SwingConstants.CENTER);
            squares[i][j].setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
            squares[i][j].addMouseListener(this);

            box.add(squares[i][j]);

        }

    }

    repaint();
}
public Tile get(int i, int j)
{
    return squares [i][j];
}
final void initUI()
{
    menuBar = new JMenuBar();
    Difficulty = new JMenu("Difficulty");
    Options = new JMenu("Options");
    JMenuItem easy = new JMenuItem("Easy");
    easy.addActionListener(this);
    easy.setToolTipText("New 9x9 game with 10 bombs.");

    JMenuItem medium = new JMenuItem("Medium");
    medium.addActionListener(this);
    medium.setToolTipText("New 16x16 game with 40 bombs");

    JMenuItem hard = new JMenuItem("Hard");
    hard.addActionListener(this);
    hard.setToolTipText("New 30x16 game with 99 bombs");

    JMenuItem custom = new JMenuItem("custom");
    custom.addActionListener(this);
    custom.setToolTipText("Set a custom layout for a minesweeper game");

    JMenuItem oExit = new JMenuItem("Exit");
    oExit.addActionListener(this);
    oExit.setToolTipText("Exit the game");
    Difficulty.add(easy);
    Difficulty.add(medium);
    Difficulty.add(hard);

    Options.add(oExit);
}




public void actionPerformed(ActionEvent e)
{
    if(e.getSource() instanceof Tile)
    {

    }
    if(e.getSource() instanceof JMenuItem)
    {
        String menu;
        menu = e.getActionCommand();

        if (menu.equals("Exit"))
        {
            System.exit(0);
        }
        if (menu.equals("Easy"))
        {
            setSize(500,600);
            makeBoard(9,9);
            // TODO need to reset the board
        }
        if (menu.equals("Medium"))
        {
            setSize(850,950);
            //TODO figure out how to change the flag counter...
            makeBoard(16, 16);
        }
        if (menu.equals("Hard"))
        {
            setSize(1550,950);
            makeBoard(30,16);
        }

    }

    }


public void mouseClicked(MouseEvent e)
{
    if(e.getSource() instanceof Tile)
    {
    Tile clicked = (Tile)e.getSource();
        //Test Statements
        System.out.println("Row " + clicked.getColumn() + " Column " + clicked.getRow());
        System.out.println("This tile is: " + clicked.getOccupied());
        if(e.getButton() == MouseEvent.BUTTON3)
        {
            clicked.setForeground(Color.BLUE);
            clicked.setOccupied('f');
            clicked.setBackground(Color.LIGHT_GRAY);

        }

    }

}


public void mouseEntered(MouseEvent arg0)
{
    if(arg0.getSource() instanceof Tile)
    {
        Tile entered = (Tile)arg0.getSource();
        entered.setBorder(BorderFactory.createLineBorder(Color.blue));
    }
}

@Override
public void mouseExited(MouseEvent arg0)
{

    Tile exited = (Tile)arg0.getSource();
    exited.setBorder(BorderFactory.createLineBorder(Color.black));
}

@Override
public void mousePressed(MouseEvent arg0)
{
    // TODO Auto-generated method stub
    if(arg0.getSource() instanceof Tile)
    {

    }
}

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

}

}


这是主要的课程

import java.awt.Color;
import java.awt.Image;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
 // Tile class for mine sweeper
public class Tile extends JLabel
{
private char occupied;
private int column;
private int row;

private JLabel OccupiedB;
private JLabel OccupiedC;
private JLabel OccupiedE;
private JLabel OccupiedF;
//Icon flag = new ImageIcon("flag.ico");

/*
whatever.setIcon(new ImageIcon("filename.ext"));
or
Icon myIcon = new ImageIcon("filename.ext");
whatever.setIcon(myIcon);
*/

public Tile(int col, int newRow)
{
    super();
    setBackground(Color.GRAY);
    setOpaque(true);
    occupied = 'g';
    column = col;
    row = newRow;

}

public boolean setOccupied(char Ecolumn)
{
    occupied = Ecolumn;
    if(occupied == 'b')         // If the tile is a bomb
    {

    }
    else if(occupied == 'c')    // If the tile is clear
    {
        setBackground(Color.WHITE);
    }
    else if(occupied == 'e')    // If the tile is empty or surrounding a bomb
    {

    }
    else if(occupied == 'f')    // If the tile is a flag
    {
        setText("F");

        //setIcon(new ImageIcon("flag.ico"));

    }
    return true;
}

public int getColumn()
{
    return column;
}

public void setColumn(int column)
{
    this.column = column;
}

public int getRow()
{
    return row;
}

public JLabel getOccupiedB()
{
    return OccupiedB;
}

public void setOccupiedB(JLabel occupiedB)
{
    OccupiedB = occupiedB;
}


public JLabel getOccupiedC()
{
    return OccupiedC;
}

public void setOccupiedC(JLabel occupiedC)
{
    OccupiedC = occupiedC;
}


public JLabel getOccupiedE()
{
    return OccupiedE;
}

public void setOccupiedE(JLabel occupiedE)
{
    OccupiedE = occupiedE;
}
public JLabel getOccupiedF()
{
    return OccupiedF;
}

public void setOccupiedF(JLabel occupiedF)
{
    OccupiedF = occupiedF;
}

public void setRow(int row)
{
    this.row = row;
}

public char getOccupied()
{
    return occupied;
}


}


这是瓷砖课

我不了解如何在更改难度时基本重置板,或者当我计划设置自定义板选项时,如何根据给定的瓷砖数量自动调整板的大小。

如果你不能说...我是新来的代码。谢谢您的帮助。

最佳答案

这不是已经大部分完成了吗?

    if (menu.equals("Easy"))
    {
        setSize(500,600);
        makeBoard(9,9);
        // TODO need to reset the board
    }
    if (menu.equals("Medium"))
    {
        setSize(850,950);
        //TODO figure out how to change the flag counter...
        makeBoard(16, 16);
    }
    if (menu.equals("Hard"))
    {
        setSize(1550,950);
        makeBoard(30,16);
    }


有人从菜单中选择一个选项会触发一个事件。事件处理程序包含一个if / else块,该块可以:退出,设置为easy,设置为medium,设置为hard。就我所知,所有板块的“已占用”都设置为“ g”(灰色?),makeBoard函数处理实际的灰色板块显示。如果您问的是炸弹等的实际产生情况,那么我什么都没看到。它要么为您处理,但您没有提供代码,要么您必须自己编写。

您需要将int easyFlags设置为针对该特定难度获得的数量。
您需要将flagCounter标签设置为0。
您需要将时间计数器标签设置为t0 0。
您需要将int地雷设置为任意数量,以解决困难。

对于menu.equals(“ Easy”)如果被阻止,它将类似于:

    if (menu.equals("Easy"))
    {
        setSize(500,600);
        makeBoard(9,9);
        flagCounter.setText("0");
        timecounter.setText("0"); //or "0:00" or w/e
        mines = 10;
        easyFlags = 10;
    }


可能还有更多,但我不想做显然为您的某种学校项目,哈哈

09-12 09:57