You are on page 1of 7

1

Universidade Pitágoras Unopar

Edital 2018.2
Projeto Integrado Multidisciplinar

Informações, Cronograma e Documentos Padrões


2

CÓDIGO DE CADASTRO: _____ECOM09_____

FRENZY - Software Gerador de Apostas de Loteria

Carlos Alberto França Alves (10° semestre – Engenharia da Computação N)


UNOPAR, Londrina, Brasil, carlosfranca.alves@gmail.com

Wagner Meira Barbosa (9° semestre – Engenharia da Computação N)


UNOPAR, Londrina, Brasil, barbosa.wagner@outlook.com

RESUMO

Apostas de loteria, assim como qualquer evento de ocorrência periódica, respeitam determinados padrões
que ao decorrer do tempo formam dados estatísticos. Através dos dados estatísticos são possíveis diversas
análises e com isso, a formação de traços probabilísticos. Considerando que uma pessoa pode levar meses
ou até anos para realizar análises estatísticas de todo o histórico de determinados tipos de apostas, o uso de
processamento computadorizado com lógica programável pode completar a mesma análise em questão de
segundos. Com base nisso surge o Frenzy, um software cujo objetivo é determinar e analisar dados
estatísticos para gerar apostas com maior probabilidade de acertos.

PALAVRAS-CHAVE: Apostas, Loteria, Estatística, Probabilidade.

1. INTRODUÇÃO

Um jogo de loteria do tipo Lotofácil, é composto por uma cartela com uma sequência de 25 números
dispostos, dos quais, deve-se marcar entre 15 e 18 números, sendo uma aposta mínima quando se marca 15
números, tem um custo de R$2,00. De acordo com o site oficial da Caixa Econômica Federal, uma aposta da
Lotofácil com números gerados aleatoriamente, possui probabilidade de acerto de 1 para 11, ou seja, uma a
cada onze apostas acertará a pontuação mínima (que é de 11 pontos) para geração de ganhos (CAIXA
ECONÔMICA, 2018).
Em termos estatísticos, a cada R$22,00 gastos com apostas, o apostador(a) terá um retorno
probabilístico de R$4,00, que é o prêmio fixo para pontuação mínima. Com o intuito de aumentar a
probabilidade de acertos, surge o Frenzy, um software desenvolvido com diversas lógicas de análise sobre
cada um dos sorteios da história, considerando todas as 3.268.760 possibilidades de volantes.
Após analisar o histórico de sorteios e definir os filtros com padrões lógicos, o sistema escolhe
aleatoriamente possibilidades, aplica os filtros de verificação e então, caso o volante passe pelos filtros, será
exibido ao usuário como uma possibilidade de aposta com maior probabilidade de acertos.
O principal objetivo do projeto é possibilitar uma maior probabilidade de acertos com base em
análises estatísticas complexas, que seriam inviáveis se realizadas à mão por uma pessoa. Além disso, o
projeto estará sempre publicado junto ao GitHub para que outras pessoas com interesse em comum possam
implementar melhorias e novas funcionalidades ao mesmo.

2. FUNDAMENTAÇÃO TEÓRICA

Por se tratar de algo inovador, há pouco conteúdo publicado nos meios disponíveis, porém
inicialmente foi fundamental compreender o funcionamento de estatística e probabilidades, assim como suas
diferenças. Partindo disso, após o estudo na área de desenvolvimento de software, tornou-se possível a
estruturação da ideia, bem como, a inicialização do desenvolvimento do projeto.

2.1 Estrutura lógica do sistema

O software deverá ler todo o histórico de sorteios da Lotofácil e a partir de disso, identificar os
padrões de comportamento entre os sorteios afim de definir posteriormente os filtros de qualidade de volantes.
Com a leitura de sorteio a sorteio de toda a história, o sistema calcula médias comportamentais que
auxiliam na definição de filtros fixos e variáveis, pelos quais os volantes terão que passar ao ser solicitado
pelo usuário.
3

Quando o sistema pegar uma possibilidade aleatória, há de se atentar aos tipos de filtros que a
mesma será submetida. Por exemplo: Se a possibilidade tiver uma sequência numérica muito alta, esta
deverá ser reprovada pelo filtro de números sequenciais. No entanto, se for uma possibilidade que apenas
não obedece ao filtro de quantidade de números primos, então deverá haver um determinado nível de
tolerância para que a possibilidade não seja de imediato eliminada, pois entende-se que os sorteios não
obedecem sempre a todas as regras e filtros.
Para tornar a lógica mais simplificada, em cada filtro deverá haver uma tolerância de qualidade que
deverá conciliar seu teor com a tolerância já utilizada pelo objeto volante aleatório, em outro filtro anterior.

2.1.1 Filtros fixos

Filtros fixos são todos os filtros, os quais não se alteram muito a cada sorteio, como por exemplo:
Quantidade Média de Números de Pares, Quantidade Média de Números em Sequência, Tamanho Médio da
Maior Sequência Vazia, Valor Médio de Sequência de Fibonacci, Quantidade Média de Números Primos, Etc.
Considerando que em 2018 há mais de 1500 sorteios acumulados no histórico da Lotofácil, é
impossível um novo sorteio alterar drasticamente as médias acumuladas em filtros fixos.

2.1.2 Filtros variáveis

Em contrapartida aos filtros fixos, existem os filtros variáveis, que mesmo em menor quantidade,
podem se alterar muito entre um sorteio e outro, como por exemplo: Quantidade de Números Repetidos do
Último Sorteio, Números Quentes, Etc.
Os filtros variáveis são mais complexos e exigem altíssimo nível de lógica de programação para não
gerar resultados analíticos falhos.

2.2 Estrutura funcional do sistema

Considerando a interface de uso do usuário, o sistema deverá ser simples e com implementação de
programação defensiva para evitar possíveis erros ocasionados pelo mau uso do software. Ao ser executado,
o software deverá sempre que possível se comunicar com a internet e atualizar a lista de sorteios (MYERS
Alfred, 2018). Em seguida, deverá analisar todo o histórico dos sorteios para definir estatisticamente os
valores médios de cada filtro.
Considerando a crítica construtiva recebida na apresentação da versão anterior do projeto, o sistema
deverá gerar sozinho todas as possibilidades e volantes, sem considerar qualquer código ou base de dados
pronta da internet. Também deverá ter uma interface gráfica simples, onde o usuário não precise manipular
manualmente as bases de funcionamento da ferramenta.
Após o carregamento da aplicação seguindo as regras anteriores, o sistema deverá mostrar uma
tela onde permitirá ao usuário selecionar entre duas opções: Gerar Volantes ou Conferir Apostas.
Caso o usuário selecione a opção “Gerar Volantes”, o sistema deverá perguntar quantos volantes o
mesmo deseja e em seguida, deverá encontrar a quantidade correspondente obedecendo todas os filtros
definidos em seu carregamento inicial. Após encontrar a quantidade de volantes solicitada, deverá apresenta-
los na tela e oferecer a opção de salvá-los em um arquivo de texto na máquina local.
Caso o usuário selecione a opção “Conferir Apostas”, o sistema deverá coletar as apostas de
conferência juntamente com o número do concurso com o qual o usuário deseja conferir. Em seguida, deverá
processar a conferência e apresentar o resultado na tela ao usuário, assim como também oferecer uma opção
para salvar o resultado em um arquivo de texto na máquina local.
Haja visto que em sua primeira versão o sistema demorava cerca de 7 minutos para definir todos os
filtros e não tinha interface gráfica, espera-se que em sua nova versão conte com interface gráfica para
ambiente desktop e que realize o carregamento completo em menos da metade do tempo. Também se espera
que o sistema não dependa necessariamente de acesso a internet para um funcionamento básico (DOS
SANTOS, Vitor, 2018).
4

3. METODOLOGIA

