diff --git a/backend/uno-game-engine/types.d.ts b/backend/src/types.d.ts similarity index 87% rename from backend/uno-game-engine/types.d.ts rename to backend/src/types.d.ts index 7c281f2..832d640 100644 --- a/backend/uno-game-engine/types.d.ts +++ b/backend/src/types.d.ts @@ -13,3 +13,8 @@ type UNOCard = { value: CardValue; id: undefined; }; + +type Player = { + id: string; + cards: UNOCard[]; +}; diff --git a/backend/uno-game-engine/engine.js b/backend/uno-game-engine/engine.ts similarity index 74% rename from backend/uno-game-engine/engine.js rename to backend/uno-game-engine/engine.ts index cac5e3a..2af035d 100644 --- a/backend/uno-game-engine/engine.js +++ b/backend/uno-game-engine/engine.ts @@ -1,7 +1,17 @@ import { getShuffledCardDeck } from './deck'; const NUM_CARDS_PER_PLAYER = 7; + export class GameEngine { + cardDeck: UNOCard[]; + thrownCards: UNOCard[]; + players: Player[]; + currentPlayerIndex: number; + lastThrownCard: UNOCard | null; + currentColor: number; + direction: number; + status: 'READY' | 'STARTED'; + constructor() { this.cardDeck = getShuffledCardDeck(); this.thrownCards = []; @@ -18,12 +28,12 @@ export class GameEngine { throw new Error('Not enough cards to distribute'); } - this.players = this.players.map((player) => { + this.players = this.players.map((player: Player) => { player.cards = this.cardDeck.splice(0, NUM_CARDS_PER_PLAYER); return player; }); } - addPlayer(player) { + addPlayer(player: Player) { this.players.push(player); } startGame() { @@ -36,10 +46,10 @@ export class GameEngine { this.currentPlayerIndex = (this.currentPlayerIndex + this.direction) % this.players.length; } - drawCardFromDeck(player) { + 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) => p.id === player.id) + .find((p: Player) => p.id === player.id) .cards.push(this.cardDeck.pop()); } }