system "Cycle_Roulette.dgn"

{Cycle Roulette
Based from the book "Your Best Bet by Mike Goodman"

All Bets are expressed in Units.
Normal betting progression is 4,8,20,40,60 units
When in a Cycle the progression is: 100,200,300 units

A typical example: Normal betting units are $1.00/unit
A typical cycle units are $5.00/unit

The combinations are setup as Group A-C as follows:

  Group A: 1st Dozen
  Group B: 2nd Dozen
  Group C: 3rd Dozen
}
method "main"
begin
    While Starting a New Session
    begin
        Call "Initialize";
        Call "Input data";
        Call "Setup Dozen Layout";
        call "Make Bet";
        Exit;
    end
    
    if record "Layout in use"  layout has not hit each time
    begin
        if Flag "In Cycle" is False
        begin
            Call "Determine Normal Progression";
        end
        Else
        begin
            Call "Determine Cycle Progression";
        end
    end
    Else
    begin
        Put 1 on record "Progression" data index; //reset progression data index
        
        if Flag "In Cycle" is True
        begin
            Call "Cycle Win";
        end
        Else
        begin
            Call "Figure Cycle Count";
        end
    end
    
    Call "Make Bet";
end

method "Cycle Win"
begin
    Subtract 1 unit on record "Number of Cycles" data;
    Set Flag "In Cycle" to False;
end

method "Figure Cycle Count"
begin
    While record "Number of Cycles" data not = 0
    begin
        Set Flag "In Cycle" to True;

        //move progession data index to start of Cycle bet
        Put 6 on record "Progression" data index;
    end
end

method "Setup Dozen Layout"
begin
    if record "Dozen Indicator" data = 1
    begin
        Copy 1st Dozen to the record "Layout in use" layout;
    end
    Else
    begin
        if record "Dozen Indicator" data = 2
        begin
            Copy 2nd Dozen to the record "Layout in use" layout;
        end
        Else
        begin
            if record "Dozen Indicator" data = 3
            begin
                Copy 3rd Dozen to the record "Layout in use" layout;
            end
        end
    end
end

method "Determine Normal Progression"
begin
    Add 1 unit on record "Progression" data index; //bump progression data index
    
    //if progression data index > 5 then we are in a Cycle
    //Add on Cycle and reset progression to start of first bet.
    if record "Progression" data index > 5
    begin
        Add 1 on record "Number of Cycles" data;
        Put 1 on record "Progression" data index; //reset Progression data index
    end
end

method "Determine Cycle Progression"
begin
    Add 1 unit on record "Progression" data index; //bump progression
    
    //if progression data index > 8, then we are in another Cycle
    //Add on Cycle and reset progression to start of first bet.
    if record "Progression" data index > 8
    begin
        Add 1 unit on record "Number of Cycles" data;
        Set Flag "In Cycle" to False;
        Put 1 unit on record "Progression" data index; //reset Progression
    end
end

method "Dozen 1 Layout - Progression 1"
begin
    Put 100 % of record "Progression" data on Corner(1:5);
    Put 100 % of record "Progression" data on Corner(2:6);
    Put 100 % of record "Progression" data on Corner(8:12);
    Put 100 % of record "Progression" data on Corner(7:11);
end

method "Dozen 1 Layout - Progression 2"
begin
    Put 100 % of record "Progression" data on Split(2-3);
    Put 100 % of record "Progression" data on Split(5-6);
    Put 100 % of record "Progression" data on Split(8-9);
    Put 100 % of record "Progression" data on Split(11-12);
    Put 100 % of record "Progression" data on Split(1-2);
    Put 100 % of record "Progression" data on Split(4-5);
    Put 100 % of record "Progression" data on Split(7-8);
    Put 100 % of record "Progression" data on Split(10-11);
end

method "Dozen 1 Layout - Progression 3-5"
begin
    Put 100 % of record "Progression" data on Number 3;
    Put 100 % of record "Progression" data on Split(2-3);
    Put 100 % of record "Progression" data on Corner(2:6);
    Put 100 % of record "Progression" data on Split(5-6);
    Put 100 % of record "Progression" data on Corner(5:9);
    Put 100 % of record "Progression" data on Split(6-9);
    Put 100 % of record "Progression" data on Split(8-9);
    Put 100 % of record "Progression" data on Corner(8:12);
    Put 100 % of record "Progression" data on Split(11-12);
    Put 100 % of record "Progression" data on Number 12;
    Put 100 % of record "Progression" data on Number 1;
    Put 100 % of record "Progression" data on Split(1-2);
    Put 100 % of record "Progression" data on Corner(1:5);
    Put 100 % of record "Progression" data on Split(4-5);
    Put 100 % of record "Progression" data on Corner(4:8);
    Put 100 % of record "Progression" data on Split(4-7);
    Put 100 % of record "Progression" data on Split(7-8);
    Put 100 % of record "Progression" data on Corner(7:11);
    Put 100 % of record "Progression" data on Split(10-11);
    Put 100 % of record "Progression" data on Number 10;
end

method "Dozen 2 Layout - Progression 1"
begin
    Put 100 % of record "Progression" data on Corner(14:18);
    Put 100 % of record "Progression" data on Corner(13:17);
    Put 100 % of record "Progression" data on Corner(20:24);
    Put 100 % of record "Progression" data on Corner(19:23);
end

