Skip to content

Commit

Permalink
backend/engine.js
Browse files Browse the repository at this point in the history
Fixed the card drawing logic which would also manage moving thrown cards to deck

Fixes:#8
  • Loading branch information
Abhishek committed Jun 1, 2024
1 parent f05595c commit 771b615
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions backend/uno-game-engine/engine.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { getShuffledCardDeck } from './deck';
import { handleEvent } from './gameEvents';

import { shuffle } from './deck';
const NUM_CARDS_PER_PLAYER = 7;

export class GameEngine {
Expand All @@ -21,7 +21,6 @@ export class GameEngine {
this.lastThrownCard = null;
this.currentColor = 0;
this.direction = 1;

this.status = 'READY';
}
allotCards() {
Expand All @@ -48,10 +47,24 @@ export class GameEngine {
(this.currentPlayerIndex + this.direction) % this.players.length;
}
drawCardFromDeck(player: Player) {
//todo: Handle the case when the deck is empty and we have to move the thrown cards back to the deck
this.players
.find((p: Player) => p.id === player.id)
.cards.push(this.cardDeck.pop());
if (this.cardDeck.length === 0) {
if (this.thrownCards.length === 0) {
throw new Error('No cards left to draw');
}
// Move thrown cards back to the deck
this.cardDeck = this.thrownCards;
this.thrownCards = [];
// Shuffle the deck
shuffle(this.cardDeck); // using function defined in deck.ts
}

// Draw a card for the player
const drawnCard = this.cardDeck.pop();
if (drawnCard) {
this.players.find((p) => p.id === player.id)?.cards.push(drawnCard);
} else {
throw new Error('Failed to draw a card');
}
}
dispatchEvent(event: GameEvent) {
// handle different types of events based on event.type
Expand Down

0 comments on commit 771b615

Please sign in to comment.