# Racewars

**🎓 Benotetes Assignment 🎓**

📆 **Fällig: 28.04.2026** 📆

Es gelingt Ihnen, den Aliens zu entkommen. Wie genau, wäre zu umfangreich, um es hier zu erzählen. Es sei nur erwähnt, dass Ihre Flucht absolut spektakulär war und Sie die Filmrechte an der Geschichte bereits an Steven Spielberg verkauft haben. Generell sind die Aliens aber auch so mit dem Neuaufbau ihrer IT beschäftigt, dass ihnen keine Zeit mehr bleibt, die Menschheit zu versklaven; sie verlassen entspannt und mit einem neuen Gefühl der Sicherheit die Erde.

Zurück bei Ihnen zu Hause übermannt Sie die Langeweile. Was soll man nach einem derartig aufregendem Trip ins All denn bloß auf Netflix gucken? Alles ist weniger spannend als die Realität, außerdem haben Sie Netflix während Corona komplett leergesuchtet.

Gelangweilt starten Sie Ihren PC und werfen einen Blick in Ihre Steam-Bibliothek und schrecken zurück: Hunderte von Stunden in diversen Games und das anstatt sich um Ihr Studium zu kümmern. Auch keine Motivation.

In diesem Augenblick erhalten Sie eine Nachricht auf Discord. Sie scheint vom Spielegiganten Blizzard zu stammen. „Phishing!“, denken Sie. Aber hat da wirklich jemand den offiziellen Blizzard-Account übernommen? Blizzard bietet Ihnen an, ein neues rundenbasiertes Rollenspiel zu entwerfen. Die Nachricht scheint echt zu sein.

Sie nehmen diese Herausforderung natürlich sofort dankend an, trotz der legendär schlechten Arbeitsbedingungen in der Spielebranche und der vielen Crunch-Time, die Ihnen dort droht. Aber was tut man nicht alles für den Fame.

Mit einem Glas osmotisiertem Wasser in der Hand legen Sie los...

## Paket

Gehen Sie in das Paket [pr2.vererbung.racewars](../sources/src/main/java/pr2/vererbung/racewars).

## Rassen

Bei dem Spiel geht es um den Kampf zwischen unterschiedlichen Wesen aus einer dunklen Fantasywelt. In dem Spiel gibt es vier verschiedene Rassen zur Auswahl:

  1. **Orks**
  2. **Untote**
  3. **Menschen**
  4. **Nachtelfen**

Alle Rassen haben wichtige Gemeinsamkeiten: Dazu gehören **Lebenspunkte**, **Rüstung**, **Schaden**, **Geschwindigkeit**, **Kaufpreis**.

Jede Rasse hat neben „normalen Wesen“ auch noch sogenannte *Anführer*.

Anführer besitzen zusätzlich ein **dominiertes Element**. Die Elemente sind

  * **Feuer**
  * **Wasser**
  * **Luft**
  * **Erde**.

Weitere Elemente gibt es im Spiel nicht.

Zusätzlich zu den Rassen tummeln sich in der Welt noch **Geister**, die aber keine vollwertige Rasse sind (siehe unten).

### Orks

Die Orks besitzen die Eigenschaft sehr stark zu sein. 

<img src="img/orc.png" height="180">

Der Anführer der Ork-Horden ist der **Farseer**. Sein dominiertes Element ist **Erde**.

<img src="img/farseer.png" height="140">


### Untote

Eine weitere Rasse sind die Untoten. Die einzelnen Wesen sind sehr günstig und nicht besonders stark oder schnell. In der Masse sind sie aber stark.

<img src="img/zombie.png" height="180">

Die Anführerin der Untoten ist die dunkle **Lich**, die das Element **Wasser** dominiert.

<img src="img/lich.png" height="180">


### Menschen

Des Weiteren gibt es die Menschen. Diese sind sehr ausdauernd, was bedeutet, dass sie größeren Schaden als andere Wesen einstecken können.