method "Dozen 2 Layout - Progression 2"
begin
    Put 100 % of record "Progression" data on Split(14-15);
    Put 100 % of record "Progression" data on Split(17-18);
    Put 100 % of record "Progression" data on Split(20-21);
    Put 100 % of record "Progression" data on Split(23-24);
    Put 100 % of record "Progression" data on Split(13-14);
    Put 100 % of record "Progression" data on Split(16-17);
    Put 100 % of record "Progression" data on Split(19-20);
    Put 100 % of record "Progression" data on Split(22-23);
end

method "Dozen 2 Layout - Progression 3-5"
begin
    Put 100 % of record "Progression" data on Number 15;
    Put 100 % of record "Progression" data on Split(14-15);
    Put 100 % of record "Progression" data on Corner(14:18);
    Put 100 % of record "Progression" data on Split(17-18);
    Put 100 % of record "Progression" data on Corner(17:21);
    Put 100 % of record "Progression" data on Split(18-21);
    Put 100 % of record "Progression" data on Split(20-21);
    Put 100 % of record "Progression" data on Corner(20:24);
    Put 100 % of record "Progression" data on Split(23-24);
    Put 100 % of record "Progression" data on Number 24;
    Put 100 % of record "Progression" data on Number 13;
    Put 100 % of record "Progression" data on Split(13-14);
    Put 100 % of record "Progression" data on Corner(13:17);
    Put 100 % of record "Progression" data on Split(16-17);
    Put 100 % of record "Progression" data on Corner(16:20);
    Put 100 % of record "Progression" data on Split(16-19);
    Put 100 % of record "Progression" data on Split(19-20);
    Put 100 % of record "Progression" data on Corner(19:23);
    Put 100 % of record "Progression" data on Split(22-23);
    Put 100 % of record "Progression" data on Number 22;
end

method "Dozen 3 Layout - Progression 1"
begin
    Put 100 % of record "Progression" data on Corner(26:30);
    Put 100 % of record "Progression" data on Corner(25:29);
    Put 100 % of record "Progression" data on Corner(32:36);
    Put 100 % of record "Progression" data on Corner(31:35);
end

method "Dozen 3 Layout - Progression 2"
begin
    Put 100 % of record "Progression" data on Split(26-27);
    Put 100 % of record "Progression" data on Split(29-30);
    Put 100 % of record "Progression" data on Split(32-33);
    Put 100 % of record "Progression" data on Split(35-36);
    Put 100 % of record "Progression" data on Split(25-26);
    Put 100 % of record "Progression" data on Split(28-29);
    Put 100 % of record "Progression" data on Split(31-32);
    Put 100 % of record "Progression" data on Split(34-35);
end

method "Dozen 3 Layout - Progression 3-5"
begin
    Put 100 % of record "Progression" data on Number 27;
    Put 100 % of record "Progression" data on Number 25;
    Put 100 % of record "Progression" data on Number 36;
    Put 100 % of record "Progression" data on Number 34;
    Put 100 % of record "Progression" data on Corner(26:30);
    Put 100 % of record "Progression" data on Corner(25:29);
    Put 100 % of record "Progression" data on Corner(32:36);
    Put 100 % of record "Progression" data on Corner(31:35);
    Put 100 % of record "Progression" data on Corner(28:32);
    Put 100 % of record "Progression" data on Corner(29:33);
    Put 100 % of record "Progression" data on Split(26-27);
    Put 100 % of record "Progression" data on Split(29-30);
    Put 100 % of record "Progression" data on Split(32-33);
    Put 100 % of record "Progression" data on Split(35-36);
    Put 100 % of record "Progression" data on Split(25-26);
    Put 100 % of record "Progression" data on Split(28-29);
    Put 100 % of record "Progression" data on Split(31-32);
    Put 100 % of record "Progression" data on Split(34-35);
    Put 100 % of record "Progression" data on Split(28-31);
    Put 100 % of record "Progression" data on Split(30-33);
end

method "Make Bet"
begin
    if record "Dozen Indicator" data = 1
    begin
        //1st Dozen selected
        
        if record "Progression" data index = 1
        begin
            Call "Dozen 1 Layout - Progression 1";
        end
        
        if record "Progression" data index = 2
        begin
            Call "Dozen 1 Layout - Progression 2";
        end
        
        if record "Progression" data index > 2
        begin
            Call "Dozen 1 Layout - Progression 3-5";
        end
    end
    Else
    begin
        if record "Dozen Indicator" data = 2
        begin
            //2nd Dozen selected
            
            if record "Progression" data index = 1
            begin
                Call "Dozen 2 Layout - Progression 1";
            end
            
            if record "Progression" data index = 2
            begin
                Call "Dozen 2 Layout - Progression 2";
            end
            
            if record "Progression" data index > 2
            begin
                Call "Dozen 2 Layout - Progression 3-5";
            end
        end
        Else
        begin
            if record "Dozen Indicator" data = 3
            begin
                //3rd Dozen selected
                
                if record "Progression" data index = 1
                begin
                    Call "Dozen 3 Layout - Progression 1";
                end
                
                if record "Progression" data index = 2
                begin
                    Call "Dozen 3 Layout - Progression 2";
                end
                
                if record "Progression" data index > 2
                begin
                    Call "Dozen 3 Layout - Progression 3-5";
                end
            end
        end
    end
end

method "Initialize"
begin
    //Progression list for Normal and Cycle bets
    Set List of [1,1,1,2,3,5,10,15] to record "Progression" data;
    Set Flag "In Cycle" to False;
end

method "Input data"
begin
    Input Dropdown "Enter starting Dozen
              
                    1:= 1st Dozen
                    2:= 2nd Dozen
                    3:= 3rd Dozen" to record "Dozen Indicator" data;
end
