timer fixes, bomb fixes
This commit is contained in:
parent
9fa0b42239
commit
749fd17a90
1
.gitignore
vendored
1
.gitignore
vendored
@ -40,3 +40,4 @@ bin/
|
|||||||
|
|
||||||
### Mac OS ###
|
### Mac OS ###
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.idea
|
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
|
@ -63,7 +63,10 @@ jar {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
from {
|
from {
|
||||||
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
|
configurations.compileClasspath.filter { it.exists() }.collect { it.isDirectory() ? it : zipTree(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
|
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mainClassName = "com.shr4pnel.minesweeper.Main"
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
package com.shr4pnel.minesweeper;
|
package com.shr4pnel.minesweeper;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
|
import javafx.scene.input.MouseButton;
|
||||||
import javafx.scene.input.MouseEvent;
|
import javafx.scene.input.MouseEvent;
|
||||||
import javafx.scene.layout.GridPane;
|
import javafx.scene.layout.GridPane;
|
||||||
|
|
||||||
@ -28,9 +27,13 @@ public class Controller {
|
|||||||
@FXML
|
@FXML
|
||||||
ImageView time_3;
|
ImageView time_3;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
ImageView bomb_2;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
ImageView bomb_3;
|
||||||
|
|
||||||
|
|
||||||
// i already said i'm sorry!
|
|
||||||
Set<String> visitedTiles = new HashSet<>();
|
|
||||||
Grid gridHandler;
|
Grid gridHandler;
|
||||||
GridWrapper wrapper;
|
GridWrapper wrapper;
|
||||||
boolean gameOver = false;
|
boolean gameOver = false;
|
||||||
@ -38,6 +41,7 @@ public class Controller {
|
|||||||
static Timer timer = new Timer();
|
static Timer timer = new Timer();
|
||||||
int time = 0;
|
int time = 0;
|
||||||
long startTime;
|
long startTime;
|
||||||
|
int bombCount = 99;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
@ -47,13 +51,19 @@ public class Controller {
|
|||||||
|
|
||||||
|
|
||||||
private void reinitialize() {
|
private void reinitialize() {
|
||||||
|
bombCount = 99;
|
||||||
|
updateBombCounter();
|
||||||
|
URL zeroSecondURL = getClass().getResource("img/0_seconds.png");
|
||||||
|
time_1.setImage(new Image(String.valueOf(zeroSecondURL)));
|
||||||
|
time_2.setImage(new Image(String.valueOf(zeroSecondURL)));
|
||||||
|
time_3.setImage(new Image(String.valueOf(zeroSecondURL)));
|
||||||
timer.cancel();
|
timer.cancel();
|
||||||
isFirstLoad = true;
|
isFirstLoad = true;
|
||||||
timer = new Timer();
|
timer = new Timer();
|
||||||
URL blank = getClass().getResource("img/blank.png");
|
URL blank = getClass().getResource("img/blank.png");
|
||||||
for (Node n : grid.getChildren()) {
|
for (Node n : grid.getChildren()) {
|
||||||
ImageView nodeAsImage = (ImageView) n;
|
ImageView nodeAsImage = (ImageView) n;
|
||||||
nodeAsImage.setImage(new Image(blank.toString()));
|
nodeAsImage.setImage(new Image(String.valueOf(blank)));
|
||||||
}
|
}
|
||||||
gridHandler = new Grid();
|
gridHandler = new Grid();
|
||||||
wrapper = gridHandler.grid;
|
wrapper = gridHandler.grid;
|
||||||
@ -65,6 +75,66 @@ public class Controller {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (isFirstLoad) {
|
if (isFirstLoad) {
|
||||||
|
scheduleTimer();
|
||||||
|
}
|
||||||
|
isFirstLoad = false;
|
||||||
|
Node tileClicked = event.getPickResult().getIntersectedNode();
|
||||||
|
int column = GridPane.getColumnIndex(tileClicked);
|
||||||
|
int row = GridPane.getRowIndex(tileClicked);
|
||||||
|
if (event.getButton() == MouseButton.SECONDARY) {
|
||||||
|
flag(tileClicked);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (wrapper.atColumn(column).atRow(row).isBomb()) {
|
||||||
|
gameOver(tileClicked);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setAdjacentCount(tileClicked);
|
||||||
|
expandGrid(column, row);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gameOver(Node tileClicked) {
|
||||||
|
gameOver = true;
|
||||||
|
timer.cancel();
|
||||||
|
System.out.println("DEAD!!!");
|
||||||
|
URL smileyURL = getClass().getResource("img/face_dead.png");
|
||||||
|
smiley.setImage(new Image(String.valueOf(smileyURL)));
|
||||||
|
ImageView tileClickedImage = (ImageView) tileClicked;
|
||||||
|
URL deathBombURL = getClass().getResource("img/bomb_death.png");
|
||||||
|
tileClickedImage.setImage(new Image(String.valueOf(deathBombURL)));
|
||||||
|
showAllBombs(GridPane.getColumnIndex(tileClicked), GridPane.getRowIndex(tileClicked));
|
||||||
|
}
|
||||||
|
|
||||||
|
void flag(Node tileClicked) {
|
||||||
|
bombCount--;
|
||||||
|
URL flagURL = getClass().getResource("img/bomb_flagged.png");
|
||||||
|
Image flagImage = new Image(String.valueOf(flagURL));
|
||||||
|
ImageView tile = (ImageView) tileClicked;
|
||||||
|
if (tile.getImage().equals(flagImage)) {
|
||||||
|
bombCount++;
|
||||||
|
}
|
||||||
|
updateBombCounter();
|
||||||
|
tile.setImage(new Image(String.valueOf(flagURL)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateBombCounter() {
|
||||||
|
String bombCountString = String.valueOf(bombCount);
|
||||||
|
char[] bombCountCharArray = bombCountString.toCharArray();
|
||||||
|
if (bombCountString.length() == 2) {
|
||||||
|
URL bombCountTensURL =
|
||||||
|
getClass().getResource("img/" + bombCountCharArray[0] + "_seconds.png");
|
||||||
|
URL bombCountUnitsURL =
|
||||||
|
getClass().getResource("img/" + bombCountCharArray[1] + "_seconds.png");
|
||||||
|
bomb_2.setImage(new Image(String.valueOf(bombCountTensURL)));
|
||||||
|
bomb_3.setImage(new Image(String.valueOf(bombCountUnitsURL)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
URL bombCountUnitsURL =
|
||||||
|
getClass().getResource("img/" + bombCountCharArray[1] + "_seconds.png");
|
||||||
|
bomb_3.setImage(new Image(String.valueOf(bombCountUnitsURL)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void scheduleTimer() {
|
||||||
startTime = System.currentTimeMillis();
|
startTime = System.currentTimeMillis();
|
||||||
TimerTask task = new TimerTask() {
|
TimerTask task = new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
@ -105,34 +175,17 @@ public class Controller {
|
|||||||
};
|
};
|
||||||
timer.schedule(task, 0, 1000);
|
timer.schedule(task, 0, 1000);
|
||||||
}
|
}
|
||||||
Node tileClicked = event.getPickResult().getIntersectedNode();
|
|
||||||
int column = GridPane.getColumnIndex(tileClicked);
|
|
||||||
int row = GridPane.getRowIndex(tileClicked);
|
|
||||||
if (wrapper.atColumn(column).atRow(row).isBomb()) {
|
|
||||||
gameOver = true;
|
|
||||||
System.out.println("DEAD!!!");
|
|
||||||
URL smileyURL = getClass().getResource("img/face_dead.png");
|
|
||||||
smiley.setImage(new Image(String.valueOf(smileyURL)));
|
|
||||||
ImageView tileClickedImage = (ImageView) tileClicked;
|
|
||||||
URL deathBombURL = getClass().getResource("img/bomb_death.png");
|
|
||||||
tileClickedImage.setImage(new Image(String.valueOf(deathBombURL)));
|
|
||||||
showAllBombs();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setAdjacentCount(tileClicked);
|
|
||||||
expandGrid(column, row);
|
|
||||||
}
|
|
||||||
|
|
||||||
void showAllBombs() {
|
void showAllBombs(int clickedColumn, int clickedRow) {
|
||||||
Node[] children = grid.getChildren().toArray(new Node[0]);
|
|
||||||
int column, row;
|
|
||||||
for (column = 0; column < 30; ++column) {
|
|
||||||
for (row = 0; row < 16; ++row) {
|
|
||||||
if (wrapper.atColumn(column).atRow(row).isBomb()) {
|
|
||||||
ImageView currentBombTile = (ImageView) children[column + row * 30];
|
|
||||||
URL bombRevealedURL = getClass().getResource("img/bomb_revealed.png");
|
URL bombRevealedURL = getClass().getResource("img/bomb_revealed.png");
|
||||||
currentBombTile.setImage(new Image(String.valueOf(bombRevealedURL)));
|
for (Node node : grid.getChildren()) {
|
||||||
}
|
int column = GridPane.getColumnIndex(node);
|
||||||
|
int row = GridPane.getRowIndex(node);
|
||||||
|
if (column == clickedColumn && row == clickedRow)
|
||||||
|
continue;
|
||||||
|
if (wrapper.atColumn(column).atRow(row).isBomb()) {
|
||||||
|
ImageView imageView = (ImageView) node;
|
||||||
|
imageView.setImage(new Image(String.valueOf(bombRevealedURL)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package com.shr4pnel.minesweeper;
|
package com.shr4pnel.minesweeper;
|
||||||
|
|
||||||
import javax.swing.text.html.ImageView;
|
|
||||||
|
|
||||||
public class GridWrapper {
|
public class GridWrapper {
|
||||||
private final boolean[][] grid = new boolean[30][16];
|
final boolean[][] grid = new boolean[30][16];
|
||||||
private int currentColumn;
|
private int currentColumn;
|
||||||
private int currentRow;
|
private int currentRow;
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user