Harbour Project
Estava faltando descomplicar...
Vide exemplo de minha autoria que baixa um arquivo da internet... talvez ficar milionário!
Para trabalhar com as funções HB_UNZIPFILE e HB_ZIPFILE você precisa linkar as LIBs: hbzip.lib; hbmzip.lib; zlib.lib.
Estamos anexando o programa para download no rodapé.
FUNCTION MAIN()
*** definições iniciais ***-------------------------------------------------
SETMODE(60,132)
*** SETs
SET SCOREBOARD OFF
SET DATE BRITISH
SET(36, 23)
SET(37, .F.)
SET DELETED ON
SET EPOCH TO 1980
SETMODE(25,80)
SET MESSAGE TO 24
SET OPTIMIZE ON
SETMOUSE(.t.)
SET(39,159) // MOUSE NOS GETs
SET TIME FORMAT TO "hh:mm"
SET CENTURY ON
SET CONFIRM ON
REQUEST HB_LANG_PT
HB_LangSelect("PT")
HB_SetCodePage("PT850")
#IFDEF __GTWVW__
wvw_setcodepage(,255)
#ENDIF
*** DEFINIR TIPO DE BANCO DE DADOS: DBFCDX Nativo ***
REQUEST DBFCDX
REQUEST DBFFPT
ANNOUNCE FPTCDX
RDDSETDEFAULT("DBFCDX")
RDDREGISTER( "DBFCDX", 1 ) // RDT_FULL
SET AUTOPEN OFF
*** DEFINIR IDIOMA PORTUGUÊS ***
REQUEST HB_CODEPAGE_PT850 &&& PARA INDEXAR CAMPOS ACENTUADOS
HB_SETCODEPAGE("PT850") &&& PARA INDEXAR CAMPOS ACENTUADOS
*** LIMPA A TELA E MOSTRA PRIMEIRAS INFORMAÇÕES
CLS
? "*** MEGASENA ***"
? "SORTEIOS SÃO REALIZADOS ÀS QUARTAS E SÁBADOS"
?
dBANCO := FILEDATE("SENA.DBF") // DATA DE GERAÇÃO DO ARQUIVO SENA.DBF
? "HOJE: "+DTOC(DATE()) + " - ÚLTIMA CARGA: "+DTOC(dBANCO)
?
IF EMPTY(dBANCO) .OR. DATE() # dBANCO
IF (ALERT("ATUALIZA ARQUIVOS AGORA?", {"SIM", "NÃO"}))=1
*** BAIXA ARQUIVO COM OS RESULTADOS DA INTERNET AUTOMATICAMENTE
cURL := "http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip"
oHTTP := TIpClientHttp():new( cURL )
cARQ := "D_MEGA.HTM" // ARQUIVO COM OS RESULTADOS DOS SORTEIOS
cZIP := "D_megase.zip"
IF oHTTP:OPEN()
? "BAIXANDO ARQUIVO COM OS RESULTADOS DA INTERNET..."
? cURL
?
cBIN := oHttp:readAll() // BAIXA ARQUIVO E GRAVA EM cBIN
oHTTP:CLOSE()
Memowrit( cZIP, cBIN ) // CRIA ARQUIVO COM cBIN
IF FILE(cZIP)
? cZIP, ALLTRIM(STR( HB_FSIZE(cZIP)/1024 ))+"Kb", FILEDATE(cZIP)
? "SUCESSO!"
?
ENDIF
? "DESCOMPACTANDO O ARQUIVO '"+cARQ+"' DE 'D_megase.zip'"
IF HB_UNZIPFILE(cZIP,,,,".\",cARQ)
? cARQ, ALLTRIM(STR( HB_FSIZE(cARQ)/1024 ))+"Kb", FILEDATE(cARQ)
? "SUCESSO!"
?
ELSE
? "NÃO FOI POSSÍVEL DESCOMPACTAR O ARQUIVO '"+cARQ+"' AUTOMATICAMENTE"
? "DESCOMPACTE-O MANUALMENTE AQUI NESTA PASTA DO PROGRAMA"
?
ENDIF
ELSE
? "Erro de conexão:", oHttp:lastErrorMessage()
? "BAIXE O ARQUIVO "+cURL+ " MANUALMENTE DA INTERNET E DESCOMPACTE ELE NA PASTA DESTE PROGRAMA."
ENDIF
IF !FILE(cARQ)
? "NÃO É POSSÍVEL ATUALIZAR SEM O ARQUIVO '"+cARQ+"'."
? "ABORTANDO PROGRAMA..."
QUIT
ENDIF
*** RECIPIENTE DO ARQUIVO IMPORTADO
? TIME()+" - CRIANDO BANCO DE DADOS RECIPIENTE DO ARQUIVO D_MEGA.HTM..."
RUN ("DEL SENA.DBF")
aDBF = {}
aadd(aDBF, {"TAG", "C", 4, 0})
aadd(aDBF, {"DATA", "C", 10, 0}) // PEGAR DATA SORTEIO COMO MARCO INICIAL
aadd(aDBF, {"RESTO", "C", 3000, 0})
dbcreate("SENA.DBF", aDBF)
? TIME()+" - RENOMEANDO O ARQUIVO D_MEGA.HTM P/ D_MEGA.TXT P/ IMPORTAÇÃO DAS INFORMAÇÕES..."
IF FILE("D_MEGA.HTM")
RUN ("DEL D_MEGA.TXT")
RUN RENAME D_MEGA.HTM D_MEGA.TXT
ELSEIF !FILE("D_MEGA.TXT")
? "ALERTA: FALTA BAIXAR ARQUIVO COM OS RESULTADOS DA MEGASENA"
? "ABORTANDO..."
QUIT
ENDIF
? TIME()+" - IMPORTANDO TODAS AS INFORMAÇÕES DO ARQUIVO D_MEGA.HTM PARA SENA.DBF..."
USE SENA ALIAS SE EXCLUSIVE NEW
APPEND FROM D_MEGA.TXT SDF
? TIME()+" - CRIANDO ARQUIVO SORTEIOS.DBF P/ ARMAZENAR SÓ AS DEZENAS JÁ SORTEADAS..."
IF FILE("SORTEIOS.DBF")
RUN ("DEL SORTEIOS.DBF")
ENDIF
aDBF = {}
aadd(aDBF, {"DEZ1", "N", 2, 0})
aadd(aDBF, {"DEZ2", "N", 2, 0})
aadd(aDBF, {"DEZ3", "N", 2, 0})
aadd(aDBF, {"DEZ4", "N", 2, 0})
aadd(aDBF, {"DEZ5", "N", 2, 0})
aadd(aDBF, {"DEZ6", "N", 2, 0})
dbcreate("SORTEIOS.DBF", aDBF)
? TIME()+" - LENDO O ARQUIVO SENA.DBF PARA GRAVAR AS DEZENAS SORTEADAS EM SORTEIOS.DBF..."
USE SORTEIOS ALIAS DEZ EXCLUSIVE NEW
SELECT SE // SENA.DBF
SE->(DBGOTOP()) // POSICIONA NO 1° REGISTRO
DO WHILE !SE->(EOF()) // FAÇA ENQUANTO NÃO É FIM DO ARQUIVO
dSORTEIO := CTOD(SE->DATA) // TRANSFORMA CAMPO CARACTER PARA DATA, SE FOR DATA.
IF !EMPTY(dSORTEIO)
// SE TRANSFORMOU, O CAMPO É DATA. NO CASO, A DATA DO SORTEIO.
// AS 6 LINHAS SEGUINTES SÃO AS DEZENAS SORTEADAS.
SE->(DBSKIP()) // PULA P/ PROXIMA LINHA
DEZ->(DBAPPEND()) // INSERE REGISTRO EM BRANCO
// AS 6 LINHAS SEGUINTES SÃO AS DEZENAS SORTEADAS
DEZ->DEZ1 := VAL( LEFT(SE->DATA,2) )
SE->(DBSKIP()) // PULA P/ PROXIMA LINHA
DEZ->DEZ2 := VAL( LEFT(SE->DATA,2) )
SE->(DBSKIP())
DEZ->DEZ3 := VAL( LEFT(SE->DATA,2) )
SE->(DBSKIP())
DEZ->DEZ4 := VAL( LEFT(SE->DATA,2) )
SE->(DBSKIP())
DEZ->DEZ5 := VAL( LEFT(SE->DATA,2) )
SE->(DBSKIP())
DEZ->DEZ6 := VAL( LEFT(SE->DATA,2) )
ENDIF
SE->(DBSKIP())
ENDDO
SE->(DBCOMMIT()) // DESPEJA CACHE NO DISCO, FORÇA GRAVAÇÃO.
? TIME()+" - CRIANDO ARQUIVO RANKING.DBF P/ RANKING DAS DEZENAS MAIS SORTEADAS..."
RUN ("DEL RANKING.DBF")
RUN ("DEL RANKING.CDX")
// AS 6 DEZENAS NEM SEMPRE CONTÉM OS NÚMEROS MAIS SORTEADOS
// POR ISSO FAREMOS UM RANKING PARA CADA UMA DAS 6 DEZENAS
// ASSIM AUMENTAMOS A CHANCE
aDBF = {}
aadd(aDBF, {"DEZ1", "N", 2, 0}) // DEZENA
aadd(aDBF, {"RPT1", "N", 5, 0}) // VEZES QUE ELA SE REPETE
aadd(aDBF, {"RNK1", "N", 2, 0}) // RANKING: POSIÇÃO EM QUE OCUPA ENTRE AS MAIS SORTEADAS
aadd(aDBF, {"DEZ2", "N", 2, 0})
aadd(aDBF, {"RPT2", "N", 5, 0})
aadd(aDBF, {"RNK2", "N", 2, 0})
aadd(aDBF, {"DEZ3", "N", 2, 0})
aadd(aDBF, {"RPT3", "N", 5, 0})
aadd(aDBF, {"RNK3", "N", 2, 0})
aadd(aDBF, {"DEZ4", "N", 2, 0})
aadd(aDBF, {"RPT4", "N", 5, 0})
aadd(aDBF, {"RNK4", "N", 2, 0})
aadd(aDBF, {"DEZ5", "N", 2, 0})
aadd(aDBF, {"RPT5", "N", 5, 0})
aadd(aDBF, {"RNK5", "N", 2, 0})
aadd(aDBF, {"DEZ6", "N", 2, 0})
aadd(aDBF, {"RPT6", "N", 5, 0})
aadd(aDBF, {"RNK6", "N", 2, 0})
dbcreate("RANKING.DBF", aDBF)
USE RANKING ALIAS RNK EXCLUSIVE NEW
// CRIANDO ARQUIVO DE ÍNDICES
INDEX ON STRZERO(DEZ1,2) TAG DEZ1 TO RANKING
INDEX ON DESCEND( STRZERO(RPT1,2) ) TAG RPT1 TO RANKING
INDEX ON STRZERO(RNK1,2) TAG RNK1 TO RANKING
INDEX ON STRZERO(DEZ2,2) TAG DEZ2 TO RANKING
INDEX ON DESCEND( STRZERO(RPT2,2) ) TAG RPT2 TO RANKING
INDEX ON STRZERO(RNK2,2) TAG RNK2 TO RANKING
INDEX ON STRZERO(DEZ3,2) TAG DEZ3 TO RANKING
INDEX ON DESCEND(STRZERO(RPT3,2) ) TAG RPT3 TO RANKING
INDEX ON STRZERO(RNK3,2) TAG RNK3 TO RANKING
INDEX ON STRZERO(DEZ4,2) TAG DEZ4 TO RANKING
INDEX ON DESCEND(STRZERO(RPT4,2) ) TAG RPT4 TO RANKING
INDEX ON STRZERO(RNK4,2) TAG RNK4 TO RANKING
INDEX ON STRZERO(DEZ5,2) TAG DEZ5 TO RANKING
INDEX ON DESCEND(STRZERO(RPT5,2) ) TAG RPT5 TO RANKING
INDEX ON STRZERO(RNK5,2) TAG RNK5 TO RANKING
INDEX ON STRZERO(DEZ6,2) TAG DEZ6 TO RANKING
INDEX ON DESCEND(STRZERO(RPT6,2) ) TAG RPT6 TO RANKING
INDEX ON STRZERO(RNK6,2) TAG RNK6 TO RANKING
SET INDEX TO RANKING // ABRINDO ARQUIVO DE ÍNDICES
? TIME()+" - LEVANTANDO INFORMAÇÕES SOBRE CADA BOLA SORTEADA..."
// VAMOS CRIAR 60 REGISTROS EM BRANCO P/ GUARDAR AS INFORMAÇÕES
FOR X=1 TO 60
RNK->(DBAPPEND())
NEXT
? "1ª BOLA:"
? TIME()+" - VERIFICANDO QUANTAS VEZES CADA DEZENA FOI SORTEADA..."
RNK->(ORDSETFOCUS("DEZ1")) // POR ORDEM DE DEZENA
DEZ->(DBGOTOP())
RNK->(DBGOTOP())
DO WHILE !DEZ->(EOF())
IF !RNK->(DBSEEK( STRZERO(DEZ->DEZ1,2) ))
RNK->(DBGOTOP()) // POSICIONA NO INICIO DO ARQUIVO
DO WHILE !EMPTY(RNK->DEZ1) // DESCE ATÉ ACHAR UM CAMPO EM BRANCO
RNK->(DBSKIP())
ENDDO
RNK->DEZ1 := DEZ->DEZ1
RNK->RPT1 := 1
ELSE
RNK->RPT1++
ENDIF
DEZ->(DBSKIP())
ENDDO
? TIME()+" - FAZENDO O RANKING DAS MAIS SORTEADAS..."
RNK->(ORDSETFOCUS("RPT1")) // POR ORDEM DE REPETIÇÃO DA DEZENA
RNK->(DBGOTOP())
nRANK := 1
DO WHILE !RNK->(EOF())
RNK->RNK1 := nRANK++
RNK->(DBSKIP())
ENDDO
? "2ª BOLA:"
? TIME()+" - VERIFICANDO QUANTAS VEZES CADA DEZENA FOI SORTEADA..."
RNK->(ORDSETFOCUS("DEZ2")) // POR ORDEM DE DEZENA
DEZ->(DBGOTOP())
RNK->(DBGOTOP())
DO WHILE !DEZ->(EOF())
IF !RNK->(DBSEEK( STRZERO(DEZ->DEZ2,2) ))
RNK->(DBGOTOP()) // POSICIONA NO INICIO DO ARQUIVO
DO WHILE !EMPTY(RNK->DEZ2) // DESCE ATÉ ACHAR UM CAMPO EM BRANCO
RNK->(DBSKIP())
ENDDO
RNK->DEZ2 := DEZ->DEZ2
RNK->RPT2 := 1
ELSE
RNK->RPT2++
ENDIF
DEZ->(DBSKIP())
ENDDO
? TIME()+" - FAZENDO O RANKING DAS MAIS SORTEADAS..."
RNK->(ORDSETFOCUS("RPT2")) // POR ORDEM DE REPETIÇÃO DA DEZENA
RNK->(DBGOTOP())
nRANK := 1
DO WHILE !RNK->(EOF())
RNK->RNK2 := nRANK++
RNK->(DBSKIP())
ENDDO
? "3ª BOLA:"
? TIME()+" - VERIFICANDO QUANTAS VEZES CADA DEZENA FOI SORTEADA..."
RNK->(ORDSETFOCUS("DEZ3")) // POR ORDEM DE DEZENA
DEZ->(DBGOTOP())
RNK->(DBGOTOP())
DO WHILE !DEZ->(EOF())
IF !RNK->(DBSEEK( STRZERO(DEZ->DEZ3,2) ))
RNK->(DBGOTOP()) // POSICIONA NO INICIO DO ARQUIVO
DO WHILE !EMPTY(RNK->DEZ3) // DESCE ATÉ ACHAR UM CAMPO EM BRANCO
RNK->(DBSKIP())
ENDDO
RNK->DEZ3 := DEZ->DEZ3
RNK->RPT3 := 1
ELSE
RNK->RPT3++
ENDIF
DEZ->(DBSKIP())
ENDDO
? TIME()+" - FAZENDO O RANKING DAS MAIS SORTEADAS..."
RNK->(ORDSETFOCUS("RPT3")) // POR ORDEM DE REPETIÇÃO DA DEZENA
RNK->(DBGOTOP())
nRANK := 1
DO WHILE !RNK->(EOF())
RNK->RNK3 := nRANK++
RNK->(DBSKIP())
ENDDO
? "4ª BOLA:"
? TIME()+" - VERIFICANDO QUANTAS VEZES CADA DEZENA FOI SORTEADA..."
RNK->(ORDSETFOCUS("DEZ4")) // POR ORDEM DE DEZENA
DEZ->(DBGOTOP())
RNK->(DBGOTOP())
DO WHILE !DEZ->(EOF())
IF !RNK->(DBSEEK( STRZERO(DEZ->DEZ4,2) ))
RNK->(DBGOTOP()) // POSICIONA NO INICIO DO ARQUIVO
DO WHILE !EMPTY(RNK->DEZ4) // DESCE ATÉ ACHAR UM CAMPO EM BRANCO
RNK->(DBSKIP())
ENDDO
RNK->DEZ4 := DEZ->DEZ4
RNK->RPT4 := 1
ELSE
RNK->RPT4++
ENDIF
DEZ->(DBSKIP())
ENDDO
? TIME()+" - FAZENDO O RANKING DAS MAIS SORTEADAS..."
RNK->(ORDSETFOCUS("RPT4")) // POR ORDEM DE REPETIÇÃO DA DEZENA
RNK->(DBGOTOP())
nRANK := 1
DO WHILE !RNK->(EOF())
RNK->RNK4 := nRANK++
RNK->(DBSKIP())
ENDDO
? "5ª BOLA:"
? TIME()+" - VERIFICANDO QUANTAS VEZES CADA DEZENA FOI SORTEADA..."
RNK->(ORDSETFOCUS("DEZ5")) // POR ORDEM DE DEZENA
DEZ->(DBGOTOP())
RNK->(DBGOTOP())
DO WHILE !DEZ->(EOF())
IF !RNK->(DBSEEK( STRZERO(DEZ->DEZ5,2) ))
RNK->(DBGOTOP()) // POSICIONA NO INICIO DO ARQUIVO
DO WHILE !EMPTY(RNK->DEZ5) // DESCE ATÉ ACHAR UM CAMPO EM BRANCO
RNK->(DBSKIP())
ENDDO
RNK->DEZ5 := DEZ->DEZ5
RNK->RPT5 := 1
ELSE
RNK->RPT5++
ENDIF
DEZ->(DBSKIP())
ENDDO
? TIME()+" - FAZENDO O RANKING DAS MAIS SORTEADAS..."
RNK->(ORDSETFOCUS("RPT5")) // POR ORDEM DE REPETIÇÃO DA DEZENA
RNK->(DBGOTOP())
nRANK := 1
DO WHILE !RNK->(EOF())
RNK->RNK5 := nRANK++
RNK->(DBSKIP())
ENDDO
? "6ª BOLA:"
? TIME()+" - VERIFICANDO QUANTAS VEZES CADA DEZENA FOI SORTEADA..."
RNK->(ORDSETFOCUS("DEZ6")) // POR ORDEM DE DEZENA
DEZ->(DBGOTOP())
RNK->(DBGOTOP())
DO WHILE !DEZ->(EOF())
IF !RNK->(DBSEEK( STRZERO(DEZ->DEZ6,2) ))
RNK->(DBGOTOP()) // POSICIONA NO INICIO DO ARQUIVO
DO WHILE !EMPTY(RNK->DEZ6) // DESCE ATÉ ACHAR UM CAMPO EM BRANCO
RNK->(DBSKIP())
ENDDO
RNK->DEZ6 := DEZ->DEZ6
RNK->RPT6 := 1
ELSE
RNK->RPT6++
ENDIF
DEZ->(DBSKIP())
ENDDO
? TIME()+" - FAZENDO O RANKING DAS MAIS SORTEADAS..."
RNK->(ORDSETFOCUS("RPT6")) // POR ORDEM DE REPETIÇÃO DA DEZENA
RNK->(DBGOTOP())
nRANK := 1
DO WHILE !RNK->(EOF())
RNK->RNK6 := nRANK++
RNK->(DBSKIP())
ENDDO
RNK->(DBCOMMIT())
CLOSE ALL
?
? "INFORMAÇÕES COMPLETAS!"
? "PRESSIONE UMA TECLA P/ CONTINUAR"
INKEY(0)
ENDIF
ENDIF
*** PARTE DO PROGRAMA QUE SORTEIA OS NÚMEROS ***-------------------------
USE RANKING ALIAS RNK EXCLUSIVE NEW
SET INDEX TO RANKING
RNK->(ORDSETFOCUS("RPT1")) // POR REPETIÇÃO/OCORRENCIA
RNK->(DBGOTOP())
CLS
@ 00,00 SAY PADC("*** Ranking da MEGA SENA ***",80)
@ 01,00 SAY PADC("Sorteia no Ranking dos sorteios",80)
nAPOSTAS := nDE := nATE := nDEZENAS := 0
@ 03,10 SAY "QUANTAS APOSTAS?.............:" GET nAPOSTAS PICT "999"
* @ 04,10 SAY "CARTELA DE (6-10)............:" GET nDEZENAS RANGE 6,10 PICT "99"
@ 04,10 SAY "CARTELA DE 6 DEZENAS"; nDEZENAS := 6
@ 05,10 SAY "CLASSIFICAÇÃO ENTRE..........:" GET nDE PICT "99"
@ 05,44 SAY "E" GET nATE PICT "99" VALID nATE > nDE
READ
@ 07,00 SAY "Números sorteados entre "+str(nDE,2)+" e "+STR(nATE,2)+" do Ranking:"
LL := 9
SETPOS(LL,00)
aCARTELA := {} // CONTROLAR NUMEROS DA CARTELA PARA NAO REPETIR
aJOGOS := {}
aEMPATE := {}
FOR X=1 TO nAPOSTAS
FOR S=1 TO nDEZENAS
// aCARTELA TERÁ <nDEZENAS> DEZENAS
DO WHILE .T.
RNK->(ORDSETFOCUS("RNK"+STR(S,1) ))
RNK->(DBGOTOP())
// SORTEIA ENTRE A CLASSIFICAÇÃO DO RANKING ESCOLHIDA
nSORTE := HB_RANDOMINT(nDE, nATE )
nSORTE := STRZERO(nSORTE,2)
RNK->(DBSEEK(nSORTE)) // POSICIONA NA DEZENA DE NÚMERO <nSORTE> DO RANKING
bDEZ := &( "{|| RNK->DEZ"+STR(S,1)+" }" ) // CODEBLOCK COM O NOME DO CAMPO
nDEZ := EVAL( bDEZ ) // VALOR DO CAMPO
// TESTA SE HÁ EMPATADOS NO RANKING
bRPT := &( "{|| RNK->RPT"+STR(S,1)+" }" ) // CODEBLOCK COM O NOME DO CAMPO
nRPT := EVAL( bRPT ) // VALOR QUE A DEZENA SE REPETIU P/ OCUPAR ESTE LUGAR NO RANKING
RNK->(ORDSETFOCUS("RPT"+STR(S,1) ))
RNK->(DBGOTOP())
RNK->(DBSEEK( STRZERO(nRPT,2) )) // POSICIONA NA 1ª DEZENA QUE SE REPETIU IGUAL A DEZENA SORTEADA DO RANKING
RNK->(DBSKIP())
IF EVAL(bRPT) = nRPT // HÁ EMPATADOS?
DO WHILE EVAL(bRPT) = nRPT // FAÇA ENQUANTO MESMA REPETIÇÃO DA DEZENA NO RANKING
aADD(aEMPATE, EVAL(bDEZ) )
RNK->(DBSKIP())
ENDDO
nEMPATES := LEN(aEMPATE)
IF nEMPATES > 0 // HÁ EMPATES NO RANKING
nSORTE := HB_RANDOMINT(1, nEMPATES )
nDEZ := aEMPATE[nSORTE] // SORTEIA UM ENTRE OS EMPATADOS DO RANKING
ENDIF
aEMPATE := {} // ZERA MATRIZ DE EMPATES
ENDIF
IF aSCAN(aCARTELA, nDEZ) > 0
// JÁ SORTEIOU ESTA DEZENA NESTA CARTELA
LOOP // VOLTA
ENDIF
aADD(aCARTELA, nDEZ)
EXIT
ENDDO
NEXT
aSORT(aCARTELA) // COLOCA MATRIZ DAS 6 DEZENAS EM ORDEM CRESCENTE
// FACILITA IDENTIFICAÇÃO E ANULAÇÃO DE CARTELAS IGUAIS
*** MOSTRA DEZENAS SORTEADAS NA TELA
FOR T=1 TO nDEZENAS
@ LL,COL()+2 SAY aCARTELA[T]
NEXT
SETPOS(++LL,0)
*** TESTA SE NÃO HÁ CARTELAS IGUAIS
IF aSCAN(aJOGOS, aCARTELA) > 0 // SE JÁ TEM aCARTELA EM aJOGOS
LOOP // SE JÁ TEM, VOLTA E REPETE SORTEIO DA CARTELA
ENDIF
aADD(aJOGOS, aCARTELA) // ACRESCENTA aCARTELA EM aJOGOS
aCARTELA := {} // NOVA CARTELA ZERADA
NEXT
INKEY(0)
Comentários recentes