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 moves para uma lista vazia.
  • O atributo position para (0, 0).
  • O atributo path para uma lista contendo a posição inicial.
1. A classe Player deve ter um método chamado make_move que:
  • Usa random.choice para obter um movimento aleatório do atributo moves (definido na classe concreta).
  • Adiciona os valores do movimento selecionado à posição atual e atualiza o atributo position.
  • Anexa a nova tupla position ao atributo path.
  • Retorna a nova position.
1. A classe 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