diff --git a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java index cca78e4..ba5e7d1 100644 --- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java +++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java @@ -23,7 +23,6 @@ public class BlackJackService { BlackJackGameEntity game = new BlackJackGameEntity(); game.setUser(user); game.setBet(betAmount); - game.setState("IN_PROGRESS"); for (int i = 0; i < 2; i++) { CardEntity playerCard = createRandomCard(game); diff --git a/frontend/src/app/feature/game/blackjack/blackjack.component.html b/frontend/src/app/feature/game/blackjack/blackjack.component.html index ae130d4..db4d698 100644 --- a/frontend/src/app/feature/game/blackjack/blackjack.component.html +++ b/frontend/src/app/feature/game/blackjack/blackjack.component.html @@ -3,23 +3,20 @@
- - - @if (gameInProgress()) { - - } + + +
diff --git a/frontend/src/app/feature/game/blackjack/blackjack.component.ts b/frontend/src/app/feature/game/blackjack/blackjack.component.ts index 174c358..4e66587 100644 --- a/frontend/src/app/feature/game/blackjack/blackjack.component.ts +++ b/frontend/src/app/feature/game/blackjack/blackjack.component.ts @@ -8,8 +8,7 @@ import { DealerHandComponent } from './components/dealer-hand/dealer-hand.compon import { PlayerHandComponent } from './components/player-hand/player-hand.component'; import { GameControlsComponent } from './components/game-controls/game-controls.component'; import { GameInfoComponent } from './components/game-info/game-info.component'; -import { Card, BlackjackGame } from './models/blackjack.model'; -import { BlackjackService } from './services/blackjack.service'; +import { Card } from './models/card.model'; @Component({ selector: 'app-blackjack', @@ -29,14 +28,16 @@ import { BlackjackService } from './services/blackjack.service'; export default class BlackjackComponent { private router = inject(Router); private userService = inject(UserService); - private blackjackService = inject(BlackjackService); - dealerCards = signal([]); - playerCards = signal([]); - currentBet = signal(0); + dealerCards: Card[] = [ + { value: '2', suit: '♥', hidden: false }, + { value: '3', suit: '♦', hidden: false }, + { value: 'B', suit: '□', hidden: true }, + ]; + + playerCards: Card[] = []; + currentBet = 0; balance = signal(0); - currentGameId = signal(undefined); - gameInProgress = signal(false); constructor() { this.userService.getCurrentUser().subscribe((user) => { @@ -44,65 +45,19 @@ export default class BlackjackComponent { }); } - private updateGameState(game: BlackjackGame) { - console.log('Game state update:', game); - this.currentGameId.set(game.id); - this.currentBet.set(game.bet); - this.gameInProgress.set(game.state === 'IN_PROGRESS'); - - this.dealerCards.set( - game.dealerCards.map((card, index) => ({ - ...card, - hidden: index === 1 && game.state === 'IN_PROGRESS', - })) - ); - - this.playerCards.set( - game.playerCards.map((card) => ({ - ...card, - hidden: false, - })) - ); - } - - onNewGame(bet: number): void { - this.blackjackService.startGame(bet).subscribe({ - next: (game) => { - this.updateGameState(game); - }, - error: (error) => { - console.error('Failed to start game:', error); - }, - }); - } - onHit(): void { - if (!this.currentGameId()) return; - - this.blackjackService.hit(this.currentGameId()!).subscribe({ - next: (game) => { - this.updateGameState(game); - }, - error: (error) => { - console.error('Failed to hit:', error); - }, - }); + // Implementation for hit action } onStand(): void { - if (!this.currentGameId()) return; - - this.blackjackService.stand(this.currentGameId()!).subscribe({ - next: (game) => { - this.updateGameState(game); - }, - error: (error) => { - console.error('Failed to stand:', error); - }, - }); + // Implementation for stand action } leaveGame(): void { this.router.navigate(['/home']); } + + onNewGame(): void { + // Implementation for new game + } } diff --git a/frontend/src/app/feature/game/blackjack/components/dealer-hand/dealer-hand.component.ts b/frontend/src/app/feature/game/blackjack/components/dealer-hand/dealer-hand.component.ts index 89517a1..6b8cdce 100644 --- a/frontend/src/app/feature/game/blackjack/components/dealer-hand/dealer-hand.component.ts +++ b/frontend/src/app/feature/game/blackjack/components/dealer-hand/dealer-hand.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { CommonModule } from '@angular/common'; import { PlayingCardComponent } from '../playing-card/playing-card.component'; -import { Card } from '../../models/blackjack.model'; +import { Card } from '../../models/card.model'; @Component({ selector: 'app-dealer-hand', @@ -12,19 +12,12 @@ import { Card } from '../../models/blackjack.model';

Croupier's Karten

- @if (cards.length > 0) { - @for (card of cards; track card) { - - } - } @else { -
- Warte auf Spielstart... -
- } +
diff --git a/frontend/src/app/feature/game/blackjack/components/game-info/game-info.component.ts b/frontend/src/app/feature/game/blackjack/components/game-info/game-info.component.ts index e35bf73..8f9d532 100644 --- a/frontend/src/app/feature/game/blackjack/components/game-info/game-info.component.ts +++ b/frontend/src/app/feature/game/blackjack/components/game-info/game-info.component.ts @@ -1,19 +1,10 @@ -import { - ChangeDetectionStrategy, - Component, - EventEmitter, - Input, - OnChanges, - Output, - SimpleChanges, -} from '@angular/core'; +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import { CommonModule, CurrencyPipe } from '@angular/common'; -import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; @Component({ selector: 'app-game-info', standalone: true, - imports: [CommonModule, CurrencyPipe, ReactiveFormsModule], + imports: [CommonModule, CurrencyPipe], template: `

Spiel Informationen

@@ -28,112 +19,14 @@ import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angula {{ currentBet | currency: 'EUR' }}
- - @if (!gameInProgress) { -
- - - - -
- } - -
-
- - - @if (betForm.get('bet')?.errors?.['required'] && betForm.get('bet')?.touched) { - Bitte geben Sie einen Einsatz ein - } - @if (betForm.get('bet')?.errors?.['min'] && betForm.get('bet')?.touched) { - Mindestens 1€ setzen - } - @if (betForm.get('bet')?.errors?.['max'] && betForm.get('bet')?.touched) { - Nicht genügend Guthaben - } -
- -
+ `, changeDetection: ChangeDetectionStrategy.OnPush, }) -export class GameInfoComponent implements OnChanges { +export class GameInfoComponent { @Input() balance = 0; @Input() currentBet = 0; - @Input() gameInProgress = false; - @Output() newGame = new EventEmitter(); - - betForm: FormGroup; - - constructor(private fb: FormBuilder) { - this.betForm = this.fb.group({ - bet: ['', [Validators.required, Validators.min(1)]], - }); - } - - ngOnChanges(changes: SimpleChanges): void { - if (changes['balance']) { - this.betForm - .get('bet') - ?.setValidators([Validators.required, Validators.min(1), Validators.max(this.balance)]); - this.betForm.get('bet')?.updateValueAndValidity(); - } - } - - setBetAmount(percentage: number) { - const betAmount = Math.floor(this.balance * percentage * 100) / 100; - if (betAmount >= 1) { - this.betForm.patchValue({ bet: betAmount }); - } - } - - onSubmit() { - if (this.betForm.valid) { - const betAmount = parseFloat(this.betForm.value.bet); - if (betAmount <= this.balance) { - this.newGame.emit(betAmount); - this.betForm.reset(); - } - } - } + @Output() newGame = new EventEmitter(); } diff --git a/frontend/src/app/feature/game/blackjack/components/player-hand/player-hand.component.ts b/frontend/src/app/feature/game/blackjack/components/player-hand/player-hand.component.ts index e158f67..2dc50c0 100644 --- a/frontend/src/app/feature/game/blackjack/components/player-hand/player-hand.component.ts +++ b/frontend/src/app/feature/game/blackjack/components/player-hand/player-hand.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { CommonModule } from '@angular/common'; import { PlayingCardComponent } from '../playing-card/playing-card.component'; -import { Card } from '../../models/blackjack.model'; +import { Card } from '../../models/card.model'; @Component({ selector: 'app-player-hand', @@ -14,19 +14,12 @@ import { Card } from '../../models/blackjack.model';
- @if (cards.length > 0) { - @for (card of cards; track card) { - - } - } @else { -
- Platziere eine Wette um zu spielen... -
- } +
diff --git a/frontend/src/app/feature/game/blackjack/components/playing-card/playing-card.component.ts b/frontend/src/app/feature/game/blackjack/components/playing-card/playing-card.component.ts index 186ac9b..dc93df8 100644 --- a/frontend/src/app/feature/game/blackjack/components/playing-card/playing-card.component.ts +++ b/frontend/src/app/feature/game/blackjack/components/playing-card/playing-card.component.ts @@ -1,6 +1,5 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { suitSymbols, Suit } from '../../models/blackjack.model'; @Component({ selector: 'app-playing-card', @@ -11,49 +10,21 @@ import { suitSymbols, Suit } from '../../models/blackjack.model'; class="w-24 h-36 rounded-lg p-2 relative flex flex-col justify-between shadow-lg" [class]="hidden ? 'bg-red-800' : 'bg-white'" > - @if (!hidden) { - {{ getDisplayRank(rank) }} - } - @if (!hidden) { - {{ getSuitSymbol(suit) }} - } - @if (!hidden) { - {{ - getDisplayRank(rank) - }} - } + {{ value }} + {{ suit }} + {{ + value + }} `, changeDetection: ChangeDetectionStrategy.OnPush, }) export class PlayingCardComponent { - @Input({ required: true }) rank!: string; - @Input({ required: true }) suit!: Suit; + @Input({ required: true }) value!: string; + @Input({ required: true }) suit!: string; @Input({ required: true }) hidden!: boolean; - - protected getSuitSymbol(suit: Suit): string { - return suitSymbols[suit]; - } - - protected getDisplayRank(rank: string): string { - const rankMap: Record = { - TWO: '2', - THREE: '3', - FOUR: '4', - FIVE: '5', - SIX: '6', - SEVEN: '7', - EIGHT: '8', - NINE: '9', - TEN: '10', - JACK: 'J', - QUEEN: 'Q', - KING: 'K', - ACE: 'A', - }; - return rankMap[rank] || rank; - } } diff --git a/frontend/src/app/feature/game/blackjack/models/blackjack.model.ts b/frontend/src/app/feature/game/blackjack/models/blackjack.model.ts deleted file mode 100644 index 55f2ee1..0000000 --- a/frontend/src/app/feature/game/blackjack/models/blackjack.model.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type Suit = 'HEARTS' | 'DIAMONDS' | 'CLUBS' | 'SPADES'; - -export interface Card { - suit: Suit; - rank: string; - hidden: boolean; -} - -export interface BlackjackGame { - id: number; - state: string; - bet: number; - playerCards: Card[]; - dealerCards: Card[]; - userId: number; -} - -export const suitSymbols: Record = { - HEARTS: '♥', - DIAMONDS: '♦', - CLUBS: '♣', - SPADES: '♠', -}; diff --git a/frontend/src/app/feature/game/blackjack/services/blackjack.service.ts b/frontend/src/app/feature/game/blackjack/services/blackjack.service.ts deleted file mode 100644 index 86ab7cf..0000000 --- a/frontend/src/app/feature/game/blackjack/services/blackjack.service.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Injectable, inject } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable, catchError } from 'rxjs'; -import { BlackjackGame } from '../models/blackjack.model'; - -@Injectable({ - providedIn: 'root', -}) -export class BlackjackService { - private http = inject(HttpClient); - - startGame(bet: number): Observable { - return this.http - .post('/backend/blackjack/start', { betAmount: bet }, { responseType: 'json' }) - .pipe( - catchError((error) => { - console.error('Start game error:', error); - throw error; - }) - ); - } - - hit(gameId: number): Observable { - return this.http - .post(`/backend/blackjack/${gameId}/hit`, {}, { responseType: 'json' }) - .pipe( - catchError((error) => { - console.error('Hit error:', error); - throw error; - }) - ); - } - - stand(gameId: number): Observable { - return this.http - .post(`/backend/blackjack/${gameId}/stand`, {}, { responseType: 'json' }) - .pipe( - catchError((error) => { - console.error('Stand error:', error); - throw error; - }) - ); - } -}