E. Final Program with Comments


Blackjack


function varargout = Blackjack(varargin)
% BLACKJACK MATLAB code for Blackjack.fig
%      BLACKJACK, by itself, creates a new BLACKJACK or raises the existing
%      singleton*.
%
%      H = BLACKJACK returns the handle to a new BLACKJACK or the handle to
%      the existing singleton*.
%
%      BLACKJACK('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in BLACKJACK.M with the given input arguments.
%
%      BLACKJACK('Property','Value',...) creates a new BLACKJACK or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Blackjack_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Blackjack_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Blackjack

% Last Modified by GUIDE v2.5 27-Nov-2018 21:10:54

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Blackjack_OpeningFcn, ...
                   'gui_OutputFcn',  @Blackjack_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
end

% --- Executes just before Blackjack is made visible.
function Blackjack_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Blackjack (see VARARGIN)
% Choose default command line output for Blackjack
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

%Sets the GUI to its initial state, the Play Game screen
set(handles.message,'Visible','Off'); 
set(handles.messagePanel,'Visible','Off');
set(handles.pWalletText,'Visible','Off');
set(handles.pBetText,'Visible','Off');
set(handles.resultsText,'Visible','Off');
set(handles.newWalletText,'Visible','Off');
set(handles.newBetText,'Visible','Off');
set(handles.currentBet2,'Visible','Off');
set(handles.pTotalMoney,'Visible','Off');
set(handles.resultMsg,'Visible','Off');
set(handles.pBetVal,'Visible','Off');
set(handles.curWalletVal,'Visible','Off');
set(handles.continueButton,'Visible','Off');
set(handles.totalWallet,'Visible','Off');
set(handles.soundVal,'Visible','Off');

%Ensures the user's choice for sound carries thoughout the program
global var;
var.soundOn = 0;

% UIWAIT makes Blackjack wait for user response (see UIRESUME)
% uiwait(handles.figure1);


end

% --- Outputs from this function are returned to the command line.
function varargout = Blackjack_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;
end

% --- Executes on button press in pushbutton1.
%Executes if the "Hit" button is presses
%Gives the user another card
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global var;
%Reads the current global wallet for betting
var.wallet = str2double(get(handles.totalWallet,'String'));
ListBoxString = get(handles.listbox2,'String');
ListBoxValue = get(handles.listbox2,'Value');

%The current bet the user placed
if(find(strcmp(ListBoxString,'$0')) == ListBoxValue)
    set(handles.pBetVal,'String','$0');
    var.currentBet = 0;
elseif(find(strcmp(ListBoxString,'$1')) == ListBoxValue)
    set(handles.pBetVal,'String','$1');
    var.currentBet = 1;
elseif(find(strcmp(ListBoxString,'$3')) == ListBoxValue)
    set(handles.pBetVal,'String','$3');
    var.currentBet = 3;
elseif(find(strcmp(ListBoxString,'$5')) == ListBoxValue)
    set(handles.pBetVal,'String','$5');
    var.currentBet = 5;
elseif(find(strcmp(ListBoxString,'$10')) == ListBoxValue)
    set(handles.pBetVal,'String','$10');
    var.currentBet = 10;
elseif(find(strcmp(ListBoxString,'$20')) == ListBoxValue)
    set(handles.pBetVal,'String','$20');
    var.currentBet = 20;
elseif(find(strcmp(ListBoxString,'All-in')) == ListBoxValue)
    set(handles.pBetVal,'String',strcat('$',get(handles.totalWallet,'String')));
    var.currentBet = str2double(get(handles.totalWallet,'String'));
end

%Choses a random card to add to the users cards
if var.playerSum > 21 
var.numCols = var.numCols + 1; 
randomElement = randi(length(var.availableCards)); 
%Ensures the card isn't already picked 
while var.availableCards(randomElement) == 0 
randomElement = randi(length(var.availableCards)); 
end 
%Adds the card to the users vector, and removes it from the available cards 
var.playerCards(length(var.playerCards) + 1) = var.availableCards(randomElement); 
var.dealtCards(length(var.dealtCards) + 1) = var.playerCards(length(var.playerCards)); 
var.availableCards(randomElement) = 0; 
%Displays the cards 
for i = 1:length(var.playerCards) 
imgFile = char(var.cards(var.playerCards(i))); 
img = strcat('images/',imgFile); 
axes(handles.playerSpace); 
ax = subplot(1,var.numCols,i); 
imshow(img,'Parent',ax); 
end 
%Adds the card's worth to the player's sum 
switch var.playerCards(length(var.playerCards)) 
case 1 
set(handles.message,'String','Ace Value?'); 
set(handles.message,'Visible','On'); 
set(handles.messagePanel,'Visible','On'); 
set(handles.dismissButton,'Visible','Off'); 
set(handles.oneButton,'Visible','On'); 
set(handles.elevenButton,'Visible','On'); 
case 2 
set(handles.message,'String','Ace Value?'); 
set(handles.message,'Visible','On'); 
set(handles.messagePanel,'Visible','On'); 
set(handles.dismissButton,'Visible','Off'); 
set(handles.oneButton,'Visible','On'); 
set(handles.elevenButton,'Visible','On'); 
case 3 
set(handles.message,'String','Ace Value?'); 
set(handles.message,'Visible','On'); 
set(handles.messagePanel,'Visible','On'); 
set(handles.dismissButton,'Visible','Off'); 
set(handles.oneButton,'Visible','On'); 
set(handles.elevenButton,'Visible','On'); 
case 4
set(handles.message,'String','Ace Value?'); 
set(handles.message,'Visible','On'); 
set(handles.messagePanel,'Visible','On'); 
set(handles.dismissButton,'Visible','Off'); 
set(handles.oneButton,'Visible','On'); 
set(handles.elevenButton,'Visible','On'); 
case 5 
var.playerSum = var.playerSum + 2; 
case 6 
var.playerSum = var.playerSum + 2; 
case 7 
var.playerSum = var.playerSum + 2; 
case 8 
var.playerSum = var.playerSum + 2; 
case 9 
var.playerSum = var.playerSum + 3;
case 10 
var.playerSum = var.playerSum + 3; 
case 11 
var.playerSum = var.playerSum + 3; 
case 12 
var.playerSum = var.playerSum + 3; 
case 13 
var.playerSum = var.playerSum + 4; 
case 14 
var.playerSum = var.playerSum + 4; 
case 15 
var.playerSum = var.playerSum + 4; 
case 16 
var.playerSum = var.playerSum + 4; 
case 17 
var.playerSum = var.playerSum + 5; 
case 18 
var.playerSum = var.playerSum + 5; 
case 19 
var.playerSum = var.playerSum + 5; 
case 20 
var.playerSum = var.playerSum + 5; 
case 21 
var.playerSum = var.playerSum + 6; 
case 22 
var.playerSum = var.playerSum + 6; 
case 23 
var.playerSum = var.playerSum + 6; 
case 24 
var.playerSum = var.playerSum + 6; 
case 25 
var.playerSum = var.playerSum + 7; 
case 26 
var.playerSum = var.playerSum + 7; 
case 27 
var.playerSum = var.playerSum + 7; 
case 28 
var.playerSum = var.playerSum + 7; 
case 29 
var.playerSum = var.playerSum + 8; 
case 30 
var.playerSum = var.playerSum + 8; 
case 31 
var.playerSum = var.playerSum + 8; 
case 32 
var.playerSum = var.playerSum + 8; 
case 33 
var.playerSum = var.playerSum + 9; 
case 34 
var.playerSum = var.playerSum + 9; 
case 35 
var.playerSum = var.playerSum + 9; 
case 36 
var.playerSum = var.playerSum + 9; 
case 37 
var.playerSum = var.playerSum + 10; 
case 38 
var.playerSum = var.playerSum + 10;
case 39 
var.playerSum = var.playerSum + 10; 
case 40 
var.playerSum = var.playerSum + 10; 
case 41 
var.playerSum = var.playerSum + 10; 
case 42 
var.playerSum = var.playerSum + 10; 
case 43 
var.playerSum = var.playerSum + 10; 
case 44 
var.playerSum = var.playerSum + 10; 
case 45 
var.playerSum = var.playerSum + 10; 
case 46 
var.playerSum = var.playerSum + 10; 
case 47 
var.playerSum = var.playerSum + 10; 
case 48 
var.playerSum = var.playerSum + 10; 
case 49 
var.playerSum = var.playerSum + 10; 
case 50 
var.playerSum = var.playerSum + 10; 
case 51 
var.playerSum = var.playerSum + 10; 
case 52 
var.playerSum = var.playerSum + 10; 
end 
%Sets the text element to the new sum 
set(handles.playerSum,'String',var.playerSum); 
end
%Initilizes the winner and loser audio files 
w = audioread('winner.wav'); 
l = audioread('loser.wav'); 
won = audioplayer(w,44100); 
lost = audioplayer(l,44100); 
%Converts the Sound On/Off Val to a number 
var.soundOn = str2double(get(handles.soundVal,'String')); 
%Display a message if the player went over 
if var.playerSum > 21
    set(handles.message,'String','Bust!');
    set(handles.message,'Visible','On'); 
    set(handles.messagePanel,'Visible','On');
    set(handles.dismissButton,'Visible','On');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    set(handles.resultMsg,'String','Lost','Visible','On','ForegroundColor','red');
    set(handles.pushbutton1,'Enable','off');
    set(handles.pushbutton2,'Enable','off');
    
    %If the user bet, remove it from the current wallet amount
    var.wallet = var.wallet - var.currentBet;
    set(handles.totalWallet,'String',var.wallet);
    newWallet = strcat('$',get(handles.totalWallet,'String'));
    set(handles.curWalletVal,'String',newWallet);
    if var.soundOn ~= 0
        playblocking(lost);
    end
end
end

% --- Executes on button press in pushbutton2.
%Executes if the "Stand" button is pressed
%The dealer determines whether to hit or stand
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global var;
%Wallet for betting
var.wallet = str2double(get(handles.totalWallet,'String'));
ListBoxString = get(handles.listbox2,'String');
ListBoxValue = get(handles.listbox2,'Value');

%Current bet value
if(find(strcmp(ListBoxString,'$0')) == ListBoxValue)
    set(handles.pBetVal,'String','$0');
    var.currentBet = 0;
elseif(find(strcmp(ListBoxString,'$1')) == ListBoxValue)
    set(handles.pBetVal,'String','$1');
    var.currentBet = 1;
elseif(find(strcmp(ListBoxString,'$3')) == ListBoxValue)
    set(handles.pBetVal,'String','$3');
    var.currentBet = 3;
elseif(find(strcmp(ListBoxString,'$5')) == ListBoxValue)
    set(handles.pBetVal,'String','$5');
    var.currentBet = 5;
elseif(find(strcmp(ListBoxString,'$10')) == ListBoxValue)
    set(handles.pBetVal,'String','$10');
    var.currentBet = 10;
elseif(find(strcmp(ListBoxString,'$20')) == ListBoxValue)
    set(handles.pBetVal,'String','$20');
    var.currentBet = 20;
elseif(find(strcmp(ListBoxString,'All-in')) == ListBoxValue)
    set(handles.pBetVal,'String',strcat('$',get(handles.totalWallet,'String')));
    var.currentBet = str2double(get(handles.totalWallet,'String'));
end

var.numCols = 2;
while var.dealerSum <= 17 & var.playerSum > var.dealerSum
   %Dealer wants to hit
   var.numCols = var.numCols + 1;
   randomElement = randi(length(var.availableCards));
   %Ensures the card isn't already picked
        while var.availableCards(randomElement) == 0
            randomElement = randi(length(var.availableCards));
        end
    var.dealerCards(length(var.dealerCards) + 1) = var.availableCards(randomElement);
    var.dealtCards(length(var.dealtCards) + 1) = var.dealerCards(length(var.dealerCards));
    var.availableCards(randomElement) = 0;
    %Displays all of the dealer's cards
        for k = 1:length(var.dealerCards)
            imgFile = char(var.cards(var.dealerCards(k)));
            axes(handles.dealerSpace);
            img = strcat('images/',imgFile);
            bx = subplot(1,var.numCols,k);
            imshow(img, 'Parent', bx);
        end
    %Determines the dealer sum with the new card
    switch var.dealerCards(length(var.dealerCards))
        case 1
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1;
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 2
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1; 
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 3
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1; 
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 4
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1; 
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 5 
            var.dealerSum = var.dealerSum + 2;
        case 6 
            var.dealerSum = var.dealerSum + 2;
        case 7 
            var.dealerSum = var.dealerSum + 2;
        case 8
            var.dealerSum = var.dealerSum + 2;
        case 9
            var.dealerSum = var.dealerSum + 3;
        case 10 
            var.dealerSum = var.dealerSum + 3;
        case 11
            var.dealerSum = var.dealerSum + 3;
        case 12
            var.dealerSum = var.dealerSum + 3;
        case 13
            var.dealerSum = var.dealerSum + 4;
        case 14 
            var.dealerSum = var.dealerSum + 4;
        case 15
            var.dealerSum = var.dealerSum + 4;
        case 16
            var.dealerSum = var.dealerSum + 4;
        case 17
            var.dealerSum = var.dealerSum + 5;
        case 18 
            var.dealerSum = var.dealerSum + 5;
        case 19
            var.dealerSum = var.dealerSum + 5;
        case 20
            var.dealerSum = var.dealerSum + 5;
        case 21
            var.dealerSum = var.dealerSum + 6;
        case 22 
            var.dealerSum = var.dealerSum + 6;
        case 23
            var.dealerSum = var.dealerSum + 6;
        case 24
            var.dealerSum = var.dealerSum + 6;
        case 25
            var.dealerSum = var.dealerSum + 7;
        case 26 
            var.dealerSum = var.dealerSum + 7;
        case 27
            var.dealerSum = var.dealerSum + 7;
        case 28
            var.dealerSum = var.dealerSum + 7;
        case 29
            var.dealerSum = var.dealerSum + 8;
        case 30 
            var.dealerSum = var.dealerSum + 8;
        case 31
            var.dealerSum = var.dealerSum + 8;
        case 32
            var.dealerSum = var.dealerSum + 8;
        case 33
            var.dealerSum = var.dealerSum + 9;
        case 34 
            var.dealerSum = var.dealerSum + 9;
        case 35
            var.dealerSum = var.dealerSum + 9;
        case 36
            var.dealerSum = var.dealerSum + 9;
        case 37
            var.dealerSum = var.dealerSum + 10;
        case 38
            var.dealerSum = var.dealerSum + 10;
        case 39 
            var.dealerSum = var.dealerSum + 10;
        case 40
            var.dealerSum = var.dealerSum + 10;
        case 41
            var.dealerSum = var.dealerSum + 10;
        case 42
            var.dealerSum = var.dealerSum + 10;
        case 43
            var.dealerSum = var.dealerSum + 10;
        case 44 
            var.dealerSum = var.dealerSum + 10;
        case 45
            var.dealerSum = var.dealerSum + 10;
        case 46
            var.dealerSum = var.dealerSum + 10;
        case 47
            var.dealerSum = var.dealerSum + 10;
        case 48
            var.dealerSum = var.dealerSum + 10;
        case 49 
            var.dealerSum = var.dealerSum + 10;
        case 50
            var.dealerSum = var.dealerSum + 10;
        case 51
            var.dealerSum = var.dealerSum + 10;
        case 52
            var.dealerSum = var.dealerSum + 10;    
        end
    %Sets the dealer sum value    
    set(handles.dealerSum,'String',var.dealerSum);
end

%Flips the second dealer card over 
for k = 1:2
        imgFile = char(var.cards(var.dealerCards(k)));
        axes(handles.dealerSpace);
        img = strcat('images/',imgFile);      
        bx = subplot(1,var.numCols,k);
        imshow(img, 'Parent', bx);
end
set(handles.dealerSum,'String',var.dealerSum);

%Initiates the audio files
w = audioread('winner.wav');
l = audioread('loser.wav');
won = audioplayer(w,44100);
lost = audioplayer(l,44100);

var.soundOn = str2double(get(handles.soundVal,'String'));

%Displays different messages depending if the user wins, loses, or pushes
if var.dealerSum > 21 && var.playerSum <= 21
    set(handles.message,'String','You Win!'); 
    set(handles.message,'Visible','On'); 
    set(handles.messagePanel,'Visible','On');
    set(handles.dismissButton,'Visible','On');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    set(handles.resultMsg,'String','Won','Visible','On','ForegroundColor','green');
    set(handles.pushbutton1,'Enable','off');
    set(handles.pushbutton2,'Enable','off');
    var.wallet = var.wallet + var.currentBet;
    set(handles.totalWallet,'String',var.wallet);
    newWallet = strcat('$',get(handles.totalWallet,'String'));
    set(handles.curWalletVal,'String',newWallet);
    if var.soundOn ~= 0
        playblocking(won);
    end
elseif var.dealerSum <= 21 && var.playerSum > 21
    set(handles.message,'String','Bust!');
    set(handles.message,'Visible','On'); 
    set(handles.messagePanel,'Visible','On');
    set(handles.dismissButton,'Visible','On');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    set(handles.resultMsg,'String','Lost','Visible','On','ForegroundColor','red');
    set(handles.pushbutton1,'Enable','off');
    set(handles.pushbutton2,'Enable','off');
    var.wallet = var.wallet - var.currentBet;
    set(handles.totalWallet,'String',var.wallet);
    newWallet = strcat('$',get(handles.totalWallet,'String'));
    set(handles.curWalletVal,'String',newWallet);
    if var.soundOn ~= 0
        playblocking(lost);
    end
elseif var.dealerSum == var.playerSum
    set(handles.message,'String','Push!'); 
    set(handles.message,'Visible','On'); 
    set(handles.messagePanel,'Visible','On');
    set(handles.dismissButton,'Visible','On');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    set(handles.resultMsg,'String','Push','Visible','On','ForegroundColor','white');
    set(handles.pushbutton1,'Enable','off');
    set(handles.pushbutton2,'Enable','off');
    set(handles.totalWallet,'String',var.wallet);
    newWallet = strcat('$',get(handles.totalWallet,'String'));
    set(handles.curWalletVal,'String',newWallet);
elseif var.dealerSum > var.playerSum
    set(handles.message,'String','You Lose'); 
    set(handles.message,'Visible','On'); 
    set(handles.messagePanel,'Visible','On');
    set(handles.dismissButton,'Visible','On');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    set(handles.resultMsg,'String','Lost','Visible','On','ForegroundColor','red');
    set(handles.pushbutton1,'Enable','off');
    set(handles.pushbutton2,'Enable','off');
    var.wallet = var.wallet - var.currentBet;
    set(handles.totalWallet,'String',var.wallet);
    newWallet = strcat('$',get(handles.totalWallet,'String'));
    set(handles.curWalletVal,'String',newWallet);
    if var.soundOn ~= 0
        playblocking(lost);
    end
elseif var.playerSum > var.dealerSum
    set(handles.message,'String','You Win!');
    set(handles.message,'Visible','On'); 
    set(handles.messagePanel,'Visible','On');
    set(handles.dismissButton,'Visible','On');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    set(handles.resultMsg,'String','Won','Visible','On','ForegroundColor','green');
    set(handles.pushbutton1,'Enable','off');
    set(handles.pushbutton2,'Enable','off');
    var.wallet = var.wallet + var.currentBet;
    set(handles.totalWallet,'String',var.wallet);
    newWallet = strcat('$',get(handles.totalWallet,'String'));
    set(handles.curWalletVal,'String',newWallet);
    if var.soundOn ~= 0
        playblocking(won);
    end
else
end
end

% --- Executes on button press in pushbutton4.
%Resets to the Play Game page if the "Main Menu" button is pressed
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
clear global;
set(handles.playButton,'String','Play Game','Visible','On');
set(handles.uipanel2,'Visible','On');
set(handles.totalMoney,'Visible','On');
set(handles.walletText,'Visible','On');
set(handles.currentBetText,'Visible','On');
set(handles.currentBet,'Visible','On');
set(handles.walletText,'Visible','On');
set(handles.title,'Visible','On');
set(handles.listbox2,'Visible','On');
set(handles.message,'Visible','Off'); 
set(handles.messagePanel,'Visible','Off');
set(handles.dismissButton,'Visible','Off');
set(handles.oneButton,'Visible','Off');
set(handles.elevenButton,'Visible','Off');
set(handles.info,'Visible','On');
set(handles.pushbutton1,'Enable','on');
set(handles.pushbutton2,'Enable','on');
set(handles.totalWallet,'String','50');
set(handles.pWalletText,'Visible','Off');
set(handles.pTotalMoney,'Visible','Off');
set(handles.pBetText,'Visible','Off');
set(handles.pBetVal,'Visible','Off');
set(handles.resultsText,'Visible','Off');
set(handles.resultMsg,'Visible','Off');
set(handles.newWalletText,'Visible','Off');
set(handles.curWalletVal,'Visible','Off');
set(handles.newBetText,'Visible','Off');
set(handles.currentBet2,'Visible','Off');
end


% --- Executes during object creation, after setting all properties.
%Creates the uipanel
function uipanel1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to uipanel1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
end


% --- Executes on button press in playButton.
%Initializes the game; "Play Game" button is pressed
%Generates two cards for user; two cards for dealer
%Displays the cards and initial sum
function playButton_Callback(hObject, eventdata, handles)
% hObject    handle to playButton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
clear global;
global var;
%Imports the user cards images
var.cards = importdata('cards.txt');
var.numCols = 2;
%Makes an array from 1 to 52, with each number representing a card
for i = 1:52
    var.availableCards(i) = i;
end
set(handles.pTotalMoney,'String',strcat('$',get(handles.totalWallet,'String')));
%two random initial cards for player
for j = 1:2
    randomElement = randi(length(var.availableCards));
        while var.availableCards(randomElement) == 0
            randomElement = randi(length(var.availableCards));
        end   
    var.playerCards(j) = var.availableCards(randomElement);
    var.dealtCards(j) = var.playerCards(j);
    var.availableCards(randomElement) = 0;
    imgFile = char(var.cards(var.playerCards(j)));
    %Outputs the card
    img = strcat('images/',imgFile);
    axes(handles.playerSpace);
    ax = subplot(1,var.numCols,j);
    imshow(img,'Parent',ax);
end

for k = 1:2
%two random initial cards for dealer
    randomElement = randi(length(var.availableCards));
        while var.availableCards(randomElement) == 0
            randomElement = randi(length(var.availableCards));
        end 
    var.dealerCards(k) = var.availableCards(randomElement);
    var.dealtCards(length(var.dealtCards) + 1) = var.dealerCards(k);
    var.availableCards(randomElement) = 0;
    imgFile = char(var.cards(var.dealerCards(k)));
    %Determines if the card is the first or second; hides the second
    if k == 2
        img = strcat('images/','53-back.png');
    else
        img = strcat('images/',imgFile);
    end
    axes(handles.dealerSpace);
    bx = subplot(1,var.numCols,k);
    imshow(img,'Parent',bx);
end
   

%Determines the initial sum of the players two cards
var.playerSum = 0;
var.aceHit = 0;
for m = 1:length(var.playerCards)
    switch var.playerCards(m)
        case 1
           set(handles.message,'String','Ace Value?');
           set(handles.message,'Visible','On'); 
           set(handles.messagePanel,'Visible','On');
           set(handles.dismissButton,'Visible','Off');
           set(handles.oneButton,'Visible','On');
           set(handles.elevenButton,'Visible','On');
           var.aceHit = var.aceHit + 1;
        case 2
           set(handles.message,'String','Ace Value?');
           set(handles.message,'Visible','On'); 
           set(handles.dismissButton,'Visible','Off');
           set(handles.messagePanel,'Visible','On');
           set(handles.oneButton,'Visible','On');
           set(handles.elevenButton,'Visible','On');
           var.aceHit = var.aceHit + 1;
        case 3
           set(handles.message,'String','Ace Value?');
           set(handles.message,'Visible','On'); 
           set(handles.dismissButton,'Visible','Off');
           set(handles.messagePanel,'Visible','On');
           set(handles.oneButton,'Visible','On');
           set(handles.elevenButton,'Visible','On');
           var.aceHit = var.aceHit + 1;
        case 4
          set(handles.message,'String','Ace Value?');
          set(handles.message,'Visible','On'); 
          set(handles.messagePanel,'Visible','On');
          set(handles.dismissButton,'Visible','Off');
          set(handles.oneButton,'Visible','On');
          set(handles.elevenButton,'Visible','On');
          var.aceHit = var.aceHit + 1;
        case 5 
            var.playerSum = var.playerSum + 2;
        case 6 
            var.playerSum = var.playerSum + 2;
        case 7 
            var.playerSum = var.playerSum + 2;
        case 8
            var.playerSum = var.playerSum + 2;
        case 9
            var.playerSum = var.playerSum + 3;
        case 10 
            var.playerSum = var.playerSum + 3;
        case 11
            var.playerSum = var.playerSum + 3;
        case 12
            var.playerSum = var.playerSum + 3;
        case 13
            var.playerSum = var.playerSum + 4;
        case 14 
            var.playerSum = var.playerSum + 4;
        case 15
            var.playerSum = var.playerSum + 4;
        case 16
            var.playerSum = var.playerSum + 4;
        case 17
            var.playerSum = var.playerSum + 5;
        case 18 
            var.playerSum = var.playerSum + 5;
        case 19
            var.playerSum = var.playerSum + 5;
        case 20
            var.playerSum = var.playerSum + 5;
        case 21
            var.playerSum = var.playerSum + 6;
        case 22 
            var.playerSum = var.playerSum + 6;
        case 23
            var.playerSum = var.playerSum + 6;
        case 24
            var.playerSum = var.playerSum + 6;
        case 25
            var.playerSum = var.playerSum + 7;
        case 26 
            var.playerSum = var.playerSum + 7;
        case 27
            var.playerSum = var.playerSum + 7;
        case 28
            var.playerSum = var.playerSum + 7;
        case 29
            var.playerSum = var.playerSum + 8;
        case 30 
            var.playerSum = var.playerSum + 8;
        case 31
            var.playerSum = var.playerSum + 8;
        case 32
            var.playerSum = var.playerSum + 8;
        case 33
            var.playerSum = var.playerSum + 9;
        case 34 
            var.playerSum = var.playerSum + 9;
        case 35
            var.playerSum = var.playerSum + 9;
        case 36
            var.playerSum = var.playerSum + 9;
        case 37
            var.playerSum = var.playerSum + 10;
        case 38
            var.playerSum = var.playerSum + 10;
        case 39 
            var.playerSum = var.playerSum + 10;
        case 40
            var.playerSum = var.playerSum + 10;
        case 41
            var.playerSum = var.playerSum + 10;
        case 42
            var.playerSum = var.playerSum + 10;
        case 43
            var.playerSum = var.playerSum + 10;
        case 44 
            var.playerSum = var.playerSum + 10;
        case 45
            var.playerSum = var.playerSum + 10;
        case 46
            var.playerSum = var.playerSum + 10;
        case 47
            var.playerSum = var.playerSum + 10;
        case 48
            var.playerSum = var.playerSum + 10;
        case 49 
            var.playerSum = var.playerSum + 10;
        case 50
            var.playerSum = var.playerSum + 10;
        case 51
            var.playerSum = var.playerSum + 10;
        case 52
            var.playerSum = var.playerSum + 10;    
        end
  set(handles.playerSum,'String',var.playerSum);
end

%Determines the sum of the dealers first card
var.dealerSum = 0;
for n = 1:length(var.dealerCards)
    switch var.dealerCards(n)
        case 1
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1;
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 2
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1; 
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 3
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1; 
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 4
           if var.dealerSum + 11 > 21
                var.dealerSum = var.dealerSum + 1; 
           else
               var.dealerSum = var.dealerSum + 11;
           end
        case 5 
            var.dealerSum = var.dealerSum + 2;
        case 6 
            var.dealerSum = var.dealerSum + 2;
        case 7 
            var.dealerSum = var.dealerSum + 2;
        case 8
            var.dealerSum = var.dealerSum + 2;
        case 9
            var.dealerSum = var.dealerSum + 3;
        case 10 
            var.dealerSum = var.dealerSum + 3;
        case 11
            var.dealerSum = var.dealerSum + 3;
        case 12
            var.dealerSum = var.dealerSum + 3;
        case 13
            var.dealerSum = var.dealerSum + 4;
        case 14 
            var.dealerSum = var.dealerSum + 4;
        case 15
            var.dealerSum = var.dealerSum + 4;
        case 16
            var.dealerSum = var.dealerSum + 4;
        case 17
            var.dealerSum = var.dealerSum + 5;
        case 18 
            var.dealerSum = var.dealerSum + 5;
        case 19
            var.dealerSum = var.dealerSum + 5;
        case 20
            var.dealerSum = var.dealerSum + 5;
        case 21
            var.dealerSum = var.dealerSum + 6;
        case 22 
            var.dealerSum = var.dealerSum + 6;
        case 23
            var.dealerSum = var.dealerSum + 6;
        case 24
            var.dealerSum = var.dealerSum + 6;
        case 25
            var.dealerSum = var.dealerSum + 7;
        case 26 
            var.dealerSum = var.dealerSum + 7;
        case 27
            var.dealerSum = var.dealerSum + 7;
        case 28
            var.dealerSum = var.dealerSum + 7;
        case 29
            var.dealerSum = var.dealerSum + 8;
        case 30 
            var.dealerSum = var.dealerSum + 8;
        case 31
            var.dealerSum = var.dealerSum + 8;
        case 32
            var.dealerSum = var.dealerSum + 8;
        case 33
            var.dealerSum = var.dealerSum + 9;
        case 34 
            var.dealerSum = var.dealerSum + 9;
        case 35
            var.dealerSum = var.dealerSum + 9;
        case 36
            var.dealerSum = var.dealerSum + 9;
        case 37
            var.dealerSum = var.dealerSum + 10;
        case 38
            var.dealerSum = var.dealerSum + 10;
        case 39 
            var.dealerSum = var.dealerSum + 10;
        case 40
            var.dealerSum = var.dealerSum + 10;
        case 41
            var.dealerSum = var.dealerSum + 10;
        case 42
            var.dealerSum = var.dealerSum + 10;
        case 43
            var.dealerSum = var.dealerSum + 10;
        case 44 
            var.dealerSum = var.dealerSum + 10;
        case 45
            var.dealerSum = var.dealerSum + 10;
        case 46
            var.dealerSum = var.dealerSum + 10;
        case 47
            var.dealerSum = var.dealerSum + 10;
        case 48
            var.dealerSum = var.dealerSum + 10;
        case 49 
            var.dealerSum = var.dealerSum + 10;
        case 50
            var.dealerSum = var.dealerSum + 10;
        case 51
            var.dealerSum = var.dealerSum + 10;
        case 52
            var.dealerSum = var.dealerSum + 10;    
    end
    %Outputs the sum of the first card only
    if n==1
        var.sumOne = var.dealerSum;
    end
end
%Outputs the player and dealer sum values
set(handles.playerSum,'String',var.playerSum);
set(handles.dealerSum,'String',var.sumOne);
set(handles.oneButton,'Visible','On');
set(handles.elevenButton,'Visible','On');
set(handles.playerSpace,'Visible','On'); 
set(handles.dealerSpace,'Visible','On'); 
set(findall(handles.uipanel2,'Visible','On'),'Visible','Off');
end


% --- Executes on button press in dismissButton.
%Executes if the "Okay" button is pressed
%If info message is recieved
function dismissButton_Callback(hObject, eventdata, handles)
% hObject    handle to dismissButton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.message,'Visible','Off'); 
set(handles.messagePanel,'Visible','Off'); 
set(handles.dismissButton,'Visible','On');
set(handles.playerSpace,'Visible','Off'); 
set(handles.dealerSpace,'Visible','Off'); 
set(handles.uipanel2,'Visible','On');
set(handles.oneButton,'Visible','Off');
set(handles.elevenButton,'Visible','Off');
set(handles.title,'Visible','Off');
set(handles.playButton,'Visible','Off');
set(handles.pWalletText,'Visible','On');
set(handles.pBetText,'Visible','On');
set(handles.resultsText,'Visible','On');
set(handles.newWalletText,'Visible','On');
set(handles.newBetText,'Visible','On');
set(handles.listbox2,'Visible','On');
set(handles.currentBet2,'Visible','On');
set(handles.pBetVal,'Visible','On');
set(handles.curWalletVal,'Visible','On');
set(handles.pTotalMoney,'Visible','On');
set(handles.pushbutton1,'Enable','on');
set(handles.pushbutton2,'Enable','on');
set(handles.continueButton,'Visible','On');
set(handles.mute,'Visible','On');
end


