JSFiddle - React, Tailwind, and code Playground

by willbuck

JavaScript

// Card Constructor
var Card = function(suit, number) {
    var thisCard = {};
    thisCard.getSuit = function() {
        return suit;
    };
    thisCard.getNumber = function() {
        return number;
    };
    thisCard.getValue = function() {
        if(number === 1) {
            return 11; // an Ace
        } else if (number > 9) {
            return 10; // face cards
        } else {
            return number;
        }
    };
    return thisCard;
};

// UTILITIES
var randomInt = function(max) {
    return Math.ceil(Math.random()*max);           
};
var deal = function() {
    var suit = randomInt(4);
    var number = randomInt(13);
    return Card(suit, number);
};

// HAND CONSTRUCTOR
var Hand = function() {
    var cards = [];
    cards.push(deal());
    cards.push(deal());
    
    var thisHand = {};
    thisHand.getHand = function() {
        return cards;    
    };
    thisHand.score = function() {
        var sum = 0, numAces = 0, i = 0;
        console.log("Scoring Hand");
        for(card in cards) {
            if(card.getValue() === 11) {
                numAces++;
            }
            sum += card.getValue();
        }        
        for(i; i<numAces; i++) {
            if(sum >21) {
                sum -= 10;
            }        
        }        
        return sum;
    };
    thisHand.printHand = function() {
        var handString = '';
        console.log("Printing Hand");
        for(card in cards) {
            handString += card.getNumber() + ' of suit ' + card.getSuit();
        }
        return handString;
    };
    thisHand.hitMe = function() {
        cards.push(deal());    
    };
    
    return thisHand;
};

var playAsDealer = function() {
    var myHand = Hand();
    while(myHand.score() < 17) {
        myHand.hitMe();
    }
    return myHand;
};

var playAsUser = function() {
    var myHand = Hand();
    console.log("My hand contains: " + myHand.getHand());
    // Use confirm box to ask for hitting
    var decision =...