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

[winners,finalresults,finalhand,rawfinalhand,ranks,results]=getresults(rawhands,rawcommunity,nop,folded,dealt)
function [winners,finalresults,finalhand,rawfinalhand,ranks,results]=getresults(rawhands,rawcommunity,nop,folded,dealt)

for i=1:nop+1
	%Get Hand
    besthand{i}=[rawhands{i}{1}(1) rawhands{i}{2}(1) rawcommunity{1}(1) rawcommunity{2}(1) rawcommunity{3}(1) rawcommunity{4}(1) rawcommunity{5}(1);rawhands{i}{1}(2) rawhands{i}{2}(2) rawcommunity{1}(2) rawcommunity{2}(2) rawcommunity{3}(2) rawcommunity{4}(2) rawcommunity{5}(2)];

%      if i<4
%          besthand{i}=[2 14 3 4 5 6 12; 4 4 4 4 4 4 4];
%      end
    
	%Sort Hand
	[a b]=sort(besthand{i}(1,:));
	besthand{i}=besthand{i}(:,b);

    
	%Initialize Results Variable
	results.royalflush{i}=0;
	results.straightflush{i}=0;
	results.flush{i}=0;
    results.fullhouse{i}=0;
	results.straight{i}=0;
	results.foak{i}=0;
	results.toak{i}=0;
    results.twopair{i}=0;
    results.pair{i}=0;
	results.highcard{i}=besthand{i}(1,7);
    results.personalhighcard{i}=max([rawhands{i}{1}(1) rawhands{i}{2}(1)]);
    results.facecards{i}=0;
    
    %Face card check
    if rawhands{i}{1}(1)>9
        results.facecards{i}=results.facecards{i}+1;
    end
    if rawhands{i}{2}(1)>9
        results.facecards{i}=results.facecards{i}+1;
    end
    
    %Draw variables
    results.outsidestraightdraw{i}=0;    
    results.insidestraightdraw{i}=0;
    results.flushdraw{i}=[0 0 0];
    results.pocketpair{i}=0;
    results.rank{i}=0;
    results.folded{i}=0;

    %Pocket Pair Check
    if rawhands{i}{1}(1)==rawhands{i}{2}(1)
        results.pocketpair{i}=1;
    end
    
	flush=zeros(1,4);
	%Flush Check
	for j=1:4
        ph=0;
        pf=0;
        for k=1:7
            if besthand{i}(2,k)==j
                flush(j)=flush(j)+1;
            end
        end
        if flush(j)>=5
            results.flush{i}=1;
        end
        if rawhands{i}{1}(2)==j
            pf=pf+1;
            ph=rawhands{i}{1}(1);
        end
        if rawhands{i}{2}(2)==j
            pf=pf+1;
            if rawhands{i}{2}(1)>ph
                ph=rawhands{i}{2}(1);
            end
        end
        if flush(j)==2 & dealt==1
            results.flushdraw{i}=[3 pf ph];
        end
        if flush(j)==3 & dealt<3
            results.flushdraw{i}=[2 pf ph];
        end
        if flush(j)==4 & dealt<4
            results.flushdraw{i}=[1 pf ph];
        end
        if flush(j)>=5
            results.flushdraw{i}=[0 pf ph];
        end
	end

    %Pair Check
    pair=zeros(1,14);    
    cards=zeros(1,14);
    for j=2:14
        pair(j)=length(find(besthand{i}(1,:)==j));        
        if pair(j)==4
            results.foak{i}=1;
        end
        if pair(j)==3
            results.toak{i}=results.toak{i}+1;
        end
        if pair(j)==2
            results.pair{i}=results.pair{i}+1;
        end
    end
    pair(1)=pair(14);
    
    dpair=pair;
    for j=1:14
        if pair(j)>1
            dpair(j)=1;
        end
    end
    
    %Straight Check
    straight=[];
    for j=1:10
        if pair(j:j+4)>0
            results.straight{i}=1;
            straight=[j+4:-1:j];
        end
        if sum(dpair(j:j+2))==2 & dealt==1
            results.insidestraightdraw{i}=3;
        end
        if pair(j:j+1)>0 & dealt==1
            results.outsidestraightdraw{i}=3;
            results.insidestraightdraw{i}=0;
        end
        if sum(dpair(j:j+3))==3 & dealt<3
            results.insidestraightdraw{i}=2;
        end
        if pair(j:j+2)>0 & dealt<3
            results.outsidestraightdraw{i}=2;
            results.insidestraightdraw{i}=0;
        end
        if sum(dpair(j:j+4))==4 & dealt<4
            results.insidestraightdraw{i}=1;
        end
        if pair(j:j+3)>0 & dealt<4
            results.outsidestraightdraw{i}=1;
            results.insidestraightdraw{i}=0;
        end
    end

    %Royal/Straight Flush Check
    fstraight=[];
    a=find(flush>=5);
    if isempty(straight)==0 & isempty(a)==0
		b=find(besthand{i}(2,:)==a);
		tmphand=besthand{i}(:,b);
        for j=2:14
            spair(j)=length(find(tmphand(1,:)==j));
        end
        spair(1)=spair(14);            
        for j=1:10
            if spair(j:j+4)>0
                fstraight=[j+4:-1:j];
            end   
        end
        if isempty(fstraight)==0
            if fstraight(1)==14
                results.royalflush{i}=1;
            else
                results.straightflush{i}=1;
            end
        end
    end
    
    %Get Final Results
    if results.highcard{i}==14
        highcard='Ace';
    elseif results.highcard{i}==13
        highcard='King';
    elseif results.highcard{i}==12
        highcard='Queen';
    elseif results.highcard{i}==11
        highcard='Jack';
    else
        highcard=int2str(results.highcard{i});
    end
    finalresults{i}=[highcard ' High'];
    ranks(i)=1;
    if results.pair{i}==1
        finalresults{i}='One Pair';
        ranks(i)=2;
    end
    if results.pair{i}>1
        finalresults{i}='Two Pair';
        ranks(i)=3;
    end
    if results.toak{i}==1
        finalresults{i}='3 of a Kind';
        ranks(i)=4;
    end
    if results.straight{i}>0
        finalresults{i}='Straight';
        ranks(i)=5;
    end
    if results.flush{i}==1
        finalresults{i}='Flush';
        ranks(i)=6;
    end
    if (results.toak{i}==1  & results.pair{i}>0) || results.toak{i}==2
        finalresults{i}='Full House';
        ranks(i)=7;
    end
    if results.foak{i}==1
        finalresults{i}='4 of a Kind';
        ranks(i)=8;
    end
    if results.straightflush{i}==1
        finalresults{i}='Straight Flush';
        ranks(i)=9;
    end
    if results.royalflush{i}==1
        finalresults{i}='Royal Flush';
        ranks(i)=10;
    end

    if ranks(i)==1
        rawfinalhand{i}=besthand{i}(:,[7:-1:3]);            
    end
    if ranks(i)==2
		fpair=pair;
		fpair(1)=0;
		a=find(fpair==2);
        b=find(besthand{i}(1,:)==a);
        rawfinalhand{i}=besthand{i}(:,b);
        c=[1:7];
        c(b)=[];
        lc=length(c);
        rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,c(lc)) besthand{i}(:,c(lc-1)) besthand{i}(:,c(lc-2))];
    end
    if ranks(i)==3
		fpair=pair;
		fpair(1)=0;
		a=find(fpair==2);
		la=length(a);
		b=find(besthand{i}(1,:)==a(la));
        bb=b;
		rawfinalhand{i}=besthand{i}(:,b);
		b=find(besthand{i}(1,:)==a(la-1));
        bb=[bb b];
		rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,b)];
        c=[1:7];
        c(bb)=[];
        lc=length(c);
        rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,c(lc))];
        results.twopair{i}=1;
    end
    if ranks(i)==4
		fpair=pair;
		fpair(1)=0;
		a=find(fpair==3);
		la=length(a);
		b=find(besthand{i}(1,:)==a(la));
		rawfinalhand{i}=besthand{i}(:,b);
        c=[1:7];
        c(b)=[];
        lc=length(c);
        rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,c(lc)) besthand{i}(:,c(lc-1))];
    end
    if ranks(i)==5
		rawfinalhand{i}=[];
		for j=1:5
			b=find(besthand{i}(1,:)==straight(j));
            if straight(j)==1
                b=7;
            end
			rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,b(1))];
		end
    end
    if ranks(i)==6
        a=find(flush>=5);
		b=find(besthand{i}(2,:)==a);
		rawfinalhand{i}=besthand{i}(:,b);
        lrfh=length(rawfinalhand{i});
        rfh=[lrfh:-1:lrfh-4];
        rawfinalhand{i}=rawfinalhand{i}(:,[rfh]);
    end
    if ranks(i)==7
		fpair=pair;
		fpair(1)=0;
		a=find(fpair==3);
		la=length(a);
		b=find(besthand{i}(1,:)==a(la));
		rawfinalhand{i}=besthand{i}(:,b);
        if results.toak{i}==1
			a=find(fpair==2);
			la=length(a);
			b=find(besthand{i}(1,:)==a(la));
    		rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,b)];          
        end
        if results.toak{i}==2
    		b=find(besthand{i}(1,:)==a(la-1));
    		rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,b(1:2))];          
        end
        results.fullhouse{i}=1;
    end
    if ranks(i)==8
		fpair=pair;
		fpair(1)=0;
		a=find(fpair==4);
		la=length(a);
		b=find(besthand{i}(1,:)==a(la));
		rawfinalhand{i}=besthand{i}(:,b);
        c=[1:7];
        c(b)=[];
        lc=length(c);
        rawfinalhand{i}=[rawfinalhand{i} besthand{i}(:,c(lc))];
    end
    if ranks(i)==9 || ranks(i)==10
        a=find(flush>=5);
		b=find(besthand{i}(2,:)==a);
        tmphand=besthand{i}(:,b);
        rawfinalhand{i}=[];
        for j=1:5
			c=find(tmphand(1,:)==fstraight(j));
            if fstraight(j)==1
                c=length(tmphand);
            end
			rawfinalhand{i}=[rawfinalhand{i} tmphand(:,c)];
		end
    end

    results.rank{i}=ranks(i);
    results.folded{i}=folded(i);

    if folded(i)=='y'
        ranks(i)=0;
        finalresults{i}='Folded';
    end

    for n=1:5
        if rawfinalhand{i}(1,n)==11
            finalhand{i}{n}='J';
        elseif rawfinalhand{i}(1,n)==12
            finalhand{i}{n}='Q';
        elseif rawfinalhand{i}(1,n)==13
            finalhand{i}{n}='K';
        elseif rawfinalhand{i}(1,n)==14
            finalhand{i}{n}='A';
        else
            finalhand{i}{n}=int2str(rawfinalhand{i}(1,n));
        end
        if rawfinalhand{i}(2,n)==1
            finalhand{i}{n}=[finalhand{i}{n} 's'];
        elseif rawfinalhand{i}(2,n)==2
            finalhand{i}{n}=[finalhand{i}{n} 'c'];
        elseif rawfinalhand{i}(2,n)==3
            finalhand{i}{n}=[finalhand{i}{n} 'h'];
        elseif rawfinalhand{i}(2,n)==4
            finalhand{i}{n}=[finalhand{i}{n} 'd'];
        end
        if folded(i)=='y'
            finalhand{i}{n}='Xx';
        end
    end

    
end


[highestrank winner]=max(ranks(1:nop));
winners=find(ranks(1:nop)==highestrank);
now=length(winners);
j=1;
while now>1 & j<6
    for i=1:now
        hc(i)=rawfinalhand{winners(i)}(1,j);        
    end
    winners=winners(hc==max(hc));
    j=j+1;
    now=length(winners);
    hc=[];
end

Contact us at files@mathworks.com