diff --git a/Downloads/kopfrechen-trainer-1.3.exe b/Downloads/kopfrechen-trainer-1.3.exe
new file mode 100644
index 0000000..1a34ffe
Binary files /dev/null and b/Downloads/kopfrechen-trainer-1.3.exe differ
diff --git a/Downloads/version1-0.md b/Downloads/version1-0.md
deleted file mode 100644
index a848186..0000000
--- a/Downloads/version1-0.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Version 1.0
-
-## Overview
-In the first version of the Mental Arithmetic Trainer I added the main feature of the tool: standard arithmetic exercises (examples: 3+912=915; 19-14=5; 7*19=133; 27/3=9 etc.).
-Once you started to solve exercises, the programm starts to collect and save your stats.
-
-## Changelog
-- Added main parts of the programm
-- Standard arithmetic exercises
-- Some statistics
-
-## Bugfixes
--/-
diff --git a/src/.classpath b/src/.classpath
index 10eb143..36efa72 100644
--- a/src/.classpath
+++ b/src/.classpath
@@ -9,5 +9,8 @@
+
+
+
diff --git a/src/bin/init/InitMain$1.class b/src/bin/init/InitMain$1.class
new file mode 100644
index 0000000..47513a0
Binary files /dev/null and b/src/bin/init/InitMain$1.class differ
diff --git a/src/bin/init/InitMain$2.class b/src/bin/init/InitMain$2.class
new file mode 100644
index 0000000..f5b7f06
Binary files /dev/null and b/src/bin/init/InitMain$2.class differ
diff --git a/src/bin/init/InitMain$3.class b/src/bin/init/InitMain$3.class
new file mode 100644
index 0000000..81dbdbb
Binary files /dev/null and b/src/bin/init/InitMain$3.class differ
diff --git a/src/bin/init/InitMain.class b/src/bin/init/InitMain.class
new file mode 100644
index 0000000..3fefe0e
Binary files /dev/null and b/src/bin/init/InitMain.class differ
diff --git a/src/bin/init/InitSettings$1.class b/src/bin/init/InitSettings$1.class
new file mode 100644
index 0000000..1a7f39d
Binary files /dev/null and b/src/bin/init/InitSettings$1.class differ
diff --git a/src/bin/init/InitSettings$2.class b/src/bin/init/InitSettings$2.class
new file mode 100644
index 0000000..67df359
Binary files /dev/null and b/src/bin/init/InitSettings$2.class differ
diff --git a/src/bin/init/InitSettings.class b/src/bin/init/InitSettings.class
new file mode 100644
index 0000000..6368955
Binary files /dev/null and b/src/bin/init/InitSettings.class differ
diff --git a/src/bin/init/InitStats$1.class b/src/bin/init/InitStats$1.class
new file mode 100644
index 0000000..f818cf7
Binary files /dev/null and b/src/bin/init/InitStats$1.class differ
diff --git a/src/bin/init/InitStats.class b/src/bin/init/InitStats.class
new file mode 100644
index 0000000..2216306
Binary files /dev/null and b/src/bin/init/InitStats.class differ
diff --git a/src/bin/init/InitTester$1.class b/src/bin/init/InitTester$1.class
new file mode 100644
index 0000000..f733393
Binary files /dev/null and b/src/bin/init/InitTester$1.class differ
diff --git a/src/bin/init/InitTester$2.class b/src/bin/init/InitTester$2.class
new file mode 100644
index 0000000..7027008
Binary files /dev/null and b/src/bin/init/InitTester$2.class differ
diff --git a/src/bin/init/InitTester.class b/src/bin/init/InitTester.class
new file mode 100644
index 0000000..3fe12e5
Binary files /dev/null and b/src/bin/init/InitTester.class differ
diff --git a/src/bin/javafx/Switch.class b/src/bin/javafx/Switch.class
index 2f84e68..ad418b8 100644
Binary files a/src/bin/javafx/Switch.class and b/src/bin/javafx/Switch.class differ
diff --git a/src/bin/javafx/main.fxml b/src/bin/javafx/main.fxml
index eb33463..86f8634 100644
--- a/src/bin/javafx/main.fxml
+++ b/src/bin/javafx/main.fxml
@@ -1,5 +1,7 @@
+
+
@@ -8,19 +10,9 @@
-
-
+
-
-
-
diff --git a/src/bin/javafx/settings.fxml b/src/bin/javafx/settings.fxml
index b511ad8..50e3b5b 100644
--- a/src/bin/javafx/settings.fxml
+++ b/src/bin/javafx/settings.fxml
@@ -1,88 +1,76 @@
-
-
+
+
-
-
-
+
-
-
+
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/bin/javafx/settings_alt.fxml b/src/bin/javafx/settings_alt.fxml
new file mode 100644
index 0000000..15d23e0
--- /dev/null
+++ b/src/bin/javafx/settings_alt.fxml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/bin/javafx/stats.fxml b/src/bin/javafx/stats.fxml
index fddf1a4..2638540 100644
--- a/src/bin/javafx/stats.fxml
+++ b/src/bin/javafx/stats.fxml
@@ -1,5 +1,7 @@
+
+
@@ -8,17 +10,9 @@
-
+
-
-
+
@@ -26,52 +20,52 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/bin/javafx/style.css b/src/bin/javafx/style.css
new file mode 100644
index 0000000..6dbd207
--- /dev/null
+++ b/src/bin/javafx/style.css
@@ -0,0 +1,70 @@
+.label {
+ -fx-font-family: "Roboto Medium";
+ -fx-text-fill: #212121;
+}
+.label-bottom-right {
+ -fx-font-family: "Roboto Medium";
+ -fx-font-size: 16px;
+}
+.title {
+ -fx-font-family: "Roboto Light";
+ -fx-font-size: 28px;
+}
+.subtitle {
+ -fx-font-family: "Roboto Medium";
+ -fx-font-size: 20px;
+}
+.exercise {
+ -fx-font-family: "Roboto Bold";
+ -fx-font-size: 28px;
+}
+.label-light {
+ -fx-font-family: "Roboto Light";
+ -fx-font-size: 18px;
+}
+.label-bold {
+ -fx-font-family: "Roboto Bold";
+ -fx-font-size: 18px;
+}
+
+.jfx-button {
+ -fx-font-size: 14px;
+ -fx-text-fill: WHITE;
+ -fx-font-family: "Roboto Light";
+}
+
+.btn-start {
+ -fx-padding: 15px 20px;
+ -fx-font-size: 18px;
+}
+
+.btn-big {
+ -fx-padding: 15px 20px;
+ -fx-font-size: 16px;
+}
+
+.btn-blue {
+ -fx-background-color: #3F51B5;
+ -fx-text-fill: WHITE;
+ -fx-button-type: RAISED;
+}
+
+.btn-small {
+ -fx-font-size: 12px;
+ -fx-button-type: RAISED;
+}
+
+.btn-back {
+ -fx-padding: 5px;
+}
+
+.input-exercise {
+ -fx-font-size: 20px;
+}
+
+.jfx-text-field {
+ -fx-font-family: "Roboto Medium";
+}
+.jfx-check-box {
+ -fx-font-family: "Roboto Medium";
+}
\ No newline at end of file
diff --git a/src/bin/javafx/tester.fxml b/src/bin/javafx/tester.fxml
new file mode 100644
index 0000000..204eca3
--- /dev/null
+++ b/src/bin/javafx/tester.fxml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/bin/main/Abfrager.class b/src/bin/main/Abfrager.class
index 6e133da..fd0b62d 100644
Binary files a/src/bin/main/Abfrager.class and b/src/bin/main/Abfrager.class differ
diff --git a/src/bin/main/FXMLDocumentController.class b/src/bin/main/FXMLDocumentController.class
index b3faff6..6699a2a 100644
Binary files a/src/bin/main/FXMLDocumentController.class and b/src/bin/main/FXMLDocumentController.class differ
diff --git a/src/bin/main/Main.class b/src/bin/main/Main.class
index a892198..18deea8 100644
Binary files a/src/bin/main/Main.class and b/src/bin/main/Main.class differ
diff --git a/src/bin/main/Settings.class b/src/bin/main/Settings.class
index 93ae6ed..b280a50 100644
Binary files a/src/bin/main/Settings.class and b/src/bin/main/Settings.class differ
diff --git a/src/bin/main/VersionCheck.class b/src/bin/main/VersionCheck.class
index 4c957f2..23a89d3 100644
Binary files a/src/bin/main/VersionCheck.class and b/src/bin/main/VersionCheck.class differ
diff --git a/src/bin/resources/fonts/Roboto-Bold.ttf b/src/bin/resources/fonts/Roboto-Bold.ttf
new file mode 100644
index 0000000..a355c27
Binary files /dev/null and b/src/bin/resources/fonts/Roboto-Bold.ttf differ
diff --git a/src/bin/resources/fonts/Roboto-Light.ttf b/src/bin/resources/fonts/Roboto-Light.ttf
new file mode 100644
index 0000000..94c6bcc
Binary files /dev/null and b/src/bin/resources/fonts/Roboto-Light.ttf differ
diff --git a/src/bin/resources/fonts/Roboto-Medium.ttf b/src/bin/resources/fonts/Roboto-Medium.ttf
new file mode 100644
index 0000000..39c63d7
Binary files /dev/null and b/src/bin/resources/fonts/Roboto-Medium.ttf differ
diff --git a/src/src/main/iconWindow.png b/src/bin/resources/img/iconWindow.png
similarity index 100%
rename from src/src/main/iconWindow.png
rename to src/bin/resources/img/iconWindow.png
diff --git a/src/src/lang/lang_de.properties b/src/bin/resources/lang/lang_de.properties
similarity index 97%
rename from src/src/lang/lang_de.properties
rename to src/bin/resources/lang/lang_de.properties
index 91b3222..4b97c82 100644
--- a/src/src/lang/lang_de.properties
+++ b/src/bin/resources/lang/lang_de.properties
@@ -48,5 +48,5 @@ wrong=Leider falsch!
wrong_subheader=Das wird schon noch!
right=Richtig!
right_subheader=Gut gemacht!
-exercises_right=Aufgaben richtig gelöst
+exercises_right=Aufgaben richtig gelöst:
markDoublePoint=Note:
\ No newline at end of file
diff --git a/src/src/lang/lang_en.properties b/src/bin/resources/lang/lang_en.properties
similarity index 88%
rename from src/src/lang/lang_en.properties
rename to src/bin/resources/lang/lang_en.properties
index 3c4bfda..ddde794 100644
--- a/src/src/lang/lang_en.properties
+++ b/src/bin/resources/lang/lang_en.properties
@@ -31,12 +31,12 @@ subtraction_min=Minimum value at subtraction exercises
subtraction_max=Maximum value at subtraction exercises
multiplication=Multiplication
multiplication_min=Minimum value at multiplication exercises
-multiplication_max=Maximum value at multiplication exercise
+multiplication_max=Maximum value at multiplication exercises
division=Division
division_min=Minimum value at division exercises
division_max=Maximum value at division exercises
-sub_neg=Negative results at subtraction exercises
-div_comma=Results with decimal places at division exercises
+sub_neg=Negative subtraction results
+div_comma=Decimal division results
save=Save
finished=Finished
diff --git a/src/src/sounds/correct.mp3 b/src/bin/resources/sounds/correct.mp3
similarity index 100%
rename from src/src/sounds/correct.mp3
rename to src/bin/resources/sounds/correct.mp3
diff --git a/src/src/sounds/wrong.mp3 b/src/bin/resources/sounds/wrong.mp3
similarity index 100%
rename from src/src/sounds/wrong.mp3
rename to src/bin/resources/sounds/wrong.mp3
diff --git a/src/src/init/InitMain.java b/src/src/init/InitMain.java
new file mode 100644
index 0000000..00e5549
--- /dev/null
+++ b/src/src/init/InitMain.java
@@ -0,0 +1,93 @@
+package init;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ResourceBundle;
+
+import com.jfoenix.controls.JFXButton;
+
+import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
+import de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory;
+import javafx.Switch;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.Tooltip;
+import javafx.scene.layout.StackPane;
+import javafx.stage.Stage;
+
+public class InitMain {
+
+ private Stage stage;
+
+ public InitMain(Stage stage) throws IOException {
+ this.stage = stage;
+ }
+
+ public Scene init() throws IOException, InvocationTargetException {
+ Switch sw = new Switch();
+ Scene scene = sw.switchScene("/javafx/main.fxml", this.stage);
+ StackPane sp = (StackPane) scene.lookup("#container");
+
+ JFXButton btnStart = (JFXButton) scene.lookup("#btnStart");
+ btnStart.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent event) {
+ try {
+ InitTester tester = new InitTester(stage);
+ tester.init();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ // Add settings button
+ JFXButton btnSettings = new JFXButton();
+ FontAwesomeIconFactory.get().setIcon(btnSettings, FontAwesomeIcon.COG, "2em");
+ btnSettings.setTranslateX(-25);
+ btnSettings.setTranslateY(-15);
+ btnSettings.setTooltip(new Tooltip(ResourceBundle.getBundle("resources.lang.lang", jsonFiles.Settings.lang).getString("settings_hover")));
+ btnSettings.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent arg0) {
+ try {
+ InitSettings settings = new InitSettings(stage);
+ settings.init();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+ });
+ sp.getChildren().add(btnSettings);
+ StackPane.setAlignment(btnSettings, Pos.BOTTOM_RIGHT);
+
+ // Add statistics button
+ JFXButton btnStats = new JFXButton();
+ FontAwesomeIconFactory.get().setIcon(btnStats, FontAwesomeIcon.BAR_CHART, "2em");
+ btnStats.setTranslateX(25);
+ btnStats.setTranslateY(-15);
+ btnStats.setTooltip(new Tooltip(ResourceBundle.getBundle("resources.lang.lang", jsonFiles.Settings.lang).getString("statistics_hover")));
+ btnStats.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent arg0) {
+ InitStats stats = new InitStats(stage);
+ try {
+ stats.init();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ sp.getChildren().add(btnStats);
+ StackPane.setAlignment(btnStats, Pos.BOTTOM_LEFT);
+
+ return scene;
+ }
+
+}
diff --git a/src/src/init/InitSettings.java b/src/src/init/InitSettings.java
new file mode 100644
index 0000000..7b97962
--- /dev/null
+++ b/src/src/init/InitSettings.java
@@ -0,0 +1,69 @@
+package init;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+
+import com.jfoenix.controls.JFXButton;
+
+import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
+import de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory;
+import javafx.Switch;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.layout.StackPane;
+import javafx.stage.Stage;
+import main.Settings;
+
+public class InitSettings {
+
+ private Stage stage;
+
+ public InitSettings(Stage stage) {
+ this.stage = stage;
+ }
+
+ public Scene init() throws IOException {
+ Switch sw = new Switch();
+ Scene scene = sw.switchScene("/javafx/settings.fxml", this.stage);
+ StackPane sp = (StackPane) scene.lookup("#container");
+ this.stage.setScene(scene);
+
+ JFXButton btnBack = new JFXButton();
+ btnBack.setTranslateX(10);
+ btnBack.setTranslateY(10);
+ btnBack.getStyleClass().add("btn-back");
+ FontAwesomeIconFactory.get().setIcon(btnBack, FontAwesomeIcon.ARROW_LEFT, "2em");
+ btnBack.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent event) {
+ try {
+ InitMain main = new InitMain(stage);
+ main.init();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ sp.getChildren().add(btnBack);
+ StackPane.setAlignment(btnBack, Pos.TOP_LEFT);
+
+ JFXButton btnSave = (JFXButton) scene.lookup("#save");
+ btnSave.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent arg0) {
+ Settings.update(scene);
+ }
+ });
+
+ Settings.setDefault(scene);
+
+ return scene;
+ }
+
+}
diff --git a/src/src/init/InitStats.java b/src/src/init/InitStats.java
new file mode 100644
index 0000000..04986ea
--- /dev/null
+++ b/src/src/init/InitStats.java
@@ -0,0 +1,59 @@
+package init;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+
+import com.jfoenix.controls.JFXButton;
+
+import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
+import de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory;
+import javafx.Switch;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.layout.StackPane;
+import javafx.stage.Stage;
+import main.Stats;
+
+public class InitStats {
+
+ private Stage stage;
+
+ public InitStats(Stage stage) {
+ this.stage = stage;
+ }
+
+ public Scene init() throws IOException {
+ Switch sw = new Switch();
+ Scene scene = sw.switchScene("/javafx/stats.fxml", this.stage);
+ StackPane sp = (StackPane) scene.lookup("#container");
+ Stats stats = new Stats();
+ stats.start(scene);
+
+ JFXButton btnBack = new JFXButton();
+ btnBack.setTranslateX(10);
+ btnBack.setTranslateY(10);
+ btnBack.getStyleClass().add("btn-back");
+ FontAwesomeIconFactory.get().setIcon(btnBack, FontAwesomeIcon.ARROW_LEFT, "2em");
+ btnBack.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent event) {
+ try {
+ InitMain main = new InitMain(stage);
+ main.init();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ sp.getChildren().add(btnBack);
+ StackPane.setAlignment(btnBack, Pos.TOP_LEFT);
+
+ return scene;
+ }
+
+}
diff --git a/src/src/init/InitTester.java b/src/src/init/InitTester.java
new file mode 100644
index 0000000..3b26eaf
--- /dev/null
+++ b/src/src/init/InitTester.java
@@ -0,0 +1,85 @@
+package init;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+
+import com.jfoenix.controls.JFXButton;
+
+import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
+import de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory;
+import javafx.Switch;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.layout.StackPane;
+import javafx.stage.Stage;
+import main.Abfrager;
+
+public class InitTester {
+
+ private Stage stage;
+
+ public InitTester(Stage stage) {
+ this.stage = stage;
+ }
+
+ public Scene init() throws IOException {
+ Switch sw = new Switch();
+ Scene scene = sw.switchScene("/javafx/tester.fxml", this.stage);
+ StackPane sp = (StackPane) scene.lookup("#container");
+ this.stage.setScene(scene);
+
+// JFXTextField input = (JFXTextField) scene.lookup("#answerInput");
+ // TODO: add number and require validator
+// NumberValidator nv = new NumberValidator();
+// nv.setMessage("Zahl erforderlich");
+// nv.setIcon(new FontAwesomeIconView(FontAwesomeIcon.WARNING));
+// input.setValidators(nv);
+
+ JFXButton btnBack = new JFXButton();
+ btnBack.setTranslateX(10);
+ btnBack.setTranslateY(10);
+ btnBack.getStyleClass().add("btn-back");
+ FontAwesomeIconFactory.get().setIcon(btnBack, FontAwesomeIcon.ARROW_LEFT, "2em");
+ btnBack.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent event) {
+ try {
+ InitMain main = new InitMain(stage);
+ main.init();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ sp.getChildren().add(btnBack);
+ StackPane.setAlignment(btnBack, Pos.TOP_LEFT);
+
+ Abfrager aufgaben = new Abfrager();
+ aufgaben.start(scene);
+
+ JFXButton btnFinished = (JFXButton) scene.lookup("#finished");
+ btnFinished.setOnAction(new EventHandler() {
+
+ @Override
+ public void handle(ActionEvent event) {
+ if(Abfrager.isChecked) {
+ aufgaben.newExercise(scene);
+ } else {
+ try {
+ aufgaben.check(scene);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ });
+
+ return scene;
+ }
+
+}
diff --git a/src/src/javafx/Switch.java b/src/src/javafx/Switch.java
index 35f2d10..29588fb 100644
--- a/src/src/javafx/Switch.java
+++ b/src/src/javafx/Switch.java
@@ -8,16 +8,21 @@
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
+import javafx.scene.text.Font;
import javafx.stage.Stage;
import jsonFiles.Settings;
public class Switch implements Initializable {
public Scene switchScene(String resource, Stage stage) throws IOException {
+ Font.loadFont("/resources/fonts/Roboto-Bold.ttf", 16);
+ Font.loadFont("/resources/fonts/Roboto-Medium.ttf", 16);
+ Font.loadFont("/resources/fonts/Roboto-Light.ttf", 16);
FXMLLoader loader = new FXMLLoader();
- loader.setResources(ResourceBundle.getBundle("lang.lang", Settings.lang));
+ loader.setResources(ResourceBundle.getBundle("resources.lang.lang", Settings.lang));
Parent parent = loader.load(getClass().getResource(resource).openStream());
Scene scene = new Scene(parent);
+ scene.getStylesheets().add("/javafx/style.css");
stage.setScene(scene);
stage.show();
diff --git a/src/src/javafx/main.fxml b/src/src/javafx/main.fxml
index eb33463..86f8634 100644
--- a/src/src/javafx/main.fxml
+++ b/src/src/javafx/main.fxml
@@ -1,5 +1,7 @@
+
+
@@ -8,19 +10,9 @@
-
-
+
-
-
-
-
-
-
-
-
-
-
diff --git a/src/src/javafx/settings.fxml b/src/src/javafx/settings.fxml
index b511ad8..50e3b5b 100644
--- a/src/src/javafx/settings.fxml
+++ b/src/src/javafx/settings.fxml
@@ -1,88 +1,76 @@
-
-
+
+
-
-
-
+
-
-
-
-
-
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/src/javafx/stats.fxml b/src/src/javafx/stats.fxml
index fddf1a4..2638540 100644
--- a/src/src/javafx/stats.fxml
+++ b/src/src/javafx/stats.fxml
@@ -1,5 +1,7 @@
+
+
@@ -8,17 +10,9 @@
-
+
-
-
+
@@ -26,52 +20,52 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/src/javafx/style.css b/src/src/javafx/style.css
new file mode 100644
index 0000000..6dbd207
--- /dev/null
+++ b/src/src/javafx/style.css
@@ -0,0 +1,70 @@
+.label {
+ -fx-font-family: "Roboto Medium";
+ -fx-text-fill: #212121;
+}
+.label-bottom-right {
+ -fx-font-family: "Roboto Medium";
+ -fx-font-size: 16px;
+}
+.title {
+ -fx-font-family: "Roboto Light";
+ -fx-font-size: 28px;
+}
+.subtitle {
+ -fx-font-family: "Roboto Medium";
+ -fx-font-size: 20px;
+}
+.exercise {
+ -fx-font-family: "Roboto Bold";
+ -fx-font-size: 28px;
+}
+.label-light {
+ -fx-font-family: "Roboto Light";
+ -fx-font-size: 18px;
+}
+.label-bold {
+ -fx-font-family: "Roboto Bold";
+ -fx-font-size: 18px;
+}
+
+.jfx-button {
+ -fx-font-size: 14px;
+ -fx-text-fill: WHITE;
+ -fx-font-family: "Roboto Light";
+}
+
+.btn-start {
+ -fx-padding: 15px 20px;
+ -fx-font-size: 18px;
+}
+
+.btn-big {
+ -fx-padding: 15px 20px;
+ -fx-font-size: 16px;
+}
+
+.btn-blue {
+ -fx-background-color: #3F51B5;
+ -fx-text-fill: WHITE;
+ -fx-button-type: RAISED;
+}
+
+.btn-small {
+ -fx-font-size: 12px;
+ -fx-button-type: RAISED;
+}
+
+.btn-back {
+ -fx-padding: 5px;
+}
+
+.input-exercise {
+ -fx-font-size: 20px;
+}
+
+.jfx-text-field {
+ -fx-font-family: "Roboto Medium";
+}
+.jfx-check-box {
+ -fx-font-family: "Roboto Medium";
+}
\ No newline at end of file
diff --git a/src/src/javafx/tester.fxml b/src/src/javafx/tester.fxml
new file mode 100644
index 0000000..204eca3
--- /dev/null
+++ b/src/src/javafx/tester.fxml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/src/main/Abfrager.java b/src/src/main/Abfrager.java
index ac15001..de86943 100644
--- a/src/src/main/Abfrager.java
+++ b/src/src/main/Abfrager.java
@@ -3,6 +3,8 @@
import java.util.ResourceBundle;
+import com.jfoenix.controls.JFXTextField;
+
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
@@ -23,7 +25,7 @@ public class Abfrager {
public static int correct = 0;
public static long timePlayed = 0;
- private ResourceBundle rb = ResourceBundle.getBundle("lang.lang", Settings.lang);
+ private ResourceBundle rb = ResourceBundle.getBundle("resources.lang.lang", Settings.lang);
public void start(Scene scene) {
generateExercise();
@@ -34,7 +36,7 @@ public void setExercise(Scene scene) {
Label labelExercise = (Label) scene.lookup("#exercise");
Label title = (Label) scene.lookup("#labelTitle");
Label subtitle = (Label) scene.lookup("#labelSubheader");
- TextField input = (TextField) scene.lookup("#answerInput");
+ JFXTextField input = (JFXTextField) scene.lookup("#answerInput");
labelExercise.setText(exercise);
labelExercise.setTextFill(Color.web("#292929"));
title.setText(rb.getString("exercises_title"));
@@ -67,7 +69,7 @@ public void check(Scene scene) throws Exception {
Statistics.setExercises(Statistics.getExercises() + 1);
if(answer == result) {
- Media sound = new Media(this.getClass().getResource("/sounds/correct.mp3").toExternalForm());
+ Media sound = new Media(this.getClass().getResource("/resources/sounds/correct.mp3").toExternalForm());
MediaPlayer mp = new MediaPlayer(sound);
mp.play();
labelExercise.setTextFill(Color.web("#2ecc71"));
@@ -77,7 +79,7 @@ public void check(Scene scene) throws Exception {
correct++;
Statistics.setExercisesCorrect(Statistics.getExercisesCorrect() + 1);
} else {
- Media sound = new Media(this.getClass().getResource("/sounds/wrong.mp3").toExternalForm());
+ Media sound = new Media(this.getClass().getResource("/resources/sounds/wrong.mp3").toExternalForm());
MediaPlayer mp = new MediaPlayer(sound);
mp.play();
labelExercise.setTextFill(Color.web("#e74c3c"));
@@ -94,7 +96,7 @@ public void check(Scene scene) throws Exception {
double ecp = ((double) correct / (double) exercises) * (double) 15;
String note = Marks.main(ecp);
- mark.setText(rb.getString("markDoublePoint") + " " + note);
+ mark.setText(note);
isChecked = true;
}
diff --git a/src/src/main/FXMLDocumentController.java b/src/src/main/FXMLDocumentController.java
index 2a55bc5..4f2da65 100644
--- a/src/src/main/FXMLDocumentController.java
+++ b/src/src/main/FXMLDocumentController.java
@@ -1,57 +1,17 @@
package main;
-import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
-import javafx.Switch;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
-import javafx.stage.Stage;
public class FXMLDocumentController implements Initializable {
- @FXML
- private void startGame(ActionEvent event) throws IOException {
- Switch sw = new Switch();
- Scene abfragerScene = sw.switchScene("/javafx/abfrage.fxml", (Stage) ((Node) event.getSource()).getScene().getWindow());
-
- Abfrager aufgaben = new Abfrager();
- aufgaben.start(abfragerScene);
- }
-
- @FXML
- private void submitAnswer(ActionEvent event) throws Exception {
- Scene scene = ((Node) event.getSource()).getScene().getWindow().getScene();
- Abfrager solution = new Abfrager();
- if(Abfrager.isChecked) {
- solution.newExercise(scene);
- } else {
- solution.check(scene);
- }
- }
-
- @FXML
- private void statsShow(ActionEvent event) throws IOException {
- Switch sw = new Switch();
- Scene statsScene = sw.switchScene("/javafx/stats.fxml", (Stage) ((Node) event.getSource()).getScene().getWindow());
-
- Stats statClass = new Stats();
- statClass.start(statsScene);
- }
-
- @FXML
- private void goToSettings(ActionEvent event) throws IOException {
- Switch sw = new Switch();
- Scene setScene = sw.switchScene("/javafx/settings.fxml", (Stage) ((Node) event.getSource()).getScene().getWindow());
-
- Settings.setDefault(setScene);
- }
-
@FXML
private void newDifficulty(ActionEvent event) {
Scene scene = ((Node) event.getSource()).getScene();
@@ -60,18 +20,6 @@ private void newDifficulty(ActionEvent event) {
label.setText(String.valueOf(Difficulty.getDifficulty()));
}
- @FXML
- private void saveSettings(ActionEvent event) throws IOException {
- Scene scene = ((Node) event.getSource()).getScene().getWindow().getScene();
- Settings.update(scene);
- }
-
- @FXML
- private void backHome(ActionEvent event) throws IOException {
- Switch sw = new Switch();
- sw.switchScene("/javafx/main.fxml", (Stage) ((Node) event.getSource()).getScene().getWindow());
- }
-
public void initialize(URL url, ResourceBundle rb) {
}
diff --git a/src/src/main/Main.java b/src/src/main/Main.java
index 1cb9fdf..4c0cd05 100644
--- a/src/src/main/Main.java
+++ b/src/src/main/Main.java
@@ -5,35 +5,30 @@
import java.io.IOException;
import java.net.URI;
import java.util.Optional;
-import java.util.ResourceBundle;
-
+import init.InitMain;
import javafx.application.Application;
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Parent;
-import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
+import javafx.scene.image.Image;
+import javafx.scene.text.Font;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonBar.ButtonData;
-import javafx.scene.image.Image;
import javafx.stage.Stage;
-import jsonFiles.Settings;
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
- FXMLLoader loader = new FXMLLoader();
- ResourceBundle rb = ResourceBundle.getBundle("lang.lang", Settings.lang);
- loader.setResources(rb);
- Parent root = loader.load(getClass().getResource("/javafx/main.fxml").openStream());
- Scene scene = new Scene(root);
- stage.setScene(scene);
- stage.getIcons().add(new Image("/main/iconWindow.png"));
- stage.setTitle(rb.getString("title"));
- stage.setMinHeight(450);
- stage.setMinWidth(650);
- stage.show();
+ stage.setMinHeight(500);
+ stage.setMinWidth(750);
+ stage.setHeight(550);
+ stage.setWidth(750);
+ stage.getIcons().add(new Image("/resources/img/iconWindow.png"));
+ Font.loadFont(getClass().getResource("/resources/fonts/Roboto-Bold.ttf").toExternalForm(), 10);
+ Font.loadFont(getClass().getResource("/resources/fonts/Roboto-Medium.ttf").toExternalForm(), 10);
+ Font.loadFont(getClass().getResource("/resources/fonts/Roboto-Light.ttf").toExternalForm(), 10);
+ InitMain init = new InitMain(stage);
+ init.init();
String[] version = VersionCheck.update();
boolean update = false;
diff --git a/src/src/main/Settings.java b/src/src/main/Settings.java
index 767d7c7..fabcacb 100644
--- a/src/src/main/Settings.java
+++ b/src/src/main/Settings.java
@@ -1,37 +1,37 @@
package main;
-import java.awt.Choice;
import java.util.Locale;
-import javafx.collections.FXCollections;
+import com.jfoenix.controls.JFXCheckBox;
+import com.jfoenix.controls.JFXComboBox;
+import com.jfoenix.controls.JFXTextField;
+
import javafx.fxml.FXML;
import javafx.scene.Scene;
-import javafx.scene.control.CheckBox;
-import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
-import javafx.scene.control.TextField;
public class Settings {
public static void setDefault(Scene scene) {
- CheckBox add = (CheckBox) scene.lookup("#addition");
- CheckBox sub = (CheckBox) scene.lookup("#subtraktion");
- CheckBox mul = (CheckBox) scene.lookup("#multiplikation");
- CheckBox div = (CheckBox) scene.lookup("#division");
+ JFXCheckBox add = (JFXCheckBox) scene.lookup("#addition");
+ JFXCheckBox sub = (JFXCheckBox) scene.lookup("#subtraction");
+ JFXCheckBox mul = (JFXCheckBox) scene.lookup("#multiplication");
+ JFXCheckBox div = (JFXCheckBox) scene.lookup("#division");
- TextField addMin = (TextField) scene.lookup("#addMin");
- TextField addMax = (TextField) scene.lookup("#addMax");
- TextField subMin = (TextField) scene.lookup("#subMin");
- TextField subMax = (TextField) scene.lookup("#subMax");
- TextField mulMin = (TextField) scene.lookup("#mulMin");
- TextField mulMax = (TextField) scene.lookup("#mulMax");
- TextField divMin = (TextField) scene.lookup("#divMin");
- TextField divMax = (TextField) scene.lookup("#divMax");
+ JFXTextField addMin = (JFXTextField) scene.lookup("#addMin");
+ JFXTextField addMax = (JFXTextField) scene.lookup("#addMax");
+ JFXTextField subMin = (JFXTextField) scene.lookup("#subMin");
+ JFXTextField subMax = (JFXTextField) scene.lookup("#subMax");
+ JFXTextField mulMin = (JFXTextField) scene.lookup("#mulMin");
+ JFXTextField mulMax = (JFXTextField) scene.lookup("#mulMax");
+ JFXTextField divMin = (JFXTextField) scene.lookup("#divMin");
+ JFXTextField divMax = (JFXTextField) scene.lookup("#divMax");
- CheckBox subNeg = (CheckBox) scene.lookup("#subNeg");
- CheckBox divComma = (CheckBox) scene.lookup("#divComma");
+ JFXCheckBox subNeg = (JFXCheckBox) scene.lookup("#subNeg");
+ JFXCheckBox divComma = (JFXCheckBox) scene.lookup("#divComma");
- ChoiceBox language = (ChoiceBox) scene.lookup("#language");
+ @SuppressWarnings("unchecked")
+ JFXComboBox language = (JFXComboBox) scene.lookup("#language");
Label difficulty = (Label) scene.lookup("#difficulty");
add.setSelected(jsonFiles.Settings.add);
@@ -49,31 +49,33 @@ public static void setDefault(Scene scene) {
subNeg.setSelected(jsonFiles.Settings.subNeg);
divComma.setSelected(jsonFiles.Settings.divComma);
difficulty.setText(String.valueOf(Difficulty.getDifficulty()));
- language.setItems(FXCollections.observableArrayList("Deutsch", "English"));
+ language.getItems().add(new Label("Deutsch"));
+ language.getItems().add(new Label("English"));
if(jsonFiles.Settings.lang.equals(new Locale("de", "DE"))) language.getSelectionModel().select(0);
else language.getSelectionModel().select(1);
}
@FXML
public static void update(Scene scene) {
- boolean add = ((CheckBox) scene.lookup("#addition")).isSelected();
- boolean sub = ((CheckBox) scene.lookup("#subtraktion")).isSelected();
- boolean mul = ((CheckBox) scene.lookup("#multiplikation")).isSelected();
- boolean div = ((CheckBox) scene.lookup("#division")).isSelected();
+ boolean add = ((JFXCheckBox) scene.lookup("#addition")).isSelected();
+ boolean sub = ((JFXCheckBox) scene.lookup("#subtraction")).isSelected();
+ boolean mul = ((JFXCheckBox) scene.lookup("#multiplication")).isSelected();
+ boolean div = ((JFXCheckBox) scene.lookup("#division")).isSelected();
- int addMin = Integer.valueOf(((TextField) scene.lookup("#addMin")).getText());
- int addMax = Integer.valueOf(((TextField) scene.lookup("#addMax")).getText());
- int subMin = Integer.valueOf(((TextField) scene.lookup("#subMin")).getText());
- int subMax = Integer.valueOf(((TextField) scene.lookup("#subMax")).getText());
- int mulMin = Integer.valueOf(((TextField) scene.lookup("#mulMin")).getText());
- int mulMax = Integer.valueOf(((TextField) scene.lookup("#mulMax")).getText());
- int divMin = Integer.valueOf(((TextField) scene.lookup("#divMin")).getText());
- int divMax = Integer.valueOf(((TextField) scene.lookup("#divMax")).getText());
+ int addMin = Integer.valueOf(((JFXTextField) scene.lookup("#addMin")).getText());
+ int addMax = Integer.valueOf(((JFXTextField) scene.lookup("#addMax")).getText());
+ int subMin = Integer.valueOf(((JFXTextField) scene.lookup("#subMin")).getText());
+ int subMax = Integer.valueOf(((JFXTextField) scene.lookup("#subMax")).getText());
+ int mulMin = Integer.valueOf(((JFXTextField) scene.lookup("#mulMin")).getText());
+ int mulMax = Integer.valueOf(((JFXTextField) scene.lookup("#mulMax")).getText());
+ int divMin = Integer.valueOf(((JFXTextField) scene.lookup("#divMin")).getText());
+ int divMax = Integer.valueOf(((JFXTextField) scene.lookup("#divMax")).getText());
- boolean subNeg = ((CheckBox) scene.lookup("#subNeg")).isSelected();
- boolean divComma = ((CheckBox) scene.lookup("#divComma")).isSelected();
+ boolean subNeg = ((JFXCheckBox) scene.lookup("#subNeg")).isSelected();
+ boolean divComma = ((JFXCheckBox) scene.lookup("#divComma")).isSelected();
- String language = (String) ((ChoiceBox) scene.lookup("#language")).getSelectionModel().getSelectedItem();
+ @SuppressWarnings("unchecked")
+ String language = ((Label) ((JFXComboBox) scene.lookup("#language")).getSelectionModel().getSelectedItem()).getText();
Locale lang;
if(language.equals("Deutsch")) {
lang = new Locale("de", "DE");
@@ -96,7 +98,6 @@ public static void update(Scene scene) {
jsonFiles.Settings.subNeg = subNeg;
jsonFiles.Settings.divComma = divComma;
jsonFiles.Settings.lang = lang;
- System.out.println(jsonFiles.Settings.lang);
SaveFiles.writeSettings();
}
diff --git a/src/src/main/VersionCheck.java b/src/src/main/VersionCheck.java
index 522c967..dcf1529 100644
--- a/src/src/main/VersionCheck.java
+++ b/src/src/main/VersionCheck.java
@@ -24,7 +24,8 @@
public class VersionCheck {
- public static String version = "1.1";
+ //TODO: Change version
+ public static String version = "1.3";
public static String[] getVersion() throws IOException {
URL url = new URL("https://raw.githubusercontent.com/KingOfDog/Kopfrechen-Trainer/master/version.json");
@@ -91,7 +92,6 @@ public static String[] update() throws IOException, InvocationTargetException {
String versionInfo = null;
String checkSum = null;
String update = "false";
- System.out.println(verInfo.length);
if(!version.equals(verInfo[0])) {
update = "true";
path = verInfo[1];
@@ -107,8 +107,6 @@ public static void getUpdate(String path, String checkSum, String version) throw
File file = new File(VersionCheck.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath() + "\\..\\kopfrechen-trainer-" + version + ".exe");
FileUtils.copyURLToFile(new URL(path), file);
String checkSumLocal = getMD5Checksum(file);
- System.out.println(checkSumLocal);
- System.out.println(checkSum);
if(checkSumLocal.equals(checkSum)) {
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Update erfolgreich!");
diff --git a/src/src/resources/fonts/Roboto-Bold.ttf b/src/src/resources/fonts/Roboto-Bold.ttf
new file mode 100644
index 0000000..a355c27
Binary files /dev/null and b/src/src/resources/fonts/Roboto-Bold.ttf differ
diff --git a/src/src/resources/fonts/Roboto-Light.ttf b/src/src/resources/fonts/Roboto-Light.ttf
new file mode 100644
index 0000000..94c6bcc
Binary files /dev/null and b/src/src/resources/fonts/Roboto-Light.ttf differ
diff --git a/src/src/resources/fonts/Roboto-Medium.ttf b/src/src/resources/fonts/Roboto-Medium.ttf
new file mode 100644
index 0000000..39c63d7
Binary files /dev/null and b/src/src/resources/fonts/Roboto-Medium.ttf differ
diff --git a/src/src/resources/img/iconWindow.png b/src/src/resources/img/iconWindow.png
new file mode 100644
index 0000000..545bc0a
Binary files /dev/null and b/src/src/resources/img/iconWindow.png differ
diff --git a/src/src/resources/lang/lang_de.properties b/src/src/resources/lang/lang_de.properties
new file mode 100644
index 0000000..4b97c82
--- /dev/null
+++ b/src/src/resources/lang/lang_de.properties
@@ -0,0 +1,52 @@
+title=Kopfrechen-Trainer
+header=Willkommen im Kopfrechen-Trainer
+subheader=von KingOfDog
+start_button=Los geht's
+start_button_hover=Beginn der Abfrage
+statistics=Statistiken
+statistics_hover=Sehe deine Statistiken ein
+settings=Einstellungen
+settings_hover=Prüfe und ändere die Einstellungen
+back=Zurück
+back_hover=Zurück zum Hauptmenü
+difficulty=Schwierigkeitsgrad:
+language=Sprache
+
+your_stats=Deine Statistiken
+exercises=Aufgaben
+correct_exercises=Richtig gelöste Aufgaben
+markpoints=Notenpunkte
+mark=Note
+st_exer=Aufgaben:
+st_exerSol=Richtig gelöste Aufgaben:
+st_markPoints=Notenpunkte:
+st_mark=Note:
+st_timePlayed=Gespielte Zeit:
+
+addition=Addition
+addition_min=Minimaler Wert bei Additions-Aufgaben
+addition_max=Maximaler Wert bei Additions-Aufgaben
+subtraction=Subtraktion
+subtraction_min=Minimaler Wert bei Subtraktions-Aufgaben
+subtraction_max=Maximaler Wert bei Subtraktions-Aufgaben
+multiplication=Multiplikation
+multiplication_min=Minimaler Wert bei Multiplikations-Aufgaben
+multiplication_max=Maximaler Wert bei Multiplikations-Aufgaben
+division=Division
+division_min=Minimaler Wert bei Divisions-Aufgaben
+division_max=Maximaler Wert bei Divisions-Aufgaben
+sub_neg=Negative Subtraktions-Ergebnisse
+div_comma=Divisions-Ergebnisse mit Nachkommastellen
+save=Speichern
+
+finished=Fertig
+finished_hover=Lösung bestätigen
+input_hover=Lösung eingeben
+good_luck=Viel Glück
+exercises_title=Löse diese Aufgaben
+wrong=Leider falsch!
+wrong_subheader=Das wird schon noch!
+right=Richtig!
+right_subheader=Gut gemacht!
+exercises_right=Aufgaben richtig gelöst:
+markDoublePoint=Note:
\ No newline at end of file
diff --git a/src/src/resources/lang/lang_en.properties b/src/src/resources/lang/lang_en.properties
new file mode 100644
index 0000000..ddde794
--- /dev/null
+++ b/src/src/resources/lang/lang_en.properties
@@ -0,0 +1,52 @@
+title=Mental Arithmetic Trainer
+header=Welcome to the Mental Arithmetic Trainer
+subheader=by KingOfDog
+start_button=Let's go!
+start_button_hover=Start the tester
+statistics=Statistics
+statistics_hover=See your statistics
+settings=Settings
+settings_hover=Check and change the settings
+back=Back
+back_hover=Back to main menu
+difficulty=Difficulty:
+language=Language
+
+your_stats=Your statistics
+exercises=Exercises
+correct_exercises=Correct solved exercises
+markpoints=Mark points
+mark=Mark
+st_exer=Exercises:
+st_exerSol=Correct solved exercises:
+st_markPoints=Mark points:
+st_mark=Mark:
+st_timePlayed=Time played:
+
+addition=Addition
+addition_min=Minimum value at addition exercises
+addition_max=Maximum value at addition exercises
+subtraction=Subtraction
+subtraction_min=Minimum value at subtraction exercises
+subtraction_max=Maximum value at subtraction exercises
+multiplication=Multiplication
+multiplication_min=Minimum value at multiplication exercises
+multiplication_max=Maximum value at multiplication exercises
+division=Division
+division_min=Minimum value at division exercises
+division_max=Maximum value at division exercises
+sub_neg=Negative subtraction results
+div_comma=Decimal division results
+save=Save
+
+finished=Finished
+finished_hover=Submit solution
+input_hover=Solution input
+good_luck=Good luck!
+exercises_title=Solve these exercises
+wrong=Unfortunately, it's false!
+wrong_subheader=Come on!
+right=Right!
+right_subheader=Excellent!
+exercises_right=Exercises solved right
+markDoublePoint=Mark:
\ No newline at end of file
diff --git a/src/src/resources/sounds/correct.mp3 b/src/src/resources/sounds/correct.mp3
new file mode 100644
index 0000000..da0c4d8
Binary files /dev/null and b/src/src/resources/sounds/correct.mp3 differ
diff --git a/src/src/resources/sounds/wrong.mp3 b/src/src/resources/sounds/wrong.mp3
new file mode 100644
index 0000000..bf8a797
Binary files /dev/null and b/src/src/resources/sounds/wrong.mp3 differ