Heurística, Estratégia e Código II
Considerações iniciais
Antes do adiamento do prazo final, o docente da UC apontou que a estratégia levada a cabo pelo grupo era demasiado simples: falharia em muitos casos e naqueles em que não falhava imediatamente poderia entrar em ciclos infinitos.
Com isto em conta, descartámos dita estratégia com a salvaguarda de mais duas semanas para conceber uma que obtivesse resultados mais satisfatórios.
Reorganização do código
Com isto em mente, o código foi reformulado: Python não é a melhor linguagem para se recorrer ao uso de classes, o uso recorrente da palavra "self" e a falta de encapsulamento ou polimorfismo são motivos notáveis.
Para começar, foram eliminadas as classes. Métodos como "move" ou "spot" (para movimento e deteção) agora não precisam de ser chamados recorrendo a uma instância da classe "dog", que previamente os contia.
No entanto, de modo a poder ser organizado o código, foram criados os seguintes ficheiros para separar as funções criadas:
- main.py: importa todos os outros ficheiros do projeto (direta ou indiretamente) e conterá o código da estratégia;
- brick.py: importa as ferramentas do EV3Brick e contém a declaração da instância do robot. Todos os outros ficheiros importam este ficheiro (direta e indiretamente);
- action.py: contém as ações do robot, não ligadas ao movimento (ladrar ou tocar, por exemplo). Aqui são instanciados o motor do chicote e o sensor de distâncias;
- movement.py: o maior dos ficheiros, contém todas as funções necessárias ao movimento, incluindo aquelas que lidam com as paredes do tabuleiro. Contém também as variáveis do jogo, como a localização de paredes ou do robot.
- extra.py: importa de movement as variáveis de jogo para que a função "log" possa registar o estado de jogo (e assim permitir debugging), além de também conter uma função que devolve um valor aleatório (0 ou 1, como que um lançamento de moeda).
Esta nova organização do projeto facilita imenso a escrita de novo código e permite agilizar o processo de estabelecer uma nova estratégia.
Um último pormenor...
Finalmente, o sensor de toque estava quase permanentemente em contacto com o tabuleiro, o que gerava atrito na rotação e movimento do robot. Para corrigir isto, as peças que o seguravam foram substituídas:

Comentários
Enviar um comentário
Algo a comentar?