diff --git a/src/resources/resources.properties b/src/resources/resources.properties new file mode 100644 index 0000000..5cc4eb0 --- /dev/null +++ b/src/resources/resources.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/Game.java b/src/roulette/Game.java index 63c6ed6..8303d81 100755 --- a/src/roulette/Game.java +++ b/src/roulette/Game.java @@ -1,8 +1,6 @@ package roulette; -import roulette.bets.OddEven; -import roulette.bets.RedBlack; -import roulette.bets.ThreeConsecutive; +import roulette.bets.BetFactory; import util.ConsoleReader; @@ -14,12 +12,7 @@ public class Game { // name of the game private static final String DEFAULT_NAME = "Roulette"; - // add new bet subclasses here - private Bet[] myPossibleBets = { - new RedBlack("Red or Black", 1), - new OddEven("Odd or Even", 1), - new ThreeConsecutive("Three in a Row", 11), - }; + private BetFactory myBetFactory; private Wheel myWheel; /** @@ -27,6 +20,7 @@ public class Game { */ public Game () { myWheel = new Wheel(); + myBetFactory = new BetFactory(); } /** @@ -69,10 +63,8 @@ public void play (Gambler player) { */ 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]; + System.out.println(myBetFactory.betChoicesToString()); + int response = ConsoleReader.promptRange("Please make a choice", 1, myBetFactory.numBets()); + return myBetFactory.makeBet(response); } } 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); - } -} diff --git a/src/roulette/bets/BetFactory.java b/src/roulette/bets/BetFactory.java new file mode 100644 index 0000000..bf4bda8 --- /dev/null +++ b/src/roulette/bets/BetFactory.java @@ -0,0 +1,75 @@ +package roulette.bets; + +import java.lang.reflect.Constructor; +import java.util.Enumeration; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.ArrayList; +import java.util.Map; +import java.util.Map.Entry; +import roulette.Bet; +import java.util.ResourceBundle; + +public class BetFactory { + + private ResourceBundle myResources; + private List myPossibleBets; + private List> myBetInfos; + + + public BetFactory () { + myResources = ResourceBundle.getBundle("resources/resources"); + myBetInfos = new ArrayList>(); + myPossibleBets = new ArrayList(); + init(); + } + + private void init() { + Enumeration iter = myResources.getKeys(); + while (iter.hasMoreElements()) { + String key = iter.nextElement(); + String value = myResources.getString(key); + String[] info = value.split(","); + String description = info[0]; + System.out.println(info[1]); + int odds = Integer.parseInt(info[1]); + + Entry entry = new SimpleEntry<>(description, odds); + myPossibleBets.add(key); + myBetInfos.add(entry); + + } + + } + + public Bet makeBet(int betIndex) { + String betClass = myPossibleBets.get(betIndex); + Entry betInfo = myBetInfos.get(betIndex); + try { + Class c = Class.forName(betClass); + Constructor constructor = null; + constructor = c.getConstructor(String.class, Integer.class); + Bet bet = (Bet) constructor.newInstance(betInfo.getKey(), betInfo.getValue()); + return bet; + } catch (ReflectiveOperationException e){ + // Deal with error + return null; + } + + } + + public int numBets() { + return myPossibleBets.size(); + } + + public String betChoicesToString() { + String betChoices = ""; + for (int k = 0; k < myPossibleBets.size(); k++) { + betChoices += (String.format("%d) %s \n", (k + 1), myPossibleBets.get(k))); + } + return betChoices; + } + + + +} diff --git a/src/roulette/bets/OddEven.java b/src/roulette/bets/OddEven.java index 9241d57..c5ca90c 100644 --- a/src/roulette/bets/OddEven.java +++ b/src/roulette/bets/OddEven.java @@ -2,6 +2,7 @@ import roulette.Bet; import roulette.Wheel; +import roulette.Wheel.SpinResult; import util.ConsoleReader; diff --git a/src/roulette/bets/RedBlack.java b/src/roulette/bets/RedBlack.java index a28cf15..0df69ce 100644 --- a/src/roulette/bets/RedBlack.java +++ b/src/roulette/bets/RedBlack.java @@ -2,6 +2,7 @@ import roulette.Bet; import roulette.Wheel; +import roulette.Wheel.SpinResult; import util.ConsoleReader; diff --git a/src/roulette/bets/ThreeConsecutive.java b/src/roulette/bets/ThreeConsecutive.java index 03c5650..47a7fe4 100644 --- a/src/roulette/bets/ThreeConsecutive.java +++ b/src/roulette/bets/ThreeConsecutive.java @@ -2,6 +2,7 @@ import roulette.Bet; import roulette.Wheel; +import roulette.Wheel.SpinResult; import util.ConsoleReader;