Skip to content
Closed
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package com.github.zipcodewilmington.casino.games.roulette;

import com.github.zipcodewilmington.casino.CasinoAccount;
import com.github.zipcodewilmington.casino.GameInterface;
import com.github.zipcodewilmington.casino.PlayerInterface;

import java.util.Random;
import java.util.Scanner;

public class RouletteGame implements GameInterface {

private static final int[] RED_NUMBERS = {
1, 3, 5, 7, 9, 12, 14, 16, 18, 19,
21, 23, 25, 27, 30, 32, 34, 36
};

private RoulettePlayer player;
private Scanner scanner;

public RouletteGame() {
this.scanner = new Scanner(System.in);
}

@Override
public void addPlayer(CasinoAccount account) {
this.player = new RoulettePlayer(account);
}

@Override
public void play() {
System.out.println("\n==== ROULETTE ====");
System.out.println("Balance: $" + player.getAccount().getBalance());
System.out.print("Enter bet amount: $");
double betAmount = scanner.nextDouble();

if (betAmount <= 0) {
System.out.println("Bet must be greater than $0. Returning to lobby...");
return;
}

if (betAmount > player.getAccount().getBalance()) {
System.out.println("Not enough funds! Returning to lobby...");
return;
}

System.out.println("\nBet type:");
System.out.println(" 1. Specific number (0-36) -- pays 35x");
System.out.println(" 2. Red / Black -- pays 2x");
System.out.println(" 3. Even / Odd -- pays 2x");
System.out.print("Choose (1-3): ");
int choice = scanner.nextInt();

String betType = "";
int betNumber = -1;

switch (choice) {
case 1:
System.out.print("Pick a number (0-36): ");
betNumber = scanner.nextInt();
if (betNumber < 0 || betNumber > 36) {
System.out.println("Invalid number! Returning to lobby...");
return;
}
betType = "number";
break;
case 2:
System.out.print("Type red or black: ");
betType = scanner.next().toLowerCase();
if (!betType.equals("red") && !betType.equals("black")) {
System.out.println("Invalid choice! Returning to lobby...");
return;
}
break;
case 3:
System.out.print("Type even or odd: ");
betType = scanner.next().toLowerCase();
if (!betType.equals("even") && !betType.equals("odd")) {
System.out.println("Invalid choice! Returning to lobby...");
return;
}
break;
default:
System.out.println("Invalid choice! Returning to lobby...");
return;
}

player.setBetAmount(betAmount);
player.setBetType(betType);
player.setBetNumber(betNumber);

int result = spinWheel();
String resultColor = isRed(result) ? "Red" : (result == 0 ? "Green" : "Black");

System.out.println("\n--- Spinning the wheel... ---");
System.out.println("Result: " + result + " (" + resultColor + ")");

if (isWin(result, betType, betNumber)) {
double winnings = calculateWinnings(betAmount, betType);
player.getAccount().deposit(winnings);
System.out.println("YOU WIN! + $" + winnings);
} else {
player.getAccount().withdraw(betAmount);
System.out.println("You lost. - $" + betAmount);
}

System.out.println("New balance: $" + player.getAccount().getBalance());
}

public int spinWheel() {
return new Random().nextInt(37);
}

public boolean isWin(int result, String betType, int betNumber) {
switch (betType) {
case "number": return result == betNumber;
case "red": return isRed(result);
case "black": return !isRed(result) && result != 0;
case "even": return result != 0 && result % 2 == 0;
case "odd": return result % 2 == 1;
default: return false;
}
}

public double calculateWinnings(double betAmount, String betType) {
if (betType.equals("number")) {
return betAmount * 35;
} else {
return betAmount * 2;
}
}

public boolean isRed(int number) {
for (int red : RED_NUMBERS) {
if (number == red) return true;
}
return false;
}

@Override
public void removePlayer(PlayerInterface player) {
this.player = null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.github.zipcodewilmington.casino.games;
import com.github.zipcodewilmington.casino.CasinoAccount;

//lofi

public class RoulettePlayer {
private CasinoAccount account;
private int betNumber;
private String betType;
private double betAmount;

public RoulettePlayer(CasinoAccount account) {
this.account = account;
}

public CasinoAccount geAccount() {
return account;
}

public int getBetNumber() {
return betNumber;
}

public void setBetNumber(int betNumber) {
this.betNumber = betNumber;
}

public String getBetType() {
return betType;
}

public void setBetType(String betType) {
this.betType = betType;
}

public double getBetAmount() {
return betAmount;
}

public void setBetAmount(double betAmount) {
this.betAmount = betAmount;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.github.zipcodewilmington.casino.games;

import java.util.Random;

public class RouletteWheel {
private final int[] numbers;
private final String[] colors;
private int lastSpinNumber;
private String lastSpinColor;
private final Random random;

public RouletteWheel() {
this.numbers = new int[37]; // 0 to 36
this.colors = new String[37];
this.random = new Random();
initializeWheel();
}

private void initializeWheel() {
for (int i = 0; i <= 36; i++) {
numbers[i] = i;
if (i == 0) {
colors[i] = "Green";
} else if (isRedNumber(i)) {
colors[i] = "Red";
} else {
colors[i] = "Black";
}
}
}

// Official Roulette logic for Red numbers
private boolean isRedNumber(int n) {
if ((n >= 1 && n <= 10) || (n >= 19 && n <= 28)) {
return n % 2 != 0; // Odd is Red
} else {
return n % 2 == 0; // Even is Red
}
}

public void spin() {
int index = random.nextInt(37);
this.lastSpinNumber = numbers[index];
this.lastSpinColor = colors[index];
}

public int getLastSpinNumber() {
return lastSpinNumber;
}

public String getLastSpinColor() {
return lastSpinColor;
}

// Logic for your Game teammate to use for payouts
public boolean lastSpinWasEven() {
return lastSpinNumber != 0 && lastSpinNumber % 2 == 0;
}

public boolean lastSpinWasOdd() {
return lastSpinNumber != 0 && lastSpinNumber % 2 != 0;
}
}
Loading