Skip to content

Commit

Permalink
deck: completed function to create and shuffle a UNO card deck.
Browse files Browse the repository at this point in the history
    - added black as a color in CardColor in types.d.ts
    - separated the values of special cards and wild cards into two arrays named specialValues and wildCardValues, respectively.
    - Iterates over each color in the colors array.
      For each color:
      * Iterates over each number value (0 to 9) in the numValues array and adds two cards of that color for each number, except for '0' where only one card is added.
      * Iterates over each special value in the specialValues array and adds two cards of that color for each special value.
      * If the color is 'black', iterates over each wild card value in the wildCardValue array and adds four cards of that color for each wild card value.
  • Loading branch information
sethdivyansh committed May 31, 2024
1 parent 61e81e7 commit dfc712b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 13 deletions.
42 changes: 30 additions & 12 deletions backend/uno-game-engine/deck.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const colors: Array<CardColor> = ['red', 'yellow', 'green', 'blue'];
const values = [
const numValues: Array<CardNumbers> = [
'0',
'1',
'2',
Expand All @@ -10,12 +10,10 @@ const values = [
'7',
'8',
'9',
'skip',
'reverse',
'draw2',
];
const specialCards = ['wild', 'draw4'];
const deck = [];
const specialValues: Array<SpecialCardNames> = ['skip', 'reverse', 'draw2'];
const wildCardValue: Array<SpecialCardNames> = ['colchange', 'draw4'];
const deck: Array<UNOCard> = [];

Check failure on line 16 in backend/uno-game-engine/deck.ts

View workflow job for this annotation

GitHub Actions / eslint-backend

'deck' is assigned a value but never used

/**
* In a standard UNO deck, there are 108 cards. Here's the breakdown:
Expand All @@ -41,11 +39,27 @@ const deck = [];
@returns {Array} deck - An array of 108 UNO cards.
*/
export function getShuffledCardDeck(): Array<UNOCard> {
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<UNOCard> = [];

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;
Expand All @@ -55,7 +69,11 @@ export function getShuffledCardDeck(): Array<UNOCard> {
* Helper function to make a card object.
* @returns {UNOCard} The composed UNO card.
*/
export function makeCard(type: CardType, color: CardColor, value: CardValue): UNOCard {
export function makeCard(
type: CardType,
color: CardColor,
value: CardValue
): UNOCard {
//todo: Implement unique identification of cards by assigning an id to each card
return { type, color, value, id: undefined };
}
Expand Down
2 changes: 1 addition & 1 deletion backend/uno-game-engine/types.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
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';
Expand Down

0 comments on commit dfc712b

Please sign in to comment.