diff --git a/README.md b/README.md index a1ec8001f68c4b6be791e8c6fcc73f0347bbfbfe..c0806495da57f22ab6dc185055807c8a5ee0d2ef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # TKO8971 Soveltava projekti 2022 - Ryhmä TKO_F -Projektissa luotiin paikallisesti toimiva järjestelmä kirveenheiton pisteenlaskulle. Siihen on olemassa verkkopohjainen online-järjestelmä +Projektissa luotiin paikallisesti toimiva järjestelmä kirveenheiton kilpailun pisteenlaskulle. Siihen on olemassa verkkopohjainen online-järjestelmä ja tässä haluttiin luoda ilman verkkoyhteyttä käytettävä versio. Pelitilanteen aluksi järjestelmä kysyy kahden pelaajan nimet ja luo pelin, jossa edetään 10 heittokierrosta ja @@ -13,3 +13,7 @@ Tietokantayhteyttä ei tässä vielä suuremmin hyödynnetä mutta se tarjoaa ma Koodaus tehtiin Jari-Matin käyttöliittymät-kurssin Maven-pohjaiselle JavaFX-templaatlle. Templaatti sisältää itsessään Gitlabin CI integroinnin. Yksikkötestejä laadittiin jonkin verran lisää. + +Alkusuunnittelun jälkeen projekti jaettiin ryhmän jäsenten kesken toiminnallisuuksien mukaan. Yksi vastasi perustoiminnallisuuksista, +toinen tietokantayhteyden rakentamisesta ja kolmas käyttöliittymän toteutuksesta. +Käyttöliittymän toteutuksessa käytettiin scenebuilder-ohjelmaa ja tietokantayhteydessä sqlitea. \ No newline at end of file diff --git a/src/main/java/fi/utu/tech/gui/javafx/BoardController.java b/src/main/java/fi/utu/tech/gui/javafx/BoardController.java index f48d07a24ad297869bff9d4b698abd49f3174bfb..7bc4b519c07d2e2f97ca368953975d5c2253ddfb 100644 --- a/src/main/java/fi/utu/tech/gui/javafx/BoardController.java +++ b/src/main/java/fi/utu/tech/gui/javafx/BoardController.java @@ -4,23 +4,18 @@ package fi.utu.tech.gui.javafx; import javafx.beans.binding.Bindings; import javafx.event.ActionEvent; import javafx.fxml.FXML; -import javafx.scene.Parent; -import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.layout.*; -import javafx.stage.Modality; -import javafx.stage.Stage; import java.util.Optional; -import static fi.utu.tech.gui.javafx.MainApp.activeStage; - /** * Käyttöliittymä luotu JavaFX:llä ja SceneBuilderilla. + * * BoardController luokka toimii säätelijänä PlayBoard.fxlm -tiedoston * ja pelitoteutuksen yhteistyölle. * @@ -33,6 +28,11 @@ public class BoardController { private MainApp mainApp; private Peli peli; + /** + * Linkitetään MainApp Controlleriin + * metodien ristiinkäyttöä varten + * @param mainApp -tuodaan MainApp "sisään" + */ public void setMainApp(MainApp mainApp){ this.mainApp = mainApp; } @@ -44,7 +44,8 @@ public class BoardController { /** * Luodaan Peli luokan instanssi, käyttöliittymän linkittämiseksi. - * @param uusiPeli + * Peli luokan kautta päästään käsiksi pelaajiin, jotka Peli-luokassa julkisia. + * @param uusiPeli aloittaa uuden pelin alkuruudulla annetuilla pelaajanimillä. */ public void aloitaPeli(Peli uusiPeli){ this.peli = uusiPeli; @@ -71,6 +72,7 @@ public class BoardController { rightPane.setBackground(bGround); } + private boolean killshotCalledP1 = false; private boolean killshotCalledP2 = false; @@ -138,8 +140,11 @@ public class BoardController { private Label lblTotPointsP2; /** - * Pidetään yllä label-tekstejä, joissa kuvataan pisteitä, pudotuksia ja virheitä. * - * @param event + * Pidetään yllä label-tekstejä, joissa kuvataan pisteitä, pudotuksia ja virheitä pelaajakohtaisesti. + * Metodeja kutsutaan käyttöliittymän buttoneita painamalla. + * + * @param event luo painiketoiminteen + * */ @FXML protected void updatePointsP1(ActionEvent event) { @@ -148,7 +153,7 @@ public class BoardController { if (value != 8) { peli.pelaajaYksiHeita(value); if (killshotCalledP1){kscP1OFF();} - } else if (value == 8) { + } else { kscP1OFF(); peli.pelaajaYksiHeita(value); } @@ -163,7 +168,7 @@ public class BoardController { if (value != 8) { peli.pelaajaKaksiHeita(value); if (killshotCalledP2){kscP2OFF();} - } else if (value == 8) { + } else { kscP2OFF(); peli.pelaajaKaksiHeita(value); } @@ -173,9 +178,9 @@ public class BoardController { @FXML protected void updateDropsP1(ActionEvent event){ - peli.pelaajaYksiHeita(0); - if(!(peli.pelaaja2.heittojaPelattu() > peli.pelaaja1.heittojaPelattu())) { + if(!(peli.pelaaja1.heittojaPelattu() > peli.pelaaja2.heittojaPelattu())) { peli.pelaaja1.lisaaPudonnutHeitto(); + peli.pelaajaYksiHeita(0); } if (killshotCalledP1){kscP1OFF();} dropsP1.textProperty().bind(Bindings.concat("Drops: ", peli.pelaaja1.annaPudonneetHeitot())); @@ -183,9 +188,9 @@ public class BoardController { } @FXML protected void updateDropsP2(ActionEvent event){ - peli.pelaajaKaksiHeita(0); - if(!(peli.pelaaja1.heittojaPelattu() > peli.pelaaja2.heittojaPelattu())) { + if(!(peli.pelaaja2.heittojaPelattu() > peli.pelaaja1.heittojaPelattu())) { peli.pelaaja2.lisaaPudonnutHeitto(); + peli.pelaajaKaksiHeita(0); } if (killshotCalledP2){kscP2OFF();} dropsP2.textProperty().bind(Bindings.concat("Drops: ", peli.pelaaja2.annaPudonneetHeitot())); @@ -193,9 +198,9 @@ public class BoardController { } @FXML protected void updateFaultsP1(ActionEvent event){ - peli.pelaajaYksiHeita(0); - if(!(peli.pelaaja2.heittojaPelattu() > peli.pelaaja1.heittojaPelattu())) { + if(!(peli.pelaaja1.heittojaPelattu() > peli.pelaaja2.heittojaPelattu())) { peli.pelaaja1.lisaaPelaajalleVirheheitto(); + peli.pelaajaYksiHeita(0); } if (killshotCalledP1){kscP1OFF();} faultsP1.textProperty().bind(Bindings.concat("Faults: ", peli.pelaaja1.annaPelaajanVirheheitot())); @@ -203,16 +208,18 @@ public class BoardController { } @FXML protected void updateFaultsP2(ActionEvent event){ - peli.pelaajaKaksiHeita(0); - - if(!(peli.pelaaja1.heittojaPelattu() > peli.pelaaja2.heittojaPelattu())) { + if(!(peli.pelaaja2.heittojaPelattu() > peli.pelaaja1.heittojaPelattu())) { peli.pelaaja2.lisaaPelaajalleVirheheitto(); + peli.pelaajaKaksiHeita(0); } if (killshotCalledP2){kscP2OFF();} faultsP2.textProperty().bind(Bindings.concat("Faults: ", peli.pelaaja2.annaPelaajanVirheheitot())); updateKierrosLabel(); } + /** + * Killshot-kutsu deaktivoi muut pistenapit + */ @FXML protected void setKillshotCallP1(ActionEvent event){ kscP1ON(); @@ -224,7 +231,7 @@ public class BoardController { } /** - * Killshotcall aktivoi tai deaktivoi muut napit seuraavissa: + * Killshotcall aktivoi tai deaktivoi muut napit seuraavissa metodeissa: */ private void kscP1ON(){ points1P1.setDisable(true); @@ -277,7 +284,7 @@ public class BoardController { String voittaja = peli.annaVoittajanNimi(); Alert alert = new Alert(Alert.AlertType.INFORMATION); - if (voittaja == "Tasapeli"){ + if (voittaja.equals("Tasapeli")){ alert.setTitle(voittaja + "!"); alert.setHeaderText(voittaja + "!"); } else { @@ -286,15 +293,14 @@ public class BoardController { } alert.setContentText("Paina OK aloittaaksesi uuden pelin"); Optional<ButtonType> option = alert.showAndWait(); - if (option.get() == null || option.get() == ButtonType.CANCEL) { - } else if (option.get() == ButtonType.OK) { - MainApp.LopetaPeli(); - } + MainApp.LopetaPeli(); - /** + + /* * WinnerWindow -ikkunaan on tarkoitus tehdä statistiikkaruutu pelin päätteeksi. * Tällä aktivointi - korvaa yo alert. * + WinnerWindow ww = new WinnerWindow(); Scene ab = new Scene(ww.winnerPage(voittaja), 400, 300); Stage abt = new Stage(); diff --git a/src/main/java/fi/utu/tech/gui/javafx/BoardController_old.java b/src/main/java/fi/utu/tech/gui/javafx/BoardController_old.java deleted file mode 100644 index 9fbe4ea857bd448f561bc34583ae4b38a6726b7f..0000000000000000000000000000000000000000 --- a/src/main/java/fi/utu/tech/gui/javafx/BoardController_old.java +++ /dev/null @@ -1,153 +0,0 @@ -package fi.utu.tech.gui.javafx; - -import javafx.beans.binding.Bindings; -import javafx.beans.property.IntegerProperty; -import javafx.beans.property.SimpleIntegerProperty; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.shape.Circle; - -public class BoardController_old { - - private MainApp mainApp; - - public void setMainApp(MainApp mainApp){ - this.mainApp = mainApp; - } - - private final IntegerProperty dropsP1 = new SimpleIntegerProperty(0); - private final IntegerProperty dropsP2 = new SimpleIntegerProperty(0); - private final IntegerProperty pointsP1 = new SimpleIntegerProperty(0); - private final IntegerProperty pointsP2 = new SimpleIntegerProperty(0); - @FXML - public Label player1Name; - - @FXML - private Label lblDropsP1; - @FXML - public Label player2Name; - - @FXML - private Button dropP1; - - @FXML - private Button faultP1; - - @FXML - private Button killCallP1; - - @FXML - private Label lblPointsP1; - - @FXML - private Button zeroP1; - - @FXML - private Button points1P1; - @FXML - private Button points2P1; - @FXML - private Button points3P1; - @FXML - private Button points4P1; - @FXML - private Button points5P1; - @FXML - private Button points6P1; - @FXML - private Button points8P1; - @FXML - private Circle circle1; - @FXML - private Circle circle2; - @FXML - private Circle circle3; - @FXML - private Circle circle4; - @FXML - private Circle circle5; - @FXML - private Circle circle6;; - @FXML - private Circle circle8; - - - - @FXML - protected void updateDropP1(ActionEvent event) { - dropsP1.setValue(dropsP1.get() + 1); - //System.out.println(lblDropsP1.getText()); - lblDropsP1.textProperty().bind(Bindings.concat("Drops: ", dropsP1.asString())); - } - - @FXML - protected void updateFaultP1(ActionEvent event){ - } - - @FXML - protected void updatePoints(ActionEvent event){ - pointsP1.setValue(pointsP1.get() + 1); - // System.out.println(lblDropsP1.getText()); - lblPointsP1.textProperty().bind(Bindings.concat("Points: ", pointsP1.asString())); - } - -/* - - public static void setPlayer1Name(String playerName) { - player1Name.setText(playerName); - } - - public static void setPlayer2Name(String playerName) { - player2Name.setText(playerName); - } - - */ -/* - private final IntegerProperty clicks = new SimpleIntegerProperty(0); - - private Supplier<Parent> supplier; - - @FXML private Label clicksLabel; - - protected void updateClicks() { - if (!clicksLabel.textProperty().isBound()) - clicksLabel.textProperty().bind(clicks.asString().concat(" clicks.")); - - clicks.setValue(clicks.getValue() + 1); - } - - protected void setLabel(String text) { - if (!clicksLabel.textProperty().isBound()) clicksLabel.setText(text); - } - - @FXML - protected void handleDialogButton(ActionEvent event) { - updateClicks(); - Dialogs.warning("Example dialog", "Content header", "Content"); - } - - @FXML - protected void handleExitButton(ActionEvent event) { - System.out.println("Closing app."); - Platform.exit(); - } - - @FXML - protected void handleWindowButton(ActionEvent event) { - updateClicks(); - Scene other = new Scene(supplier.get()); - Stage otherStage = new Stage(); - otherStage.setScene(other); - otherStage.show(); - } - - protected void setWindowFactory(Supplier<Parent> supplier) { - this.supplier = supplier; - } - - public void initialize() { - System.out.println("2-A"); - }*/ -} diff --git a/src/main/java/fi/utu/tech/gui/javafx/MainApp.java b/src/main/java/fi/utu/tech/gui/javafx/MainApp.java index b0e30cb51e87aede9fba639e4d86cb0e4d5b9014..af0ee5d8db7c9f6c5c54eb1dcc0defb065b8c6b3 100644 --- a/src/main/java/fi/utu/tech/gui/javafx/MainApp.java +++ b/src/main/java/fi/utu/tech/gui/javafx/MainApp.java @@ -15,11 +15,14 @@ import javafx.stage.Stage; /** - * MainApp-luokka pitää kasassa JavaFX toiminnallisuutta. - * Aloitusruutu, jossa annetaan pelaajanimet, käynnistetään tässä. + * MainApp-luokka pitää kasassa JavaFX toiminnallisuutta ja + * varsinaisen käyttöliittymän aloituksen. + * Aloitusruutu, jossa annetaan pelaajanimet, käynnistetään tässä Start-metodissa. + * Luodaan ruudut ym, joihin asetellaan tarvittavat kohdat + * syötettäville tiedoille. + * * Seuraavaksi käyttöön otetaan FXML pohja ja sen controlleri. * - * ToDo siistiminen. */ public class MainApp extends Application { @@ -27,10 +30,11 @@ public class MainApp extends Application { static Scoreboards newGame; static Scene startScene; static Stage activeStage; + @Override public void start(Stage stage) throws Exception { - BorderPane bPane = new BorderPane(); + BorderPane bPane = new BorderPane(); GridPane grid = new GridPane(); int gridRow = 0; @@ -76,9 +80,8 @@ public class MainApp extends Application { Scene boardScene = new Scene(root); startGame.setOnMouseClicked(event -> { - /** - * Peliruutu käyttöön Aloita peli -napin painalluksella. - * + /* + Otetaan peliruutu käyttöön Aloita peli -napin painalluksella. */ Peli uusiPeli = new Peli(txtPl1.getText(), txtPl2.getText()) ; controller.aloitaPeli(uusiPeli); @@ -87,7 +90,6 @@ public class MainApp extends Application { }); startScene = new Scene(bPane, 570, 300); - activeStage = stage; activeStage.setTitle("Kirveenheitto: parikisa"); activeStage.setResizable(true); @@ -97,9 +99,8 @@ public class MainApp extends Application { public static void LopetaPeli() { - /** - * Pelikierroksen loputtua siirrytään takaisin alkuun - * + /* + Pelikierroksen loputtua siirrytään takaisin alkuun */ activeStage.setScene(startScene);