Percursos
/
C#
C#
/
Exercícios
/
Relatórios de jogos de futebol
Relatórios de jogos de futebol

Relatórios de jogos de futebol

Exercício de aprendizagem

Introdução

Instruções switch

A Wikipédia descreve uma instrução switch como "um tipo de mecanismo de controlo de seleção que permite que o valor de uma variável ou de uma expressão altere o fluxo de controlo do programa".

O mecanismo envolve as seguintes palavras-chave: switch, case, break e default.

Na sua forma mais simples, testam uma expressão primitiva ou uma string e tomam uma decisão com base no seu valor. Por exemplo:

string direction = GetDirection();
switch (direction)
{
    case "left":
        GoLeft();
        break;
    case "right":
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

Na sua forma mais sofisticada, introduzem a conversão de tipos descendente case <Type> <variable>: e as guardas (when).

Animal animal = GetAnimal();

switch (animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}

Instruções

Estás a desenvolver um sistema para ajudar o pessoal do sítio web de um clube de futebol a fazer relatos dos jogos. Este sistema é capaz de analisar vários aspetos do jogo, dentro e fora do campo, e converte-os num fluxo de eventos.

1. Produzir descrições dos jogadores com base no número da camisola

A equipa joga sempre em 4-3-3 e nunca concordou com a alteração às regras de 1965 que permite substituições, quanto mais plantéis alargados.

As descrições dos jogadores são as seguintes:

1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"

Implementa o método estático PlayAnalyzer.AnalyzeOnField() para produzir a descrição de um jogador com base no número da camisola.

PlayAnalyzer.AnalyzeOnField(10);
// => "striker"

2. Tratar números de camisola desconhecidos

Altera o método PlayAnalyzer.AnalyzeOnField() para devolver UNKNOWN quando é processado um número de camisola fora do intervalo 1-11.

3. Alargar a cobertura às atividades fora do campo

Implementa o método PlayAnalyzer.AnalyzeOffField() para produzir descrições de atividades e de personagens à volta do campo de jogo. Este método recebe diferentes tipos de dados que devem ser analisados e convertidos em texto adequado para ajudar os jornalistas.

Para começar, vamos abordar os dados sobre o estádio:

  • O número atual de adeptos no estádio (qualquer int)
  • Anúncios feitos pelo sistema de megafonia do estádio (qualquer string)

Os tipos de dados desconhecidos não devem ser processados, por isso, se o método receber dados de um tipo diferente, deve ser devolvida uma string vazia.

PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."

PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"

PlayAnalyzer.AnalyzeOffField(0.5);
// => ""

4. Relatar incidentes durante o jogo

Altera o método PlayAnalyzer.AnalyzeOffField() para produzir descrições dos incidentes que acontecem durante o jogo.

Os incidentes podem ser qualquer subclasse do tipo Incident e contêm uma descrição do incidente. As lesões são um tipo especial de incidente, porque obrigam a interromper o jogo, por isso devem ser tratadas de forma diferente.

PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."

PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."

5. Relatar sobre os treinadores dos clubes

Altera o método PlayAnalyzer.AnalyzeOffField() para mencionar os treinadores dos clubes presentes durante o jogo.

Os treinadores são instâncias do tipo Manager e têm um nome e o nome do clube que treinam. O clube do treinador pode ser desconhecido, caso em que será definido como null. Se o clube de um treinador não for conhecido, não deve fazer parte da descrição.

PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"

PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
Editar via GitHub A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar Relatórios de jogos de futebol?

Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.