Percursos
/
C#
C#
/
Exercícios
/
Need for Speed
Need for Speed

Need for Speed

Exercício de aprendizagem

Introdução

Construtores

Para criar uma instância de uma classe, chamas o respetivo construtor através do operador new. Um construtor é um tipo especial de método cujo objetivo é inicializar uma instância recém-criada. Os construtores são parecidos com os métodos normais, mas não têm tipo de retorno e o seu nome é igual ao da classe.

class Library
{
    private int books;

    public Library()
    {
        // Initialize the books field
        this.books = 10;
    }
}

// This will call the constructor
var library = new Library();

Tal como os métodos normais, os construtores podem ter parâmetros. Os parâmetros de um construtor costumam ser guardados como campos (privados) para serem acedidos mais tarde, ou então usados num cálculo pontual. Podes passar argumentos a um construtor tal como passas argumentos a métodos normais.

class Building
{
    private int numberOfStories;
    private int totalHeight;

    public Building(int numberOfStories, double storyHeight)
    {
        this.numberOfStories = numberOfStories;
        this.totalHeight = numberOfStories * storyHeight;
    }
}

// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)

Instruções

Neste exercício vais organizar corridas entre vários tipos de carros telecomandados. Cada carro tem as suas próprias características de velocidade e de consumo de bateria.

Os carros começam com a bateria cheia (100%). Sempre que conduzes o carro com o telecomando, ele percorre uma distância igual à velocidade do carro, em metros, e a percentagem de bateria restante diminui no valor do seu consumo de bateria.

Se a bateria de um carro estiver abaixo da sua percentagem de consumo de bateria, já não podes conduzir o carro.

Cada pista tem a sua própria distância. Os carros são testados verificando se conseguem terminar a pista sem ficar sem bateria.

Tens seis tarefas, cada uma delas baseada em instâncias de carros telecomandados.

1. Criar um carro telecomandado

Permite criar um carro telecomandado definindo um construtor para a classe RemoteControlCar que recebe a velocidade do carro em metros e a percentagem de consumo de bateria como os seus dois parâmetros (ambos do tipo int):

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

2. Criar uma pista

Permite criar uma pista definindo um construtor para a classe RaceTrack que recebe a distância da pista em metros como o seu único parâmetro (que é do tipo int):

int distance = 800;
var raceTrack = new RaceTrack(distance);

3. Conduzir o carro

Implementa o método RemoteControlCar.Drive() que atualiza o número de metros percorridos com base na velocidade do carro. Implementa também o método RemoteControlCar.DistanceDriven() para devolver o número de metros percorridos pelo carro:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.DistanceDriven();
// => 5

4. Verificar se a bateria está descarregada

Atualiza o método RemoteControlCar.Drive() para gastar bateria com base no consumo de bateria do carro. Implementa também o método RemoteControlCar.BatteryDrained() que indica se a bateria está descarregada:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.BatteryDrained();
// => false

5. Criar o carro telecomandado Nitro

O carro telecomandado mais vendido é o Nitro, que tem uma velocidade máxima impressionante de 50 metros com um consumo de bateria de 4%. Implementa o método (estático) RemoteControlCar.Nitro() para devolver este tipo de carro:

var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50

6. Verificar se um carro telecomandado consegue terminar uma corrida

Para terminar uma pista, um carro tem de conseguir percorrer a distância da pista. Isto significa não gastar a bateria antes de cruzar a linha de chegada. Implementa o método RaceTrack.TryFinishTrack() que recebe uma instância de RemoteControlCar como parâmetro e devolve true se o carro conseguir terminar a pista; caso contrário, devolve false:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

int distance = 100;
var raceTrack = new RaceTrack(distance);

raceTrack.TryFinishTrack(car);
// => true
Editar via GitHub A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar Need for Speed?

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