Este artigo foi publicado originalmente em 05/05/2018
O fonte está disponível no Github
Antes de abrir o fonte para olhar
Este foi um dos meus primeiros programas em python que fiz até o fim, então muita coisa que usei, deve ter sido de forma experimental, um pouco de tentativa e erro mesmo.
Eu acho que escolhi fazer em python porque eu estava aprendendo na época, e já estava um pouco mais confiante que ia ser mais rápido para terminar (Eu tive um fim de semana para fazer todo o jogo).
Me recordo de ter algumas cartas de sorte/revés, alguma configuração da quantidade de dados, e um tabuleiro que era um array (mas acho que não desenhava na tela).
Este jogo foi um dos que eu mais me diverti de testar, depois de pronto, porque muita coisa parecia Mágica para mim (Mesmo tendo sido eu que programei).
Se eu baixar em um ambiente com python acho que ainda funciona...
Olhando o github
O código tem 3 anos! Provavelmente ele é mais antigo, e eu coloquei no github depois de pronto, muito tempo depois (Eu salvava os programas em pendrives e depois no dropbox.... github veio muito depois).
O Licence é do MIT, então acho que qualquer um pode baixar e fazer o que quiser com o fonte (Hoje em dia a licença que eu geralmente uso é a apache2).
Nessa época eu já sabia usar o .gitignore, porque os arquivos *.pyc não estão presentes no repositório!
Dissecando o projeto
setup.py
Baixei na máquina e percebi que eu criei um arquivo setup.py.
Este arquivo foi uma tentativa minha de criar um executável para executar o jogo. (Obviamente não deu certo. Até hoje o empacotamento e geração de executáveis no python é um mistério para mim!).
Talvez algum dia eu volte a tentar criar executáveis de programas python...
Configuracoes.py
Meus comentários são engraçados. O arquivo se chama configurações e a primeira linha dele diz que este é o arquivo que contém os parâmetros do jogo (Eu devo ter comentado o jogo todo assim para facilitar minha vida para mostrar para meu primo o que o fonte faz... o game era para ele).
Eu criei uma variável para a quantidade de jogadores e em seguida um array com os jogadores... Hoje eu jamais faria uma coisa dessas! Acho que eu progredi um pouco no desenvolvimento da minha lógica :).
Já a quantidade de dados, eu acho que amadureci um pouco porque eu usaria alguma forma de criar múltiplos dados de diferentes lados na chamada, pois isso permite uma elasticidade maior na reutilização do código.
O objeto de contrucoes (Eu escrevi errado no fonte) eu acredito que não funciona, pois não lembro de ter implementado. Deve ter sido mais um dos testes que eu fiz na época.
Sorte e revés eu lembro de ter feito, e me achei muito inteligente por fazer um array de tuplas. Analisando o jovem padawan que eu era, essa idéia realmente foi uma novidade para mim.
Dado.py
Duas funções...Simples e direto. Talvez eu tenha ficado um pouco orgulhoso de mim mesmo. Essa época eu acho que não sabia nem o que era orientação a objetos. Só sabia separar em classes mesmo. Hoje, porém eu deixaria a quantdade de lados dentro da classe do próprio Dado.
Pontos extra para mim por fazer uma função que fez uma função que verifica se os dados são iguais, independente da quantidade de dados (A função é bem simples, mas na época foi um desafio razoável para mim. Lembro de ficar pensando algumas horas nessa lógica).
Reves.py
Uma função só, acho que eu moveria os dados do arquivo de configurações para ele, ou criaria uma função para adicionar/remover na criação do jogo.
Terreno.py
Minha Gambiarra para fazer o array receber apenas um tipo de objeto... Perdi pontos pela gambiarra. Mas acho que pelo menos valeu a minha tentativa.
Tabuleiro.py
Mais uma parte da gambiarra que eu fiz... Como todos derivam de um objeto apenas, mas precisei ficar verificando o numero da casa, e verificar qual a função chamar para saber que tipo de casa foi selecionado.
Jogador.py
Uma das funções mostra resumo já formatado. Seria melhor ter uma função para printar na tela, para separar as responsabilidades. Dependendo do projeto, eu faria o print dentro mesmo, mas faria sabendo que está errado...
Inicia_turno, caminha, e comprar já me parecem mais padronizadas, e bem próximas do que eu faria se estivesse implementando o jogo hoje em dia.
Acao.py
Essa classe me parece meio desorganizada. Algumas coisas deveriam estar em outras classes, enquanto as outras parecem ser centralizadas nas ações do jogo em relação ao jogador. Eu faria de formas diferentes hoje em dia.
Main.py
A função Turno está bem estruturada, apesar de eu achar que eu poderia abstrair um pouco mais para facilitar a manutenção do jogo.
A main é bem simples, e pode ser separada em duas partes: Um setup, e um loop.
O setup é executado para entrar os nomes dos jogadores, e o loop faz a magia do jogo acontecer.
Conclusões
Creio que eu tenha amadurecido um pouco durante esses anos. Aprendi paradigmas novos, vi onde errei, e onde continuo errando.
Até onde me lembro eu não consegui fazer os desenhos na tela, nem a interface que eu gostaria. O que me faltou foi experiência, conhecimento, e um pouco de bom senso para planejar antes de começar a desenvolver.
Em três anos eu evoluí bastante, mas acho que ainda não cheguei em um nível de fluência nas linguagens que eu gostaria.
Os desafios que estou fazendo com meus colegas me permitem ver outras formas de fazer o mesmo projeto, e ver as diferenças nas formas de montar as lógicas.