Adjusted font and grid, cleaned up BoardConfig, working on CustomDialog
This commit is contained in:
parent
8ad61d9762
commit
948fa50d40
@ -1,10 +1,12 @@
|
|||||||
package dev.kske.minesweeper;
|
package dev.kske.minesweeper;
|
||||||
|
|
||||||
|
import java.awt.BasicStroke;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.FontMetrics;
|
import java.awt.FontMetrics;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
@ -39,7 +41,7 @@ public class Board extends JPanel {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
icons = new HashMap<>();
|
icons = new HashMap<>();
|
||||||
final String[] names = { "mine2", "mine4", "tile", "tile3", "flag" };
|
final String[] names = { "mine2", "mine4", "tile", "tile3" };
|
||||||
for (String name : names) {
|
for (String name : names) {
|
||||||
icons.put(name, TextureLoader.loadScaledImage(name, tileSize));
|
icons.put(name, TextureLoader.loadScaledImage(name, tileSize));
|
||||||
}
|
}
|
||||||
@ -116,11 +118,9 @@ public class Board extends JPanel {
|
|||||||
Tile tile = board[i][j];
|
Tile tile = board[i][j];
|
||||||
int x = i * tileSize, y = j * tileSize;
|
int x = i * tileSize, y = j * tileSize;
|
||||||
|
|
||||||
// Draw background with grid
|
// Draw background
|
||||||
g.setColor(Color.gray);
|
g.setColor(Color.gray);
|
||||||
g.fillRect(x, y, x + tileSize, y + tileSize);
|
g.fillRect(x, y, x + tileSize, y + tileSize);
|
||||||
g.setColor(Color.black);
|
|
||||||
g.drawRect(x, y, x + tileSize, y + tileSize);
|
|
||||||
|
|
||||||
// Draw tile with normal mine
|
// Draw tile with normal mine
|
||||||
if (gameState == GameState.LOST && tile.isMine()) g.drawImage(icons.get("mine2"), x, y, this);
|
if (gameState == GameState.LOST && tile.isMine()) g.drawImage(icons.get("mine2"), x, y, this);
|
||||||
@ -135,18 +135,24 @@ public class Board extends JPanel {
|
|||||||
else if (tile.isDrawSurroundingMines() && tile.getSurroundingMines() > 0) {
|
else if (tile.isDrawSurroundingMines() && tile.getSurroundingMines() > 0) {
|
||||||
// Draw number of surrounding mines
|
// Draw number of surrounding mines
|
||||||
String numStr = String.valueOf(tile.getSurroundingMines());
|
String numStr = String.valueOf(tile.getSurroundingMines());
|
||||||
g.setFont(new Font("Helvetica", Font.PLAIN, 18));
|
g.setFont(new Font("Arial", Font.BOLD, 18));
|
||||||
|
g.setColor(Color.red);
|
||||||
FontMetrics fm = g.getFontMetrics();
|
FontMetrics fm = g.getFontMetrics();
|
||||||
int w = fm.stringWidth(numStr), h = fm.getHeight();
|
int w = fm.stringWidth(numStr), h = fm.getHeight();
|
||||||
g.drawString(numStr, x + tileSize / 2 - w / 2, y + tileSize / 2 + h / 2);
|
g.drawString(numStr, x + (tileSize - w) / 2, y + (tileSize - h) / 2 + fm.getAscent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw flagged tile
|
// Draw flagged tile
|
||||||
else if (tile.isFlagged()) g.drawImage(icons.get("flag"), x, y, this);
|
else if (tile.isFlagged()) g.drawImage(icons.get("tile3"), x, y, this);
|
||||||
|
|
||||||
// Draw normal tile
|
// Draw normal tile
|
||||||
else g.drawImage(icons.get("tile"), x, y, this);
|
else g.drawImage(icons.get("tile"), x, y, this);
|
||||||
|
|
||||||
|
// Draw grid
|
||||||
|
((Graphics2D) g).setStroke(new BasicStroke(2.0f));
|
||||||
|
g.setColor(Color.black);
|
||||||
|
g.drawRect(x, y, x + tileSize, y + tileSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,11 +8,9 @@ package dev.kske.minesweeper;
|
|||||||
*/
|
*/
|
||||||
public class BoardConfig {
|
public class BoardConfig {
|
||||||
|
|
||||||
public final int x, y, width, height, mines;
|
public final int width, height, mines;
|
||||||
|
|
||||||
public BoardConfig(int x, int y, int width, int height, int mines) {
|
public BoardConfig(int width, int height, int mines) {
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
this.mines = mines;
|
this.mines = mines;
|
||||||
|
@ -24,6 +24,7 @@ public class CustomDialog extends JDialog {
|
|||||||
|
|
||||||
private static final long serialVersionUID = -4019516811065781434L;
|
private static final long serialVersionUID = -4019516811065781434L;
|
||||||
private final JPanel mcontentPanel = new JPanel();
|
private final JPanel mcontentPanel = new JPanel();
|
||||||
|
private final JSlider sliderBoardWidth, sliderBoardHeight, sliderNumMines;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the dialog.
|
* Create the dialog.
|
||||||
@ -43,7 +44,7 @@ public class CustomDialog extends JDialog {
|
|||||||
mcontentPanel.add(lblBoardWidth);
|
mcontentPanel.add(lblBoardWidth);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
JSlider sliderBoardWidth = new JSlider();
|
sliderBoardWidth = new JSlider();
|
||||||
sliderBoardWidth.setValue(16);
|
sliderBoardWidth.setValue(16);
|
||||||
sliderBoardWidth.setMinimum(2);
|
sliderBoardWidth.setMinimum(2);
|
||||||
sliderBoardWidth.setMaximum(30);
|
sliderBoardWidth.setMaximum(30);
|
||||||
@ -59,7 +60,7 @@ public class CustomDialog extends JDialog {
|
|||||||
mcontentPanel.add(lblBoardHeight);
|
mcontentPanel.add(lblBoardHeight);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
JSlider sliderBoardHeight = new JSlider();
|
sliderBoardHeight = new JSlider();
|
||||||
sliderBoardHeight.setValue(16);
|
sliderBoardHeight.setValue(16);
|
||||||
sliderBoardHeight.setMaximum(30);
|
sliderBoardHeight.setMaximum(30);
|
||||||
sliderBoardHeight.setMinimum(2);
|
sliderBoardHeight.setMinimum(2);
|
||||||
@ -75,11 +76,11 @@ public class CustomDialog extends JDialog {
|
|||||||
mcontentPanel.add(lblNumberOfMines);
|
mcontentPanel.add(lblNumberOfMines);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
JSlider slider = new JSlider();
|
sliderNumMines = new JSlider();
|
||||||
slider.setValue(16);
|
sliderNumMines.setValue(16);
|
||||||
slider.setMinimum(2);
|
sliderNumMines.setMinimum(2);
|
||||||
slider.setMaximum(200);
|
sliderNumMines.setMaximum(200);
|
||||||
mcontentPanel.add(slider);
|
mcontentPanel.add(sliderNumMines);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
JLabel label = new JLabel("");
|
JLabel label = new JLabel("");
|
||||||
@ -98,10 +99,13 @@ public class CustomDialog extends JDialog {
|
|||||||
{
|
{
|
||||||
JButton cancelButton = new JButton("Cancel");
|
JButton cancelButton = new JButton("Cancel");
|
||||||
cancelButton.setActionCommand("Cancel");
|
cancelButton.setActionCommand("Cancel");
|
||||||
|
cancelButton.addActionListener((evt) -> dispose());
|
||||||
buttonPane.add(cancelButton);
|
buttonPane.add(cancelButton);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
|
public BoardConfig getBoardConfig() {
|
||||||
|
return new BoardConfig(sliderBoardWidth.getValue(), sliderBoardHeight.getValue(), sliderNumMines.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,8 @@ public class Minesweeper {
|
|||||||
private JFrame mframe;
|
private JFrame mframe;
|
||||||
|
|
||||||
private Board board;
|
private Board board;
|
||||||
private final BoardConfig easyConfig = new BoardConfig(0, 48, 8, 8, 10),
|
private final BoardConfig easyConfig = new BoardConfig(8, 8, 10), mediumConfig = new BoardConfig(16, 16, 40),
|
||||||
mediumConfig = new BoardConfig(0, 48, 16, 16, 40), hardConfig = new BoardConfig(0, 48, 30, 16, 99);
|
hardConfig = new BoardConfig(30, 16, 99);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launch the application.
|
* Launch the application.
|
||||||
@ -79,7 +79,6 @@ public class Minesweeper {
|
|||||||
mframe.getContentPane().setLayout(new BorderLayout(0, 0));
|
mframe.getContentPane().setLayout(new BorderLayout(0, 0));
|
||||||
mframe.getContentPane().add(board, BorderLayout.CENTER);
|
mframe.getContentPane().add(board, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
|
||||||
JPanel headerPanel = new JPanel();
|
JPanel headerPanel = new JPanel();
|
||||||
mframe.getContentPane().add(headerPanel, BorderLayout.NORTH);
|
mframe.getContentPane().add(headerPanel, BorderLayout.NORTH);
|
||||||
headerPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
|
headerPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
|
||||||
@ -134,10 +133,6 @@ public class Minesweeper {
|
|||||||
easyMenuItem.addActionListener((evt) -> initGame(easyConfig));
|
easyMenuItem.addActionListener((evt) -> initGame(easyConfig));
|
||||||
mediumMenuItem.addActionListener((evt) -> initGame(mediumConfig));
|
mediumMenuItem.addActionListener((evt) -> initGame(mediumConfig));
|
||||||
hardMenuItem.addActionListener((evt) -> initGame(hardConfig));
|
hardMenuItem.addActionListener((evt) -> initGame(hardConfig));
|
||||||
customMenuItem.addActionListener((evt) -> {
|
|
||||||
var dlg = new CustomDialog(mframe);
|
|
||||||
|
|
||||||
});
|
|
||||||
aboutMenuItem.addActionListener((evt) -> {
|
aboutMenuItem.addActionListener((evt) -> {
|
||||||
JOptionPane.showMessageDialog(board, "Minesweeper version " + VERSION + "\nby Kai S. K. Engelbart");
|
JOptionPane.showMessageDialog(board, "Minesweeper version " + VERSION + "\nby Kai S. K. Engelbart");
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user