Instruções
Construir uma Interface de Player
Objetivo: Cumprir as user stories abaixo e fazer todos os testes passarem para completar o laboratório.
Histórias de Usuário:
1. Você deve definir uma classe abstrata chamada
Player que herda da classe abc.ABC.
1. A classe Player deve ter um método __init__ que define:
- O atributo
movespara uma lista vazia. - O atributo
positionpara(0, 0). - O atributo
pathpara uma lista contendo a posição inicial.
Player deve ter um método chamado make_move que:
- Usa
random.choicepara obter um movimento aleatório do atributomoves(definido na classe concreta). - Adiciona os valores do movimento selecionado à posição atual e atualiza o atributo
position. - Anexa a nova tupla
positionao atributopath. - Retorna a nova
position.
Player deve ter um método abstrato chamado level_up para ser implementado em classes concretas.
1. Você deve definir uma classe Pawn que herda da classe Player.
1. A classe Pawn deve usar super() para chamar o método __init__ do pai e então definir o atributo moves como uma lista de tuplas que representam as coordenadas x, y.
1. Cada tupla de coordenadas deve representar um movimento de 1 unidade nas seguintes direções: para cima, para baixo, para a esquerda e para a direita.
1. A classe Pawn deve implementar um método concreto level_up adicionando mais movimentos ao atributo moves. Os movimentos adicionados devem representar os quatro movimentos diagonais (por exemplo, 1 unidade para baixo mais 1 unidade para a esquerda).
Nota: Os módulos da biblioteca padrão devem ser importados sem usar aliases. Testes relacionados à classe Player falharão até que a classe Pawn se torne instanciável.
O que fazer:
Testes:
- Você deve ter uma classe chamada `Player`.
- A classe `Player` deve herdar da classe `ABC` do módulo `abc`.
- A classe `Player` deve ter um método `__init__`.
- O método `__init__` do `Player` deve ter um único parâmetro `self`.
- O método `__init__` do `Player` deve definir `self.moves` como uma lista vazia.
- O método `__init__` do `Player` deve definir `self.position` como `(0, 0)`.
- O método `Player`'s `__init__` deve definir `self.path` como uma lista contendo a posição inicial.
- A classe `Player` deve ter um método `make_move`.
- O método `make_move` do `Player` deve ter um único parâmetro `self`.
- O método `make_move` do `Player` deve usar `random.choice` para obter um movimento aleatório do atributo `moves`.
- O método `make_move` do `Player` deve atualizar o atributo `position` adicionando a ele as coordenadas do movimento selecionado aleatoriamente.
- O método `make_move` do `Player` deve adicionar a nova tupla `position` ao atributo `path`.
- O método `make_move` do `Player` deve retornar o atributo `position` atualizado.
- A classe `Player` deve ter um método `level_up`.
- O método `level_up` do `Player` deve ter um único parâmetro `self`.
- O método `level_up` do `Player` deve ser um método abstrato.
- A classe `Player` deve ser uma classe abstrata.
- Você deve ter uma classe chamada `Pawn`.
- A classe `Pawn` deve herdar da classe `Player`.
- A classe `Pawn` deve ter um método `__init__`.
- O método `__init__` do `Pawn` deve ter um único parâmetro `self`.
- O método `__init__` do `Pawn` deve chamar o `__init__` do pai usando a função `super`.
- O método `Pawn`'s `__init__` deve definir o atributo `moves` como uma lista de tuplas que representam coordenadas `x, y`, onde cada tupla de coordenadas representa um movimento de `1` unidade nas seguintes direções: para cima, para baixo, para a esquerda e para a direita.
- A classe `Pawn` deve ter um método `level_up`.
- O método `level_up` do `Pawn` deve adicionar o movimento diagonal de quatro de `1` unidade ao atributo `moves`.
Preview