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

[dcsn,b]=rules(rawhands,rawcommunity,rawfinalhand,nop,folded,stack,pot,bet,ibet,dcsn,dealt,ranks,cranks,results,i,dealer,blind,dbet,playertype,playername);
function [dcsn,b]=rules(rawhands,rawcommunity,rawfinalhand,nop,folded,stack,pot,bet,ibet,dcsn,dealt,ranks,cranks,results,i,dealer,blind,dbet,playertype,playername);
b=0;
prob=round(rand*100);

if playertype(i)==1
    prob=prob+6;
elseif playertype(i)==2
    prob=prob+3;
elseif playertype(i)==3
    prob=prob;
elseif playertype(i)==4
    prob=prob-3;
elseif playertype(i)==5
    prob=prob-6;
end

dcsn='k';

if dealt==1

    if results.insidestraightdraw{i}==0 & results.outsidestraightdraw{i}==0 & results.flushdraw{i}(2)==0 & results.pocketpair{i}==0 & results.facecards{i}==0 & bet>ibet(i)
        dcsn='f';
    elseif bet==blind & i~=dealer(3)
        dcsn='c';
    elseif bet>ibet(i)
        dcsn='f';
        
        if results.flushdraw{i}(2)==2
        dcsn='c';
        end
        if results.pocketpair{i}==1 
        dcsn='c';
        end
        if results.facecards{i}==2
        dcsn='c';
        end
        if results.personalhighcard{i}>12
        dcsn='c';
        end
        if ranks>1
        dcsn='c';
        end
        
    else
        dcsn='k';
        
        if results.flushdraw{i}(2)==2 & prob<10
        dcsn='b';
        b=blind;
        end
        if results.pocketpair{i}==1 & prob<30
        dcsn='b';
        b=blind;
        end
        if results.facecards{i}==2 & prob<10
        dcsn='b';
        b=blind;
        end
        
        if dbet(i)==1
            dcsn='k';
        end            
    end
    
end

if dealt==2

    if (ranks==1 | (ranks==cranks & results.personalhighcard{i}<12)) & results.insidestraightdraw{i}==0 & results.outsidestraightdraw{i}==0 & results.flushdraw{i}(2)==0 & results.facecards{i}==0 & bet>ibet(i)
        dcsn='f';
    elseif bet>ibet(i)
        dcsn='f';
        
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==1 & results.flushdraw{i}(3)>9
        dcsn='c';
        end
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==2
        dcsn='c';
        end
        if results.outsidestraightdraw{i}<2
        dcsn='c';
        end
        if results.insidestraightdraw{i}<2
        dcsn='c';
        end
        if results.pocketpair{i}==1 & results.personalhighcard{i}>5
        dcsn='c';
        end
        if ranks>1
        dcsn='c';
            if ranks==cranks & results.personalhighcard{i}<12
                dcsn='f';
            end
        end
        
    else
        dcsn='k';
        
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==1 & results.flushdraw{i}(3)>9 & prob<20
        dcsn='b';
        b=blind*2;
        end
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==2 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if results.outsidestraightdraw{i}<2 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if results.insidestraightdraw{i}<2 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if results.pocketpair{i}==1 & results.personalhighcard{i}>5 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if ranks>1 & prob<10
        dcsn='b';
        b=blind*2;
            if ranks==cranks & results.personalhighcard{i}<12
                dcsn='k';
            end
        end
        if prob<5
        dcsn='b';
        b=blind*2;
        end

        if dbet(i)==1
            dcsn='k';
        end            

        
    end
    
end

if dealt==3
    if (ranks==1 | (ranks==cranks & results.personalhighcard{i}<12)) & results.insidestraightdraw{i}==0 & results.outsidestraightdraw{i}==0 & results.flushdraw{i}(2)==0  & results.personalhighcard{i}<12 & bet>ibet(i)
        dcsn='f';
    elseif bet>ibet(i)
        dcsn='f';
        
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==1 & results.flushdraw{i}(3)>9
        dcsn='c';
        end
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==2
        dcsn='c';
        end
        if results.outsidestraightdraw{i}<2
        dcsn='c';
        end
        if results.insidestraightdraw{i}<2
        dcsn='c';
        end
        if results.pocketpair{i}==1 & results.personalhighcard{i}>5
        dcsn='c';
        end
        if ranks>1
        dcsn='c';
            if ranks==cranks & results.personalhighcard{i}<12
                dcsn='f';
            end
        end
        
    else
        dcsn='k';
        
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==1 & results.flushdraw{i}(3)>9 & prob<20
        dcsn='b';
        b=blind*2;
        end
        if results.flushdraw{i}(1)<2 & results.flushdraw{i}(2)==2 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if results.outsidestraightdraw{i}<2 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if results.insidestraightdraw{i}<2 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if results.pocketpair{i}==1 & results.personalhighcard{i}>5 & prob<30
        dcsn='b';
        b=blind*2;
        end
        if ranks>1 & prob<10
        dcsn='b';
        b=blind*2;
            if ranks==cranks & results.personalhighcard{i}<12
                dcsn='k';
            end
        end
        if prob<5
        dcsn='b';
        b=blind*2;
        end
        if dbet(i)==1
            dcsn='k';
        end            
        
    end
    
end

if dealt==4

    if (ranks==1 | (ranks==cranks & results.personalhighcard{i}<12)) & results.insidestraightdraw{i}==0 & results.outsidestraightdraw{i}==0 & results.flushdraw{i}(2)==0 & results.personalhighcard{i}<12 & bet>ibet(i)
        dcsn='f';
    elseif bet>ibet(i)
        dcsn='f';
        
        if results.pocketpair{i}==1 & results.personalhighcard{i}>5
        dcsn='c';
        end
        if ranks>1
        dcsn='c';
            if ranks==cranks & results.personalhighcard{i}<12
                dcsn='f';
            end
        end
        
    else
        dcsn='k';
        
        if results.pocketpair{i}==1 & results.personalhighcard{i}>5 & prob<10
        dcsn='b';
        b=blind*2;
        end
        if ranks>cranks
            if ranks==2 & prob<20
                dcsn='b';
                b=blind*2;
            elseif ranks==3 & prob<25
                dcsn='b';
                b=blind*2;
            elseif ranks==4 & prob<30
                dcsn='b';
                b=blind*2;
            elseif ranks==5 & prob<35
                dcsn='b';
                b=blind*2;
            elseif ranks==6 & prob<40
                dcsn='b';
                b=blind*2;
            elseif ranks==7 & prob<45
                dcsn='b';
                b=blind*2;
            elseif ranks==8 & prob<50
                dcsn='b';
                b=blind*2;
            elseif ranks==9 & prob<60
                dcsn='b';
                b=blind*2;
            elseif ranks==10 & prob<65
                dcsn='b';
                b=blind*2;
            end            
        end
        if ranks==cranks & results.personalhighcard{i}<12
            dcsn='k';
        end
        if prob<5
        dcsn='b';
        b=blind*2;
        end
            
        if dbet(i)==1
            dcsn='k';
        end            
        
    end
    
end


if b>stack(i)
    b=stack(i);
end

if stack(i)==0
    dcsn='k';
end

Contact us at files@mathworks.com