week 02 - day 03 - all cards on deck - arrays and algorithms
Closed this issue · 3 comments
All Cards on Deck!
In this project, you will use JavaScript to model a deck of playing cards. You'll also add functionality to it such as shuffling and dealing.
Shuffling Cards
Computers are notoriously bad at random numbers. This is a pretty deep and complex topic, but it's worth pointing out that most random numbers we use in computing are actually "pseudorandom". For this assignment, you will read about, then implement, a popular algorithm that shuffles the order of a finite set using JavaScript's built in Math.random()
function as a pseudorandom number generator.
Objectives
- Demonstrate usage of JavaScript objects and arrays to model resources
- Understand and implement algorithms
- Create an event-driven user interface
Requirements
- Your deck should contain 52 unique cards.
- All cards should be represented as as string such as "Ace of Hearts"
- There are four suits: "Clubs", "Diamonds", "Hearts", and "Spades".
- There are 13 ranks: "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", and "King".
You will model these in code, in any way you see fit. It may require you to experiment and try a number of techniques. There are many valid solutions. Your user interface should consist of a face down deck, and a face up "hand" of cards that have been dealt.
Read about, and implement the Fisher–Yates shuffle algorithm:
For our purposes, n
is 52
:
for i from n - 1 down to 1 do:
j = random integer (where 0 <= j <= i)
swap items[i] with items[j]
Explorer Mode
- The deck should be randomly shuffled when the page is loaded.
- Clicking on the deck should deal a single card, making it visible in the face up hand.
Adventure Mode
- Implement a way to deal cards into two or more hands
Epic Mode
- Implement the game of War
Additional Resources
A Hint on Random Numbers
This snippet will give you a random integer, z
between 0
and n
:
const z = Math.floor(Math.random() * n)
Let's break this down from the inside out:
- For this example, assume
n
is20
. - We use
Math.random()
to generate a floating-point number between0
and1
. Let's assume our random value is0.42
. - Multiply that number by
n
. If we think of this random value as a percentage, multiplying these gives us a number that is some "percentage" ofn
. Their product is8.4
, or 42% ofn
. - We use
Math.floor()
to round down to the nearest whole number, i.e.8
.
Because we're rounding down, it's impossible to get 20
. This will give us an integer between 0
and 19
. This technique is perfect for finding a "random" index in an array of length n
.
Slides
Just realized the project name does not reflect the actual project it contains. It is indeed the "all cards on deck" project.
Your homework **week 02 - day 03 - all cards on deck - arrays and algorithms ** was marked: Exceeds Expectations
“You are amazing”
— via Katherine Trammell