Wie kann ich mein Java Textadventure verbessern, um ein Klassendiagramm zu erstellen?

1 Antwort

Ich hab diverse Ideen, aber ehrlich gesagt finde ich das ne ziemlich coole offene Aufgabe. Deswegen will ich nicht so viel dazu sagen, weil du hier wirklich kreativ werden kannst.

Eine vielleicht nicht so offensichtliche Idee: Du könntest eine Klasse für Szenen anlegen. Eine Szene könnte (natürlich) ihren Text bekommen sowie die Information, mit welcher Antwort man zu welcher nächsten Scene wechselt. Das würde den Hauptcode ziemlich lesbar machen:

public static void main(String[] args){
  Scene currentScene = getStartScene();
  do{
    print(currentScene.getStory());
    currentScene = currentScene.getNextScene();
  } while(!currentScene.isEnding)

Das Hauptproblem hierbei dürfte sein, die Scenes zu initialisieren, weil jede Scene ihre möglichen Nachfolger kennen muss. Wenn du das alles im Code machst, ist nicht viel gewonnen. Aber dank der Struktur kannst du die einzelnen Szenen in Dateien auslagern und dann ins Programm laden, wenn du wirklich willst.

Falls dir das ne Ebene zu tief ist: Klar, fang mit einfacheren Dingen an. Z.B. könntest du eine Klasse für Waffen anlegen. Mögliche Attribute könnten etwa Name, Schaden und Gewicht sein [Gewicht könnte z.B. einen Unterschied machen, falls der Held durch einen Fluss schwimmen will].

Der Held selbst könnte Lebenspunkte haben, 1-2 Waffen (eine Pro Hand), Geld, einen Namen, ... was immer du für deine Story brauchen könntest ;) Wie gesagt, ist das eine ziemlich offene Aufgabe und es gibt erstmal kein "richtig" und "falsch".


dennislnz 
Beitragsersteller
 26.10.2022, 17:31

Puh, danke erstmal. Erschlägt mich gerade alles ein bisschen, habe gehofft ich könnte mein Programm nur ein wenig abändern. Ich nehme an ich kann mit meinem bisherigen Programm nicht viel anfangen, wenn ich ein Adventure mit mehreren Klassen erstellen und ein Klassendiagramm verwenden möchte oder?

MagicalGrill  27.10.2022, 09:18
@dennislnz

Doch, du kannst auch aus deinem aktuelen Code Klassen rausziehen. Wie gesagt, eine Klasse für "Waffe" ist möglich (du verwendest ja bereits "Schwert" und "Dolch"). Diese Klasse könnte ein Attribut "Name" und ein Attribut "maxDamage" bekommen, oder noch komfortabler: Eine Methode rollDamage(), damit du den ausgeteilten Schaden direkt aus der Klasse bekommen kannst und nicht in der Angriff()-Methode berechnen musst.

Deine ursprünglichen Ideen mit der Held-Klasse und der Gegner-Klasse kannst du immer noch umsetzen - beide würden Lebenspunkte bekommen, der Held kriegt eine Instanz deiner neuen "Waffe"-Klasse mit (anfangs ein Schwert, das später durch einen Dolch ausgetauscht werden kann).

Du kannst beiden auch eine takeDamage()-Methode mitgeben, damit du dir die Zuweisungen sparen kannst. Die Zeilen

int schaden = 0;

if(waffe.equals("Schwert")){
  schaden = ...
} else if(waffe.equals("Dolch")){
  schaden = ...
} 
print(...);
lebenspunkteGegner = ...;
print(lebenspunkteGegner);

in deiner angriff()-Methode könntest du dann etwa ersetzen durch:

int schaden = held.waffe.rollDamage();
gegner.takeDmg(schaden);
print(...);
print(gegner.lebenspunkte);

Das ist vor allem dann hilfreich, wenn du später noch mehr Waffen hinzufügst, weil sich dann das if-else if nicht so aufbläht, sondern du nur held.waffe auswechseln musst.