Eigenschaften & Methoden
Aufgabe 1: Transaktionskonto
Datei: 1-transaction-account.ts
Definiere eine Klasse TransactionAccount, welche ein Bankkonto repräsentiert. Die Klasse soll die folgenden privaten Eigenschaften haben:
balance: Der Kontostand als Zahl, die mit0.0initialisiert wird und nur innerhalb der Klasse verwendet werden kann.iban: Eine Zeichenkette, die eine IBAN (internationale Kontonummer) repräsentiert, und die nach der Initialisierung via Konstruktorparameter nicht mehr verändert werden kann.holder: Der Name des Kontoinhabers als Zeichenkette.
Implementiere die folgenden Methoden:
withdraw(amount: number): void: Der angegebene Betrag soll vom Konto abgezogen werden, sofern der Kontostand dabei nicht ins Negative fällt.deposit(amount: number): void: Der angegebene Betrag soll auf das Konto gutgeschrieben werden.show(): string: Eine Methode, die alle Eigenschaften übersichtlich formatiert zurückgibt.
Das amount-Argument muss eine positive Zahl sein. Für negative Zahlen soll nichts passieren.
Erstelle mindestens drei Konti, um die Klasse damit zu testen.
Aufgabe 2: Sparkonto
Datei: 2-savings-account.ts
Kopiere die Datei aus der ersten Aufgabe. Benenne die Klasse in SavingsAccount um, aber belasse ihre Eigenschaften und Methoden. Ergänze die Klasse um folgende Eigenschaft:
interestRate: Ein Zinssatz in Prozent, der nur via Konstruktor und mit einem entsprechenden Setter gesetzt, aber nicht ausgelesen werden kann. Der Zinssatz muss in einem Bereich zwischen0.0und25.0(jeweils inklusive) liegen.
Implementiere eine Methode namens payInterest, welche die Zinsen auf dem Konto gutschreibt. Die Gutschrift entspricht dem Produkt aus dem Zinssatz (dividiert durch 100) und dem Kontostand.
Teste die Zinsgutschrift mit verschiedenen Konti.
Aufgabe 3: Banküberweisung
Datei: 3-transaction.ts
Kopiere die Datei aus der ersten Aufgabe. Benenne die Klasse in BankAccount um.
Erstelle eine zusätzliche Klasse namens Transaction. Diese soll folgende Eigenschaften haben und via Konstruktor initialisieren:
account: Das Zielkonto vom TypBankAccount.amount: Der zu überweisende (positive) Betrag.
Erweitere die Klasse BankAccount um die folgende Methode:
execute(t: Transaction): void: Falls der Transaktionsbetrag durch den Kontostand gedeckt ist, soll dieser dem Zielkonto (t.account) gutgeschrieben und vom Konto, auf dem die Methode aufgerufen worden ist, abgezogen werden. Wird die Transaktion verweigert, weil der Kontostand zu tief ist, soll dies ausgegeben werden. Ist die Transaktion erfolgreich, soll eine Vollzugsnachricht mit den Details der Transaktion ausgegeben werden.
Erstelle drei Konti und überweise Beträge hin und her. Gib die Kontostände nach den Transaktionen jeweils auf der Konsole aus.
Aufgabe 4: Waffe
Datei: 4-weapon.ts
Erstelle eine Klasse namens Weapon mit folgenden Eigenschaften, die jeweils über den Konstruktor initialisiert werden:
description: Der Name bzw. die Bezeichnung der Waffe.damage: Eine Zahl von 1 bis 100, die den Maximalschaden der Waffe definiert.accuracy: Eine Zahl von 1 bis 100, welche die Genauigkeit der Waffe definiert.
Die Eigenschaften sollen nur lesbar, d.h. nicht schreibbar sein. Erweitere die Klasse um einen Getter:
effect: number: Betrachtedamageundaccuracyals Prozentsatz und multipliziere die beiden Zahlen, sodass ein Produkt zwischen 0 und 1 entsteht. Dir Rückgabe soll dann wieder als Prozentsatz erfolgen.
Exportiere die Klasse, indem du sie folgendermassen deklarierst:
Dadurch kann die Klasse in anderen Dateien verwendet werden.
Aufgabe 5: Krieger
Datei: 5-warrior.ts
Importiere die Klasse Weapon folgendermassen:
Schreibe nun eine (ebenfalls exportierte) Klasse namens Warrior mit folgenden Eigenschaften:
name: Der Name des Kriegers.weapon: Die Waffe des Kriegers.health: Die Gesundheit des Kriegers als Wert zwischen 1 und 100.strength: Die Kraft des Kriegers als ein Wert zwischen 1 und 100.dexterity: Die Geschicklichkeit des Kriegers als ein Wert zwischen 1 und 100.
Ergänze die Klasse um folgende Methoden:
attack(opponent: Warrior): Der Krieger soll den Gegner mit der Waffe angreifen. Der Gegner soll einen Schaden erleiden, wenn der Angriff erfolgreich ist.suffer(damage: number): boolean: Der Krieger soll einen Schaden erleiden. Diese Methode wird vonattackdes Gegners aufgerufen (opponent.suffer(damage)). Stirbt der Spieler, wirdtruezurückgegeben, sonstfalse.
Die Methode attack soll folgendermassen implementiert werden:
- Berechne eine Zufallszahl mit
Math.random(). Diese (statische) Methode gibt einen Zufallswert zwischen 0 und 1 zurück. Multipliziere diese Zahl mitdexterity/100. Ist das Ergebnis grösser als 0.5, liegt ein Treffer vor. Sonst passiert nichts. - Bei einem Treffer wird die Methode
effectvon der Waffe des Kriegers aufgerufen. Der zurückgegebene Wert wird mitstrengthmultipliziert. Das Ergebnis ist der Schaden. - Mit dem berechneten Schaden wird nun die Methode
sufferdes Gegners aufgerufen. Diesem werden Gesundheitspunkte abgezogen (health -= strength). Fällt der Werthealthauf 0 oder tiefer, stirbt der Gegner. Bei einem Treffer sollen auchstrengthunddexterityum einen Zehntel des erlittenen Schadens reduziert werden.
Aufgabe 6: Kampf
Datei: 6-fight.ts
Importiere die Klassen Weapon und Warrior aus den entsprechenden Dateien. Erstelle eine Klasse namens Fight mit folgenden Eigenschaften:
playerOne: Warrior: Der erste Spieler.playerTwo: Warrior: Der zweite Spieler.
Implementiere eine Methode fight(): Warrior, welche die beiden Krieger auf einander losgehen lässt. Die beiden Kontrahenten sollen sich solange gegenseitig angreifen, bis einer davon stirbt. Es soll der überlebende Krieger zurückgegeben werden. Jeder Angriff soll mithilfe von console.log-Ausgaben dokumentiert werden, sodass der Spieler das Geschehen nachvollziehen kann.
Simuliere einige Kämpfe mit verschiedenen Kriegern und Waffen, z.B. wie Harry Potter Sauron mit einem Lichtschwert angreift und von ihm mit Thors Hammer auf die Mütze bekommt.
Zusatzaufgabe: Erweiterung der Kampfsimulation
Implementiere zusätzliche Features für die Kampfsimulation. Hier einige Ideen:
- ein Turniersystem nach dem KO-Modus
- ein Ligasystem mit Hin- und Rückrunde
- ein Verteidigungssystem mit Schildern
- ein Vampirsystem zum Absaugen von Gesundheitspunkten
- ein zwei-gegen-zwei Kampfsystem