% --- Executes on button press in oneButton.
%Adds one to the player sum if the user gets an ace
%"One" button is pressed
function oneButton_Callback(hObject, eventdata, handles)
% hObject    handle to oneButton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global var;
    var.playerSum = var.playerSum + 1;
    set(handles.playerSum,'String',var.playerSum);
    set(handles.message,'Visible','Off'); 
    set(handles.messagePanel,'Visible','Off');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    %checks to see if the user gets 2 aces in a row
    %displays the info message again
if var.aceHit == 2 || var.aceHit == 3
   set(handles.message,'String','Ace Value?');
   set(handles.message,'Visible','On'); 
   set(handles.messagePanel,'Visible','On');
   set(handles.dismissButton,'Visible','Off');
   set(handles.oneButton,'Visible','On');
   set(handles.elevenButton,'Visible','On');
   var.aceHit = var.aceHit + 1;
      if var.aceHit == 4
          set(handles.message,'Visible','Off'); 
          set(handles.messagePanel,'Visible','Off');
          set(handles.oneButton,'Visible','Off');
          set(handles.elevenButton,'Visible','Off');
      end
end
end


% --- Executes on button press in elevenButton.
%Adds eleven to the player sum if the user gets an ace
%"Eleven" button is pressed
function elevenButton_Callback(hObject, eventdata, handles)
% hObject    handle to elevenButton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global var;
    var.playerSum = var.playerSum + 11;
    set(handles.playerSum,'String',var.playerSum);
    set(handles.message,'Visible','Off'); 
    set(handles.messagePanel,'Visible','Off');
    set(handles.oneButton,'Visible','Off');
    set(handles.elevenButton,'Visible','Off');
    %checks to see if the user gets 2 aces in a row
    %displays the info message again
