From bd162428a511b94ea75b90f653df671da8f2377e Mon Sep 17 00:00:00 2001 From: Vikramb987 <47336882+Vikramb987@users.noreply.github.com> Date: Tue, 2 Apr 2019 18:52:17 -0600 Subject: [PATCH] Create TaipanShopText.java --- src/TaipanShopText.java | 267 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 src/TaipanShopText.java diff --git a/src/TaipanShopText.java b/src/TaipanShopText.java new file mode 100644 index 0000000..e97e041 --- /dev/null +++ b/src/TaipanShopText.java @@ -0,0 +1,267 @@ +/** + * TaipanShopText deals with the text based version of the shop. + * + * Author: Vikram Bawa + */ +import java.util.Scanner; +public class TaipanShopText extends Player{ + /** + * This method is evoked if the user is eligible to win, and chooses to end the game (by winning). + */ + public void retire(){ + setRetire(true); + System.out.println("You win!"); + System.exit(0); + } + + /** + * 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 TaipanShopText(Player player){ + Player playerDummy = new Player(player); + setPlayer(playerDummy); + } + + /** + * this method is evoked if the user has decided to travel elsewhere. + */ + public void travel(){ + TravelText travel = new TravelText(getPlayer()); + travel.travelTo(); + setPlayer(travel.getPlayer()); + } + + /** + * this method is evoked if the user wants to use the warehouse to store items or take items out. + */ + public void warehouse(){ + WarehouseText warehouse = new WarehouseText(getPlayer()); + warehouse.changeWarehouse(); + setPlayer(warehouse.getPlayer()); + } + + /** + * this method is evoked if the user wants to use the bank to deposit or withdraw money. + */ + public void bank(){ + BankText bank = new BankText(getPlayer()); + bank.bank(); + setPlayer(bank.getPlayer()); + } + + /** + * this method is evoked if the user wants to use get a loan or pay a loan off. + */ + public void loan(){ + loanSharkText loan = new loanSharkText(getPlayer()); + loan.loanMoney(); + setPlayer(loan.getPlayer()); + } + + + /** + * this method prints the shop UI and the player's inventory and status. + */ + public void printShop(){ + int currentCargo = getOpiumHeld()+getGuns()*10+getSilkHeld()+getArmsHeld()+getGeneralHeld(); + if(getCargoSpace() - currentCargo < 0){ + System.out.println("Hold: Overloaded" + " Guns: " + getGuns() + " HP: " + getHP() +"%"); + }else{ + System.out.println("Hold: " + (getCargoSpace()-currentCargo) + " Guns: " + getGuns() + " HP: " + getHP() +"%"); + } + System.out.println("-------------------------------------------------------------"); + System.out.println(" Opium: " + getOpiumHeld() + " Silk: " + getSilkHeld()); + System.out.println(" Arms: " + getArmsHeld() + " General: " + getGeneralHeld()); + System.out.println("-------------------------------------------------------------"); + System.out.println("Cash: " + getMoney() + " Bank: " + getBank()+ " Debt: " + getDebt()+"\n"); + System.out.println(getName() + ", present prices per unit here are:"); + System.out.println(" Opium: " + getOpiumPrice() + " Silk: " + getSilkPrice()); + System.out.println(" Arms: " + getArmsPrice() + " General: " + getGeneralPrice()); + } + + /** + * this is the shop method. Activates the shopping screen. + */ + public void shop(){ + TaipanShopLogic logic = new TaipanShopLogic(getPlayer()); + System.out.println(logic.updatePrices()); + setPlayer(logic.getPlayer()); + + boolean notDone = true; + int caseNum; + String optionText; + + // first case is triggered if the user is at location one, and has less than $1 million net worth + if (getLocation() == 1 && getBank()+getMoney()-getDebt() < 1000000) { + caseNum = 1; + optionText = " Visit Bank, Transfer Cargo, Get Loans,"; + } // the second case is triggered if the user is at a location other than location one. + else if(getLocation() != 1) { + caseNum = 2; + optionText = ""; + } // the last case is triggered when the other conditions are not met; it is triggered when the user has a net + // worth that is greater than or equal to $1 million and is at location one. + else{ + caseNum = 3; + optionText = " Visit Bank, Transfer Cargo, Get Loans, Retire,"; + } + + Scanner input = new Scanner(System.in); + + // as long as the user does not enter a valid input, the code will run in a loop forever. + while(notDone){ + printShop(); + System.out.printf("\nShall I Buy, Sell,%s or Quit Trading?\n", optionText); + String response = input.next(); + if (response.equalsIgnoreCase("B")) { + boolean notDone2 = true; + System.out.println("What do you wish me to buy, " + getName() + "?"); + + // when buying an item, the user must have the right amount of money, and buy non-negative amounts. + while (notDone2) { + response = input.nextLine(); + if (response.equalsIgnoreCase("O")) { + System.out.println("\nHow much Opium shall I buy, " + getName() + "? (You can afford " + getMoney() / getOpiumPrice() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getMoney() /getOpiumPrice() && num >= 0) { + setOpiumHeld(getOpiumHeld()+num); + setMoney(getMoney()-num *getOpiumPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you can't afford that!"); + } else { + System.out.println(getName() + ", how am I supposed to buy " + "'" + num + "'" + " Opium?"); + } + } + } else if (response.equalsIgnoreCase("S")) { + System.out.println("\nHow much Silk shall I buy, " + getName() + "? (You can afford " + getMoney() /getSilkPrice() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getMoney() /getSilkPrice() && num >= 0) { + setSilkHeld(getSilkHeld()+num); + setMoney(getMoney()-num *getSilkPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you can't afford that!"); + } else { + System.out.println(getName() + ", how am I supposed to buy " + "'" + num + "'" + " Silk?"); + } + } + } else if (response.equalsIgnoreCase("A")) { + System.out.println("\nHow many Arms shall I buy, " + getName() + "? (You can afford " + getMoney() /getArmsPrice() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getMoney() /getArmsPrice() && num >= 0) { + setArmsHeld(getArmsHeld()+num); + setMoney(getMoney() - num*getArmsPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you can't afford that!"); + } else { + System.out.println(getName() + ", how am I supposed to buy " + "'" + num + "'" + " Arms?"); + } + } + } else if (response.equalsIgnoreCase("G")) { + System.out.println("\nHow much General Cargo shall I buy, " + getName() + "? (You can afford " + getMoney() /getGeneralPrice() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getMoney() /getGeneralPrice() && num >= 0) { + setGeneralHeld(getGeneralHeld()+num); + setMoney(getMoney() - num*getGeneralPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you can't afford that!"); + } else { + System.out.println(getName() + ", how am I supposed to buy " + "'" + num + "'" + " General Cargo?"); + } + } + } + } + + } // when selling, the user must enter a non-negative amount of items, and not more than what they have. + else if (response.equalsIgnoreCase("S")) { + boolean notDone2 = true; + System.out.println("What do you wish me to sell, " + getName() + "?"); + while (notDone2) { + response = input.nextLine(); + if (response.equalsIgnoreCase("O")) { + System.out.println("\nHow much Opium shall I sell, " + getName() + "? (You have " + getOpiumHeld() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getOpiumHeld() && num >= 0) { + setOpiumHeld(getOpiumHeld()-num); + setMoney(getMoney() + num*getOpiumPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you don't have that many to sell!"); + } else { + System.out.println(getName() + ", how am I supposed to sell " + "'" + num + "'" + " Opium?"); + } + } + } else if (response.equalsIgnoreCase("S")) { + System.out.println("\nHow much Silk shall I sell, " + getName() + "? (You have " + getSilkHeld() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getSilkHeld() && num >= 0) { + setSilkHeld(getSilkHeld()-num); + setMoney(getMoney() + num*getSilkPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you don't have that many to sell!"); + } else { + System.out.println(getName() + ", how am I supposed to sell " + "'" + num + "'" + " Silk?"); + } + } + } else if (response.equalsIgnoreCase("A")) { + System.out.println("\nHow many Arms shall I sell, " + getName() + "? (You have " + getArmsHeld() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getArmsHeld() && num >= 0) { + setArmsHeld(getArmsHeld()-num); + setMoney(getMoney() + num*getArmsPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you don't have that many to sell!"); + } else { + System.out.println(getName() + ", how am I supposed to sell " + "'" + num + "'" + " Arms?"); + } + } + } else if (response.equalsIgnoreCase("G")) { + System.out.println("\nHow much General Cargo shall I sell, " + getName() + "? (You have " + getGeneralHeld() + ")"); + while (notDone2) { + int num = input.nextInt(); + if (num <= getGeneralHeld() && num >= 0) { + setGeneralHeld(getGeneralHeld()-num); + setMoney(getMoney() + num*getGeneralPrice()); + notDone2 = false; + } else if (num >= 0) { + System.out.println(getName() + ", you don't have that many to sell!"); + } else { + System.out.println(getName() + ", how am I supposed to sell " + "'" + num + "'" + " General Cargo?"); + } + } + } + + } + + } else if (response.equalsIgnoreCase("V") && (caseNum == 1 || caseNum == 3)) { + bank(); + } else if (response.equalsIgnoreCase("T") && (caseNum == 1 || caseNum == 3)) { + warehouse(); + } else if ((response.equalsIgnoreCase("G")||response.equalsIgnoreCase("L")) && (caseNum == 1 || caseNum == 3)) { + loan(); + } // if the user wishes to quit trading, they may do so. Doing this breaks them out of the loop. + else if (response.equalsIgnoreCase("Q") && (caseNum == 1 || caseNum == 3)) { + travel(); + notDone = false; + } // if the user wishes to retire and win the game, they may do so. Doing this breaks them out of the loop. + else if (response.equalsIgnoreCase("R") && caseNum == 3) { + retire(); + notDone = false; + } + } + } +}