All checks were successful
CI / Get Changed Files (pull_request) Successful in 14s
CI / eslint (pull_request) Has been skipped
Label PRs based on size / Check PR size (pull_request) Successful in 13s
CI / oxlint (pull_request) Has been skipped
CI / Backend Tests (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / Checkstyle Main (pull_request) Has been skipped
CI / test-build (pull_request) Has been skipped
Pull Request Labeler / labeler (pull_request_target) Successful in 8s
CI / Docker frontend validation (pull_request) Has been skipped
CI / Docker backend validation (pull_request) Has been skipped
CI / Playwright (pull_request) Has been skipped
Build docs / build-docs (pull_request) Successful in 26s
Claude PR Review / claude-code (pull_request) Successful in 4m32s
41 lines
No EOL
2.8 KiB
TeX
41 lines
No EOL
2.8 KiB
TeX
\section{Coinflip}
|
|
|
|
\subsection{Was ist Coinflip?}
|
|
Das Münzwurf-Spiel 'Coinflip' ist ein klassisches Glücksspiel, das in seiner digitalen Umsetzung den traditionellen Münzwurf simuliert. Das Spiel basiert auf dem einfachen Prinzip einer Münze mit zwei Seiten: Kopf und Zahl. Spieler setzen auf eine der beiden Seiten und haben eine 50\%-ige Gewinnchance. Die Einfachheit des Spiels macht es zu einem idealen Einstiegsspiel für neue Nutzer der Casino-Plattform.
|
|
|
|
Im Gegensatz zu komplexeren Spielen wie Dice bietet Coinflip eine feste Gewinnwahrscheinlichkeit von 50\% und einen konstanten Multiplikator von 2x. Dies bedeutet, dass Spieler bei einem Gewinn ihren Einsatz verdoppeln, während sie bei einer Niederlage ihren gesamten Einsatz verlieren.
|
|
|
|
\subsubsection{Zufallszahlengenerierung}
|
|
Die Implementierung verwendet die Standardklasse java.util.Random zur Generierung des Münzwurfs.
|
|
Die Zufallsgenerierung erzeugt einen booleschen Wert, der anschließend einer der beiden Münzseiten zugeordnet wird.
|
|
Diese binäre Entscheidung gewährleistet die faire 50:50-Verteilung, die für ein authentisches Münzwurf-Erlebnis erforderlich ist.
|
|
|
|
\subsubsection{Spielablauf und Datenfluss}
|
|
|
|
Der Spielablauf von Coinflip folgt einem strukturierten Datenfluss zwischen Frontend und Backend. Der Controller empfängt die Spielanfrage mit folgenden Parametern:
|
|
|
|
\begin{itemize}
|
|
\item \textbf{Einsatz:} Der gesetzte Münzbetrag.
|
|
\item \textbf{Gewählte Seite:} Die vom Spieler gewählte Münzseite (Kopf oder Zahl).
|
|
\end{itemize}
|
|
|
|
Nach dem Erhalt der Anfrage führt der Controller eine Guthabenprüfung durch. Bei ausreichendem Guthaben wird die Anfrage an die Service-Schicht weitergeleitet, andernfalls wird eine entsprechende Fehlermeldung zurückgegeben.
|
|
|
|
Die Service-Klasse verarbeitet die Spiellogik in folgender Reihenfolge:
|
|
\begin{enumerate}
|
|
\item Abbuchung des Einsatzes vom Spielerkonto.
|
|
\item Generierung des zufälligen Münzwurfs (Kopf oder Zahl).
|
|
\item Vergleich zwischen gewählter Seite und Wurfergebnis.
|
|
\item Bei einem Gewinn: Gutschrift des doppelten Einsatzes auf das Spielerkonto.
|
|
\item Rückgabe des Spielergebnisses an das Frontend.
|
|
\end{enumerate}
|
|
|
|
Das Spielergebnis wird strukturiert an das Frontend übermittelt und enthält:
|
|
\begin{itemize}
|
|
\item Gewinnstatus (gewonnen/verloren)
|
|
\item Auszahlungsbetrag (bei Gewinn: 2x Einsatz)
|
|
\item Geworfene Münzseite
|
|
\end{itemize}
|
|
|
|
\subsubsection{Implementierungsdetails}
|
|
Die vollständige Implementierung der Coinflip-Funktionalität umfasst verschiedene Architekturschichten: Das Angular Frontend-Component (siehe \ref{app:FrontendComponent}), den Spring Boot REST Controller (siehe \ref{app:ControllerSchicht}) und die Service-Schicht mit der Geschäftslogik (siehe \ref{app:ServiceSchicht}). Zusätzlich wird die Benutzer-Entity (siehe \ref{app:PersistierungSchicht}) für die Guthaben-Verwaltung verwendet. |