Working on drawing, added icons and loading routine
@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="src" path="res"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="module" value="true"/>
|
<attribute name="module" value="true"/>
|
||||||
|
BIN
res/Flag.ico
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
res/Mine.ico
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
res/Mine2.ico
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
res/Mine3.ico
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
res/Mine4.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
res/Smiley.ico
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
res/Smiley1.ico
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
res/Smiley2.ico
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
res/Smiley3.ico
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
res/Tile.ico
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
res/Tile2.ico
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
res/Tile3.ico
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
res/Tile4.ico
Normal file
After Width: | Height: | Size: 58 KiB |
@ -1,10 +1,13 @@
|
|||||||
package dev.kske.minesweeper;
|
package dev.kske.minesweeper;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Project: <strong>Minesweeper</strong><br>
|
* Project: <strong>Minesweeper</strong><br>
|
||||||
* File: <strong>Board.java</strong><br>
|
* File: <strong>Board.java</strong><br>
|
||||||
@ -13,20 +16,21 @@ import java.util.Random;
|
|||||||
*/
|
*/
|
||||||
public class Board {
|
public class Board {
|
||||||
|
|
||||||
private int tileSize, width, height;
|
private int tileSize, width, height;
|
||||||
private Rectangle screen;
|
private Rectangle screen;
|
||||||
private BufferedImage[] icons;
|
|
||||||
|
|
||||||
private GameState gameState;
|
private GameState gameState;
|
||||||
private int mines, activeTiles, flaggedTiles;
|
private int mines, activeTiles, flaggedTiles;
|
||||||
private Tile[][] board;
|
private Tile[][] board;
|
||||||
|
|
||||||
public Board(int x, int y, int width, int height, int tileSize, int mines) {
|
private final JFrame viewport;
|
||||||
|
|
||||||
|
public Board(int x, int y, int width, int height, int tileSize, int mines, JFrame viewport) {
|
||||||
this.tileSize = tileSize;
|
this.tileSize = tileSize;
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
screen = new Rectangle(x, y, x + width * tileSize, y + height * tileSize);
|
screen = new Rectangle(x, y, x + width * tileSize, y + height * tileSize);
|
||||||
// TODO: Init icons
|
this.viewport = viewport;
|
||||||
|
|
||||||
gameState = GameState.ACTIVE;
|
gameState = GameState.ACTIVE;
|
||||||
this.mines = mines;
|
this.mines = mines;
|
||||||
@ -91,12 +95,12 @@ public class Board {
|
|||||||
touchTile(i, j);
|
touchTile(i, j);
|
||||||
|
|
||||||
// Redraw the touched tile
|
// Redraw the touched tile
|
||||||
// TODO: Draw tile
|
drawTile(n, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void flagTile(Point tilePos) {
|
public void flagTile(int n, int m) {
|
||||||
Tile tile = board[tilePos.x][tilePos.y];
|
Tile tile = board[n][m];
|
||||||
if (!tile.isTouched()) {
|
if (!tile.isTouched()) {
|
||||||
if (tile.isFlagged()) {
|
if (tile.isFlagged()) {
|
||||||
tile.setFlagged(false);
|
tile.setFlagged(false);
|
||||||
@ -105,7 +109,28 @@ public class Board {
|
|||||||
tile.setFlagged(true);
|
tile.setFlagged(true);
|
||||||
flaggedTiles++;
|
flaggedTiles++;
|
||||||
}
|
}
|
||||||
// TODO: Draw tile
|
drawTile(n, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void draw() {
|
||||||
|
for(int i = 0; i < width; i++)
|
||||||
|
for (int j = 0; j < height; j++)
|
||||||
|
drawTile(i, j);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawTile(int n, int m) {
|
||||||
|
Tile tile = board[n][m];
|
||||||
|
int x = screen.x + n * tileSize, y = screen.y + m * tileSize;
|
||||||
|
Graphics g = viewport.getGraphics();
|
||||||
|
|
||||||
|
// Draw background with grid
|
||||||
|
g.setColor(Color.gray);
|
||||||
|
g.fillRect(x, y, x + tileSize, y + tileSize);
|
||||||
|
g.setColor(Color.black);
|
||||||
|
g.drawRect(x, y, x + tileSize, y + tileSize);
|
||||||
|
|
||||||
|
// Draw all mines if the game is lost
|
||||||
|
// if(gameState == GameState.LOST)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,8 @@ public class Minesweeper {
|
|||||||
|
|
||||||
private JFrame mframe;
|
private JFrame mframe;
|
||||||
|
|
||||||
|
private Board board;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launch the application.
|
* Launch the application.
|
||||||
*/
|
*/
|
||||||
@ -47,6 +49,9 @@ public class Minesweeper {
|
|||||||
mframe.setTitle("Minesweeper");
|
mframe.setTitle("Minesweeper");
|
||||||
mframe.setBounds(100, 100, 450, 300);
|
mframe.setBounds(100, 100, 450, 300);
|
||||||
mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
|
board = new Board(0, 0, 10, 10, 32, 10, mframe);
|
||||||
|
board.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
package dev.kske.minesweeper;
|
package dev.kske.minesweeper;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Project: <strong>Minesweeper</strong><br>
|
* Project: <strong>Minesweeper</strong><br>
|
||||||
* File: <strong>Tile.java</strong><br>
|
* File: <strong>Tile.java</strong><br>
|
||||||
@ -8,17 +16,31 @@ package dev.kske.minesweeper;
|
|||||||
*/
|
*/
|
||||||
public class Tile {
|
public class Tile {
|
||||||
|
|
||||||
|
private static Map<String, BufferedImage> icons;
|
||||||
|
|
||||||
private boolean mine, flagged, touched;
|
private boolean mine, flagged, touched;
|
||||||
|
|
||||||
private boolean drawSurroundingMines;
|
private boolean drawSurroundingMines;
|
||||||
private int surroundingMines;
|
private int surroundingMines;
|
||||||
|
|
||||||
|
static {
|
||||||
|
icons = new HashMap<>();
|
||||||
|
final String[] names = { "Mine2", "Mine4", "Tile", "Tile3" };
|
||||||
|
for (String name : names) {
|
||||||
|
URL file = Tile.class.getResource(name + ".ico");
|
||||||
|
try {
|
||||||
|
icons.put(name, ImageIO.read(file));
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Error loading texture: " + name);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Tile() {
|
public Tile() {
|
||||||
mine = false;
|
mine = flagged = touched = drawSurroundingMines = false;
|
||||||
flagged = false;
|
|
||||||
touched = false;
|
surroundingMines = 0;
|
||||||
drawSurroundingMines = false;
|
|
||||||
surroundingMines = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMine() { return mine; }
|
public boolean isMine() { return mine; }
|
||||||
|