From 7458f5175e25f68aa927eb9c8513493174143500 Mon Sep 17 00:00:00 2001 From: koz01 <koz01@PCFEIB104-008.msad.vsb.cz> Date: Wed, 9 Nov 2022 12:14:59 +0100 Subject: [PATCH] Ignore --- .gitignore | 1 + src/main/java/lab/GameController.java | 83 +++++++++++++++++++++++++++ src/main/java/lab/Score.java | 38 ++++++++++++ src/main/java/lab/Score2.java | 8 +++ src/main/java/lab/World.java | 1 - src/main/resources/lab/GameView.fxml | 21 ++++++- 6 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 src/main/java/lab/Score.java create mode 100644 src/main/java/lab/Score2.java diff --git a/.gitignore b/.gitignore index db44c8a..3e5f27c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .settings/ .project .classpath +/data.csv diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java index 9d52ea1..0c2c83b 100644 --- a/src/main/java/lab/GameController.java +++ b/src/main/java/lab/GameController.java @@ -1,14 +1,37 @@ package lab; +import static java.util.Comparator.comparingInt; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import java.util.Scanner; +import java.util.Set; + import javafx.animation.AnimationTimer; import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.scene.canvas.Canvas; import javafx.scene.control.Label; +import javafx.scene.control.ListView; import javafx.scene.control.Slider; +import javafx.scene.control.TextField; public class GameController { + private static final String FILE_NAME = "data.csv"; + private World world; @FXML @@ -26,12 +49,24 @@ public class GameController { @FXML private Label hits; + @FXML + private TextField nameField; + + @FXML + private ListView<Score> scoreList; + + private List<Score> highScores; + private AnimationTimer animationTimer; public GameController() { } public void startGame() { + scoreList.setItems(FXCollections.observableList(new LinkedList<>())); + highScores = scoreList.getItems(); + + this.world = new World(canvas.getWidth(), canvas.getHeight()); this.world.setGameListener(new GameListenerImpl()); //Draw scene on a separate thread to avoid blocking UI. @@ -55,6 +90,54 @@ public class GameController { world.fire(); } + @FXML + private void gameOver() { + Random rnd = new Random(); + int score = rnd.nextInt(11); + highScores.add(new Score(nameField.getText(), score)); + highScores.sort(comparingInt(Score::getScore).reversed()); + + } + + @FXML + private void highScores() { + Set<Score> tempSet = new LinkedHashSet<>(); + tempSet.addAll(highScores); + highScores.clear(); + highScores.addAll(tempSet); + } + + @FXML + private void save() { + try(PrintWriter pw = new PrintWriter(new FileWriter(FILE_NAME))) { + for (Score score: highScores) { + pw.printf("%s;%d\n", score.getName(), score.getScore()); + } + + /*Iterator<Score> iterator = highScores.iterator(); + while (iterator.hasNext()) { + Score score = iterator.next(); + pw.printf("%s;%d\n", score.getName(), score.getScore()); + iterator.remove(); + }*/ + } catch (IOException e) { + e.printStackTrace(); + } + } + + @FXML + private void load() { + highScores.clear(); + try (Scanner scanner = new Scanner(new File(FILE_NAME)).useDelimiter("[;\\n]")) { + while(scanner.hasNext()) { + String name = scanner.next(); + int value = scanner.nextInt(); + highScores.add(new Score(name, value)); + } + } catch (IOException e) { + e.printStackTrace(); + } + } private void angleChanged(ObservableValue<? extends Number> observable , Number oldValue, Number newValue) { diff --git a/src/main/java/lab/Score.java b/src/main/java/lab/Score.java new file mode 100644 index 0000000..6e5ffb4 --- /dev/null +++ b/src/main/java/lab/Score.java @@ -0,0 +1,38 @@ +package lab; + +public class Score { + private final String name; + private final int score; + + public Score(String name, int score) { + this.name = name; + this.score = score; + } + + public String getName() { + return name; + } + + public int getScore() { + return score; + } + + + @Override + public String toString() { + return name + ": " + score; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Score other) { + return this.name.equals(other.name); + } + return false; + } + + @Override + public int hashCode() { + return name.hashCode(); + } +} diff --git a/src/main/java/lab/Score2.java b/src/main/java/lab/Score2.java new file mode 100644 index 0000000..88cd8b1 --- /dev/null +++ b/src/main/java/lab/Score2.java @@ -0,0 +1,8 @@ +package lab; + +public record Score2(String name, int score) { + + + + +} diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java index 65dc08f..04bc1c2 100644 --- a/src/main/java/lab/World.java +++ b/src/main/java/lab/World.java @@ -21,7 +21,6 @@ public class World { private DrawableSimulable []entities; public World(double width, double height) { - super(); this.width = width; this.height = height; Cannon cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20)); diff --git a/src/main/resources/lab/GameView.fxml b/src/main/resources/lab/GameView.fxml index e0732c4..0ca8735 100644 --- a/src/main/resources/lab/GameView.fxml +++ b/src/main/resources/lab/GameView.fxml @@ -5,14 +5,17 @@ <?import javafx.scene.canvas.Canvas?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> +<?import javafx.scene.control.ListView?> <?import javafx.scene.control.Slider?> +<?import javafx.scene.control.TextField?> <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.VBox?> -<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController"> +<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController"> <bottom> <HBox alignment="CENTER" BorderPane.alignment="CENTER_LEFT"> <children> @@ -41,11 +44,25 @@ <Label text="Shoots:" /> <Label fx:id="shoots" text="0" GridPane.columnIndex="1" /> <Label text="Hits:" GridPane.rowIndex="1" /> - <Label fx:id="hits" text="0" GridPane.rowIndex="1" GridPane.columnIndex="1" /> + <Label fx:id="hits" text="0" GridPane.columnIndex="1" GridPane.rowIndex="1" /> </children> </GridPane> <Canvas fx:id="canvas" height="400.0" width="600.0" /> </children> </Group> </center> + <left> + <VBox prefWidth="100.0" BorderPane.alignment="CENTER"> + <children> + <TextField fx:id="nameField" /> + <Button mnemonicParsing="false" onAction="#gameOver" prefWidth="100.0" text="Game Over" /> + <Button mnemonicParsing="false" onAction="#highScores" prefWidth="100.0" text="High Scores" /> + <Button mnemonicParsing="false" onAction="#save" prefWidth="100.0" text="Save" /> + <Button mnemonicParsing="false" onAction="#load" prefWidth="100.0" text="Load" /> + </children> + </VBox> + </left> + <right> + <ListView fx:id="scoreList" prefWidth="200.0" BorderPane.alignment="CENTER" /> + </right> </BorderPane> -- GitLab