Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roulette Pull: Arthur Schweitzer (as466) & Emanuele Macchi (em186) #26

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Empty file modified .gitattributes
100644 → 100755
Empty file.
Empty file modified .gitignore
100644 → 100755
Empty file.
Empty file modified LICENSE
100644 → 100755
Empty file.
12 changes: 12 additions & 0 deletions README.md
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,2 +1,14 @@
# example_roulette
Program to refactor that plays a game of roulette
<<<<<<< HEAD
Arthur Schweitzer (as466), Emanuele Macchi (em186)

1. After refactoring the code there was no need for any if statements, to check which type of Bet is placed. Instead, we made 6 subclasses of the Bet superclass, which have a getUserChoice() method to return the type of Bet placed. This allows us to have a list of different types of Bets, which we can access and utilize accordingly.

2. In terms of design, we implemented inheritance for our Bet class, which helped simplify the structure, however this was theoretically more complex in nature than using a bunch of if statements.

3. Didn't really have to make any trade-offs, since we managed to retain all functionality while making it cleaner.

4. We prefer our refactored code, because it's more flexible and it's easier to add new features such as a new type of Bet.
=======
>>>>>>> dcee03c2dac1db1a02e89ba5d5777b7d5dc6bbea
17 changes: 17 additions & 0 deletions src/roulette/Bet.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
*
* @author Robert C. Duvall
*/
<<<<<<< HEAD
public abstract class Bet {
=======
public class Bet {
>>>>>>> dcee03c2dac1db1a02e89ba5d5777b7d5dc6bbea
private String myDescription;
private int myOdds;

Expand Down Expand Up @@ -34,4 +38,17 @@ public int getOdds () {
public String getDescription () {
return myDescription;
}
<<<<<<< HEAD

public String getUserChoice()
{
return "";
}

public boolean getResult(Wheel myWheel, String betChoice)
{
return false;
}
=======
>>>>>>> dcee03c2dac1db1a02e89ba5d5777b7d5dc6bbea
}
24 changes: 24 additions & 0 deletions src/roulette/ColorBet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package roulette;

import util.ConsoleReader;

public class ColorBet extends Bet {

public ColorBet(String description, int odds) {
super(description, odds);

}

@Override
public String getUserChoice()
{
return ConsoleReader.promptOneOf("Please bet", Wheel.BLACK, Wheel.RED);
}

@Override
public boolean getResult(Wheel myWheel, String betChoice)
{
return myWheel.getColor().equals(betChoice);
}

}
48 changes: 14 additions & 34 deletions src/roulette/Game.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@ public class Game {
private static final String DEFAULT_NAME = "Roulette";
// bets player can make
private Bet[] myPossibleBets = {
new Bet("Red or Black", 1),
new Bet("Odd or Even", 1),
new Bet("Three in a Row", 11)
new ColorBet("Red or Black", 1),
new ParityBet("Odd or Even", 1),
new ThreeConsecutiveBet("Three in a Row", 11),
new SingleNumberBet("Single Number", 35),
new TwoConsecutiveBet("Two in a Row", 17),
new HighLowBet("High or Low", 1)
};
private Wheel myWheel;

Expand Down Expand Up @@ -44,15 +47,15 @@ public String getName () {
public void play (Gambler player) {
int amount = ConsoleReader.promptRange("How much do you want to bet",
0, player.getBankroll());
int whichBet = promptForBet();
String betChoice = placeBet(whichBet);
Bet userBet = myPossibleBets[promptForBet()];
String betChoice = placeBet(userBet);

System.out.print("Spinning ...");
myWheel.spin();
System.out.println(String.format("Dropped into %s %d", myWheel.getColor(), myWheel.getNumber()));
if (betIsMade(whichBet, betChoice)) {
if (betIsMade(userBet, betChoice)) {
System.out.println("*** Congratulations :) You win ***");
amount *= myPossibleBets[whichBet].getOdds();
amount *= userBet.getOdds();
}
else {
System.out.println("*** Sorry :( You lose ***");
Expand All @@ -77,18 +80,8 @@ private int promptForBet () {
*
* @param whichBet specific bet chosen by the user
*/
private String placeBet (int whichBet) {
String result = "";
if (whichBet == 0) {
result = ConsoleReader.promptOneOf("Please bet", Wheel.BLACK, Wheel.RED);
}
else if (whichBet == 1) {
result = ConsoleReader.promptOneOf("Please bet", "even", "odd");
}
else if (whichBet == 2) {
result = "" + ConsoleReader.promptRange("Enter first of three consecutive numbers",
1, Wheel.NUM_SPOTS - 3);
}
private String placeBet (Bet myBet) {
String result = myBet.getUserChoice();
System.out.println();
return result;
}
Expand All @@ -99,20 +92,7 @@ else if (whichBet == 2) {
* @param whichBet specific bet chosen by the user
* @param betChoice specific value user chose to try to win the bet
*/
private boolean betIsMade (int whichBet, String betChoice) {
if (whichBet == 0) {
return myWheel.getColor().equals(betChoice);
}
else if (whichBet == 1) {
return (myWheel.getNumber() % 2 == 0 && betChoice.equals("even")) ||
(myWheel.getNumber() % 2 == 1 && betChoice.equals("odd"));
}
else if (whichBet == 2) {
int start = Integer.parseInt(betChoice);
return (start <= myWheel.getNumber() && myWheel.getNumber() < start + 3);
}
else {
return false;
}
private boolean betIsMade (Bet myBet, String betChoice) {
return myBet.getResult(myWheel, betChoice);
}
}
25 changes: 25 additions & 0 deletions src/roulette/HighLowBet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package roulette;

import util.ConsoleReader;

public class HighLowBet extends Bet{

public HighLowBet(String description, int odds) {
super(description, odds);
// TODO Auto-generated constructor stub
}

@Override
public String getUserChoice()
{
return ConsoleReader.promptOneOf("Please bet", "high", "low");
}

@Override
public boolean getResult(Wheel myWheel, String betChoice)
{
return (myWheel.getNumber() < 19 && betChoice.equals("low")) ||
(myWheel.getNumber() >= 19 && betChoice.equals("high"));
}

}
25 changes: 25 additions & 0 deletions src/roulette/ParityBet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package roulette;

import util.ConsoleReader;

public class ParityBet extends Bet{

public ParityBet(String description, int odds) {
super(description, odds);
// TODO Auto-generated constructor stub
}

@Override
public String getUserChoice()
{
return ConsoleReader.promptOneOf("Please bet", "even", "odd");
}

@Override
public boolean getResult(Wheel myWheel, String betChoice)
{
return (myWheel.getNumber() % 2 == 0 && betChoice.equals("even")) ||
(myWheel.getNumber() % 2 == 1 && betChoice.equals("odd"));
}

}
24 changes: 24 additions & 0 deletions src/roulette/SingleNumberBet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package roulette;

import util.ConsoleReader;

public class SingleNumberBet extends Bet{

public SingleNumberBet(String description, int odds) {
super(description, odds);
// TODO Auto-generated constructor stub
}

@Override
public String getUserChoice()
{
return "" + ConsoleReader.promptInt("Please bet a number between 1 and 35: ");
}

@Override
public boolean getResult(Wheel myWheel, String betChoice)
{
return (("" + myWheel.getNumber()).equals(betChoice));
}

}
26 changes: 26 additions & 0 deletions src/roulette/ThreeConsecutiveBet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package roulette;

import util.ConsoleReader;

public class ThreeConsecutiveBet extends Bet{

public ThreeConsecutiveBet(String description, int odds) {
super(description, odds);
// TODO Auto-generated constructor stub
}

@Override
public String getUserChoice()
{
return "" + ConsoleReader.promptRange("Enter first of three consecutive numbers",
1, Wheel.NUM_SPOTS - 3);
}

@Override
public boolean getResult(Wheel myWheel, String betChoice)
{
int start = Integer.parseInt(betChoice);
return (start <= myWheel.getNumber() && myWheel.getNumber() < start + 3);
}

}
25 changes: 25 additions & 0 deletions src/roulette/TwoConsecutiveBet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package roulette;

import util.ConsoleReader;

public class TwoConsecutiveBet extends Bet{

public TwoConsecutiveBet(String description, int odds) {
super(description, odds);
// TODO Auto-generated constructor stub
}

@Override
public String getUserChoice()
{
return "" + ConsoleReader.promptRange("Enter first of two consecutive numbers",
1, Wheel.NUM_SPOTS - 3);
}

@Override
public boolean getResult(Wheel myWheel, String betChoice)
{
int start = Integer.parseInt(betChoice);
return (start <= myWheel.getNumber() && myWheel.getNumber() < start + 2);
}
}