diff --git a/.classpath b/.classpath index 9af0373..fe80859 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,7 @@ + diff --git a/res/Flag.ico b/res/Flag.ico new file mode 100644 index 0000000..3bda547 Binary files /dev/null and b/res/Flag.ico differ diff --git a/res/Mine.ico b/res/Mine.ico new file mode 100644 index 0000000..21bddb1 Binary files /dev/null and b/res/Mine.ico differ diff --git a/res/Mine2.ico b/res/Mine2.ico new file mode 100644 index 0000000..84b5963 Binary files /dev/null and b/res/Mine2.ico differ diff --git a/res/Mine3.ico b/res/Mine3.ico new file mode 100644 index 0000000..726dc08 Binary files /dev/null and b/res/Mine3.ico differ diff --git a/res/Mine4.ico b/res/Mine4.ico new file mode 100644 index 0000000..5e1aed0 Binary files /dev/null and b/res/Mine4.ico differ diff --git a/res/Smiley.ico b/res/Smiley.ico new file mode 100644 index 0000000..d251eab Binary files /dev/null and b/res/Smiley.ico differ diff --git a/res/Smiley1.ico b/res/Smiley1.ico new file mode 100644 index 0000000..c33e93a Binary files /dev/null and b/res/Smiley1.ico differ diff --git a/res/Smiley2.ico b/res/Smiley2.ico new file mode 100644 index 0000000..7a49a43 Binary files /dev/null and b/res/Smiley2.ico differ diff --git a/res/Smiley3.ico b/res/Smiley3.ico new file mode 100644 index 0000000..7975f49 Binary files /dev/null and b/res/Smiley3.ico differ diff --git a/res/Tile.ico b/res/Tile.ico new file mode 100644 index 0000000..316d900 Binary files /dev/null and b/res/Tile.ico differ diff --git a/res/Tile2.ico b/res/Tile2.ico new file mode 100644 index 0000000..6872dcb Binary files /dev/null and b/res/Tile2.ico differ diff --git a/res/Tile3.ico b/res/Tile3.ico new file mode 100644 index 0000000..eb9d7fc Binary files /dev/null and b/res/Tile3.ico differ diff --git a/res/Tile4.ico b/res/Tile4.ico new file mode 100644 index 0000000..cfe2139 Binary files /dev/null and b/res/Tile4.ico differ diff --git a/src/dev/kske/minesweeper/Board.java b/src/dev/kske/minesweeper/Board.java index ff2185c..a1a0803 100644 --- a/src/dev/kske/minesweeper/Board.java +++ b/src/dev/kske/minesweeper/Board.java @@ -1,10 +1,13 @@ package dev.kske.minesweeper; +import java.awt.Color; +import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; -import java.awt.image.BufferedImage; import java.util.Random; +import javax.swing.JFrame; + /** * Project: Minesweeper
* File: Board.java
@@ -13,20 +16,21 @@ import java.util.Random; */ public class Board { - private int tileSize, width, height; - private Rectangle screen; - private BufferedImage[] icons; + private int tileSize, width, height; + private Rectangle screen; private GameState gameState; private int mines, activeTiles, flaggedTiles; 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.width = width; this.height = height; screen = new Rectangle(x, y, x + width * tileSize, y + height * tileSize); - // TODO: Init icons + this.viewport = viewport; gameState = GameState.ACTIVE; this.mines = mines; @@ -91,12 +95,12 @@ public class Board { touchTile(i, j); // Redraw the touched tile - // TODO: Draw tile + drawTile(n, m); } } - public void flagTile(Point tilePos) { - Tile tile = board[tilePos.x][tilePos.y]; + public void flagTile(int n, int m) { + Tile tile = board[n][m]; if (!tile.isTouched()) { if (tile.isFlagged()) { tile.setFlagged(false); @@ -105,7 +109,28 @@ public class Board { tile.setFlagged(true); 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) + } } diff --git a/src/dev/kske/minesweeper/Minesweeper.java b/src/dev/kske/minesweeper/Minesweeper.java index 292a623..14ac0eb 100644 --- a/src/dev/kske/minesweeper/Minesweeper.java +++ b/src/dev/kske/minesweeper/Minesweeper.java @@ -14,6 +14,8 @@ public class Minesweeper { private JFrame mframe; + private Board board; + /** * Launch the application. */ @@ -47,6 +49,9 @@ public class Minesweeper { mframe.setTitle("Minesweeper"); mframe.setBounds(100, 100, 450, 300); mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + board = new Board(0, 0, 10, 10, 32, 10, mframe); + board.draw(); } } diff --git a/src/dev/kske/minesweeper/Tile.java b/src/dev/kske/minesweeper/Tile.java index 83292ac..38f48a0 100644 --- a/src/dev/kske/minesweeper/Tile.java +++ b/src/dev/kske/minesweeper/Tile.java @@ -1,5 +1,13 @@ 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: Minesweeper
* File: Tile.java
@@ -8,17 +16,31 @@ package dev.kske.minesweeper; */ public class Tile { + private static Map icons; + private boolean mine, flagged, touched; private boolean drawSurroundingMines; 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() { - mine = false; - flagged = false; - touched = false; - drawSurroundingMines = false; - surroundingMines = 0; + mine = flagged = touched = drawSurroundingMines = false; + + surroundingMines = 0; } public boolean isMine() { return mine; }