Adjusted font and grid, cleaned up BoardConfig, working on CustomDialog

This commit is contained in:
Kai S. K. Engelbart 2019-04-05 14:52:49 +02:00
parent 8ad61d9762
commit 948fa50d40
Signed by: kske
GPG Key ID: 8BEB13EC5DF7EF13
4 changed files with 29 additions and 26 deletions

View File

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

View File

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

View File

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

View File

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