<img src="img/human.png" height="180">

Die Menschen regiert der **Erzmagier**. Er führt sein Gefolge in die Schlacht und dominiert das Element **Feuer**.

<img src="img/wizard.png" height="150">


### Nachtelfen

Zu guter Letzt gibt es noch die Nachtelfen, welche die Eigenschaft besitzen sehr intelligent zu sein.

<img src="img/elf.png" height="180">

Der mächtigste Elf ist der **Daemonslayer**, der das Element **Luft** kontrolliert.

<img src="img/daemonslayer.png" height="140">


### Geister

Neben den dargestellten Rassen gibt es noch **Geister**. Diese können nicht aktiv von den Spielern eingesetzt werden, sie tauchen aber trotzdem teilweise auf und greifen in Kämpfe (s.u.) ein.

<img src="img/ghost.png" height="180">

Geister besitzen keine der beschriebenen Eigenschaften oder Methoden, können aber trotzdem an Kämpfen teilnehmen. 


## Übersicht über die Attribute

Die Wesen haben einige Eigenschaften, die in den folgenden Tabellen zusammengefasst sind.

Während des Spiels kann man einzelne Wesen kaufen, hierfür ist der folgende Kaufpreis zu zahlen.

**Tabelle: Kosten für die Wesen**

| Art          | Kosten |
|--------------|--------|
| Ork          | 250 $  |
| Farseer      | 300 $  |
| Untote       | 70 $   |
| Lich         | 140 $  |
| Mensch       | 110 $  |
| Erzmagier    | 220 $  |
| Nachtelf     | 145 $  |
| Daemonslayer | 290 $  |

Allen Wesen gemeinsam sind die Eigenschaften **Lebenspunkte**, **Schaden**, **Geschwindigkeit** und **Rüstung**. Diese sind wie folgt belegt:

**Tabelle: Fähigkeitswerte der Wesen**

| Art      | Lebenspunkte | Schaden | Geschwindigkeit | Rüstung |
|----------|--------------|---------|-----------------|---------|
| Ork      | 100          | 33      | 1               | 30%     |
| Untote   | 120          | 20      | 2               | 30%     |
| Mensch   | 140          | 40      | 2               | 40%     |
| Nachtelf | 120          | 15      | 3               | 20%     |

Die Zuordnung zwischen Anführer und Element ist:

**Tabelle: Kontrollierte Elemente der Anführer**

| Anführer     | Element |
|--------------|---------|
| Farseer      | Erde    |
| Lich         | Wasser  |
| Erzmagier    | Feuer   |
| Daemonslayer | Luft    |

Die Anführer besitzen zusätzlich einen **Bonus Faktor**. Dieser wird auch als Multiplikator für die Lebenspunkte verwendet.

**Tabelle: Bonus der Anführer**

| Anführer     | Bonus |
|--------------|-------|
| Farseer      | 1,2   |
| Lich         | 2,3   |
| Erzmagier    | 5,0   |
| Daemonslayer | 3,0   |


Geister sind nur ätherische Wesen und man kann sie nicht töten, sie ziehen dem Gegner aber grundsätzlich einen Lebenspunkt ab. Man kann Geister nicht in sein Squad aufnehmen, sondern sie werden vom Spielsystem in den Kampf geschickt.

## Spielstart

Von den Anführern der jeweiligen Rassen (`Farseer`, `Lich`, `Erzmagier` und `Daemonslayer`) darf es **immer nur ein einziges Objekt** geben. Ergreifen Sie entsprechende Maßnahmen, um dies in Ihrem Programm sicherzustellen.

Vor Spielstart müssen sich zwei Spieler einen `Squad` zusammenstellen, das Wesen aus unterschiedlichen Rassen enthält. In einem Squad können beliebig viele Wesen der jeweiligen Rasse vorhanden sein, der Anführer aber nur einmal. Die Anzahl der Wesen wird durch deren Kosten begrenzt. Jeder Spieler hat einen festen Geldbetrag von **2000 $**. Mit diesem kann er Wesen für seinen Squad kaufen. Es ist nicht erlaubt, dass beide Spieler dieselbe Rasse einsetzen. Wenn das Geld nicht reicht, kann es auch sein, dass ein Squad nur den Anführer einer Rasse aber keine weiteren Wesen dieser Rasse enthält.

