Oplossing opgave 5

Dank aan Wael Orraby.

Klassen:

public abstract class Reisbestemming : IComparable
{
    public static Random R = new Random();

    public Reisbestemming()
    {
        afstandVanAarde = R.Next(400, 10001);
    }
    private int afstandVanAarde;
    public int AfstandVanAarde
    {
        get { return afstandVanAarde; }
    }

    public int CompareTo(object? obj)
    {
        int result = 0;
        Reisbestemming temp = obj as Reisbestemming;
        if (temp != null)
        {
            if (afstandVanAarde > temp.afstandVanAarde)
                result= 1;
            if (afstandVanAarde < temp.afstandVanAarde)
                result= - 1;
        }
        else
            throw new ArgumentException("Object is not a Reisbestemming");
        return result;
    }
    public override string ToString()
    {
        return $"{this.GetType().Name}:{afstandVanAarde}" ;
    }
}

internal class Planeet : Reisbestemming
{
}

internal class RijkePlaneet : Planeet​, IEnergieGever
{
    public long GeefEnergie()
    {
        return Convert.ToInt64(this.AfstandVanAarde * 0.1);
    }
}


    internal class TankTussenstation : Reisbestemming, IEnergieGever
{
    public long GeefEnergie()
    {
        return Convert.ToInt64(R.Next(500, 1501));
    }
}

internal class Ruimteschip 
{
    private int afstandVanAarde = 0;

    public long Energie { get; private set; } = 300;
    public override string ToString()
    {
        return $"Je hebt {Energie} energie en bent {afstandVanAarde} units verwijderd van de aarde.";
    }

    public bool StartReis(Reisbestemming r)
    {
        bool result = false;
        int verschil = r.AfstandVanAarde - afstandVanAarde;
        if (Energie >= verschil)
        {
            Energie -= verschil;
            Console.WriteLine($"Bestemming bereikt. Nog {Energie} energie over. Laten we proberen bij te tanken.");
            afstandVanAarde += r.AfstandVanAarde;
            EnergieBijtanken(r);
            result = true;
        }
        else
            Console.WriteLine("Dit schip heeft niet genoeg energie daarvoor.");
        return result;
    }
    public void EnergieBijtanken(Reisbestemming r)
    {
        if(r is IEnergieGever energieGever)
        {
            Energie += energieGever.GeefEnergie();
            Console.WriteLine($"Hier werd bijgetankt. Je kreeg {energieGever.GeefEnergie()} energie en staat nu op {Energie} energie.");
        }
        else
            Console.WriteLine("Hier kan niet bijgetankt worden");
    }
}

internal class Wereld
{
    static Random r = new Random();
    public static List<Reisbestemming> GenereerWereld(int aantal)
    {
        List<Reisbestemming> ReisbestemmingList = new List<Reisbestemming>();
        for (int i = 0; i < aantal; i++)
        {
            int kans = r.Next(1,5);
            if (kans == 1)
                ReisbestemmingList.Add(new Planeet());
            else if (kans == 2)
                ReisbestemmingList.Add(new RijkePlaneet());
            else
                ReisbestemmingList.Add(new TankTussenstation());
        }
        ReisbestemmingList.Sort();
        return ReisbestemmingList;
    } 
}

Program.cs:

Last updated

Was this helpful?