// -- --------------------------------------------------------------------------- --// -- 1.Beispiel) Delegates// -- --------------------------------------------------------------------------- --// Solution: datatypeoop// Project: Steampunk - Classlibrary// a) Definieren Sie im Weapon.cs File ein Delegate mit dem Namen WeaponAttack// Das Delegate soll dabei Methoden mit der folgenden Signatur verwalten können: public int DefaultAttack(Weapon weapon, int distance) { ... }// b) Implementieren Sie für das Delegate die folgenden 2 Methoden: // Wird ein Angriff mit der TestAttack Methode simuliert, so wird unabhängig von // der Waffe und der Entfernung immer ein Treffer erziehlt. public int TestAttack(Weapon weapon, int distance) { ... } // Simulieren Sie einen Würfelwurf und speichern Sie den erzielten // Wert. Ist der Wert >= der weapon.Damage wurde ein Treffer erzielt. // Ansonsten wird 0 zurückgegeben. public int SimplifiedAttack(Weapon weapon, int distance) { } // Vervollständigen Sie die folgende Methode. public int DefaultAttack(Weapon weapon, int distance){ var index = 0; var diceCount = 0; if (0< distance && distance<= 4) { index = 0; } if (4 < distance && distance<= 8) { index = 1; } if (8 < distance && distance <= 12) { index = 2; } diceCount = weapon.FirePower[index]; var hitCount = 0; // Ein Würfel soll diceCount mal geworfen werden // Ist der gewürfelte Wert >= der weapon.damage // wird ein Treffer erzielt. Summieren Sie alle // Treffer und gegeben Sie sie als Ergebnis zurück. }}// Codebasispublic class Weapon { public string Name { get; init; } public int Damage { get; init; } public int[] FirePower { get; } = new int[3]; // c) Definieren Sie eine Variable vom Typ WeaponAttack}public class Dice { private Random _random = new Random(); public int Roll() { return _random.Next(1,7); }}// Project: AircraftTest// Typ: UnitTest// d) Schreiben Sie einen Unittest indem Sie die Funktionalität der Codebasis// testen.// Instanzieren Sie ein Weapon Objekt. Schreiben Sie einen Unittest für alle// der 3 zuvor programmierten Methoden zum Angriff mit der Waffe.// -- --------------------------------------------------------------------------- --// -- 2.Beispiel) Delegates// -- --------------------------------------------------------------------------- --// Solution: datatypeoop// Project: Steampunk Type: Classlibray// 2.1) Vervollständigen Sie die Klasse FreightManagerpublic class FreightManager { // a) Implementieren Sie die folgende Methode // Artefakt: Methode // Name: WeightFilter // Definieren Sie eine Methode zum Filtern der Fracht. Die Methode hat den // Datentyp FreightFilter. Die Methode berechnet das Produkt aus // FrightItem.Amount * FrightItem.Weight. Ist die Zahl kleiner gleich 1000 // kann die Fracht geladen werden // b) Implementieren Sie die folgende Methode // Artefakt: Methode // Name: FragileCargoFilter // Implementieren Sie eine Methode die prüft ob es sich beim FreightItem um // LiquidCargo oder FragileGoods handelt. Entspricht die Fracht einem der // beiden Typen kann die Fracht geladen werden. // c) Vervollständigen Sie die folgende Methode // Vervollständigen Sie die FilterFreight Methode. Ziel der Methode ist // es eine Liste von FrightItems mit der Hilfe eines Delegates zu // filtern public List<FreightItem> FilterFreight (List<FreightItem> freight, FreightFilter filter){ }}// 2.2) Schreiben Sie einen UnitTest zur Prüfung des FreightManagers// a) Instanzieren Sie ein FreightManager Objekt. Schreiben Sie jeweils einen Test für die// beiden zuvor definierten Deleage Methoden.// Codebasispublic delegate bool FreightFilter (FreightItem item);public enum EFreightType { GeneralCargo, BulkCargo, LiquidCargo, RefrigeratedCargo, HazardousGoods, OversizedCargo, FragileGoods, PerishableGoods, ContainerizedCargo, ExpressFreight}public enum EPackagingType{ None, Box, Crate, Pallet, Container, Barrel, Bag, Drum, Tank}public class FreightItem { public EFreightType FreightType { get; init; } public EPackagingType EPackagingType { get; init; } public string Label { get; init; } public int Amount { get; set; } public int Weight { get; set; }}