flagging fixes

This commit is contained in:
tyler :3 2024-05-17 19:11:59 +01:00
parent 6fc162760d
commit c3d8b672b1
3 changed files with 23 additions and 18 deletions

View File

@ -63,36 +63,42 @@ public class Controller {
return; return;
} }
Button clicked = (Button) e.getSource(); Button clicked = (Button) e.getSource();
ImageView buttonImageView = (ImageView) clicked.getGraphic();
Image buttonImage = buttonImageView.getImage();
int column = GridPane.getColumnIndex(clicked); int column = GridPane.getColumnIndex(clicked);
int row = GridPane.getRowIndex(clicked); int row = GridPane.getRowIndex(clicked);
if (isFirstLoad) { if (isFirstLoad) {
scheduleTimer(); scheduleTimer();
isFirstLoad = false; isFirstLoad = false;
} }
if (e.getButton() == MouseButton.SECONDARY) { if (e.getButton() == MouseButton.SECONDARY) {
flag(clicked); flag(clicked);
} else { return;
handlePrimaryClick(clicked, column, row);
} }
if (buttonImage.getUrl().contains("flagged.png")) {
return;
}
handlePrimaryClick(clicked, column, row);
} }
private void handlePrimaryClick(Button clicked, int column, int row) { private void handlePrimaryClick(Button clicked, int column, int row) {
if (wrapper.atColumn(column).atRow(row).isBomb()) { if (wrapper.atColumn(column).atRow(row).isBomb()) {
gameOver(clicked); gameOver(clicked);
} else { return;
int adjacentBombs = wrapper.adjacentBombCount();
setAdjacentCount(clicked, adjacentBombs);
if (adjacentBombs == 0) {
recursiveExpandTiles(column, row);
}
} }
int adjacentBombs = wrapper.adjacentBombCount();
setAdjacentCount(clicked, adjacentBombs);
if (adjacentBombs == 0) {
recursiveExpandTiles(column, row);
}
} }
private void recursiveExpandTiles(int column, int row) { private void recursiveExpandTiles(int column, int row) {
if (column < 0 || column >= 30 || row < 0 || row >= 16 || expandedTiles[column][row] && !wrapper.atColumn(column).atRow(row).isBomb()) if (column < 0 || column >= 30 || row < 0 || row >= 16 ||
expandedTiles[column][row] && !wrapper.atColumn(column).atRow(row).isBomb()) {
return; return;
}
expandTile(column, row); expandTile(column, row);
if (wrapper.atColumn(column).atRow(row).adjacentBombCount() == 0) { if (wrapper.atColumn(column).atRow(row).adjacentBombCount() == 0) {
recursiveExpandTiles(column, row - 1); recursiveExpandTiles(column, row - 1);
@ -138,6 +144,7 @@ public class Controller {
resetGrid(); resetGrid();
gridHandler = new Grid(); gridHandler = new Grid();
wrapper = gridHandler.grid; wrapper = gridHandler.grid;
expandedTiles = new boolean[30][16];
} }
private void resetTimer() { private void resetTimer() {
@ -170,7 +177,8 @@ public class Controller {
Button tileAsButton = (Button) tileClicked; Button tileAsButton = (Button) tileClicked;
ImageView tileGraphic = (ImageView) tileAsButton.getGraphic(); ImageView tileGraphic = (ImageView) tileAsButton.getGraphic();
Image tileGraphicImage = tileGraphic.getImage(); Image tileGraphicImage = tileGraphic.getImage();
if (!tileGraphicImage.getUrl().contains("blank.png") && !tileGraphicImage.getUrl().contains("flagged.png")) { if (!tileGraphicImage.getUrl().contains("blank.png") &&
!tileGraphicImage.getUrl().contains("flagged.png")) {
return; return;
} }
boolean flagged = tileGraphicImage.getUrl().contains("flagged.png"); boolean flagged = tileGraphicImage.getUrl().contains("flagged.png");
@ -264,10 +272,4 @@ public class Controller {
URL imageURL = getClass().getResource("img/num_" + adjacentBombs + ".png"); URL imageURL = getClass().getResource("img/num_" + adjacentBombs + ".png");
button.setGraphic(new ImageView(new Image(String.valueOf(imageURL), 16, 16, true, false))); button.setGraphic(new ImageView(new Image(String.valueOf(imageURL), 16, 16, true, false)));
} }
private int getAdjacentCount(Node tileClicked) {
int column = GridPane.getColumnIndex(tileClicked);
int row = GridPane.getRowIndex(tileClicked);
return wrapper.atColumn(column).atRow(row).adjacentBombCount();
}
} }

View File

@ -5,16 +5,19 @@ import javafx.application.Application;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage; import javafx.stage.Stage;
public class Main extends Application { public class Main extends Application {
@Override @Override
public void start(Stage stage) throws IOException { public void start(Stage stage) throws IOException {
Image icon = new Image(String.valueOf(getClass().getResource("winmine.png")));
FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("minesweeper.fxml")); FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("minesweeper.fxml"));
Scene scene = new Scene(fxmlLoader.load()); Scene scene = new Scene(fxmlLoader.load());
stage.setTitle("Minesweeper"); stage.setTitle("Minesweeper");
stage.setScene(scene); stage.setScene(scene);
stage.setResizable(false); stage.setResizable(false);
stage.getIcons().add(icon);
stage.show(); stage.show();
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB