I wrote some Javascript code to create a very simple card dealer for a homework assignment.
In essence, you click a button to draw 5 cards from an array of 52 cards (in this case it had to be 52 card objects), and those 5 cards get displayed like this:
- 7 of Clubs
- 6 of Spades
- 7 of Hearts
- 10 of Spades
- 10 of Spades
The part I can’t seem to figure out though is that each card in the array needs to be unique and as you can see in my example which I took from the output of my code, there are duplicates.
I don’t quite know how to go about filling the array with 52 unique card objects, i.e every combination of suits and values.
Here is my code:
<head>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
</head>
<body>
<h1>Robo Dealer</h1>
<button onclick="dealHand();">Deal Hand</button>
<hr />
<div id="card_hand"></div>
<script>
// Declaring arrays for suits and values
const suits = ["Hearts", "Spades", "Clubs", "Diamonds"];
const values = ["Ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"];
// Creating the card object
class Card {
constructor(suit, value) {
this.suit = suit;
this.value = value;
}
}
const deck = [];
function createDeck() {
for (i = 0; i < suits.length; i++) {
for (j = 0; j < values.length; j++) {
const card = { value: values[j], suit: suits[i] };
deck.push(card);
}
}
return deck;
}
var hand = new Array();
function getDeck() {
for (i = 0; i < 5; i++) {
let x = Math.floor(Math.random() * 52);
hand.push(deck[x]);
}
return hand;
}
// Dealing hand of 5 card objects / outputting it to HTML
const dealHand = () => {
let callCreateDeck = createDeck();
let callGetDeck = getDeck();
let str = "";
for (i = 0; i < hand.length; i++) {
let obj = hand[i];
str += `- ${obj["value"]} of ${obj["suit"]} <br> `;
$("#card_hand").html(str);
}
return false; // prevent page reload
};
</script>
</body>
Additionally, whenever the button is clicked, another set of 5 cards is drawn and I would like to make it so that when the button is clicked while a set of 5 cards is already being displayed, those cards get cleared/ replaced by the new set of cards and you can only draw more cards until there are no more remaining cards.
2
Answers
You are not removing the drawn card from the deck you are only adding it to your hand.
You can copy your deck each time you draw cards and remove each drawn card from the copy of the deck using the
temporaray_deck.splice(x, 1)
function, which will remove the object at indexx
from thetemporary_deck
. The 2nd parameter just tells it to remove that amount of elements in this case 1.