Oplossing opgave 6

Dank aan Wael Orraby.

Klasses:

 abstract class Toestel
{
    protected char tekenChar = 'o';
    public void Teken()
    {
        Console.Write(tekenChar);
    }
    public abstract int BerekenMoeilijkheidsgraad();
}

internal class Trampoline : Toestel
{
    static Random random = new Random();
    private int moeilijkheidsgraad;
    public Trampoline()
    {
        tekenChar = 't';
        
        moeilijkheidsgraad = random.Next(1, 5);
    }
    public override int BerekenMoeilijkheidsgraad()=> this.moeilijkheidsgraad;   
}

internal class UltraTrampoline : Trampoline, IDodelijk
{
    public UltraTrampoline()
    {
        tekenChar = 'T';
    }

    public bool VeiligheidsActief
    {
        get
        {
            return false;
        }
    }

    public override int BerekenMoeilijkheidsgraad()
    {
        return base.BerekenMoeilijkheidsgraad() + 10;
    }
}

internal class Klimmuur : Toestel
{
    public Klimmuur(int inaantalHandvaten)
    {
        tekenChar = 'm';
        aantalHandvaten = inaantalHandvaten;
    }
    private int aantalHandvaten;
    public override int BerekenMoeilijkheidsgraad()
    {
        if (aantalHandvaten % 2 == 0)
            return 3;
        return 4;
    }
}

internal class DeadWall : Klimmuur, IDodelijk
{
    private bool veiligheidsNetten;

    public bool VeiligheidsActief
    {
        get
        {
            return veiligheidsNetten;
        }
    }

    public DeadWall(bool heeftVeiligheidsnetten) : base(21)
    {
        veiligheidsNetten = heeftVeiligheidsnetten;
        tekenChar = 'M';
    }
    public override int BerekenMoeilijkheidsgraad()
    {
        if (VeiligheidsActief) return 5;
        return 10;
    }
}

internal class Parkoer
{
    static Random r = new Random();
    List<Toestel> toestellenLijst = new List<Toestel>();
    public Parkoer(int x, bool y)
    {
        for (int i = 0; i < x; i++)
        {
            int rng = r.Next(1, 5);
            switch (rng)
            {
                case 1:
                    toestellenLijst.Add(new Trampoline());
                    break;
                case 2:
                    toestellenLijst.Add(new UltraTrampoline());
                    break;
                case 3:
                    toestellenLijst.Add(new Klimmuur(r.Next(10, 51)));
                    break;
                case 4:
                    toestellenLijst.Add(new DeadWall(y));
                    break;
            }
        }
    }
    public void VerwijderDodelijke()
    {
        var tempLijst = new List<Toestel>();
        foreach (var item in toestellenLijst)
        {
            if (!(item is IDodelijk))
            {
                tempLijst.Add(item);
            }
        }
        toestellenLijst = tempLijst;
    }
    private int BerekenMoeilijkheidsgraad()
    {
        int som = 0;
        foreach (var item in toestellenLijst)
        {
            som += item.BerekenMoeilijkheidsgraad();
        }
        return som;
    }
    public void ToonParkoers()
    {
        foreach (var item in toestellenLijst)
        {
            if (item is IDodelijk)
                Console.BackgroundColor = ConsoleColor.Red;
            else
                Console.BackgroundColor = ConsoleColor.Green;
            Console.ForegroundColor = ConsoleColor.Black;
            item.Teken();
            Console.ResetColor();
        }
        Console.WriteLine($"\nMoeilijkheidsgraad = {BerekenMoeilijkheidsgraad()}");
    }
}

Program.cs

Last updated

Was this helpful?