import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.*; import javafx.stage.Stage; import javafx.geometry.Insets; import javafx.scene.control.Label; import javafx.scene.shape.Rectangle; import javafx.scene.text.Font; import java.util.Random; public class TaipanShopGUI { private Player player; private Label firm = new Label(); private Label wItemsText = new Label(); private Label wItemSpaceText = new Label(); private Label locationText = new Label(); private Label inventoryText = new Label(); private Label inventoryHeldText = new Label(); private Label gunsText = new Label(); private Label shipStatusText = new Label(); private Label cashText = new Label(); private Label bankText = new Label(); private Label textOut = new Label(); private Button quitButton = new Button(); private Button retireButton = new Button(); private Button bankButton = new Button(); private Button sellButton = new Button(); private Button buyButton = new Button(); private Button loanButton = new Button(); private Button cargoButton = new Button(); private Button opiumButton = new Button(); private Button silkButton = new Button(); private Button armsButton = new Button(); private Button generalButton = new Button(); private TextField numberInput = new TextField(); private int opiumPrice = 16000; private int silkPrice = 1600; private int armsPrice = 160; private int generalPrice = 8; /** * constructor; only runs when a Player object is provided. The constructor is fully encapsulated. * * @param player is a Player object that will be copied and the player instance variable is set to the copy. */ public TaipanShopGUI(Player player){ Player playerDummy = new Player(player); this.player = playerDummy; } /** * This method is evoked if the user is eligible to win, and chooses to end the game (by winning). */ public void retire(Stage stage){ player.setRetire(true); GameEndGUI gameEndGUI = new GameEndGUI(player); gameEndGUI.initializeGameEndGUI(stage); stage.show(); } /** * sets the player instance variable equal to a copy of the parameter -- a copy is used for encapsulation purposes. * * @param player is a Player object that will replace the current instance of the player instance variable. */ public void setPlayer(Player player) { Player playerDummy = new Player(player); this.player = playerDummy; } /** * gets the player instance variable. The method returns a copy of the instance variable for encapsulation purposes. * * @return playerDummy -- playerDummy is a copy of the player instance variable. */ public Player getPlayer(){ Player playerDummy = new Player(player); return playerDummy; } /** * getter for opiumPrice instance variable. * * @return opiumPrice -- the price of opium in the shop */ public int getOpiumPrice() { return opiumPrice; } /** * setter for the opiumPrice instance variable. Runs as long as the parameter is greater than 0. * * @param opiumPrice -- what the instance variable opiumPrice should be changed to. */ public void setOpiumPrice(int opiumPrice) { if(opiumPrice > 0){ this.opiumPrice = opiumPrice; } } /** * getter for silkPrice instance variable. * * @return silkPrice -- the price of silk in the shop. */ public int getSilkPrice() { return silkPrice; } /** * setter for the silkPrice instance variable. Runs as long as the parameter is greater than 0. * * @param silkPrice -- what the instance variable silkPrice should be changed to. */ public void setSilkPrice(int silkPrice) { if(silkPrice > 0){ this.silkPrice = silkPrice; } } /** * getter for armsPrice instance variable. * * @return armsPrice -- the price of arms in the shop. */ public int getArmsPrice() { return armsPrice; } /** * setter for the armsPrice instance variable. Runs as long as the parameter is greater than 0. * * @param armsPrice -- what the instance variable armsPrice should be changed to. */ public void setArmsPrice(int armsPrice) { if(armsPrice > 0){ this.armsPrice = armsPrice; } } /** * getter for generalPrice instance variable. * * @return generalPrice -- the price of general cargo in the shop. */ public int getGeneralPrice() { return generalPrice; } /** * setter for the generalPrice instance variable. Runs as long as the parameter is greater than 0. * * @param generalPrice -- what the instance variable generalPrice should be changed to. */ public void setGeneralPrice(int generalPrice) { if(generalPrice > 0){ this.generalPrice = generalPrice; } } /** * this method is when the shop is accessed, randomizing the prices of all the items. */ public void updatePrices(){ String s = "\t" + player.getName() + ", the price of "; double value = 80*Math.random(); Random rand = new Random(); opiumPrice = (rand.nextInt(201) + 60)*100; silkPrice = (rand.nextInt(201) + 60)*10; armsPrice = (rand.nextInt(21) + 6)*10; generalPrice = rand.nextInt(17) + 4; // there is a 10% chance that the price of an item is increased/decreased beyond its regular range. if(value < 8){ if(value < 2){ if(value < 1){ opiumPrice /= 5; textOut.setText(s + "Opium has dropped to " + opiumPrice +"!!!\n"+textOut.getText()); }else{ opiumPrice *= 5; textOut.setText(s + "Opium has risen to " + opiumPrice +"!!!\n"+textOut.getText()); } }else if(value < 4){ if(value < 3){ silkPrice /= 5; textOut.setText(s + "Silk has dropped to " + silkPrice +"!!!\n"+textOut.getText()); }else{ silkPrice *= 5; textOut.setText(s + "Silk has risen to " + silkPrice +"!!!\n"+textOut.getText()); } }else if(value < 6){ if(value < 3){ armsPrice /= 5; textOut.setText(s + "Arms has dropped to " + armsPrice +"!!!\n"+textOut.getText()); }else{ armsPrice *= 5; textOut.setText(s + "Arms has risen to " + armsPrice +"!!!\n"+textOut.getText()); } }else{ if(value < 7){ generalPrice = 1; textOut.setText(s + "General Cargo has dropped to 1!!!\n"+textOut.getText()); }else{ generalPrice *= 5; textOut.setText(s + "General Cargo has risen to " + generalPrice + "!!!\n"+textOut.getText()); } } } } /** * Sets the default dialogue of simply stating the prices of the items. */ public void defaultTextOut(){ textOut.setText(String.format("\t%s, present prices per unit here are:\n\n\t\tOpium: %d\t\t\tSilk: %d\n\t\tArms: %d\t\t\tGeneral: %d", player.getName(), getOpiumPrice(), getSilkPrice(), getArmsPrice(), getGeneralPrice())); } /** * Sets up buttons according to which "state" is inputted. When used in "shop", only the item buttons are visible. * When used in "reset", all the item buttons are invisible; if the user is at location one and is eligible to win, * then all utilities and the retire button are visible. If the user is not at location one, then the user can only * buy, sell, or exit. If the user is at location one and is not eligible to win, then all utilities are visible but * the retire button is not. When used in "input" everything near the bottom is invisible except for the text area. * * @param state -- the state determines which buttons are visible and which are not. */ public void buttonSetup(String state) { if (state.equals("shop")) { buyButton.setVisible(false); sellButton.setVisible(false); bankButton.setVisible(false); numberInput.setVisible(false); cargoButton.setVisible(false); loanButton.setVisible(false); armsButton.setVisible(true); quitButton.setVisible(false); opiumButton.setVisible(true); silkButton.setVisible(true); generalButton.setVisible(true); retireButton.setVisible(false); } else if (state.equals("reset")) { buyButton.setText("Buy"); sellButton.setText("Sell"); opiumButton.setText("Opium"); silkButton.setText("Silk"); armsButton.setText("Arms"); generalButton.setText("General"); if (player.getLocation() != 1) { buyButton.setVisible(true); sellButton.setVisible(true); bankButton.setVisible(false); cargoButton.setVisible(false); loanButton.setVisible(false); armsButton.setVisible(false); quitButton.setVisible(true); opiumButton.setVisible(false); silkButton.setVisible(false); numberInput.setVisible(false); generalButton.setVisible(false); retireButton.setVisible(false); } if(player.getBank() + player.getMoney() - player.getDebt() < 1000000 && player.getLocation() == 1){ buyButton.setVisible(true); sellButton.setVisible(true); bankButton.setVisible(true); cargoButton.setVisible(false); loanButton.setVisible(true); quitButton.setVisible(true); opiumButton.setVisible(false); silkButton.setVisible(false); numberInput.setVisible(false); generalButton.setVisible(false); armsButton.setVisible(false); retireButton.setVisible(false); }else if(player.getLocation() == 1){ buyButton.setVisible(true); sellButton.setVisible(true); bankButton.setVisible(true); cargoButton.setVisible(false); loanButton.setVisible(true); numberInput.setVisible(false); quitButton.setVisible(true); opiumButton.setVisible(false); silkButton.setVisible(false); generalButton.setVisible(false); armsButton.setVisible(false); retireButton.setVisible(true); } } else if(state.equals("input")){ buyButton.setVisible(false); sellButton.setVisible(false); bankButton.setVisible(false); cargoButton.setVisible(false); loanButton.setVisible(false); numberInput.setVisible(true); quitButton.setVisible(false); opiumButton.setVisible(false); silkButton.setVisible(false); generalButton.setVisible(false); armsButton.setVisible(false); retireButton.setVisible(false); } } /** * this method is responsible for the actual purchasing/selling of items, and the text associated with the act. */ public void shop(){ String originalDialogue = textOut.getText(); int num = Integer.parseInt(numberInput.getText().replace(" ", "")); if(buyButton.getText().contains(".")){ if(opiumButton.getText().contains(".") && num <= player.getMoney() / opiumPrice && num >= 0){ player.setMoney(player.getMoney()-num*opiumPrice); player.setOpiumHeld(player.getOpiumHeld()+num); }else if (num >= 0 && opiumButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you can't afford that!"); }else if(opiumButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to buy " + "'" + num + "'" + " Opium?"); }else if(silkButton.getText().contains(".") && num <= player.getMoney() / silkPrice && num >= 0){ player.setSilkHeld(player.getSilkHeld()+num); player.setMoney(player.getMoney()-num * silkPrice); }else if (num >= 0 && silkButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you can't afford that!"); }else if(silkButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to buy " + "'" + num + "'" + " Silk?"); }else if(armsButton.getText().contains(".") && num <= player.getMoney() / armsPrice && num >= 0){ player.setArmsHeld(player.getArmsHeld()+num); player.setMoney(player.getMoney() - num*armsPrice); }else if(num >= 0 && armsButton.getText().contains(".")){ textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you can't afford that!"); }else if(armsButton.getText().contains(".")){ textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to buy " + "'" + num + "'" + " Arms?"); }else if(generalButton.getText().contains(".") && num <= player.getMoney() / generalPrice && num >= 0){ player.setArmsHeld(player.getArmsHeld()+num); player.setMoney(player.getMoney() - num*generalPrice); }else if(num >= 0 && generalButton.getText().contains(".")){ textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you can't afford that!"); }else if(generalButton.getText().contains(".")){ textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to buy " + "'" + num + "'" + " General Cargo?"); } }else if(sellButton.getText().contains(".")){ if(opiumButton.getText().contains(".") && num <= player.getOpiumHeld() && num >= 0){ player.setOpiumHeld(player.getOpiumHeld()-num); player.setMoney(player.getMoney() + num*opiumPrice); }else if (num >= 0 && opiumButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you don't have that many to sell!"); }else if(opiumButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to sell " + "'" + num + "'" + " Opium?"); }else if(silkButton.getText().contains(".") && num <= player.getSilkHeld() && num >= 0){ player.setSilkHeld(player.getSilkHeld()-num); player.setMoney(player.getMoney() + num*silkPrice); }else if (num >= 0 && silkButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you don't have that many to sell!"); }else if(silkButton.getText().contains(".")) { textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to sell " + "'" + num + "'" + " Silk?"); }else if(armsButton.getText().contains(".") && num <= player.getArmsHeld() && num >= 0){ player.setArmsHeld(player.getArmsHeld()-num); player.setMoney(player.getMoney() + num*armsPrice); }else if(num >= 0 && armsButton.getText().contains(".")){ textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you don't have that many to sell!"); }else if(armsButton.getText().contains(".")){ textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to sell " + "'" + num + "'" + " Arms?"); }else if(generalButton.getText().contains(".") && num <= player.getGeneralHeld() && num >= 0){ player.setGeneralHeld(player.getGeneralHeld()-num); player.setMoney(player.getMoney() + num*generalPrice); }else if(num >= 0 && generalButton.getText().contains(".")){ textOut.setText(originalDialogue+"\n\t"+ player.getName() + ", you don't have that many to sell!"); }else{ textOut.setText(originalDialogue+"\n\t"+ player.getName() +", how am I supposed to sell " + "'" + num + "'" + " General Cargo?"); } } } /** * Initializes the shop on the given stage as a parameter. * * @param stage */ public void initializeShop(Stage stage){ Font size14 = new Font(14.0); Rectangle dialogueRectangle = new Rectangle(); dialogueRectangle.setFill(javafx.scene.paint.Color.WHITE); dialogueRectangle.setHeight(180.0); dialogueRectangle.setLayoutX(8.0); dialogueRectangle.setLayoutY(294.0); dialogueRectangle.setStroke(javafx.scene.paint.Color.BLACK); dialogueRectangle.setStrokeType(javafx.scene.shape.StrokeType.INSIDE); dialogueRectangle.setWidth(582.0); Rectangle inventoryRectangle = new Rectangle(); inventoryRectangle.setFill(javafx.scene.paint.Color.WHITE); inventoryRectangle.setHeight(108.0); inventoryRectangle.setLayoutX(8.0); inventoryRectangle.setLayoutY(147.0); inventoryRectangle.setStroke(javafx.scene.paint.Color.BLACK); inventoryRectangle.setStrokeType(javafx.scene.shape.StrokeType.INSIDE); inventoryRectangle.setWidth(405.0); Rectangle warehouseRectangle = new Rectangle(); warehouseRectangle.setFill(javafx.scene.paint.Color.WHITE); warehouseRectangle.setHeight(108.0); warehouseRectangle.setLayoutY(33.0); warehouseRectangle.setLayoutX(8.0); warehouseRectangle.setStroke(javafx.scene.paint.Color.BLACK); warehouseRectangle.setStrokeType(javafx.scene.shape.StrokeType.INSIDE); warehouseRectangle.setWidth(405.0); AnchorPane anchorPane = new AnchorPane(); anchorPane.setPrefHeight(480.0); anchorPane.setPrefWidth(600.0); GridPane gridPane = new GridPane(); gridPane.setPrefHeight(480.0); gridPane.setPrefWidth(600.0); ColumnConstraints columnConstraints = new ColumnConstraints(); columnConstraints.setMaxWidth(590.0); columnConstraints.setMinWidth(0.0); columnConstraints.setPrefWidth(590.0); RowConstraints rowConstraints = new RowConstraints(); rowConstraints.setMinHeight(20.0); rowConstraints.setPrefHeight(20.0); RowConstraints rowConstraints0 = new RowConstraints(); rowConstraints0.setMaxHeight(122.0); rowConstraints0.setMinHeight(10.0); rowConstraints0.setPrefHeight(117.0); RowConstraints rowConstraints1 = new RowConstraints(); rowConstraints1.setMaxHeight(163.0); rowConstraints1.setMinHeight(10.0); rowConstraints1.setPrefHeight(112.0); RowConstraints rowConstraints2 = new RowConstraints(); rowConstraints2.setMaxHeight(126.0); rowConstraints2.setMinHeight(0.0); rowConstraints2.setPrefHeight(42.0); RowConstraints rowConstraints3 = new RowConstraints(); rowConstraints3.setMaxHeight(269.0); rowConstraints3.setMinHeight(10.0); rowConstraints3.setPrefHeight(118.0); RowConstraints rowConstraints4 = new RowConstraints(); rowConstraints4.setMaxHeight(179.0); rowConstraints4.setMinHeight(10.0); rowConstraints4.setPrefHeight(52.0); gridPane.setPadding(new Insets(10.0, 10.0, 10.0, 0.0)); HBox hBox = new HBox(); GridPane.setRowIndex(hBox, 1); hBox.setPrefHeight(100.0); hBox.setPrefWidth(200.0); HBox hBox0 = new HBox(); GridPane.setRowIndex(hBox0, 2); hBox0.setPrefHeight(100.0); hBox0.setPrefWidth(200.0); FlowPane flowPane = new FlowPane(); GridPane.setRowIndex(flowPane, 5); flowPane.setAlignment(javafx.geometry.Pos.CENTER); flowPane.setHgap(5.0); flowPane.setPrefHeight(200.0); flowPane.setPrefWidth(200.0); buyButton.setMnemonicParsing(false); buyButton.setPrefHeight(25.0); buyButton.setPrefWidth(45.0); buyButton.setText("Buy"); // if the buy button is clicked, the main utility buttons are set to be invisible and the buying process begins. buyButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { buttonSetup("shop"); buyButton.setText("Buy."); defaultTextOut(); textOut.setText(textOut.getText()+"\n\tWhich good would you like to purchase?"); } }); sellButton.setPrefHeight(25.0); sellButton.setText("Sell"); // if the sell button is clicked, the main utility buttons are set to be invisible and the selling process begins. sellButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { buttonSetup("shop"); sellButton.setText("Sell."); defaultTextOut(); textOut.setText(textOut.getText()+"\n\tWhich good would you like to sell?"); } }); sellButton.setPrefWidth(45.0); sellButton.setMnemonicParsing(false); bankButton.setPrefHeight(25.0); // opens the bank if the bank button is clicked. bankButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { bankGUI bank = new bankGUI(getPlayer()); bank.initializeBank(stage); stage.show(); } }); bankButton.setMnemonicParsing(false); bankButton.setPrefWidth(74.0); bankButton.setText("Visit Bank"); cargoButton.setPrefHeight(25.0); cargoButton.setText("Transfer Cargo"); cargoButton.setMnemonicParsing(false); cargoButton.setPrefWidth(94.0); // warehouse is entered when the warehouse button is clicked. cargoButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { WarehouseGUI warehouseGUI = new WarehouseGUI(player); warehouseGUI.initializeWarehouse(stage); stage.show(); } }); loanButton.setMnemonicParsing(false); loanButton.setPrefHeight(25.0); loanButton.setPrefWidth(73.0); // loan office is entered when the loan button is clicked. loanButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { loanSharkGUI loan = new loanSharkGUI(getPlayer()); loan.initializeLoanShark(stage); stage.show(); } }); loanButton.setText("Get Loans"); quitButton.setPrefHeight(25.0); quitButton.setMnemonicParsing(false); quitButton.setPrefWidth(90.0); quitButton.setText("Quit Trading"); // the user is free to travel once the quit button is clicked. quitButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { TravelGUI travelGUI = new TravelGUI(player); travelGUI.initializeTravel(stage); stage.show(); //System.out.println("PLACEHOLDER FOR TRAVEL"); } }); retireButton.setPrefHeight(25.0); retireButton.setPrefWidth(49.0); retireButton.setText("Retire"); retireButton.setVisible(false); // the user wins the game when the retire button is clicked. retireButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { retire(stage); } }); retireButton.setMnemonicParsing(false); opiumButton.setMnemonicParsing(false); opiumButton.setPrefWidth(86.0); opiumButton.setPrefHeight(25.0); opiumButton.setText("Opium"); opiumButton.setVisible(false); // the opium buying/selling process starts as soon as the user clicks the opium button. opiumButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { buttonSetup("input"); opiumButton.setText("Opium."); defaultTextOut(); String extraText; if(buyButton.getText().contains(".")){ extraText = String.format(" (You can afford %d)", player.getMoney()/opiumPrice); }else{ extraText = String.format(" (You have %d)", player.getOpiumHeld()); } textOut.setText(textOut.getText()+"\n\tWhat quantity of Opium?" + extraText); } }); silkButton.setPrefHeight(25.0); silkButton.setPrefWidth(86.0); silkButton.setMnemonicParsing(false); silkButton.setText("Silk"); silkButton.setVisible(false); // the silk buying/selling process starts as soon as the user clicks the silk button. silkButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { buttonSetup("input"); silkButton.setText("Silk."); defaultTextOut(); String extraText; if(buyButton.getText().contains(".")){ extraText = String.format(" (You can afford %d)", player.getMoney()/silkPrice); }else{ extraText = String.format(" (You have %d)", player.getSilkHeld()); } textOut.setText(textOut.getText()+"\n\tWhat quantity of Silk?" + extraText); } }); armsButton.setPrefWidth(86.0); armsButton.setMnemonicParsing(false); armsButton.setVisible(false); // the arms buying/selling process starts as soon as the user clicks the arms button. armsButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { buttonSetup("input"); armsButton.setText("Arms."); defaultTextOut(); String extraText; if(buyButton.getText().contains(".")){ extraText = String.format(" (You can afford %d)", player.getMoney()/armsPrice); }else{ extraText = String.format(" (You have %d)", player.getArmsHeld()); } textOut.setText(textOut.getText()+"\n\tWhat quantity of Arms?" + extraText); } }); armsButton.setText("Arms"); armsButton.setPrefHeight(25.0); generalButton.setMnemonicParsing(false); generalButton.setPrefHeight(25.0); generalButton.setPrefWidth(86.0); generalButton.setText("General"); generalButton.setVisible(false); // the general cargo buying/selling process starts as soon as the user clicks the general cargo button. generalButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { buttonSetup("input"); generalButton.setText("General."); defaultTextOut(); String extraText; if(buyButton.getText().contains(".")){ extraText = String.format(" (You can afford %d)", player.getMoney()/generalPrice); }else{ extraText = String.format(" (You have %d)", player.getGeneralHeld()); } textOut.setText(textOut.getText()+"\n\tWhat quantity of General Cargo?" + extraText); } }); numberInput.setAlignment(javafx.geometry.Pos.CENTER_RIGHT); numberInput.setText("Enter amount here..."); numberInput.setVisible(false); // after the user inputs a valid input into the text field and presses Z or ENTER, the buying/selling ends and // the user is returned to the regular shop dialogue. numberInput.setOnKeyPressed(new EventHandler() { @Override public void handle(KeyEvent event) { boolean exit = true; defaultTextOut(); if(event.getCode().equals(KeyCode.ENTER)||event.getCode().equals(KeyCode.Z)) { while(true){ if(!textOut.getText().contains("You entered an invalid input!")&& !exit){ textOut.setText(textOut.getText()+"\n\n\tYou entered an invalid input! Please try again."); break; } try{ shop(); }catch(Exception e){ exit = false; } if(exit){ break; } } updateStage(); buttonSetup("reset"); } } }); firm.setAlignment(Pos.CENTER); firm.setPrefHeight(27.0); firm.setPrefWidth(632.0); firm.setFont(new Font(18.0)); Label warehouseText = new Label(); warehouseText.setAlignment(Pos.CENTER); warehouseText.setPrefHeight(108.0); warehouseText.setPrefWidth(100.0); warehouseText.setText("Warehouse\n\tOpium\n\tSilk\n\tArms\n\tGeneral"); warehouseText.setFont(size14); wItemsText.setAlignment(Pos.CENTER); wItemsText.setPrefWidth(100.0); wItemsText.setPrefHeight(108.0); wItemsText.setFont(size14); wItemSpaceText.setPrefHeight(108.0); wItemSpaceText.setPrefWidth(215.0); wItemSpaceText.setFont(size14); locationText.setAlignment(Pos.BOTTOM_CENTER); locationText.setPrefHeight(106.0); locationText.setPrefWidth(175.0); locationText.setTextAlignment(javafx.scene.text.TextAlignment.CENTER); locationText.setFont(size14); inventoryText.setAlignment(Pos.CENTER); inventoryText.setFont(size14); inventoryHeldText.setAlignment(Pos.CENTER); inventoryHeldText.setPrefHeight(108.0); inventoryHeldText.setPrefWidth(100.0); inventoryHeldText.setFont(size14); gunsText.setPrefHeight(108.0); gunsText.setPrefWidth(212.0); gunsText.setAlignment(Pos.CENTER_LEFT); gunsText.setFont(size14); shipStatusText.setAlignment(Pos.TOP_CENTER); shipStatusText.setContentDisplay(javafx.scene.control.ContentDisplay.CENTER); shipStatusText.setPrefHeight(110.0); shipStatusText.setPrefWidth(180.0); shipStatusText.setTextAlignment(javafx.scene.text.TextAlignment.CENTER); shipStatusText.setFont(size14); GridPane.setRowIndex(cashText, 3); cashText.setPrefHeight(17.0); cashText.setPrefWidth(209.0); cashText.setFont(size14); GridPane.setHalignment(bankText, javafx.geometry.HPos.CENTER); GridPane.setRowIndex(bankText, 3); bankText.setAlignment(Pos.CENTER); bankText.setPrefHeight(20.0); bankText.setPrefWidth(264.0); bankText.setFont(size14); GridPane.setRowIndex(textOut, 4); textOut.setAlignment(Pos.TOP_LEFT); textOut.setContentDisplay(javafx.scene.control.ContentDisplay.TOP); textOut.setPrefHeight(163.0); textOut.setPrefWidth(583.0); defaultTextOut(); textOut.setFont(size14); anchorPane.getChildren().addAll(dialogueRectangle, inventoryRectangle, warehouseRectangle); hBox.getChildren().addAll(warehouseText, wItemsText, wItemSpaceText, locationText); hBox0.getChildren().addAll(inventoryText, inventoryHeldText, gunsText, shipStatusText); flowPane.getChildren().addAll(buyButton, sellButton, bankButton, cargoButton, loanButton, quitButton, retireButton, opiumButton, silkButton, armsButton, generalButton, numberInput); gridPane.getColumnConstraints().add(columnConstraints); gridPane.getRowConstraints().addAll(rowConstraints, rowConstraints0, rowConstraints1, rowConstraints2, rowConstraints3, rowConstraints4); gridPane.getChildren().addAll(firm, hBox, hBox0, cashText, bankText, textOut, flowPane); anchorPane.getChildren().add(gridPane); Scene root = new Scene(anchorPane, 600, 480); stage.setTitle("Shop"); stage.setResizable(false); stage.setScene(root); // general updates to the buttons, user stats/inventory, and text. buttonSetup("reset"); updatePrices(); defaultTextOut(); updateStage(); } /** * converts the user's location (an integer) to a String, and returns it. * * @return location -- the user's location as a string; the actual name of the location. */ public String getStringLocation(){ String location; switch(player.getLocation()){ case 1: location = "Hong Kong"; break; case 2: location = "Shanghai"; break; case 3: location = "Nagasaki"; break; case 4: location = "Saigon"; break; case 5: location = "Manila"; break; case 6: location = "Singapore"; break; case 7: location = "Batavia"; break; default: location = "Error"; break; } return location; } /** * returns the user's condition based upon their current HP. * * @return shipStatus -- a representation of their ship's health in words. */ public String shipStatusString(){ String shipStatus; switch(player.getHP()/10){ case 10: shipStatus = "Mint Condition"; break; case 9: shipStatus = "Near Perfect"; break; case 8: shipStatus = "Great"; break; case 7: shipStatus = "Good"; break; case 6: shipStatus = "Acceptable"; break; case 5: shipStatus = "Tolerable"; break; case 4: shipStatus = "Needs Repair"; break; case 3: shipStatus = "Damaged"; break; case 2: shipStatus = "Indangered"; break; case 1: shipStatus = "Near Sinking"; break; case 0: shipStatus = "Sinking"; break; default: shipStatus = "Invincible"; break; } return shipStatus; } /** * updates the text associated with the user's inventory. */ public void updateStage(){ firm.setText(String.format("Firm: %s, %s", player.getName(), getStringLocation())); wItemsText.setText(String.format("\n %d\n %d\n %d\n %d", player.getwOpium(), player.getwSilk(), player.getwArms(), player.getwGeneral())); int itemsInWarehouse = player.getwOpium()+player.getwGeneral()+player.getwArms()+player.getwSilk(); wItemSpaceText.setText(String.format("\n\t\tIn use:\n\t\t %d \n\t\tVacant:\n\t\t %d", itemsInWarehouse, (10000-itemsInWarehouse))); locationText.setText(String.format("Location\n%s", getStringLocation())); int itemsInInventory = player.getCargoSpace()-player.getSilkHeld()-player.getOpiumHeld()-player.getGeneralHeld()-player.getArmsHeld()-10*player.getGuns(); if(itemsInInventory < 0){ inventoryText.setText(" Overloaded\n\t Opium\n\t Silk\n\t Arms\n\t General"); }else{ inventoryText.setText(String.format(" Hold %d\n\t Opium\n\t Silk\n\t Arms\n\t General", itemsInInventory)); } gunsText.setText(String.format("Guns %d\n\n\n\n ", player.getGuns())); inventoryHeldText.setText(String.format("\n %d\n %d\n %d\n %d", player.getOpiumHeld(), player.getSilkHeld(), player.getArmsHeld(), player.getGeneralHeld())); shipStatusText.setText(String.format("\tDebt\n\t%d\n\n\tShip status\n\t%s: %d", player.getDebt(), shipStatusString(), player.getHP())); cashText.setText(String.format(" Cash: $%,d", player.getMoney())); bankText.setText(String.format("Bank: %d", player.getBank())); } }