Skip to content
Snippets Groups Projects
Commit 08354cd1 authored by Jonathan Vitale's avatar Jonathan Vitale
Browse files

Add code for tutorial 8

parent f02f42b8
No related branches found
Tags tutorial-8
No related merge requests found
......@@ -33,25 +33,27 @@ function drawCard(){
}
function handValue(cards){
let sum = cards.reduce(
(accumulator, item) => accumulator + item
);
let aces = cards.filter(
(item) => item === 11
).length;
/*
for (let i = 0; i < cards.length; i++){
sum = sum + cards[i];
if (cards[i] == 11){
aces++;
}
}
*/
while (sum > 21 && aces > 0){
sum = sum - 10;
aces--;
let sum = 0;
if (cards.length > 0) {
sum = cards.reduce(
(accumulator, item) => accumulator + item
);
let aces = cards.filter(
(item) => item === 11
).length;
/*
for (let i = 0; i < cards.length; i++){
sum = sum + cards[i];
if (cards[i] == 11){
aces++;
}
}
*/
while (sum > 21 && aces > 0){
sum = sum - 10;
aces--;
}
}
return sum;
}
......@@ -61,8 +63,32 @@ function resetGameState(){
gameState.hiddenCard = null;
}
function updateGUI(){
let walletElement = document.getElementById('player-wallet');
walletElement.innerHTML = gameState.playerWallet;
let ids = ['player-cards', 'dealer-cards'];
let scoreIds = ['player-score', 'dealer-score'];
for (let k = 0; k < ids.length; k++){
// clean all the cells of player's cards and dealer's cards
let table = document.getElementById(ids[k]);
let cells = table.getElementsByTagName('td');
for (let i = 0; i < cells.length; i++){
cells[i].innerHTML = '&nbsp;';
}
// set values of player's cards and dealer's cards in each cell
for (let i = 0; i < gameState.cards[k].length; i++){
cells[i].innerHTML = gameState.cards[k][i];
}
let curScore = handValue(gameState.cards[k]);
let scoreElement = document.getElementById(scoreIds[k]);
scoreElement.innerHTML = curScore;
}
}
function newGame(){
resetGameState();
updateGUI();
log('&nbsp;');
let inputBetElement = document.getElementById('player-bet-input');
inputBetElement.disabled = false;
let buttonBetElement = document.getElementById('player-bet-button');
......@@ -76,6 +102,7 @@ function newGame(){
function collectBetAndDealCards(){
gameState.currentBet = collectBet();
gameState.playerWallet -= gameState.currentBet;
let inputBetElement = document.getElementById('player-bet-input');
inputBetElement.disabled = true;
......@@ -95,95 +122,52 @@ function collectBetAndDealCards(){
}
}
let curPlayerScore = handValue(gameState.cards[0]);
let curDealerScore = handValue(gameState.cards[1]);
console.log(`Player score is ${curPlayerScore}, Dealer score is ${curDealerScore}`);
updateGUI();
let playerScoreElement = document.getElementById('player-score');
let dealerScoreElement = document.getElementById('dealer-score');
playerScoreElement.innerHTML = curPlayerScore;
dealerScoreElement.innerHTML = curDealerScore;
let curPlayerScore = handValue(gameState.cards[0]);
// check immediately that the player has blackjack
// if so, we need to pay 2.5 the bet -> end the game
if (curPlayerScore === 21){
console.log('Player has blackjack!');
gameState.playerWallet += gameState.currentBet*2.5;
return true;
log('Player has blackjack!');
payBet(2.5);
}
}
function blackjack(){
// decide the bet, collect it
gameState.currentBet = collectBet();
let buttonStay = document.getElementById('button-stay');
buttonStay.disabled = false;
let buttonHit = document.getElementById('button-hit');
buttonHit.disabled = false;
}
// we deal the first 2 cards for the player
// we deal the first 2 cards for the dealer
// one is hidden
for(let playerIndex = 0; playerIndex < gameState.cards.length; playerIndex++){
for(let cardIndex = 0; cardIndex < 2; cardIndex++){
if (cardIndex === 1 && playerIndex === 1){
gameState.hiddenCard = drawCard();
} else {
gameState.cards[playerIndex][cardIndex] = drawCard();
}
}
}
function log(message){
let logElement = document.getElementById('console-log');
logElement.innerHTML = message;
}
function hit(){
let curCard = drawCard();
gameState.cards[0].push(curCard);
let curPlayerScore = handValue(gameState.cards[0]);
let curDealerScore = handValue(gameState.cards[1]);
console.log(`Player score is ${curPlayerScore}, Dealer score is ${curDealerScore}`);
// check immediately that the player has blackjack
// if so, we need to pay 2.5 the bet -> end the game
if (curPlayerScore === 21){
console.log('Player has blackjack!');
gameState.playerWallet += gameState.currentBet*2.5;
return true;
}
// REPEAT THIS ------
// player makes a choice: hit or stand
// if player hits:
// we deal a new card to the player
// compute the new score
// if new score > 21 player loses -> end the game
// --- UNTIL THE PLAYER stands
while(curPlayerScore < 21){
let threshold = (21 - curPlayerScore) / 21;
let likelihood = Math.random();
if (likelihood < threshold){
console.log('Player hitting a new card');
let curCard = drawCard();
gameState.cards[0].push(curCard);
curPlayerScore = handValue(gameState.cards[0]);
console.log(`Player got ${curCard} and the current score is ${curPlayerScore}`);
} else {
console.log('Player is not taking any more card');
break;
}
}
updateGUI()
if (curPlayerScore > 21){
console.log(`The player has busted`);
return false;
log('Player busted!')
payBet(0);
}
}
console.log(gameState.cards[0]);
// show the hidden card of the dealer
console.log(`The hidden card of the dealer was ${gameState.hiddenCard}`);
function stay(){
let buttonStay = document.getElementById('button-stay');
buttonStay.disabled = true;
let buttonHit = document.getElementById('button-hit');
buttonHit.disabled = true;
gameState.cards[1].push(gameState.hiddenCard);
gameState.hiddenCard = null;
curDealerScore = handValue(gameState.cards[1]);
let curPlayerScore = handValue(gameState.cards[0]);
let curDealerScore = handValue(gameState.cards[1]);
console.log(`The dealer current score is ${curDealerScore}`);
updateGUI();
// REPEAT THIS -----
// If dealer has less than 17
......@@ -195,15 +179,14 @@ function blackjack(){
gameState.cards[1].push(curCard);
curDealerScore = handValue(gameState.cards[1]);
console.log(`The dealer got a score of ${curDealerScore}`);
updateGUI();
}
// if new score > 21 dealer loses ->
// need to pay the player 2 times the bet
// -> end the game
if (curDealerScore > 21){
console.log(`Dealer has busted`);
console.log(`The player wins`);
gameState.playerWallet += gameState.currentBet*2;
return true;
log(`Dealer has busted. The player wins.`);
payBet(2);
}
// we need to compare player's score with dealer's score
......@@ -211,18 +194,33 @@ function blackjack(){
// -> pay 2 times the bet
// end the game
if (curDealerScore > curPlayerScore){
console.log(`The player lost`);
return false;
log(`The player lost`);
payBet(0);
} else if (curDealerScore === curPlayerScore){
console.log(`That's a tie`);
gameState.playerWallet += gameState.currentBet;
return true
log(`That's a tie`);
payBet(1);
} else {
console.log(`The player wins`);
gameState.playerWallet += gameState.currentBet*2;
return true;
log(`The player wins`);
payBet(2);
}
}
function payBet(times){
gameState.playerWallet += gameState.currentBet*times;
updateGUI();
let buttonBetElement = document.getElementById('player-bet-button');
buttonBetElement.disabled = true;
let buttonStay = document.getElementById('button-stay');
buttonStay.disabled = true;
let buttonHit = document.getElementById('button-hit');
buttonHit.disabled = true;
let buttonRunElement = document.getElementById('button-run');
buttonRunElement.disabled = false;
}
function addEventsListeners(){
......@@ -242,5 +240,21 @@ function addEventsListeners(){
collectBetAndDealCards();
}
);
let buttonStay = document.getElementById('button-stay');
buttonStay.addEventListener(
'click',
(event) => {
stay();
}
);
let buttonHit = document.getElementById('button-hit');
buttonHit.addEventListener(
'click',
(event) => {
hit();
}
);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment