Skip to content
Snippets Groups Projects
Commit 04fb0a96 authored by petkol's avatar petkol
Browse files

Pikku korjauksia ja lisäyksiä

parent b0db1409
No related branches found
No related tags found
No related merge requests found
# 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
......@@ -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();
}
/**
/*
* 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();
......
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");
}*/
}
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment