image thumbnail
from Texas Holdem by Stefan Krause
This is a fully functional Texas Holdem program.

[folded,stack,pot,dcsn,gbet,hidecards]=decision(handles,rawhands,rawcommunity,nop,nopind,folded,stack,pot,dcsn,dealt,blind,dealer,debug,quicksim,playertype,playername,gbet)
function [folded,stack,pot,dcsn,gbet,hidecards]=decision(handles,rawhands,rawcommunity,nop,nopind,folded,stack,pot,dcsn,dealt,blind,dealer,debug,quicksim,playertype,playername,gbet)


hidecards='y';
lastbet=0;


bet=0;
ibet=zeros(1,nop);
dbet=zeros(1,nop);
allfolded='n';

if dealt==1
    bet=blind;
    ibet(dealer(2))=blind/2;
    ibet(dealer(3))=blind;
end

if dealt==1
	if nop>3
        order=[dealer(4:nop) dealer(1) dealer(2) dealer(3)];
	elseif nop==3
        order=dealer;
	elseif nop==2
        order=[dealer(2) dealer(1)];
	end
else
	if nop>3
        order=[dealer(2:nop) dealer(1)];
	elseif nop==3
        order=[dealer(2) dealer(3) dealer(1)];
	elseif nop==2
        order=[dealer(2) dealer(1)];
	end
end

for i=1:nop
    if stack(i)>=ibet(i)
		stack(i)=stack(i)-ibet(i);
		pot=pot+ibet(i);
        gbet(i)=gbet(i)+ibet(i);
	elseif stack(i)<ibet(i) && stack(i)>0
		pot=pot+stack(i);
        gbet(i)=gbet(i)+stack(i);
		stack(i)=0;
    end
end



    alldone='n';
    numdone=0;
    numfolded=0;
    for f=1:nop
        if stack(f)==0 & folded(f)=='n'
            numdone=numdone+1;
        end
        if folded(f)=='y'
            numfolded=numfolded+1;
            numdone=numdone+1;
        end
        if numfolded==nop-1
            allfolded='y';
        end
        if (nop-numdone)<2
            alldone='y';
            hidecards='n';
        end
    end

% % if alldone=='y'
% %     for i=1:nop
% %         if folded(i)=='n'
% %             disp([playername{nopind(i)} ' checks.'])
% %         end
% %     end
% % end






allcheck='n';

while allcheck=='n'



for j=1:nop

    
    getdcsn='n';
    setappdata(gcbf, 'getdcsn', getdcsn);

    i=order(j);
    
    numfolded=0;
    for f=1:nop
        if folded(f)=='y'
            numfolded=numfolded+1;
        end
        if numfolded==nop-1
            allfolded='y';
        end
    end
    
    if lastbet==i
       alldone='y';
    end
    
    if allfolded=='n' & alldone=='n'
    
        
    
    %Check Hand
	[winners finalresults finalhand rawfinalhand ranks results]=getresults(rawhands,rawcommunity,nop,folded,dealt);

    
    if folded(i)=='n'
        if debug==0 & nopind(i)==1    
            if (dbet(i)==1 & bet==ibet(i)) | stack(i)==0
                dcsn(i)='k';
            elseif bet<=ibet(i) | stack(i)==0
                msg={'Nobody' 'Raised'};
                set(handles.dispbet, 'String', msg);
                msg={'It is $0' 'to stay in'};
                set(handles.dispstayin, 'String', msg);
                set(handles.dispqstn, 'String', 'Do you want to:');
                set(handles.getcheck, 'Enable', 'on');
                set(handles.getbet, 'Enable', 'on');
                set(handles.getcheck, 'Visible', 'on');
                set(handles.getbet, 'Visible', 'on');
				while getdcsn=='n'
                    pause(.1)
                    getdcsn=getappdata(gcbf, 'getdcsn');  
                    dcsn(i)=getdcsn;
				end
                set(handles.getcheck, 'Enable', 'off');
                set(handles.getbet, 'Enable', 'off');
                set(handles.dispqstn, 'String', '');
                set(handles.dispstayin, 'String', '');
                set(handles.dispbet, 'String', '');
            elseif bet>ibet(i)
                msg={['It is $' int2str(bet-ibet(i))] 'to stay in'};
                set(handles.dispstayin, 'String', msg);
                set(handles.dispqstn, 'String', 'Do you want to:');
                set(handles.getcall, 'Enable', 'on');
                set(handles.getbet, 'Enable', 'on');
                set(handles.getfold, 'Enable', 'on');
                set(handles.getcall, 'Visible', 'on');
                set(handles.getbet, 'Visible', 'on');
                set(handles.getfold, 'Visible', 'on');
                while getdcsn=='n'
                    pause(.1)
                    getdcsn=getappdata(gcbf, 'getdcsn');
                    dcsn(i)=getdcsn;
				end
                set(handles.getcall, 'Enable', 'off');
                set(handles.getbet, 'Enable', 'off');
                set(handles.getfold, 'Enable', 'off');
                set(handles.dispstayin, 'String', '');
                set(handles.dispqstn, 'String', '');
                set(handles.dispbet, 'String', '');
            end
        else
            [dcsn(i) b]=rules(rawhands,rawcommunity,rawfinalhand,nop,folded,stack,pot,bet,ibet,dcsn(i),dealt,ranks(i),ranks(nop+1),results,i,dealer,blind,dbet,playertype,playername);
        end
    
        if dcsn(i)=='f'
            set(eval(['handles.fhandname' int2str(i)]), 'String', 'Folds');
            folded(i)='y';
            results.folded{i}='y';    
        end
        if dcsn(i)=='c'
            set(eval(['handles.fhandname' int2str(i)]), 'String', 'Calls');
            if bet>ibet(i)
                if stack(i)>=(bet-ibet(i))
					stack(i)=stack(i)-(bet-ibet(i));
					pot=pot+(bet-ibet(i));
                    gbet(i)=gbet(i)+(bet-ibet(i));
				elseif stack(i)<(bet-ibet(i)) && stack(i)>0
					pot=pot+stack(i);
                    gbet(i)=gbet(i)+stack(i);
					stack(i)=0;
				end
                ibet(i)=bet;
            end
            if stack(i)==0
                set(eval(['handles.fhandname' int2str(i)]), 'String', 'All In!!!');
            end

        end
        if dcsn(i)=='k'
            set(eval(['handles.fhandname' int2str(i)]), 'String', 'Checks');
            if stack(i)==0
                set(eval(['handles.fhandname' int2str(i)]), 'String', 'All In!!!');
            end
        end
        if dcsn(i)=='b'
            if nopind(i)==1 & debug==0
                msg=['Enter raise ($' int2str(blind) '-$' int2str(stack(i)-(bet-ibet(i))) ')'];
                set(handles.dispqstn, 'String', msg);
                set(handles.getcheck, 'Visible', 'off');
                set(handles.getcall, 'Visible', 'off');
                set(handles.getbet, 'Visible', 'off');
                set(handles.getfold, 'Visible', 'off');
                set(handles.getbetamt, 'Visible', 'on');
                set(handles.enterbetamt, 'Visible', 'on');
                b=stack(i)+1;
                setappdata(gcbf, 'betamt', b);
                while b>stack(i)
                    b=getappdata(gcbf, 'betamt');
                    if b<blind & stack(i)>blind
                        b=stack(i)+1;
                    elseif stack(i)<=blind
                        b=stack(i);
                    end
                    pause(.1)
                end
                set(handles.getbetamt, 'Visible', 'off');
                set(handles.enterbetamt, 'Visible', 'off');
                set(handles.dispqstn, 'String', '');
            end
            bet=bet+b;
            dbet(i)=1;
            if stack(i)>=(bet-ibet(i))
				stack(i)=stack(i)-(bet-ibet(i));
				pot=pot+(bet-ibet(i));
                gbet(i)=gbet(i)+(bet-ibet(i));
			elseif stack(i)<(bet-ibet(i)) & stack(i)>0
				pot=pot+stack(i);
                gbet(i)=gbet(i)+stack(i);
				stack(i)=0;
			end
            set(eval(['handles.fhandname' int2str(i)]), 'String', ['Raised $' int2str(b)]);
            msg={playername{i} ['Raised $' int2str(b)]};
            set(handles.dispbet, 'String', msg);
            ibet(i)=bet;
            if stack(i)==0
                set(eval(['handles.fhandname' int2str(i)]), 'String', 'All In!!!');
            end
            lastbet=i;
        end
        
    end
            
    end

    
    
end


    allcheck='y';
    alldone='n';
    numdone=0;
    numfolded=0;
    for f=1:nop
        if stack(f)==0 & folded(f)=='n' & f~=lastbet
            numdone=numdone+1;
        end
        if folded(f)=='y'
            numfolded=numfolded+1;
            numdone=numdone+1;
        end
        if numfolded==nop-1
            allfolded='y';
        end
        if (nop-numdone)<2
            alldone='y';
            hidecards='n';
        end
    end

	
	if allfolded=='n' & alldone=='n'
		
		
		for i=1:nop
           if results.flushdraw{i}(1)==0;
               results.flushdraw{i}=0;
           end
           if bet>ibet(i) & folded(i)=='n' & stack(i)>0
               allcheck='n';
           end
		end
		results.flushdraw{nop+1}=0;
		
	
	end

	if debug==1 & allfolded=='n' & alldone=='n'
        results
	end

end


[sortedbet ind]=sort(gbet);
overbet=sortedbet(nop)-sortedbet(nop-1);
if overbet>0
    pot=pot-overbet;
    gbet(ind(nop))=gbet(ind(nop))-overbet;
    stack(ind(nop))=stack(ind(nop))+overbet;
end

Contact us at files@mathworks.com