if var.aceHit == 2 || var.aceHit == 3
   set(handles.message,'String','Ace Value?');
   set(handles.message,'Visible','On'); 
   set(handles.messagePanel,'Visible','On');
   set(handles.dismissButton,'Visible','Off');
   set(handles.oneButton,'Visible','On');
   set(handles.elevenButton,'Visible','On');
   var.aceHit = var.aceHit + 1;
      if var.aceHit == 4
          set(handles.message,'Visible','Off'); 
          set(handles.messagePanel,'Visible','Off');
          set(handles.oneButton,'Visible','Off');
          set(handles.elevenButton,'Visible','Off');
      end
end
end


% --- Executes on selection change in listbox2.
%Sets the bet value if listbox value is changed
function listbox2_Callback(hObject, eventdata, handles)
% hObject    handle to listbox2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns listbox2 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from listbox2
global var;
%Sets the bet value if listbox value is changed
ListBoxString = get(handles.listbox2,'String');
ListBoxValue = get(handles.listbox2,'Value');
if(find(strcmp(ListBoxString,'$0')) == ListBoxValue)
    set(handles.currentBet,'String','$0');
    set(handles.currentBet2,'String','$0');
elseif(find(strcmp(ListBoxString,'$1')) == ListBoxValue)
    set(handles.currentBet,'String','$1'); 
    set(handles.currentBet2,'String','$1');
