system "Dominique"
{
Sistema: Dominique
Autore: Paolo Dipinto
Xtremizzato da: laRoulette.it

Descrizione:
Si registrano gli numeri usciti contando le ripetizioni di due
quando si hanno 5 numeri usciti almeno due volte il gioco diventa attivo

Spiegazione dettagliata sul sito "www.Laroulette.it"
Questa versione non prevede stopwin e stoploss
}



method "main"
begin
    while starting new session
    begin
        copy list [Number 0, Number 1, Number 2, Number 3, Number 4, Number 5, Number 6, Number 7, Number 8
            , Number 9, Number 10, Number 11, Number 12, Number 13, Number 14, Number 15, Number 16
            , Number 17, Number 18, Number 19, Number 20, Number 21, Number 22, Number 23, Number 24
            , Number 25, Number 26, Number 27, Number 28, Number 29, Number 30, Number 31, Number 32
            , Number 33, Number 34, Number 35, Number 36] Record "Numeri" Layout
        clear record "PenultimoSpin" data
        clear record "UltimoSpin" data

        set flag "gioca" false
        Put 1 record "pezzi" data
        Put 0 record "Spins" data
        exit
    end
    add 1 record "Spins" data
    Copy last Number Record "Ultimo" Layout  //Memorizza l'ultimo

    Call "Controlla uscite"

    Copy last Number Record "Usciti" Layout  // Memorizza i numeri nel record "Usciti"
    add 1  Record "Usciti" Layout index

	Call "Risultato"
	
    if flag "gioca" true    // S eil gioco è attivo punta
    begin
		call "punta"
	end
    
	Copy last Number Record "Penultimo" Layout  //Memorizza l'ultimo che diventa penutlimo
end
method "Risultato"
begin
    // verifica che non ci siano puntate per calcolare le vincite fittizie
    if any number bet <= 0
	begin
	 put 1 record "Da puntare" layout index
	 loop until record "Da puntare" layout index > Record "Da puntare" Layout count
 	 begin  // controlla l'ultimo con quelli in gioco fittizio
 		if Record "Ultimo" Layout = record "Da puntare" layout
		begin
		 	set flag "Vincita virtuale" true
		end  
 		add 1 record "Da puntare" Layout index
 	 end
	end     
	if flag "Vincita virtuale" true // se vince azzera
	begin
		call "Azzera cassa"
	end
    // Controlla l'esito delle puntate
	if Any Number Bet won each  // verifica se si è ottenuta una vincita
	begin
		if bankroll >=0      // se la cassa è attiva si ricomincia
		begin
			put 1 record "Pezzi" Data
			put 0 record "conta perse" data
			call "Azzera cassa"
		end
		else         // altrimenti si riduce la progressione e si ripunta
		begin
			subtract 1 record "Pezzi" Data
			put 0 record "conta perse" data
		end  
	end
	if net <0     // se si perde si contano le sconfitte alla quarta aumenta la progressione
	begin
		add 1 record "conta perse" data
		if record "conta perse" data =4
		begin
			add 1 record "Pezzi" Data
			put 0 record "conta perse" data
		end
	end
end

method "punta"
begin
	put 100% record "pezzi" data nel  Record"Da puntare" layout list	//punta sui doppi
	if record "conta fittizi" Data < 8 // se si gioca fittizio
	begin
		put 0 All Bets  // li toglie
	end
	add 1 record "conta fittizi" Data

end  

method "Azzera cassa"
begin
			Set flag "gioca" false
			set flag "Vincita virtuale"false
			put 0 All Bets
			put 0 record "conta fittizi" data
			put 0 record "conta perse" data

