Skip to content

Commit

Permalink
backend:engine.js-Check before Drawing card
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

Before drawing the card we check that that deck has sufficient card , if not we move thrown cards back to the deck , otherwise we draw a card and push into the cards of the current player

Fixes:#8
  • Loading branch information
Abhishek committed Jun 1, 2024
1 parent f05595c commit 9411f44
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 shuffle 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 9411f44

Please sign in to comment.