diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..fb50116 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/Main.java b/src/Main.java index 2e5e77c..73a8d13 100755 --- a/src/Main.java +++ b/src/Main.java @@ -10,7 +10,7 @@ public class Main { public static void main (String[] args) { Game game = new Game(); - Gambler player = new Gambler("Robert", 1000); + Gambler player = new Gambler("Adam", 1000); System.out.println(String.format("Hello %s, let's play %s!\n", player.getName(), game.getName())); while (player.isSolvent()) { diff --git a/src/betResources/Bets.properties b/src/betResources/Bets.properties new file mode 100644 index 0000000..682225f --- /dev/null +++ b/src/betResources/Bets.properties @@ -0,0 +1,3 @@ +RedBlack="Red or Black",1 +OddEven="Odd or Even",1 +ThreeConsecutive="Three in a Row",11 \ No newline at end of file diff --git a/src/roulette/Bet.java b/src/roulette/Bet.java index 15d54a2..188003a 100755 --- a/src/roulette/Bet.java +++ b/src/roulette/Bet.java @@ -46,4 +46,12 @@ public String toString () { * @param wheel information needed to check if bet won or lost */ public abstract boolean isMade (Wheel.SpinResult spinResult); + + public String getDescription(){ + return myDescription; + } + + public int getOdds(){ + return myOdds; + } } diff --git a/src/roulette/Factory.java b/src/roulette/Factory.java new file mode 100644 index 0000000..d54a132 --- /dev/null +++ b/src/roulette/Factory.java @@ -0,0 +1,43 @@ +package roulette; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.ResourceBundle; + +import util.ConsoleReader; + +public class Factory { + private List myPossibleBets; + + public Factory() throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{ + myPossibleBets = new ArrayList(); + + ResourceBundle myResources = ResourceBundle.getBundle("betResources/Bets.properties"); + Enumeration enumeration = myResources.getKeys(); + while(enumeration.hasMoreElements()){ + String myClassKey = enumeration.nextElement(); + Class betClass = Class.forName(myClassKey); + + Constructor betCtor = betClass.getConstructor(String.class, int.class); + String classValue = myResources.getString(myClassKey); + String description = classValue.substring(0, classValue.indexOf(",")); + classValue = classValue.substring(classValue.indexOf(",")+1); + int odds = Integer.parseInt(classValue); + Object betObj = betCtor.newInstance(new Object[] { description, odds }); + myPossibleBets.add((Bet)betObj); + } + } + + public Bet printMenuChoices(){ + System.out.println("You can make one of the following types of bets:"); + for (int k = 0; k < myPossibleBets.size(); k++) { + System.out.println(String.format("%d) %s", (k + 1), myPossibleBets.get(k).getDescription())); + } + int response = ConsoleReader.promptRange("Please make a choice", 1, myPossibleBets.size()); + return myPossibleBets.get(response - 1); + } + +} \ No newline at end of file diff --git a/src/roulette/Game.java b/src/roulette/Game.java index 63c6ed6..d07d060 100755 --- a/src/roulette/Game.java +++ b/src/roulette/Game.java @@ -21,6 +21,7 @@ public class Game { new ThreeConsecutive("Three in a Row", 11), }; private Wheel myWheel; + private Factory myFactory; /** * Construct the game. @@ -47,7 +48,7 @@ public String getName () { public void play (Gambler player) { int amount = ConsoleReader.promptRange("How much do you want to bet", 0, player.getBankroll()); - Bet b = promptForBet(); + Bet b = myFactory.printMenuChoices(); b.place(); System.out.print("Spinning ..."); @@ -63,16 +64,4 @@ public void play (Gambler player) { } player.updateBankroll(amount); } - - /** - * Prompt the user to make a bet from a menu of choices. - */ - private Bet promptForBet () { - System.out.println("You can make one of the following types of bets:"); - for (int k = 0; k < myPossibleBets.length; k++) { - System.out.println(String.format("%d) %s", (k + 1), myPossibleBets[k])); - } - int response = ConsoleReader.promptRange("Please make a choice", 1, myPossibleBets.length); - return myPossibleBets[response - 1]; - } } diff --git a/src/roulette/OddEven.java b/src/roulette/OddEven.java deleted file mode 100644 index f430f37..0000000 --- a/src/roulette/OddEven.java +++ /dev/null @@ -1,27 +0,0 @@ -package roulette; - -import util.ConsoleReader; - - -public class OddEven extends Bet { - public OddEven (String description, int odds) { - super(description, odds); - } - - /** - * @see Bet#place() - */ - @Override - public String place () { - return ConsoleReader.promptOneOf("Please bet", "even", "odd"); - } - - /** - * @see Bet#isMade(String, Wheel) - */ - @Override - public boolean isMade (String betChoice, Wheel wheel) { - return (wheel.getNumber() % 2 == 0 && betChoice.equals("even")) || - (wheel.getNumber() % 2 == 1 && betChoice.equals("odd")); - } -} diff --git a/src/roulette/RedBlack.java b/src/roulette/RedBlack.java deleted file mode 100644 index 8ccd4b8..0000000 --- a/src/roulette/RedBlack.java +++ /dev/null @@ -1,26 +0,0 @@ -package roulette; - -import util.ConsoleReader; - - -public class RedBlack extends Bet { - public RedBlack (String description, int odds) { - super(description, odds); - } - - /** - * @see Bet#place() - */ - @Override - public String place () { - return ConsoleReader.promptOneOf("Please bet", Wheel.BLACK, Wheel.RED); - } - - /** - * @see Bet#isMade(String, Wheel) - */ - @Override - public boolean isMade (String betChoice, Wheel wheel) { - return wheel.getColor().equals(betChoice); - } -} diff --git a/src/roulette/ThreeConsecutive.java b/src/roulette/ThreeConsecutive.java deleted file mode 100644 index e3331ed..0000000 --- a/src/roulette/ThreeConsecutive.java +++ /dev/null @@ -1,27 +0,0 @@ -package roulette; - -import util.ConsoleReader; - - -public class ThreeConsecutive extends Bet { - public ThreeConsecutive (String description, int odds) { - super(description, odds); - } - - /** - * @see Bet#place() - */ - @Override - public String place () { - return "" + ConsoleReader.promptRange("Enter first of three consecutive numbers", 1, 34); - } - - /** - * @see Bet#isMade(String, Wheel) - */ - @Override - public boolean isMade (String betChoice, Wheel wheel) { - int start = Integer.parseInt(betChoice); - return (start <= wheel.getNumber() && wheel.getNumber() < start + 3); - } -}