diff --git a/backend/src/main/java/de/szut/casino/slots/SlotService.java b/backend/src/main/java/de/szut/casino/slots/SlotService.java index 8557480..43f2e52 100644 --- a/backend/src/main/java/de/szut/casino/slots/SlotService.java +++ b/backend/src/main/java/de/szut/casino/slots/SlotService.java @@ -33,6 +33,7 @@ public class SlotService { this.thirdReel = shuffleReel(reelStrip); } + public SpinResult spin(BigDecimal betAmount, UserEntity user) { int index1 = this.random.nextInt(REEL_LENGTH); int index2 = this.random.nextInt(REEL_LENGTH); @@ -42,31 +43,36 @@ public class SlotService { Symbol symbol2 = getSymbolAt(this.secondReel, index2); Symbol symbol3 = getSymbolAt(this.thirdReel, index3); - boolean isWin = symbol1.equals(symbol2) && symbol1.equals(symbol3); + Status status = determineStatus(symbol1, symbol2, symbol3); - SpinResult spinResult = processResult(betAmount, user, isWin, symbol1); + SpinResult spinResult = processResult(betAmount, user, status, symbol1); buildResultMatrix(spinResult, index1, index2, index3); return spinResult; } - private SpinResult processResult(BigDecimal betAmount, UserEntity user, boolean isWin, Symbol winSymbol) { - BigDecimal resultAmount; - String status; - - if (isWin) { - resultAmount = betAmount.multiply(winSymbol.getPayoutMultiplier()); - status = "win"; - this.balanceService.addFunds(user, resultAmount); - } else { - resultAmount = betAmount; - status = "lose"; - this.balanceService.subtractFunds(user, betAmount); - } - + private SpinResult processResult(BigDecimal betAmount, UserEntity user, Status status, Symbol winSymbol) { SpinResult spinResult = new SpinResult(); - spinResult.setStatus(status); - spinResult.setAmount(resultAmount); + + switch (status) { + case WIN: + BigDecimal winAmount = betAmount.multiply(winSymbol.getPayoutMultiplier()); + this.balanceService.addFunds(user, winAmount); + spinResult.setAmount(winAmount); + spinResult.setStatus(Status.WIN.name().toLowerCase()); + break; + + case BLANK: + spinResult.setAmount(BigDecimal.ZERO); + spinResult.setStatus(Status.BLANK.name().toLowerCase()); + break; + + case LOSE: + this.balanceService.subtractFunds(user, betAmount); + spinResult.setAmount(betAmount); + spinResult.setStatus(Status.LOSE.name().toLowerCase()); + break; + } return spinResult; } @@ -124,4 +130,18 @@ public class SlotService { return reel.get(effectiveIndex); } + + private Status determineStatus(Symbol symbol1, Symbol symbol2, Symbol symbol3) { + boolean allSymbolsMatch = symbol1.equals(symbol2) && symbol1.equals(symbol3); + + if (allSymbolsMatch) { + if (symbol1 == Symbol.BLANK) { + return Status.BLANK; + } else { + return Status.WIN; + } + } + + return Status.LOSE; + } } diff --git a/backend/src/main/java/de/szut/casino/slots/Status.java b/backend/src/main/java/de/szut/casino/slots/Status.java new file mode 100644 index 0000000..c53611f --- /dev/null +++ b/backend/src/main/java/de/szut/casino/slots/Status.java @@ -0,0 +1,7 @@ +package de.szut.casino.slots; + +public enum Status { + WIN, + LOSE, + BLANK +}