end  
method "Controlla uscite"
begin
        // Assegna le boules degli ultimi e dei penultimi
        Put 1 record "Numeri" Layout index
        loop until record "Numeri" Layout index > record "Numeri" Layout count
        begin
            If Record "Ultimo" Layout = record "Numeri" Layout
            begin
                Put 100% record "Numeri" Layout index nel  record "UltimoSpin" data index
                If record "UltimoSpin" data = 0
                begin
                    Put 100% record "Numeri" Layout index  record "UltimoSpin" data index
                    Put 100%  record "Spins" data nel record "UltimoSpin" data
                end
                Else
                begin
                    Put 100% record "Numeri" Layout index  record "UltimoSpin" data index
                    Put 100% record "Numeri" Layout index  record "PenultimoSpin" data index

                    Put 100% record "UltimoSpin" data nel record "PenultimoSpin" data
                    Put 100%  record "Spins" data nel record "UltimoSpin" data
                    Add 1 record "Ripetizioni" data
                end
            end
            Add 1 record "Numeri" Layout index
        end
        // Selezione numeri doppi da puntare
        Duplicate record "PenultimoSpin" record "X()"
        Call "Bubble Sort"   // Ordinamento penultimi

        Put 0 Record "Da puntare" layout index
        // Cerca i numeri corrispondenti alle boule dei penultimi e li mette da puntare
        Put 1  record "X()" data index
        loop until record "X()" data index >5
        begin
            If record "X()" data = 0  //verifica che ci siano almeno 5 penultimi
            begin
                set flag "gioca" false
            end
            else
            begin
                put 100% record "X()" data nel record "Usciti" layout index
                Add 1 record "Da puntare" layout index
                copy  record "Usciti" layout nel record "Da puntare" layout

                set flag "gioca" true
            end
            add 1  record "X()" data index
        end

        set max record "Usciti" Layout index
        Add 1 record "Usciti" Layout index
end

method "Bubble Sort"
{
    Bubble Sort to sort data items from a Data record "X()"

    Algorithm

      X() = an array of items
      N = # of items in the array
      H = temporary variable to swap data in the X() array

      FOR I = 1 TO N - 1
        FOR J = I + 1 TO N
          IF X(I)>X(J) THEN
          BEGIN
             H = X(I)
             X(I) = X(J)
             X(J) = H
          END
        NEXT J
      NEXT I

******* REQUIRED INPUTS for this METHOD **********

        record "X()" data - contains a list of numeric values
        flag "Descending"
            True  = sort Descending
            False = sort Ascending

}
begin
    set max to record "X()" Data index
    put 100% of record "X()" data index to record "N-1" data
    put 100% of record "X()" data index to record "N" data
    subtract 1 from record "N-1" data

    put 1 on record "I" data

    Loop until record "I" data > record "N-1" data
    begin
        put 100% of record "I" data to record "J" data
        add 1 to record "J" data

        Loop until record "J" data > record "N" data
        begin
            put 100% of record "I" data to record "X()" data index
            put 100% of record "X()" data to record "X(I)" data
            put 100% of record "J" data to record "X()" data index
            put 100% of record "X()" data to record "X(J)" data

            if Flag "Descending" is true
            begin
                if record "X(I)" data > record "X(J)" data
                begin
                    put 100% of record "X(I)" data to record "H" data
                    put 100% of record "X(J)" data to record "X(I)" data
                    put 100% of record "H" data to record "X(J)" data


                    put 100% of record "I" data to record "X()" data index
                    put 100% of record "X(I)" data to record "X()" data
                    put 100% of record "J" data to record "X()" data index
                    put 100% of record "X(J)" data to record "X()" data
                end
            end
            else
            begin
                if record "X(I)" data < record "X(J)" data
                begin
                    put 100% of record "X(I)" data to record "H" data
                    put 100% of record "X(J)" data to record "X(I)" data
                    put 100% of record "H" data to record "X(J)" data


                    put 100% of record "I" data to record "X()" data index
                    put 100% of record "X(I)" data to record "X()" data
                    put 100% of record "J" data to record "X()" data index
                    put 100% of record "X(J)" data to record "X()" data
                end
            end

            Add 1 to record "J" data
        end

        Add 1 to record "I" data
    end
end
