From 2e3054380c9de0a26f69fe7e18c02ec91b4851c7 Mon Sep 17 00:00:00 2001 From: Divyansh Seth Date: Fri, 31 May 2024 23:47:48 +0530 Subject: [PATCH] deck: completed function to create and shuffle a UNO card deck. 1. Added black to CardColor in types.d.ts. 2. Split special and wild cards into specialValues and wildCardValues arrays. 3. For each color in the colors array: - Add two cards for each number (0-9), except one card for '0'. - Add two cards for each special value. - For 'black', add four cards for each wild card value. Fixes: #1 --- backend/src/types.d.ts | 2 +- backend/uno-game-engine/deck.ts | 36 +++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/backend/src/types.d.ts b/backend/src/types.d.ts index 0ac9c89..95de1c2 100644 --- a/backend/src/types.d.ts +++ b/backend/src/types.d.ts @@ -3,7 +3,7 @@ type CardType = 'number' | 'special' | 'wild'; -type CardColor = 'red' | 'blue' | 'green' | 'yellow'; +type CardColor = 'red' | 'blue' | 'green' | 'yellow' | 'black'; type SpecialCardNames = 'skip' | 'reverse' | 'draw2' | 'draw4' | 'colchange'; type CardNumbers = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; diff --git a/backend/uno-game-engine/deck.ts b/backend/uno-game-engine/deck.ts index 8a6c19e..a6c7cda 100644 --- a/backend/uno-game-engine/deck.ts +++ b/backend/uno-game-engine/deck.ts @@ -1,5 +1,5 @@ const colors: Array = ['red', 'yellow', 'green', 'blue']; -const values = [ +const numValues: Array = [ '0', '1', '2', @@ -10,12 +10,10 @@ const values = [ '7', '8', '9', - 'skip', - 'reverse', - 'draw2', ]; -const specialCards = ['wild', 'draw4']; -const deck = []; +const specialValues: Array = ['skip', 'reverse', 'draw2']; +const wildCardValue: Array = ['colchange', 'draw4']; +const deck: Array = []; const sameCardCount = []; // to keep track of same cards in assigning unique id to each card /** @@ -42,11 +40,27 @@ const sameCardCount = []; // to keep track of same cards in assigning unique id @returns {Array} deck - An array of 108 UNO cards. */ export function getShuffledCardDeck(): Array { - const deck = []; - // todo: Implement the card generation logic - // dummy code: - // deck.push(makeCard('special', 'wild', 'wild')) - // deck.push(makeCard('number', 'red', '0')) + const deck: Array = []; + + colors.forEach((color) => { + numValues.forEach((value) => { + deck.push(makeCard('number', color, value)); + if (value !== '0') { + deck.push(makeCard('number', color, value)); + } + }); + specialValues.forEach((value) => { + deck.push(makeCard('special', color, value)); + deck.push(makeCard('special', color, value)); + }); + if (color === 'black') { + wildCardValue.forEach((value) => { + for (let i = 0; i < 4; i++) { + deck.push(makeCard('wild', color, value)); + } + }); + } + }); shuffle(deck); return deck;