diff --git a/pom.xml b/pom.xml index 704507d..3a9450d 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ javafx-maven-plugin 0.0.8 - temppackage.Main + millions.App diff --git a/src/main/java/millions/App.java b/src/main/java/millions/App.java new file mode 100644 index 0000000..825265b --- /dev/null +++ b/src/main/java/millions/App.java @@ -0,0 +1,25 @@ +package millions; + +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.stage.Stage; +import millions.controller.GameController; +import millions.view.StartView; + +public class App extends Application { + + @Override + public void start(Stage stage) { + GameController controller = new GameController(); + StartView startView = new StartView(stage); + + Scene scene = new Scene(startView, 400, 350); + stage.setTitle("Millions"); + stage.setScene(scene); + stage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} diff --git a/src/main/java/millions/controller/GameController.java b/src/main/java/millions/controller/GameController.java new file mode 100644 index 0000000..075230c --- /dev/null +++ b/src/main/java/millions/controller/GameController.java @@ -0,0 +1,33 @@ +package millions.controller; + +import java.math.BigDecimal; +import java.nio.file.Path; +import java.util.List; +import millions.controller.fileIO.CSVStockFileParser; +import millions.controller.fileIO.StockFileReader; +import millions.model.Exchange; +import millions.model.Player; +import millions.model.Stock; + +public class GameController { + private Player player; + private Exchange exchange; + + public void startGame(String name, BigDecimal startingMoney, Path stockFilePath) { + StockFileReader reader = new StockFileReader(stockFilePath); + List lines = reader.readFile(); + CSVStockFileParser parser = new CSVStockFileParser(lines); + List stocks = parser.parse(); + + player = new Player(name, startingMoney); + exchange = new Exchange("Exchange", stocks); + } + + public Player getPlayer() { + return player; + } + + public Exchange getExchange() { + return exchange; + } +} diff --git a/src/main/java/millions/view/StartView.java b/src/main/java/millions/view/StartView.java new file mode 100644 index 0000000..564883b --- /dev/null +++ b/src/main/java/millions/view/StartView.java @@ -0,0 +1,94 @@ +package millions.view; + +import java.io.File; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.layout.VBox; +import javafx.stage.FileChooser; +import javafx.stage.Stage; + +public class StartView extends VBox { + + private TextField nameField; + private TextField startingAmountField; + private File selectedFile; + private Button filepickerButton; + private Button startButton; + + public StartView(Stage stage) { + setAlignment(Pos.CENTER); + setSpacing(12); + setPadding(new Insets(40)); + + nameField = new TextField(); + nameField.setPromptText("Player name:"); + nameField.setMaxWidth(250); + nameField.textProperty().addListener((obs, oldVal, newVal) -> checkStartButtonValid()); + + startingAmountField = new TextField(); + startingAmountField.setPromptText("Starting amount:"); + startingAmountField.setMaxWidth(250); + startingAmountField + .textProperty() + .addListener((obs, oldVal, newVal) -> checkStartButtonValid()); + + filepickerButton = new Button(); + filepickerButton.setText("Pick file"); + filepickerButton.setMaxWidth(250); + filepickerButton.setOnAction( + e -> { + FileChooser chooser = new FileChooser(); + chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("CSV files", "*.csv")); + chooser.setTitle("Select stock CSV file"); + File file = chooser.showOpenDialog(stage); + + if (file != null) { + selectedFile = file; + filepickerButton.setText(file.getName()); + } + }); + + startButton = new Button("Start game"); + startButton.setDisable(true); + + Label title = new Label("Millions"); + title.setStyle("-fx-font-size: 32px; -fx-font-weight: bold;"); + + getChildren().addAll(title, nameField, startingAmountField, filepickerButton, startButton); + } + + private void checkStartButtonValid() { + boolean valid = true; + + if (nameField.getText().isBlank()) { + valid = false; + } + + try { + Integer.valueOf(startingAmountField.getText()); + } catch (NumberFormatException e) { + valid = false; + } + + startButton.setDisable(!valid); + } + + public String getName() { + return nameField.getText(); + } + + public String getStartingAmount() { + return startingAmountField.getText(); + } + + public File getSelectedFile() { + return selectedFile; + } + + public Button getStartButton() { + return startButton; + } +}