Beim Anlegen des Squads wird die Kombination aus Wesen und Betrag durch die Klasse `Investition` repräsentiert. Gestalten Sie den Konstruktor von `Squad` so, dass eine beliebige Anzahl von `Investitionen` akzeptiert wird. Dabei darf aber der Maximalbetrag nicht überschritten werden.

Der Spieler gibt seinem Squad neben den Wesen noch die Information mit, wie es heißen soll. Diesen Namen kann er frei wählen (z.B. „The Walking Dead“).

Die Instanzen der einzelnen Wesen werden über eine Factory (`WesenFactory`) erzeugt. Eine direkte Erzeugung ist nicht möglich, d.h. insbesondere, dass die Klassen der einzelnen Wesen (Mensch etc.) **nicht `public`** sind. Der Factory übergibt man die Information, wie viel Geld man investieren möchte, und sie gibt ein Array von Wesen zurück. Das erste Element ist immer der Anführer, die folgenden dann entsprechend die Wesen der Art. Reicht das Geld nicht, wird ein leeres Array zurückgegeben. Die Art der erzeugten Wesen wählt man über einen passenden Parameter (`rasse`) aus.

Für jede Rasse gibt es eine entsprechende Factory-Klasse für die Erzeugung der Kämpfer und das Herausgeben des Anführers. Das Interface `Factory` beschreibt das Aussehen dieser Klassen. Es handelt sich **nicht** um eine statische Factory!

Jede Rasse verfügt über die Methode `attacke`, sodass ein Angriff auf einen anderen Kämpfer ausgeführt werden kann. Diese Methode gibt den angerichteten Schaden zurück und zieht gleichzeitig diesen von den Lebenspunkten des Gegners ab.

Jede Rasse verfügt zudem über die Methoden `isLebendig()`, die angibt, ob ein Wesen noch lebt, d.h. die Anzahl der Lebenspunkte > 0 ist. Ist ein Wesen nicht mehr lebendig, wird es aus dem Squad entfernt.

Weiterhin gibt es eine Methode `beschraenkeSchaden(double damage)`. Bei Menschen führt diese Methode dazu, dass der angerichtete Schaden prozentual um 10 % verringert wird. Bei anderen Wesen hat sie keine Wirkung.

Ein weiteres wichtiges Kriterium ist, dass die spezifischen Eigenschaften (**außer den aktuellen Lebenspunkten eines Wesens**) der einzelnen Rassen unveränderbar nach Objekterstellung sind und von der Basisklasse `Wesen` generell kein Objekt erstellt werden darf.

Ordnen Sie die verschiedenen Wesen **sinnvoll in Pakete** unterhalb des vorgegebenen Pakets [pr2.vererbung.racewars](../sources/src/main/java/pr2/vererbung/racewars/) ein.

Machen Sie, wo immer möglich, die Attribute der Klassen `final` und arbeiten Sie mit **minimalen Sichtbarkeiten**.

## Kampfsystem

Nun zur generellen Kampflogik des Spiels. Die Schadenshöhe einer Rasse berechnet sich wie folgt:

\( damage = Geschwindigkeit \cdot Schaden \)

Wobei letzterer bei den Menschen, wie schon erwähnt, über die Methode `beschraenkeSchaden` beschränkt wird, da diese mehr Schaden ertragen als andere Klassen. Achten Sie daher darauf den errechneten Schaden bei den Menschen um diesen Faktor zu reduzieren.

Jeder **Anführer** erhöht diesen Schaden nun noch einmal um seinen jeweiligen Bonus Faktor.

\( damage = damage \cdot bonus \)

