Professor, ao entrar no programa pela primeira vez, depois de registrar, por favor, executar o comando 'god_mode'. Todos os comandos disponíveis estão descritos a partir da linha 119 desse README
- pymysql
- numpy
Para iniciar, altere as credenciais contidas no arquivo 'env.py' de acordo com o banco de dados local (linhas 1 a 5), que deve ser MariaDB ou MySQL. Não é necessário a criação do banco de dados, o programa irá criar se não encontrar o banco especificado na variável DB (env.py).
Tudo que está dentro de POKEMONS e GLOBALS são configurações básicas para o funcionamento do programa. SPAWN_RATIO_* descreve a probabilidade de encontrar um pokemon para cada tipo de raridade. Variáveis definidas em GLOBALS especifiam o tempo de espera para cada ato (ver nome da variável).
Para cada monstro deve-se saber o nome, nível na classificação de raridade e pelo menos mais uma caraterística a sua escolha:
Todas as características estão armazenadas no banco de dados e podem saber facilmente recuperadas com os seguintes comandos: from models import Pokemon
# encontrar pelo nome:
poke = Pokemon().where('name = "{}"'.format(nome_do_pokemon))
# ou também, como nome é uma PK:
poke = Pokemon().find(nome_do_pokemon)
# encontrar por raridade
poke = Pokemon().where('rarity = "{}"'.format(raridade))
# a função 'where' pode recuperar qualquer dado, desde que as condições estejam na variável 'fields' que é executada na inicialização do ModelO algoritmo deve colocar os pokémons em ordem alfabética utilizando um dos seguintes métodos: selection, insertion, quicksort ou mergesort.
Os algorítmos estão implementados no arquivo functions.py. E são utilizados no arquivo controllers.py, nos métodos:
- order_pokemons(self, order_by)
- generate_vio(self, order_by)
Cada qual está devidamente comentado na sua utilização (linha 114 controllers.py)
Além disso, através de VIOs ou encadeamento, você deve apresentar de forma ordenada, os monstros capturados de acordo o nível de raridade e a outra característica definida.
Isso é feito na função generate_vio(self, order_by) do arquivo controllers.py
Todo o controle é feito pela função add_pokemon(self, pokemon) no arquivo controllers.py
Todas as classes que estão em models.py representam uma tabela do banco de dados e podem ser recuperadas/atualizadas/deletadas com os comandos:
select(self, fields='*', conditions=None, order_by=None, limit=None)
update(self, new_values, column_value, column_to_search=None)
create(self, values_dict)
delete(self, conditions)
# first retorna a primeira linha que satisfaça a condição
first(self, fields='*', conditions=None, order_by=None)
# retorna todas as linhas que satisfaçam a condição
where(self, conditions, fields='*', order_by=None, limit=None)
# retorna uma linha pela chave primária
find(self, value, fields='*', conditions=None)Os modelos precisam ser instanciados antes de chamar qualquer função, pois o Model precisa saber a qual tabela pertence, qual é a PK, quais colunas tem acesso e quais pode alterar.
São arquivos auxiliares para o funcionamento do programa. _input.py certifica que todos is inputs do usuário são válidos a partir da função(reduzida):
- message: a mensagem a ser utilizada
- _type: o tipo a ser aceito pelo input ('string', 'int', 'float', 'mixed')
- acceptable: é um vetor de dados aceitos pelo input ou None para qualquer valor
- loop: se True dois 'enter' quebram o loop
Já o arquivo _print.py deixa as mensagens mais apresentáveis ao usuário, para simplificação foram feitas funções auxiliares para o programa seguir um padrão. Sendo elas:
Todas elas implementam a função colorize que por sua vez monta um dicionário a ser passado ao _print. O formato do dicionário consiste em:
{
Keys.text: text, # texto a ser colorido
Keys.color: color, # cor a ser usada
Keys.background: background, # cor de fundo
Keys.bold: bold, # negritou (bool)
Keys.alert: alert, # se sim, ocupa 3 linhas e centraliza o texto(bool)
Keys.underline: underline, # subscrito (bool)
Keys.end: end # valor para o end do print
}P.S.: Todas cores diponíveis se econtram na classe Color do arquivo _print.py
Todas os demais casos de uso estão exemplificados e comentados em código.
- login
- register
- pokemon list (lista todos os pokemons do usuário)
- pokemon rename 'name' (renomeia o pokemon 'name' do usuário)
- pokemon sort 'sort_order' sort_order pode ser: - type (gera um VIO e mostra os pokemons ordenados por tipo) - rarity (gera um VIO e mostra os pokemons ordenados por raridade) - name (ordena fisicamente os pokemons por nome (dado pelo usuário; por padrão tem o mesmo nome do Pokemon)) - pokemon (ordena fisicamente os pokemons por nome de pokemon) pokemons ordenados fisicamente não são mostrados na tela e, para isso, deve se chamar 'pokemon list'.
- hunt (caça um pokemon. Esse pokemon é definido aleatoriamente, sendo que as probabilidades para cada raridade de pokemon estão definidas no arquivo env.py. Pode-se também ser encontrado um ovo que depois de x segundos (sendo x também definido em env.py) gera um pokemon aleatório tendo sua raridade 'very common'. Se o jogador já tiver um pokemon e ao caçar encontrar outro pokemon, o sistema de batalha é chamado, mas esse ainda não está implentado)
- help (mostra todos os comandos disponíveis)
- exit (sai do programa)
- god_mode (todos os pokemons disponiveis são atribuidos ao jogador)