timer fixes, bomb fixes

This commit is contained in:
tyler :3 2024-05-16 09:56:13 +01:00
parent 9fa0b42239
commit 749fd17a90
6 changed files with 1702 additions and 1130 deletions

1
.gitignore vendored
View File

@ -40,3 +40,4 @@ bin/
### Mac OS ### ### Mac OS ###
.DS_Store .DS_Store
.idea

1
.idea/gradle.xml generated
View File

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

View File

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

View File

@ -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,74 +75,117 @@ public class Controller {
return; return;
} }
if (isFirstLoad) { if (isFirstLoad) {
startTime = System.currentTimeMillis(); scheduleTimer();
TimerTask task = new TimerTask() {
@Override
public void run() {
if (time >= 999) {
timer.cancel();
return;
}
long currentTimeMillis = System.currentTimeMillis();
long elapsedTimeMillis = currentTimeMillis - startTime;
time = (int) (elapsedTimeMillis / 1000);
String timeString = String.valueOf(time);
char[] timeStringArray = timeString.toCharArray();
int length = timeString.length();
if (length == 3) {
char hundred = timeStringArray[0];
char tens = timeStringArray[1];
char unit = timeStringArray[2];
URL hundredURL = getClass().getResource("img/" + hundred + "_seconds.png");
URL tensURL = getClass().getResource("img/" + tens + "_seconds.png");
URL unitURL = getClass().getResource("img/" + unit + "_seconds.png");
time_1.setImage(new Image(String.valueOf(hundredURL)));
time_2.setImage(new Image(String.valueOf(tensURL)));
time_3.setImage(new Image(String.valueOf(unitURL)));
} else if (length == 2) {
char tens = timeStringArray[0];
char unit = timeStringArray[1];
URL tensURL = getClass().getResource("img/" + tens + "_seconds.png");
URL unitURL = getClass().getResource("img/" + unit + "_seconds.png");
time_2.setImage(new Image(String.valueOf(tensURL)));
time_3.setImage(new Image(String.valueOf(unitURL)));
} else if (length == 1) {
char unit = timeStringArray[0];
URL unitURL = getClass().getResource("img/" + unit + "_seconds.png");
time_3.setImage(new Image(String.valueOf(unitURL)));
}
}
};
timer.schedule(task, 0, 1000);
} }
isFirstLoad = false;
Node tileClicked = event.getPickResult().getIntersectedNode(); Node tileClicked = event.getPickResult().getIntersectedNode();
int column = GridPane.getColumnIndex(tileClicked); int column = GridPane.getColumnIndex(tileClicked);
int row = GridPane.getRowIndex(tileClicked); int row = GridPane.getRowIndex(tileClicked);
if (event.getButton() == MouseButton.SECONDARY) {
flag(tileClicked);
return;
}
if (wrapper.atColumn(column).atRow(row).isBomb()) { if (wrapper.atColumn(column).atRow(row).isBomb()) {
gameOver = true; gameOver(tileClicked);
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; return;
} }
setAdjacentCount(tileClicked); setAdjacentCount(tileClicked);
expandGrid(column, row); expandGrid(column, row);
} }
void showAllBombs() { void gameOver(Node tileClicked) {
Node[] children = grid.getChildren().toArray(new Node[0]); gameOver = true;
int column, row; timer.cancel();
for (column = 0; column < 30; ++column) { System.out.println("DEAD!!!");
for (row = 0; row < 16; ++row) { URL smileyURL = getClass().getResource("img/face_dead.png");
if (wrapper.atColumn(column).atRow(row).isBomb()) { smiley.setImage(new Image(String.valueOf(smileyURL)));
ImageView currentBombTile = (ImageView) children[column + row * 30]; ImageView tileClickedImage = (ImageView) tileClicked;
URL bombRevealedURL = getClass().getResource("img/bomb_revealed.png"); URL deathBombURL = getClass().getResource("img/bomb_death.png");
currentBombTile.setImage(new Image(String.valueOf(bombRevealedURL))); 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();
TimerTask task = new TimerTask() {
@Override
public void run() {
if (time >= 999) {
timer.cancel();
return;
} }
long currentTimeMillis = System.currentTimeMillis();
long elapsedTimeMillis = currentTimeMillis - startTime;
time = (int) (elapsedTimeMillis / 1000);
String timeString = String.valueOf(time);
char[] timeStringArray = timeString.toCharArray();
int length = timeString.length();
if (length == 3) {
char hundred = timeStringArray[0];
char tens = timeStringArray[1];
char unit = timeStringArray[2];
URL hundredURL = getClass().getResource("img/" + hundred + "_seconds.png");
URL tensURL = getClass().getResource("img/" + tens + "_seconds.png");
URL unitURL = getClass().getResource("img/" + unit + "_seconds.png");
time_1.setImage(new Image(String.valueOf(hundredURL)));
time_2.setImage(new Image(String.valueOf(tensURL)));
time_3.setImage(new Image(String.valueOf(unitURL)));
} else if (length == 2) {
char tens = timeStringArray[0];
char unit = timeStringArray[1];
URL tensURL = getClass().getResource("img/" + tens + "_seconds.png");
URL unitURL = getClass().getResource("img/" + unit + "_seconds.png");
time_2.setImage(new Image(String.valueOf(tensURL)));
time_3.setImage(new Image(String.valueOf(unitURL)));
} else if (length == 1) {
char unit = timeStringArray[0];
URL unitURL = getClass().getResource("img/" + unit + "_seconds.png");
time_3.setImage(new Image(String.valueOf(unitURL)));
}
}
};
timer.schedule(task, 0, 1000);
}
void showAllBombs(int clickedColumn, int clickedRow) {
URL bombRevealedURL = getClass().getResource("img/bomb_revealed.png");
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)));
} }
} }
} }

View File

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