1
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;
}


}

这是瓷砖类

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

如果你不能告诉...即时通讯很新的代码。谢谢您的帮助。

4

1 回答 1

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);
    }

从菜单中选择一个选项的人会触发一个事件。事件处理程序包含一个 if/else 块:退出、设置为简单、设置为中等、设置为困难。makeBoard 函数处理灰色瓷砖的实际显示,据我所知,所有瓷砖的 Occupied 设置为“g”(灰色?)。如果您要询问炸弹的实际生成情况等。我在那里没有看到任何关于此的内容。它要么为您处理好,您没有提供代码,要么您必须自己编写代码。

您需要将 int easyFlags 设置为他们为该特定难度获得的数量。您需要将 flagCounter 标签设置为 0。您需要将 timecounter 标签 t0 设置为 0。您需要将 int mines 设置为困难的数量。

对于 menu.equals("Easy") if 块,它将类似于:

    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;
    }

可能还有更多,但我不想做对你来说显然是某种学校项目的事情,哈哈

于 2013-11-01T00:09:12.707 回答