Code covered by the BSD License  

Highlights from
Blackjack

from Blackjack by Michael Iori
Fully functional blackjack simulator

ShuffleCards(NumDecks)
function ShuffleCards(NumDecks)
%This function takes the number of decks needed as an input, and outputs a
%structure named Cards that contains the value (a number from 1 to 10),
%rank (1 number from 1 to 13), and suit (the character c, h, s or d).
%Value and Rank are different because in blackjack, Jacks, Queens and Kings
%are all worth the same (i.e. Their rank would be 11, 12, or 13, but their
%value is always 10).

%Initialize variables
global CARDS
CARDS.Rank = randperm(52*NumDecks);
CARDS.CardCount(1:13)=0;

for n = 1:(52*NumDecks)
    %This sets the card's suit based on the original number's remainder
    %when dividing by 4 -> 0 is clubs, 1 is hearts, 2 is spades, 3 is
    %diamonds.
    switch mod(CARDS.Rank(n), 4)
        case 0
            CARDS.Suit(n) = 'c';
        case 1
            CARDS.Suit(n) = 'h';
        case 2
            CARDS.Suit(n) = 's';
        case 3
            CARDS.Suit(n) = 'd';
        otherwise
            fprintf('%s\n','CARDS.Suit error');
            CARDS.Suit(n) = 'x';
    end

    %This sets the card's value such that the first 1/13th of the numbers = 1 (ace),
    %next 1/13th of numbers = 2, etc.  Also, 11 = Jack, 12 = Queen, 13 = King.
    %It is stored in matrix CardArray.
    if (CARDS.Rank(n) <= 1*NumDecks*4)
        CARDS.Rank(n) = 1;
        CARDS.Value(n) = 1;
        CARDS.CardCount(1)= CARDS.CardCount(1) + 1;
    elseif (CARDS.Rank(n) <= 2*NumDecks*4)
        CARDS.Rank(n) = 2;
        CARDS.Value(n) = 2;
        CARDS.CardCount(2) = CARDS.CardCount(2) + 1;
    elseif (CARDS.Rank(n) <= 3*NumDecks*4)
        CARDS.Rank(n) = 3;
        CARDS.Value(n) = 3;
        CARDS.CardCount(3) = CARDS.CardCount(3) + 1;
    elseif (CARDS.Rank(n) <= 4*NumDecks*4)
        CARDS.Rank(n) = 4;
        CARDS.Value(n) = 4;
        CARDS.CardCount(4) = CARDS.CardCount(4) + 1;
    elseif (CARDS.Rank(n) <= 5*NumDecks*4)
        CARDS.Rank(n) = 5;
        CARDS.Value(n) = 5;
        CARDS.CardCount(5) = CARDS.CardCount(5) + 1;
    elseif (CARDS.Rank(n) <= 6*NumDecks*4)
        CARDS.Rank(n) = 6;
        CARDS.Value(n) = 6;
        CARDS.CardCount(6) = CARDS.CardCount(6) + 1;
    elseif (CARDS.Rank(n) <= 7*NumDecks*4)
        CARDS.Rank(n) = 7;
        CARDS.Value(n) = 7;
        CARDS.CardCount(7) = CARDS.CardCount(7) + 1;
    elseif (CARDS.Rank(n) <= 8*NumDecks*4)
        CARDS.Rank(n) = 8;
        CARDS.Value(n) = 8;
        CARDS.CardCount(8) = CARDS.CardCount(8) + 1;
    elseif (CARDS.Rank(n) <= 9*NumDecks*4)
        CARDS.Rank(n) = 9;
        CARDS.Value(n) = 9;
        CARDS.CardCount(9) = CARDS.CardCount(9) + 1;
    elseif (CARDS.Rank(n) <= 13*NumDecks*4)   %All cards worth 10
        CARDS.Value(n) = 10;
        if (CARDS.Rank(n) <= 10*NumDecks*4)
            CARDS.Rank(n) = 10;
            CARDS.CardCount(10) = CARDS.CardCount(10) + 1;
        elseif (CARDS.Rank(n) <= 11*NumDecks*4)
            CARDS.Rank(n) = 11;
            CARDS.CardCount(11) = CARDS.CardCount(11) + 1;
        elseif (CARDS.Rank(n) <= 12*NumDecks*4)
            CARDS.Rank(n) = 12;
            CARDS.CardCount(12) = CARDS.CardCount(12) + 1;
        elseif (CARDS.Rank(n) <= 13*NumDecks*4)
            CARDS.Rank(n) = 13;
            CARDS.CardCount(13) = CARDS.CardCount(13) + 1;
        end
    end
end
       

Contact us at files@mathworks.com