Sollte der Anführer auf einen anderen Anführer treffen und dessen Element überlegen sein, wird der Schaden noch einmal verdoppelt. Hierbei gilt:

  * **Feuer** ist **Luft** überlegen,
  * **Wasser** ist **Feuer** überlegen,
  * **Erde** ist **Wasser** überlegen,
  * **Luft** ist **Erde** überlegen.

Nachdem der Schaden errechnet wurde, muss noch wie oben angedeutet die **Rüstung** beachtet werden. Das heißt, der angerichtete Schaden muss prozentual der angegebenen Rüstung reduziert und anschließend von den Lebenspunkten abgezogen werden.

\( damage = damage \cdot (1 - gegnerruestung) \)


## GameController

Die Haupt-Klasse `GameController` enthält die `main`-Methode, erstellt die Squads und besitzt die Kenntnis über die aktuelle Runde sowie den Spieler, der an der Reihe ist. Außerdem startet ihre Methode `runGame()` das Spiel. In dieser wird in einer Schleife jeweils die Attacke eines Squad auf das andere ausgeführt (und umgekehrt), und jeweils der aktuelle Spielstand sowie Runde über die statische Methode `printGame(GameController game)` des `GameViewers` ausgegeben. Jedes Wesen eines Squads führt eine Attacke auf ein zufällig gewähltes Wesen des Gegner-Squads durch. Wenn das Spiel gestartet wurde, läuft es ohne Nutzereingaben bis zur kompletten Auslöschung eines Squads und terminiert mit der Ausgabe des Gewinners. Bei jedem Kampf werden die Ergebnisse der Begegnung und die Auswirkung auf den Squad angezeigt.

Die Geister brauchen Sie in der Simulation nicht vorzusehen. Es reicht, die Klasse anzulegen.

Überschreiben Sie die `toString`-Methoden so, dass sinnvolle Informationen zu den einzelnen Wesen ausgegeben werden können.

Nehmen Sie **keine Eingaben von der Konsole** entgegen. Das Spiel läuft automatisch nach dem Start durch.


## UML-Diagramm

Erstellen Sie ein Klassendiagramm, das die im Text genannten Entitäten, Eigenschaften und Methoden in einem objektorientierten Modell abbildet. Lesen Sie den Text dieser Aufgabe sehr sorgfältig, um keine Klassen oder Interfaces bzw. Beziehungen zu vergessen.

Nutzen Sie Vererbung, Interfaces und abstrakte Klassen, um keine Information und kein Verhalten mehr als einmal abbilden zu müssen. Sie werden höchstwahrscheinlich noch eigene, über die im Text genannten Entitäten herausgehende Abstraktionen einführen wollen, um das Design zu vervollständigen. Teilen Sie die entworfenen Strukturen in verschiedene Pakete auf, und wählen Sie sinnvolle Sichtbarkeitsattribute.

**Abgabe**: Das UML-Diagramm ist Teil der Abgabe und sollte an einer geeigneten Stelle in Ihrem Repository eingecheckt sein. Als **Dateiformat** ist `PNG` oder `PDF` erlaubt.

## Implementierung

Gehen Sie in das Paket [pr2.vererbung.racewars](../sources/src/main/java/pr2/vererbung/racewars/).

Implementieren Sie alle Klassen aus Ihrem UML-Diagramm mit dem entsprechenden Verhalten.


## JUnit

Schreiben Sie sinnvolle JUnit Tests zur Überprüfung der Factories, der Kampf-Funktion und der Erstellung verschiedener Squads.


## Simulation

Simulieren Sie eine Schlacht mit einer gewissen Anzahl an Einheiten, jedoch aber gleichem Startkapital (2000 $) beider Squads. Machen Sie entsprechende Ausgaben, aus denen hervorgeht, dass sich Ihr Programm wie spezifiziert verhält.

Eine beispielhafte Ausgabe des Spiels sieht wie folgt aus:

```console
---------RUNDE 1-------
Squad von: The walking dead
  Squadgröße: 15
    🌟 Lich Untoter [276.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    🌟 Farseer Ork [120.00]
    Ork [100.00]

Squad von: Legolas and friends
  Squadgröße: 13
    🌟 Erzmagier Mensch [700.00]
    Mensch [140.00]
    Mensch [140.00]
    Mensch [140.00]
    Mensch [140.00]
    Mensch [140.00]
    Mensch [140.00]
    Mensch [140.00]
    🌟 Daemonslayer Nachtelf [360.00]
    Nachtelf [120.00]
    Nachtelf [120.00]
    Nachtelf [120.00]
    Nachtelf [120.00]

⚔️⚔️⚔️⚔️⚔️⚔️⚔️ Kampf ⚔️⚔️⚔️⚔️⚔️⚔️⚔️
🌟 Erzmagier Mensch [700.00] ⚔️ Untoter [120.00] -> Schaden: 280.00
   🌟 Erzmagier Mensch [700.00], Untoter ☠☠☠
Mensch [140.00] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [64.00]
Mensch [140.00] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [64.00]
Mensch [140.00] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [64.00]
Mensch [140.00] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [64.00]
Mensch [140.00] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [64.00]
Mensch [140.00] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [64.00]
Mensch [140.00] ⚔️ Untoter [64.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [8.00]
🌟 Daemonslayer Nachtelf [360.00] ⚔️ Untoter [120.00] -> Schaden: 94.50
   🌟 Daemonslayer Nachtelf [360.00], Untoter [25.50]
Nachtelf [120.00] ⚔️ Untoter [120.00] -> Schaden: 31.50
   Nachtelf [120.00], Untoter [88.50]
Nachtelf [120.00] ⚔️ Untoter [64.00] -> Schaden: 31.50
   Nachtelf [120.00], Untoter [32.50]
Nachtelf [120.00] ⚔️ 🌟 Farseer Ork [120.00] -> Schaden: 31.50
   Nachtelf [120.00], 🌟 Farseer Ork [88.50]
Nachtelf [120.00] ⚔️ Untoter [8.00] -> Schaden: 31.50
   Nachtelf [120.00], Untoter ☠☠☠
🌟 Lich Untoter [276.00] ⚔️ Nachtelf [120.00] -> Schaden: 73.60
   🌟 Lich Untoter [276.00], Nachtelf [46.40]
Untoter [88.50] ⚔️ Mensch [140.00] -> Schaden: 21.60
   Untoter [88.50], Mensch [118.40]
Untoter [64.00] ⚔️ Mensch [140.00] -> Schaden: 21.60
   Untoter [64.00], Mensch [118.40]
Untoter [64.00] ⚔️ Mensch [118.40] -> Schaden: 21.60
   Untoter [64.00], Mensch [96.80]
Untoter [120.00] ⚔️ Nachtelf [120.00] -> Schaden: 32.00
   Untoter [120.00], Nachtelf [88.00]
Untoter [120.00] ⚔️ Mensch [96.80] -> Schaden: 21.60
   Untoter [120.00], Mensch [75.20]
Untoter [120.00] ⚔️ Mensch [140.00] -> Schaden: 21.60
   Untoter [120.00], Mensch [118.40]
Untoter [64.00] ⚔️ Nachtelf [120.00] -> Schaden: 32.00
   Untoter [64.00], Nachtelf [88.00]
Untoter [64.00] ⚔️ Mensch [75.20] -> Schaden: 21.60
   Untoter [64.00], Mensch [53.60]
Untoter [25.50] ⚔️ Mensch [140.00] -> Schaden: 21.60
   Untoter [25.50], Mensch [118.40]
Untoter [32.50] ⚔️ Mensch [118.40] -> Schaden: 21.60
   Untoter [32.50], Mensch [96.80]
🌟 Farseer Ork [88.50] ⚔️ Mensch [96.80] -> Schaden: 21.38
   🌟 Farseer Ork [88.50], Mensch [75.42]
Ork [100.00] ⚔️ 🌟 Daemonslayer Nachtelf [360.00] -> Schaden: 26.40
   Ork [100.00], 🌟 Daemonslayer Nachtelf [333.60]
⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️


---------RUNDE 2-------
Squad von: The walking dead
  Squadgröße: 13
    🌟 Lich Untoter [276.00]
    Untoter [88.50]
    Untoter [64.00]
    Untoter [64.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [120.00]
    Untoter [64.00]
    Untoter [64.00]
    Untoter [25.50]
    Untoter [32.50]
    🌟 Farseer Ork [88.50]
    Ork [100.00]

Squad von: Legolas and friends
  Squadgröße: 13
    🌟 Erzmagier Mensch [700.00]
    Mensch [140.00]
    Mensch [118.40]
    Mensch [140.00]
    Mensch [118.40]
    Mensch [53.60]
    Mensch [140.00]
    Mensch [75.42]
    🌟 Daemonslayer Nachtelf [333.60]
    Nachtelf [46.40]
    Nachtelf [120.00]
    Nachtelf [88.00]
    Nachtelf [88.00]

⚔️⚔️⚔️⚔️⚔️⚔️⚔️ Kampf ⚔️⚔️⚔️⚔️⚔️⚔️⚔️
🌟 Erzmagier Mensch [700.00] ⚔️ Untoter [88.50] -> Schaden: 280.00
   🌟 Erzmagier Mensch [700.00], Untoter ☠☠☠
Mensch [140.00] ⚔️ Untoter [32.50] -> Schaden: 56.00
   Mensch [140.00], Untoter ☠☠☠
Mensch [118.40] ⚔️ 🌟 Farseer Ork [88.50] -> Schaden: 56.00
   Mensch [118.40], 🌟 Farseer Ork [32.50]
Mensch [140.00] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [64.00]
Mensch [118.40] ⚔️ Untoter [25.50] -> Schaden: 56.00
   Mensch [118.40], Untoter ☠☠☠
Mensch [53.60] ⚔️ Untoter [64.00] -> Schaden: 56.00
   Mensch [53.60], Untoter [8.00]
Mensch [140.00] ⚔️ Untoter [64.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [8.00]
Mensch [75.42] ⚔️ Untoter [64.00] -> Schaden: 56.00
   Mensch [75.42], Untoter [8.00]
🌟 Daemonslayer Nachtelf [333.60] ⚔️ Untoter [8.00] -> Schaden: 94.50
   🌟 Daemonslayer Nachtelf [333.60], Untoter ☠☠☠
Nachtelf [46.40] ⚔️ 🌟 Farseer Ork [32.50] -> Schaden: 31.50
   Nachtelf [46.40], 🌟 Farseer Ork [1.00]
Nachtelf [120.00] ⚔️ Untoter [64.00] -> Schaden: 31.50
   Nachtelf [120.00], Untoter [32.50]
Nachtelf [88.00] ⚔️ Untoter [120.00] -> Schaden: 31.50
   Nachtelf [88.00], Untoter [88.50]
Nachtelf [88.00] ⚔️ Ork [100.00] -> Schaden: 31.50
   Nachtelf [88.00], Ork [68.50]
🌟 Lich Untoter [276.00] ⚔️ Mensch [140.00] -> Schaden: 49.68
   🌟 Lich Untoter [276.00], Mensch [90.32]
Untoter [8.00] ⚔️ Mensch [140.00] -> Schaden: 21.60
   Untoter [8.00], Mensch [118.40]
Untoter [8.00] ⚔️ Mensch [118.40] -> Schaden: 21.60
   Untoter [8.00], Mensch [96.80]
Untoter [120.00] ⚔️ Mensch [96.80] -> Schaden: 21.60
   Untoter [120.00], Mensch [75.20]
Untoter [64.00] ⚔️ Mensch [90.32] -> Schaden: 21.60
   Untoter [64.00], Mensch [68.72]
Untoter [88.50] ⚔️ Mensch [118.40] -> Schaden: 21.60
   Untoter [88.50], Mensch [96.80]
Untoter [32.50] ⚔️ Nachtelf [88.00] -> Schaden: 32.00
   Untoter [32.50], Nachtelf [56.00]
🌟 Farseer Ork [1.00] ⚔️ Mensch [96.80] -> Schaden: 21.38
   🌟 Farseer Ork [1.00], Mensch [75.42]
Ork [68.50] ⚔️ Nachtelf [88.00] -> Schaden: 26.40
   Ork [68.50], Nachtelf [61.60]
⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️


---------RUNDE 3-------
Squad von: The walking dead
  Squadgröße: 9
    🌟 Lich Untoter [276.00]
    Untoter [8.00]
    Untoter [8.00]
    Untoter [120.00]
    Untoter [64.00]
    Untoter [88.50]
    Untoter [32.50]
    🌟 Farseer Ork [1.00]
    Ork [68.50]

Squad von: Legolas and friends
  Squadgröße: 13
    🌟 Erzmagier Mensch [700.00]
    Mensch [75.20]
    Mensch [118.40]
    Mensch [140.00]
    Mensch [75.42]
    Mensch [53.60]
    Mensch [68.72]
    Mensch [75.42]
    🌟 Daemonslayer Nachtelf [333.60]
    Nachtelf [46.40]
    Nachtelf [120.00]
    Nachtelf [61.60]
    Nachtelf [56.00]

⚔️⚔️⚔️⚔️⚔️⚔️⚔️ Kampf ⚔️⚔️⚔️⚔️⚔️⚔️⚔️
🌟 Erzmagier Mensch [700.00] ⚔️ Untoter [32.50] -> Schaden: 280.00
   🌟 Erzmagier Mensch [700.00], Untoter ☠☠☠
Mensch [75.20] ⚔️ Untoter [8.00] -> Schaden: 56.00
   Mensch [75.20], Untoter ☠☠☠
Mensch [118.40] ⚔️ Untoter [120.00] -> Schaden: 56.00
   Mensch [118.40], Untoter [64.00]
Mensch [140.00] ⚔️ Untoter [64.00] -> Schaden: 56.00
   Mensch [140.00], Untoter [8.00]
Mensch [75.42] ⚔️ Ork [68.50] -> Schaden: 56.00
   Mensch [75.42], Ork [12.50]
Mensch [53.60] ⚔️ Untoter [88.50] -> Schaden: 56.00
   Mensch [53.60], Untoter [32.50]
Mensch [68.72] ⚔️ Untoter [64.00] -> Schaden: 56.00
   Mensch [68.72], Untoter [8.00]
Mensch [75.42] ⚔️ 🌟 Lich Untoter [276.00] -> Schaden: 56.00
   Mensch [75.42], 🌟 Lich Untoter [220.00]
🌟 Daemonslayer Nachtelf [333.60] ⚔️ Untoter [8.00] -> Schaden: 94.50
   🌟 Daemonslayer Nachtelf [333.60], Untoter ☠☠☠
Nachtelf [46.40] ⚔️ Untoter [32.50] -> Schaden: 31.50
   Nachtelf [46.40], Untoter [1.00]
Nachtelf [120.00] ⚔️ 🌟 Farseer Ork [1.00] -> Schaden: 31.50
   Nachtelf [120.00], 🌟 Farseer Ork ☠☠☠
Nachtelf [61.60] ⚔️ Untoter [1.00] -> Schaden: 31.50
   Nachtelf [61.60], Untoter ☠☠☠
Nachtelf [56.00] ⚔️ Untoter [8.00] -> Schaden: 31.50
   Nachtelf [56.00], Untoter ☠☠☠
🌟 Lich Untoter [220.00] ⚔️ Mensch [53.60] -> Schaden: 49.68
   🌟 Lich Untoter [220.00], Mensch [3.92]
Untoter [8.00] ⚔️ Mensch [68.72] -> Schaden: 21.60
   Untoter [8.00], Mensch [47.12]
Ork [12.50] ⚔️ Mensch [75.42] -> Schaden: 17.82
   Ork [12.50], Mensch [57.60]
⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️


---------RUNDE 4-------
Squad von: The walking dead
  Squadgröße: 3
    🌟 Lich Untoter [220.00]
    Untoter [8.00]
    Ork [12.50]

Squad von: Legolas and friends
  Squadgröße: 13
    🌟 Erzmagier Mensch [700.00]
    Mensch [75.20]
    Mensch [118.40]
    Mensch [140.00]
    Mensch [75.42]
    Mensch [3.92]
    Mensch [47.12]
    Mensch [57.60]
    🌟 Daemonslayer Nachtelf [333.60]
    Nachtelf [46.40]
    Nachtelf [120.00]
    Nachtelf [61.60]
    Nachtelf [56.00]

⚔️⚔️⚔️⚔️⚔️⚔️⚔️ Kampf ⚔️⚔️⚔️⚔️⚔️⚔️⚔️
🌟 Erzmagier Mensch [700.00] ⚔️ Untoter [8.00] -> Schaden: 280.00
   🌟 Erzmagier Mensch [700.00], Untoter ☠☠☠
Mensch [75.20] ⚔️ Ork [12.50] -> Schaden: 56.00
   Mensch [75.20], Ork ☠☠☠
Mensch [118.40] ⚔️ 🌟 Lich Untoter [220.00] -> Schaden: 56.00
   Mensch [118.40], 🌟 Lich Untoter [164.00]
Mensch [140.00] ⚔️ 🌟 Lich Untoter [164.00] -> Schaden: 56.00
   Mensch [140.00], 🌟 Lich Untoter [108.00]
Mensch [75.42] ⚔️ 🌟 Lich Untoter [108.00] -> Schaden: 56.00
   Mensch [75.42], 🌟 Lich Untoter [52.00]
Mensch [3.92] ⚔️ 🌟 Lich Untoter [52.00] -> Schaden: 56.00
   Mensch [3.92], 🌟 Lich Untoter ☠☠☠
⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️
---------SPIEL BEENDET-------
Sieger: Legolas and friends
```

## Optional: Balancieren des Spiels

**Diese Unteraufgabe ist optional. Sie können Sie für 25 Sonderpunkte bearbeiten, wenn Sie wollen.**

Mit den aktuellen Werten ist das Spiel relativ schlecht balanciert, d.h. manche Rassen sind nahezu nicht zu besiegen.

Versuchen Sie, die Eigenschaften der Wesen (Lebenspunkte, Preis etc.) so anzupassen, dass die verschiedenen Rassen ähnlich mächtig werden.

Um Ihre Abgabe nicht zu verfälschen, führen Sie die Änderungen auf einem anderen Branch aus und geben Sie im main-Branch nur ein Dokument mit einem Vorschlag für die korrigierten Werten ab.


## Abgabe

Alle Abgaben für die Vorlesung erfolgen über `git` und das Ihnen zugeordnete Repository.

Hierzu gehen Sie wie folgt vor:

  1. Öffnen Sie eine Kommandozeile (Terminal).
  2. Gehen Sie in Ihr Working Directory.
  3. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.
  4. Wenn Sie Meldung "✅ Projekt gebaut" bekommen, checken Sie Ihre Änderungen in `git` **auf der Kommandozeile** ein (comitten), d.h. mit `git add` und `git commit`. Verwenden Sie **nicht** Eclipse für diesen Schritt.
  5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
  6. Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.

**Erinnerung**: Denken Sie daran, dass Sie alle **öffentlichen Methoden** mit entsprechender **JavaDoc** versehen müssen. **Ausgaben** auf und **Eingaben** von der Konsole sind nur dann erlaubt, wenn der Aufgabentext es explizit verlangt.