elseif(find(strcmp(ListBoxString,'$3')) == ListBoxValue)
    set(handles.currentBet,'String','$3');
    set(handles.currentBet2,'String','$3');
elseif(find(strcmp(ListBoxString,'$5')) == ListBoxValue)
    set(handles.currentBet,'String','$5');
    set(handles.currentBet2,'String','$5');
elseif(find(strcmp(ListBoxString,'$10')) == ListBoxValue)
    set(handles.currentBet,'String','$10');
    set(handles.currentBet2,'String','$10');
elseif(find(strcmp(ListBoxString,'$20')) == ListBoxValue)
    set(handles.currentBet,'String','$20');
    set(handles.currentBet2,'String','$20');
elseif(find(strcmp(ListBoxString,'All-in')) == ListBoxValue)
    set(handles.currentBet,'String',strcat('$',get(handles.totalWallet,'String')));
    set(handles.currentBet2,'String',strcat('$',get(handles.totalWallet,'String')));
    var.currentBet = str2double(get(handles.totalWallet,'String'));
end
end

% --- Executes during object creation, after setting all properties.
%Creates the bet listbox
function listbox2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to listbox2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: listbox controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
end


% --- Executes on button press in continueButton.
function continueButton_Callback(hObject, eventdata, handles)
% hObject    handle to continueButton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global var;
var.wallet = str2double(get(handles.totalWallet,'String'));
ListBoxString = get(handles.listbox2,'String');
ListBoxValue = get(handles.listbox2,'Value');
%Checks to see if user has enough in wallet to wager
if(find(strcmp(ListBoxString,'$0')) == ListBoxValue)
    var.currentBet = 0;
elseif(find(strcmp(ListBoxString,'$1')) == ListBoxValue)
    var.currentBet = 1;
elseif(find(strcmp(ListBoxString,'$3')) == ListBoxValue)
    var.currentBet = 3;
elseif(find(strcmp(ListBoxString,'$5')) == ListBoxValue)
    var.currentBet = 5;
elseif(find(strcmp(ListBoxString,'$10')) == ListBoxValue)
    var.currentBet = 10;
elseif(find(strcmp(ListBoxString,'$20')) == ListBoxValue)
    var.currentBet = 20;
elseif(find(strcmp(ListBoxString,'All-in')) == ListBoxValue)
    var.currentBet = str2double(get(handles.totalWallet,'String'));
end
%If not enough to wager, user loses
if var.wallet == 0
    l = audioread('loser.wav');
    lost = audioplayer(l,44100);
    msgbox('Sorry, looks like you''re out of luck. :(','Loser');
    playblocking(lost);
    pushbutton4_Callback(handles.pushbutton4, [], handles)
elseif var.wallet >= var.currentBet
    %Else, bet the current bet
    set(handles.pTotalMoney,'String',get(handles.curWalletVal,'String'));
    %Call the play button callback
    %Resets for a new round
    playButton_Callback(handles.playButton, [], handles)
else
    msgbox('Not Enough Dough. Try a different bet.','Error');
end
end

% --- Executes on button press in mute.
%If the user wants sound/no sound
function mute_Callback(hObject, eventdata, handles)
% hObject    handle to mute (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global var;
var.soundOn = str2double(get(handles.soundVal,'String'));
if var.soundOn == 0
     set(handles.mute,'String','Sound: On');
     set(handles.soundVal,'String','1');
elseif var.soundOn == 1
     set(handles.mute,'String','Sound: Off');
     set(handles.soundVal,'String','0');
end
end

Hangman


function varargout = HangmanGUI(varargin)
% HANGMANGUI MATLAB code for HangmanGUI.fig
%      HANGMANGUI, by itself, creates a new HANGMANGUI or raises the existing
%      singleton*.
%
%      H = HANGMANGUI returns the handle to a new HANGMANGUI or the handle to
%      the existing singleton*.
%
%      HANGMANGUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in HANGMANGUI.M with the given input arguments.
%
%      HANGMANGUI('Property','Value',...) creates a new HANGMANGUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before HangmanGUI_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to HangmanGUI_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help HangmanGUI

% Last Modified by GUIDE v2.5 16-Nov-2018 05:52:55

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @HangmanGUI_OpeningFcn, ...
                   'gui_OutputFcn',  @HangmanGUI_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before HangmanGUI is made visible.
function HangmanGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to HangmanGUI (see VARARGIN)

% Choose default command line output for HangmanGUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes HangmanGUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);




% --- Outputs from this function are returned to the command line.
function varargout = HangmanGUI_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%%Reset Buttons
set(handles.pushbuttonA,'enable','on');
set(handles.pushbuttonB,'enable','on');
set(handles.pushbuttonC,'enable','on');
set(handles.pushbuttonD,'enable','on');
set(handles.pushbuttonE,'enable','on');
set(handles.pushbuttonF,'enable','on');
set(handles.pushbuttonG,'enable','on');
set(handles.pushbuttonH,'enable','on');
set(handles.pushbuttonI,'enable','on');
set(handles.pushbuttonJ,'enable','on');
set(handles.pushbuttonK,'enable','on');
set(handles.pushbuttonL,'enable','on');
set(handles.pushbuttonM,'enable','on');
set(handles.pushbuttonN,'enable','on');
set(handles.pushbuttonO,'enable','on');
set(handles.pushbuttonP,'enable','on');
set(handles.pushbuttonQ,'enable','on');
set(handles.pushbuttonR,'enable','on');
set(handles.pushbuttonS,'enable','on');
set(handles.pushbuttonT,'enable','on');
set(handles.pushbuttonU,'enable','on');
set(handles.pushbuttonV,'enable','on');
set(handles.pushbuttonW,'enable','on');
set(handles.pushbuttonX,'enable','on');
set(handles.pushbuttonY,'enable','on');
set(handles.pushbuttonZ,'enable','on');
set(handles.pushbuttonM,'enable','on');

%Set the inital display page
set(handles.pushbutton1,'visible','off')
set(handles.uipanel2,'visible','off')
set(handles.Game,'Visible','on')
set(handles.Winner,'Visible','off')
set(handles.uipanel8,'Visible','off')