Após diversas análises, testes e definições das variáveis de ambiente, decidiu-se desenvolver a
aplicação com interface gráfica para ambiente desktop com execução direta, ou seja, sem a necessidade de
se instalar junto aos registros do Windows.
Considerando que a nova versão deva contar com interface gráfica, foi necessário iniciar uma nova
fundação estrutural ao projeto, ou seja, iniciar um novo projeto em branco com a implementação parcial das
lógicas e funcionalidades já definidas em sua versão anterior(SILVA, Edney Batista, 2018).

3.1 Tecnologias utilizadas

Para o ambiente gráfico foi decido a utilização da tecnologia Windows Forms da Microsoft, juntamente
com a IDE Visual Studio 2017 Developer. Para linguagem de alto nível, foi definido o C# por ser diretamente
ligado ao Windows Forms.
Não foi necessário a utilização de banco de dados oficial, pois os dados utilizados pela aplicação são
sem peso crítico de segurança, haja visto que são dados publicados no site oficial da Caixa Econômica, bem
como, possibilidades geradas junto a instalação e salvas em arquivo .dat na pasta de aplicações locais
(AppData).
Para obter uma interface gráfica mais natural e intuitiva, também foi utilizado a biblioteca gráfica
Bunifu Framework (BUNIFU ®, 2018), bem como, definido o .Net Framework padrão de execução para a
partir da versão 4.5.2.

3.2 Desenvolvimento da base estrutural

Após definir quais as funcionalidades da aplicação, bem como, as tecnologias que seriam utilizadas,
o desenvolvimento do projeto foi iniciado e justamente o carregamento inicial foi a primeira parte a ser
desenvolvida, pois somente após o carregamento e a estrutura de dados gerada por esse escopo ser definida,
que seria possível dar continuidade com as demais telas e funcionalidades.
Durante o carregamento, conforme mostra a Figura 1, se for a primeira execução do sistema no
computador, o mesmo realiza a geração de todas as possibilidades, bem como, cria um diretório de instalação
e armazena os dados processados. A pasta padrão de instalação se chama Frenzy e fica na pasta “AppData”
do usuário logado do sistema operacional Windows (SEM AUTOR, 2018).
Para a geração de todas as possibilidades foi desenvolvido um algoritmo capaz de gerar as mais de
3 milhões de possibilidades já de forma ordenada e em menos de 30 segundos. Para isso, foi necessária uma
análise comportamental da listagem de todas as possibilidades. Apesar de terem sido investidas mais de 15
horas no desenvolvimento desse algoritmo, o resultado foi surpreendente, pois a otimização ficou em um nível
ainda não publicado na internet.
Ainda durante o carregamento inicial, após a verificação citada anteriormente o sistema inicia a
atualização do histórico de sorteios conectando-se em tempo real com o site da Caixa Econômica (NUNES,
Juliano, 2018). Ao se conectar, ele realiza o download de todos os sorteios e atualiza seu repositório local.
Como o site do governo demora cerca de 6 horas para publicar seu último sorteio realizado junto ao arquivo
de download, foi necessário também buscar o último sorteio junto a página inicial do site, que é baixado em
HTML e tratado para efeito de comparação com o arquivo baixado anteriormente.
Todo o carregamento inicial ocorre com a utilização de multithreads, pois esse modo de
funcionamento permite que vários processados sejam executados de forma assíncrona.
Após atualizar a lista de sorteios (que ocorre em todas as execuções do software), o sistema já exibe
a tela inicial onde permite “Gerar Volantes” ou “Conferir Apostas”, conforme ilustrado na Figura 2 (GODOY,
Vini, 2018). Ao ser selecionado a opção de “Gerar Volantes”, o sistema pergunta a quantidade de volantes
que o usuário deseja e em seguida, inicia a análise do histórico de sorteios para definir os filtros e na
sequência encontrar as possibilidades que se adequem aos filtros até que atenda a quantidade de volantes
solicitada.
Caso o usuário selecione a opção de “Conferir Apostas”, o sistema solicita as apostas a se conferir e
também o número do concurso que o usuário deseja conferir. Caso não seja informado o número do concurso,
o sistema comparará com o último sorteio e informará isso na tela.
Em ambos os casos, após o processamento o sistema mostra o resultado em formato de lista na tela
e disponibiliza uma opção para salvar os resultados ou volantes obtidos em um arquivo de texto na máquina
local (BERTONCINI, Alexsandro, 2018).
5

3.3 Código fonte da versão anterior

Para implementar o código fonte da versão anterior foi necessária uma total readaptação, pois com
interface gráfica são geradas várias classes para cada tela, onde antes não havia mais de uma tela. Ainda na
adaptação de código, foi necessária a utilização de classe do tipo singleton, onde ocorre um tratamento para
não permitir que haja mais um objeto correspondente ao formulário pai da aplicação (DOS SANTOS, Danilo
Aparecido, 2018).
Além do código fonte da versão anterior do sistema, novas funcionalidades foram implementadas,
como por exemplo a opção de navegar entre diferentes telas com o mouse e ainda, salvar os resultados
obtidos em arquivos de texto locais. Também foi implementado a comunicação com a internet para
atualização automática do histórico de sorteios e a geração de todas as possibilidades com código fonte
próprio. Também foi implementado uma tarefa muito importante, que é o backup automático quando baixa
novos sorteios da internet (WENZEL, Maira, 2018).
Juntamente com o código fonte da versão anterior, a nova versão conta com mais de 2 mil linhas de
código, pois todas as funcionalidades foram desenvolvidas de forma nativa, ou seja, sem a inclusão de
códigos prontos da internet.

4. RESULTADOS E DISCUSSÕES

Com o desenvolvimento da interface de gráfica da aplicação, a mesma ficou muito mais intuitiva e
construída de forma responsiva à erros, seja de conexão com a internet, seja por mau uso do usuário
(WAGNER, Bill, 2018). Também se destacou o aumento claro de segurança com os resultados obtidos, pois
antes era necessário que o usuário alimentasse o histórico de sorteios manualmente e ainda, que respeitasse
exatamente o padrão de dados inseridos nos arquivos de texto.
Em termos de otimização do tempo de execução, obteve-se um resultado melhor do que esperado
com a utilização de tecnologia multithread, pois a análise do histórico de sorteios ocorre em menos de 1
minuto e ainda, a geração de possibilidades ocorre em poucos segundos (MACORATTI, José Carlos, 2018).
Quanto ao aumento de probabilidade de acertos, houve um aumento dentro do esperado, onde com
o sistema é possível obter até 16% de chances de se acertar a pontuação mínima, que é de 11 pontos. Vale
ressaltar para efeitos de comparação, que a probabilidade comum é de aproximadamente 9% para a
pontuação mínima. Todavia, em termos comparativos houve um aumento de 78% na probabilidade de
acertos.
Em razão da alta necessidade e complexidade de converter a aplicação para interface gráfica, não
foi possível implementar muitas novidades lógicas no funcionamento dos filtros, pois apenas para a conversão
de interface foram necessárias mais de 70 horas de programação e mais de 20 dias de estudos específicos
sobre as tecnologias utilizadas.
Por fim, concluiu-se que apesar de ter sido alcançado êxito na fase atual, se faz necessário uma
melhoria na definição dos filtros fixos e a implementação filtros variáveis mais avançados com o apoio de
Inteligência Artificial, pois entende-se que ao escolher possibilidades aleatórias, o sistema já pode nessa
escolha definir uma população de possibilidades mais apta a passarem pelos filtros.

5. CONSIDERAÇÕES FINAIS

Apesar de todo o tempo investido no desenvolvimento da interface gráfica, entende-se que essa
etapa de desenvolvimento é fundamental para a continuidade aumento de utilização do software por
praticamente todos os tipos de usuários, pois a complexidade foi removida e a segurança dos dados
incomparavelmente aumentada, contando inclusive com código fonte totalmente próprio.
Com uma interface gráfica, a aplicação poderá receber novas logicas de funcionamento
(refatoração) sem que altere muito o visual front-end do usuário. Contudo, concluiu-se que a nova forma de
funcionamento do sistema deve possibilitar um crescimento exponencial em sua utilização após sua
publicação com o código fonte compilado e pronto para uso em qualquer computador com sistema operacional
Windows.
6

REFERÊNCIAS

BERTONCINI, Alexsandro. Selecionar pasta para salvar arquivos. Disponível em:


<https://social.msdn.microsoft.com/Forums/pt-BR/6a76a361-039b-40cc-83fa-44b4522650f6/selecionar-
pasta-para-salvar-arquivos?forum=vscsharppt>. Acesso em 11 nov. 2018.

BUNIFU ®. BUNIFU FRAMEWORK. Disponível em: <https://bunifuframework.com/>. Acesso em: 21 out.


2018.

CAIXA ECONÔMICA. Lotofácil. Disponível em:


<http://loterias.caixa.gov.br/wps/portal/loterias/landing/lotofacil/>. Acesso em: 03 set. 2018.

DOS SANTOS, Danilo Aparecido. Aplicação Windows - MDI Parent Form - #Aula 31. Disponível em:
<https://www.youtube.com/watch?v=lO8Py84Amw4&index=33&list=PLEdPHGYbHhlcxWx-
_LrVVYZ2RRdqltums>. Acesso em 19 out. 2018.

DOS SANTOS, Vitor. Confirmação antes de fechar um formulário pelo botão "X" (fechar). Disponível em:
<https://social.msdn.microsoft.com/Forums/pt-BR/82c5c40d-2680-4595-9d42-fc5e14519b29/confirmao-
antes-de-fechar-um-formulrio-pelo-boto-x-fechar?forum=vscsharppt>. Acesso em 02 nov. 2018.

GODOY, Vini. Inserir Mensagem ao Colocar o Cursor Sobre Button. Disponível em:
<http://respostas.guj.com.br/32089-inserir-mensagem-ao-colocar-o-cursor-sobre-button>. Acesso em: 03
nov. 2018.

MACORATTI, José Carlos. C# - Gerenciando Processos e Threads em formulários Windows Forms - I.


Disponível em: < http://www.macoratti.net/14/07/c_gptwf.htm>. Acesso em 02 nov. 2018.

MYERS, Alfred. Descobrir o Tamanho de Um Arquivo. Disponível em:


<https://social.msdn.microsoft.com/Forums/pt-BR/dba4bd1c-483b-440e-84af-2c67e7655875/descobrir-o-
tamanho-de-um-arquivo?forum=vscsharppt>. Acesso em: 28 out. 2018.

NUNES, Juliano. Fazer Download de Arquivos da Caixa Economica com C#. Disponível em:
<https://social.msdn.microsoft.com/Forums/vstudio/pt-BR/8423b362-9b86-40a7-b05b-9359db640982/fazer-
download-de-arquivos-da-caixa-economica-com-c?forum=adoptpt>. Acesso em: 07 out. 2018.

Sem autor. APPLICATION.LOCALUSERAPPDATAPATH PROPERTY. Disponível em:


<https://docs.microsoft.com/pt-
br/dotnet/api/system.windows.forms.application.localuserappdatapath?redirectedfrom=MSDN&view=netfram
ework-4.7.2#System_Windows_Forms_Application_LocalUserAppDataPath>. Acesso em: 23 set. 2018.

SILVA, Edney Batista. Background Image em um Form MdiParent. Disponível em:


<https://social.msdn.microsoft.com/Forums/pt-BR/573bf61f-d8e4-43ca-8a57-06a05047b2a5/background-
image-em-um-form-mdiparent?forum=clientept>. Acesso em 07 nov. 2018.

WAGNER, Bill. Exceções e Manipulação de Exceções. Disponível em: <https://docs.microsoft.com/pt-


br/dotnet/csharp/programming-guide/exceptions/>. Acesso em: 21 out. 2018.

WENZEL, Maira. Como Compactar e Extrair Arquivos. Disponível em: <https://docs.microsoft.com/pt-


br/dotnet/standard/io/how-to-compress-and-extract-files>. Acesso em 28 out. 2018.
7

FIGURAS E TABELAS

Figura 1 - Tela de Carregamento Inicial do Frenzy

Fonte: Imagem Própria

Figura 2 - Tela Inicial do Frenzy Após o Carregamento

Fonte: Imagem Própria

You might also like