From cf79298b04e04793f89971a8ea9e8184980a20fc Mon Sep 17 00:00:00 2001
From: Phan Huy Tran
Date: Wed, 7 May 2025 14:17:41 +0200
Subject: [PATCH] feat: add blank status
---
.../de/szut/casino/slots/SlotService.java | 56 +++++++++++++------
.../java/de/szut/casino/slots/Status.java | 7 +++
2 files changed, 45 insertions(+), 18 deletions(-)
create mode 100644 backend/src/main/java/de/szut/casino/slots/Status.java
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
+}