%%Hangman Code
%Load the list of words
%%Word Selection
%The list of words availible is created as an array
words={'the_ohio_state_university','columbus','hitchcock_hall','hang_on_sloopy','buckeyes','woody_hayes','john_glenn','sherrod_brown','urban_meyer','michigan_sucks','skull_session','beautiful_ohio','brutus','buckeye_battle_cry','carmen_ohio','ohio_stadium','schottenstein_center','jesse_owens','lebron_james','cleveland_cavaliers','cleveland_browns','cincinnati_reds','cincinnati_bengals','paul_brown','scarlet_and_gray','dwayne_haskins','ohio_university','franklin_county','mike_dewine','neil_armstrong','bowling_green_state_university','university_of_cincinnati','miami_university','kent_state_university','university_of_dayton'};

num = rand(1,1);
num = 35 * num;
num = ceil(num);     
Word = words(num);
Word = char(Word);
%A random number is used to pick a random word
global WordDis
  handles.text6.String = Word
%This displays the chosen word at the end if the player does not win
clear global WordDis
%Clears the displayed word if the game is being played again
for M = 1:length(Word);
    if Word(M) == '_'
        WordDis(M) = '_';
    else
        WordDis(M) = '-';
    
        
    end
end;
%This loop assigns each letter in the chosen word as '-'. This allows
%players to see how many letters are in the word.
fprintf(Word)
%Prints text for debuging
  DispTex = WordDis
   handles.text1.String = DispTex
   %Displays the censored word onto the gui
   %%Hangman Outs
   %This section is the code for how many 'outs' or guesses the player has
   %left
global Outs
Outs = 6;
%Sets inital outs to 6
axes(handles.axes1)
Hangman = imread('Hangman0.png');
image(Hangman)
axis off
axis image
%Loads the initial image of the empty hangman
while Outs > 0;
   uiwait(HangmanGUI)
    global str
%Waits for user to chose a letter
                        
        

I = 0
for k=1:(length(Word))
    if str == Word(k)
        %str is assigned as a letter depending on the button the player
        %pressed
        WordDis(k) = str;
        %If the player guesses a correct letter, the letter is filled in on
        %the censored verson
        I = 1;
    end
end
  %If the player choses a correct letter, the variable I is set to 1
    DispText = char(WordDis)
   handles.text1.String = WordDis

    Outs = Outs - 1 + I;
    %If the player guessed wrong, I will be 0 and the player will lose an
    %out
    
    %The following code displays different images of each stage of hangman
    %depending on how many outs they have left
    if Outs == 6
    axes(handles.axes1)
Hangman = imread('Hangman0.png');
%Loads the image as a graph in the gui
image(Hangman)
axis off
axis image
else
    if Outs == 5
        axes(handles.axes1)
Hangman = imread('Hangman1.png');
image(Hangman)
axis off
axis image
    else
        if Outs == 4
            axes(handles.axes1)
Hangman = imread('Hangman2.png');
image(Hangman)
axis off
axis image
        else 
            if Outs == 3
                axes(handles.axes1)
Hangman = imread('Hangman3.png');
image(Hangman)
axis off
axis image
            else
                if Outs == 2
                    axes(handles.axes1)
Hangman = imread('Hangman4.png');
image(Hangman)
axis off
axis image
                
                else if Outs == 1
                        axes(handles.axes1)
Hangman = imread('Hangman5.png');
image(Hangman)
axis off
axis image
                    else if Outs == 0
                            axes(handles.axes1)
Hangman = imread('Hangman6.png');
image(Hangman)
axis off
axis image
                        end
                    end
                end
            end
        end
    end
end
    handles.text5.String = Outs
    %Displays outs to be used for testing the gui
    
    

    Win = (Word(1:length(Word))==WordDis(1:length(Word)));
    %tests to see if the displayed word and the chosen word are the same
    %Outputs an array that checks if each letter is true ex.(1,1,1,1)
    if sum(Win) == length(Word);
        %To determine if the player won, the sum of the win array is
        %compared to the word length, if all the numbers in the array are
        %'1', then each letter is correct and the player has won
        
     
     set(handles.Winner,'Visible','on')
     %Enables the winner panel that displays 'winner' and opts the user to
     %either play again or quit
     
set(handles.pushbuttonA,'enable','off');
set(handles.pushbuttonB,'enable','off');
set(handles.pushbuttonC,'enable','off');
set(handles.pushbuttonD,'enable','off');
set(handles.pushbuttonE,'enable','off');
set(handles.pushbuttonF,'enable','off');
set(handles.pushbuttonG,'enable','off');
set(handles.pushbuttonH,'enable','off');
set(handles.pushbuttonI,'enable','off');
set(handles.pushbuttonJ,'enable','off');
set(handles.pushbuttonK,'enable','off');
set(handles.pushbuttonL,'enable','off');
set(handles.pushbuttonM,'enable','off');
set(handles.pushbuttonN,'enable','off');
set(handles.pushbuttonO,'enable','off');
set(handles.pushbuttonP,'enable','off');
set(handles.pushbuttonQ,'enable','off');
set(handles.pushbuttonR,'enable','off');
set(handles.pushbuttonS,'enable','off');
set(handles.pushbuttonT,'enable','off');
set(handles.pushbuttonU,'enable','off');
set(handles.pushbuttonV,'enable','off');
set(handles.pushbuttonW,'enable','off');
set(handles.pushbuttonX,'enable','off');
set(handles.pushbuttonY,'enable','off');
set(handles.pushbuttonZ,'enable','off');
set(handles.pushbuttonM,'enable','off');
%Disables all the buttons to avoid a bug where the user could lose after
%winning by clicking buttons
        %uiwait(HangmanGUI)
    else
    end
    if Outs == 0
        set(handles.text11, 'String', Word)
     
        set(handles.uipanel8,'Visible','on')
        %Displays the loser pannel that displays the correct word and opts
        %the user to either play again or quit
    end
end



%%Gui buttons


% --- Executes on button press in pushbutton1.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbuttonQ.
function pushbuttonQ_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonQ (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'q';
set(handles.pushbuttonQ,'enable','off');
uiresume(HangmanGUI)



% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 

% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbuttonW.
function pushbuttonW_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonW (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'w';
set(handles.pushbuttonW,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonE.
function pushbuttonE_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonE (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'e';
set(handles.pushbuttonE,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonR.
function pushbuttonR_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonR (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'r';
set(handles.pushbuttonR,'enable','off');
uiresume(HangmanGUI)



% --- Executes on button press in pushbuttonT.
function pushbuttonT_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonT (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 't';
set(handles.pushbuttonT,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonY.
function pushbuttonY_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonY (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'y';
set(handles.pushbuttonY,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonU.
function pushbuttonU_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonU (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'u';
set(handles.pushbuttonU,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonI.
function pushbuttonI_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonI (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'i';
set(handles.pushbuttonI,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonO.
function pushbuttonO_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonO (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'o';
set(handles.pushbuttonO,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonP.
function pushbuttonP_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonP (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'p';
set(handles.pushbuttonP,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonA.
function pushbuttonA_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonA (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'a';
set(handles.pushbuttonA,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonS.
function pushbuttonS_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonS (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 's';
set(handles.pushbuttonS,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonD.
function pushbuttonD_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonD (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'd';
set(handles.pushbuttonD,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonF.
function pushbuttonF_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonF (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'f';
set(handles.pushbuttonF,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonG.
function pushbuttonG_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonG (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'g';
set(handles.pushbuttonG,'enable','off');
uiresume(HangmanGUI)

% --- Executes on button press in pushbuttonH.
function pushbuttonH_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonH (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'h';
set(handles.pushbuttonH,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonJ.
function pushbuttonJ_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonJ (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'j';
set(handles.pushbuttonJ,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonK.
function pushbuttonK_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonK (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'k';
set(handles.pushbuttonK,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonL.
function pushbuttonL_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonL (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'l';
set(handles.pushbuttonL,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonZ.
function pushbuttonZ_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonZ (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'z';
set(handles.pushbuttonZ,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonX.
function pushbuttonX_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonX (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'x';
set(handles.pushbuttonX,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonC.
function pushbuttonC_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonC (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'c';
set(handles.pushbuttonC,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonV.
function pushbuttonV_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonV (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'v';
set(handles.pushbuttonV,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonB.
function pushbuttonB_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonB (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'b';
set(handles.pushbuttonB,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonN.
function pushbuttonN_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonN (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
  handles.text1.String = 'test'
global str
str = 'n';
set(handles.pushbuttonN,'enable','off');
uiresume(HangmanGUI)


% --- Executes on button press in pushbuttonM.
function pushbuttonM_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonM (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global str
str = 'm';
set(handles.pushbuttonM,'enable','off');
uiresume(HangmanGUI)





% --- Executes on button press in pushbuttonTest.
function pushbuttonTest_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonTest (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double




% --- Executes on button press in pushbutton38.
function pushbutton38_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton38 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
pushbutton1_Callback (@pushbutton1_Callback, eventdata, handles)
uiresume(HangmanGUI)
%restarts the game when 'play again' is clicked

% --- Executes on button press in pushbutton41.
function pushbutton41_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton41 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
closereq



% --- Executes on button press in pushbutton43.
function pushbutton43_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton43 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

clear HangmanGUI


pushbutton1_Callback (@pushbutton1_Callback, eventdata, handles)
uiresume(HangmanGUI)
%Restarts the game when "Play again' is clicked


% --- Executes on button press in pushbutton44.
function pushbutton44_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton44 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
closereq
%Closed the program when 'Quit' button is clicked

Over/Under


clc%clears the command window every time the program is run
load('Dice.mat');%load the pre-made dice program
money=input('enter your total spending money rounding to the nearest dollar\n');%enter the money that the user has available
ogMoney=money;%having a variable equal the amount of money that the user started with
answer = input('Do you still want to play, enter 1 for yes and 2 for no \n');%Create a variable to as if the user would like to play so that they may end whenever they please
totalmoney=0;% Create a new variable to have the new amount of money after each roll be saved

h =figure;%load the figure of dice every time a new roll is initiated
set(h, 'WindowStyle','docked');

while money >0 & answer == 1 %This is a loop that allows the user to play as long as they want to and have money
bet=input('how much of your total spending money you want to bet, enter amount to the nearest dollar\n');%Asks the user how much of his money avaliable the user would like to bet
bet2= input('Enter 0 for under seven ,1 for exactly seven, or 2 for over seven\n');%asks the user what their bet may be
roll = randi([1 6] ,[1 2]);%creates a random roll of one through six for both die
totalroll= roll(1)+roll(2);%add the roll of each die to get the total number of two through twelve
fprintf('\n the total roll is %.f \n\n',totalroll)% prints out the total number of the roll that round

if bet2 == 2 & totalroll>7
money= bet+money;%Money is increased by the bet amount if the roll is above seven and the user pressed 2
fprintf('your money remaining is %.f dollars \n\n', money)%prints out your total money that is eligable to play
imshow( [ Dice{roll} ] );%shows an image of teh dice that were rolled
if money>0
answer = input('Do you still want to play, enter 1 for yes and 2 for no\n\n');%Asks if they would like to risk their money again and play one more
else%if they have no money they can't play
fprintf('You have no money left to bet, but you get an A for effort\n\n')
break%exits the loop if they have no money left
end

elseif bet2== 0& totalroll<7
money= bet+money;%Money is increased by the bet amount if the roll is under seven and the user pressed 0
fprintf('your money remaining is %.f dollars \n\n', money)%prints out your total money that is eligable to play
imshow( [ Dice{roll} ] );%shows an image of teh dice that were rolled
if money>0
answer = input('Do you still want to play, enter 1 for yes and 2 for no\n\n');%Asks if they would like to risk their money again and play one more
else%if they have no money they can't play
fprintf('You have no money left to bet, but you get an A for effort\n\n')
break%exits the loop if they have no money left
end

elseif bet2==1& totalroll==7
money= bet+money;%Money is increased by the bet amount if the roll is seven and the user pressed 1
fprintf('your money remaining is %.f dollars \n\n', money)%prints out your total money that is eligable to play
imshow( [ Dice{roll} ] );%shows an image of teh dice that were rolled
if money>0
answer = input('Do you still want to play, enter 1 for yes and 2 for no\n\n');%Asks if they would like to risk their money again and play one more
else
fprintf('You have no money left to bet, but you get an A for effort\n\n')
break%exits the loop if they have no money left
end

else%This command is for if their bet was incorrrect
money= money-bet;%Their total money is subracted by the bet placed
fprintf('your money remaining is %.f dollars \n\n', money)%prints out your total money that is eligable to play
imshow( [ Dice{roll} ] );;%shows an image of teh dice that were rolled
if money>0
answer = input('Do you still want to play, enter 1 for yes and 2 for no\n\n');%Asks if they would like to risk their money again and play one more
else
fprintf('You have no money left to bet, but you get an A for effort\n\n')
break%exits the loop if they have no money left
end%breaks the If statment

end%ends the If statement

end%Ends the while loops
if ogMoney<money%this command is if the user left he table with more money than what he started with originally
totaldiff= money-ogMoney;%Finds how much profit was made at the table
totalmoney= ogMoney+totaldiff;%Adds the total profit to the total amount of money
fprintf('you left the table with a profit of %.f dollars, giving you a total of %.f dollars\n', totaldiff,totalmoney)%Prints the total profit and the total money
fprintf('have a nice day \n :)')
elseif ogMoney>money%This command is if the user left the table with less than what he started
totaldiff = ogMoney-money;%Finds how much money the user lost at the table
totalmoney = ogMoney-totaldiff;%Finds the total money that the user has after their losses
if totalmoney>=0
fprintf('You left the table with a loss of %.f dollars, giving you a total of %.f dollars \n', totaldiff, totalmoney)%Prints the total loss and the total money as long as they still have money
fprintf('have a nice day \n :)')
else
fprintf('You left the table with a loss of %.f dollars, giving you a total of %.f dollars \n', totaldiff, totalmoney)%Prints the total loss and the total money that is owed because more was bet than what they had
fprintf('you are in debt, please go see the surgeon to work something out \n :)')
end%closes if statement

elseif ogMoney==money %this is if no money was lossed or gained
fprintf('You left the table with the same amount of money that you arrived with, you total is %.f dollars',money)%Prints the total money that the user has
fprintf('have a nice day \n :)')
else
fprintf('have a nice day \n :)')
end%closes the if statement