Zum Inhalt springen

Jadeite

Mitglieder
  • Gesamte Inhalte

    152
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Jadeite

  1. Gibt es neben Athletik, Askese und Laufen noch weitere Fertigkeiten die einen Bonus auf andere Spielwerte geben? Gibt es insbesondere Fertigkeiten die auf mehr als einen Wert einen Bonus geben oder bei denen der Bonus nicht dem gedrittelten Fertigkeitswert entspricht?
  2. So, ich habe eine Möglichkeit gefunden Bonusse umzusetzen. Das ist nicht nur für Totems relevant sondern auch für Fertigkeiten wie Athletik und Laufen die einen Bonus auf bestimmte Spielwerte liefern. Der Bonus kann entweder ein fester Wert (wie durch ein Totem) sein oder sich aus einem Fertigkeitswert berechnen. Dabei wird zwischen Bonussen auf Fertigkeitswerte und Bonussen auf Spielwerte wie Eigenschaften Aussehen oder Bewegung unterschieden. Jede Spielfigur enthält eine Menge für Bonusse, wenn man eine entsprechende Fertigkeit oder ein Totem hinzufügt wird dort der dazugehörige Bonus hinterlegt. Bei allen Abfragen von Werten wird geprüft, ob sich in dieser Menge ein passender Bonus befindet und falls ja angewendet. Gegebenenfalls können es auch mehrere Bonusse sein, beispielsweise für die Bewegungsweite. Was davon nicht betroffen ist sind Dinge wie Schadensbonus, Zauberbonus oder die Bonusse auf Fertigkeiten durch hohe Eigenschaftswerte da diese einem festen Schema folgen. Ich habe mein Klassendiagramm entsprechend angepasst, wobei es an anderen Stellen nicht mehr ganz konsistent zu meiner Implementierung ist:
  3. @Irwisch Zauberkategorien sind jetzt beliebig erweiterbar, inklusive Zauberunterkategorien. Technikkategorien sind hingegen hardcodiert, da sie sich sehr in den zusätzlichen Attributen unterscheiden, insbesondere KiDo. Aber die Kategorien aus Ars Armorum sollten da auch eigentlich alles abdecken. Ich versuche schon das ganze so Regelkonform wie möglich zu halten, der Hauptgrund dafür ist aber, dass ich es interessant finde solche Dinge zu modellieren. Darum habe ich jetzt beispielsweise auch die KiDo Stile umgesetzt, mit allen Beschränkungen wie Farbe, Hart/Weich, etc. Und ich habe jetzt schon einiges dazugelernt.
  4. @seamus Es geht mir um den Namen für eine abstrakte interne Oberklasse. Kampftechniken und Zauber haben gewisse Gemeinsamkeiten mit Stufe und Lernkosten, also wollte ich schauen es entsprechend zusammenzufassen. Der Endnutzer kriegt davon nichts mit, aber ich gebe meinen Klassen gerne passende Namen (auch wenn es aktuell gerade zu einem ziemlichen Denglisch verkommt, aber Getter sind nunmal Getter). Auf Englisch würde ich es einfach als Power titulieren, aber Macht und Kraft haben da für mich eine leicht andere Bedeutung.
  5. Hat jemand einen guten Oberbegriff für Zauber und Techniken? Ich komme nur auf Kraft, bin damit allerdings nicht völlig zufrieden.
  6. Die Anfänge einer Anwenderoberfläche, noch ohne jedwede Funktionalität (dafür brauche ich Steuerungsklasse) . Mein Plan ist es die Charaktere nicht in einer Datenbank zu sichern sondern einzeln in Dateien zu speichern, dass macht beispielsweise den Austausch zwischen Spielern und Spielleitern einfacher. Wer verschiedene Endgeräte nutzen möchte kann für die Speicherung einen Clouddienst nach Wahl nutzen. Charakter erstellen erzeugt einen neuen Charakter der anschließend nach den Erschaffungsregeln erstellt wird, Charakter eintragen ermöglicht es bestehende Charaktere einzupflegen ohne dafür eigens die Erschaffung durchlaufen zu müssen. Charakter importieren soll es ermöglichen Charaktere aus anderen Programmen einzulesen. Das setzt voraus, dass sie in einem lesbaren Format auf xml oder json Basis vorliegen und müsste für jedes Programm einzeln umgesetzt werden. Würde von daher eher später kommen, aber ich denke es könnte, insbesondere für die ehemaligen Nutzer verwaister Programme, sehr nützlich sein. Ich sehe da aber eine Reihe von Komplikationen, insbesondere wenn die externen Daten kaum kommentiert sind. Auf der anderen Seite möchte ich bei den Charakteren die Möglichkeit bieten sie zu exportieren um sie beispielsweise leicht in einen VTT einpflegen zu können. Aber auch das müsste auf einer per Case Basis geschehen wenn sich kein einheitlicher Standard etabliert. Prinzipiell ist der Export deutlich einfacher als der Import. Die unteren Knöpfe sollen jeweils zu eigenen Fenstern führen in denen die jeweiligen Komponenten erstellt und bearbeitet werden können. Potentiell auch entfernt, aber das kann weitreichende Folgen haben. Es kann gut sein, dass da noch weitere hinzukommen wenn ich feststelle etwas übersehen zu haben. Das ganze wird ein altbackenes Äußeres haben. Einerseits ist mir Funktionalität wichtiger als Optik (wobei ich auf eine konsistente Oberfläche wert lege), andererseits bin ich ohnehin kein Freund des ganzen flachen Designs.
  7. Zauberunterkategorien wie Hexentänze und FuschiWata Siegel funktionieren. Man kann sie beliebig anlegen und dabei eine Zauberkategorie als Oberkategorie angeben. Das ganze geht auch rekursiv, wenn man also gerne "Hexentänze aus Chetra" spezifizieren möchte geht das problemlos. Die Ausnahmelisten für elfisches Lernen funktionieren ebenfalls. Hier habe ich es so umgesetzt, dass die elfische Ausnahme für Zaubertänze auch für Hexentänze gilt (indem ich solange ich eine Zauberunterkategorie habe die Oberkategorie aufrufe).
  8. @Ma KaiEin Protokoll mit allen Lern- und Steigervorgängen werde ich auf jeden Fall implementieren. Eine persistente Rücknamefunktion höchstwahrscheinlich nicht. Vorstellbar wäre eine Möglichkeiten Zauber und Fertigkeiten im Nachhinein verlernen zu können, man müsste sich dann halt Gold und EP hinterher wieder gutschreiben. Die Gültigkeit eines Charakters kann ohnehin durch die Änderung von Lernkosten leicht zerstört werden. Durch die Änderungen bei Gerätekunde hatten ja auch alle Charaktere die es gelernt hatten im Rückblick zu viel bezahlt. In dem Zusammenhang: Ich habe jetzt das Lernen und Verbessern der allgemeinen Fertigkeiten so angepasst, dass es auch mit inkonsistenten Kosten zurechtkommt (und dabei die Alternative mit den geringsten EP-Kosten wählt).
  9. @seamus Eine Historie in der Eingetragen wird wann was womit gesteigert wurde ist machbar. Ich könnte die Lernen und Steigern als Befehl umsetzen und so eine Funktion zum Rückgängigmachen innerhalb einer Sitzung zu ermöglichen. Beim Speichern würde ein Charakter aber dann jeweils finalisiert, sonst bläht sich die Größe immer mehr auf. Und da Steigerungen teilweise voneinander abhängen, würde das ganze Stapel umgesetzt, es würde in umgekehrter Reihenfolge zurückgenommen. Insgesamt ist das aber eher ein Nice to Have. Generell hatte ich aber vor, dass beim Steigern und Lernen ein Dialog kommt der einem die Kosten präsentiert und man dann bestätigen muss um tatsächlich Gold und Erfahrung dafür auszugeben.
  10. Wenn ich ohnehin die Zauberkategorien von Enum zu einer Klasse mache kann ich ohne große Probleme auch eine Unterklasse wie Sonderkategorie einführen, welche eine Referenz zur Hauptkategorie (also beispielsweise Zaubertänze für Hexentänze) hält da sie ja, abgesehen vom Lernen für bestimmte Klassen, wie diese Kategorie behandelt wird. Man kann dann innerhalb der Benutzeroberfläche nicht nur neue Zauberkategorien hinzufügen sondern auch Spezialfälle für eine bestehende Kategorie anlegen. Beim Anlegen kann man dann noch auswählen ob man diese Kategorie bei allen bestehenden Klassen die Zugang zur ursprünglichen Kategorie haben ebenfalls hinzufügen möchte (das ist zB bei den Hexentänzen sinnvoll zu denen ja lediglich der Derwisch keinen Zugang hat) oder nicht (für FuschiWata Siegel). Dann muss man nur noch bei den Klassen die Ausnahmen anpassen. Das gilt natürlich nur für bestehende Klassen, bei späteren muss man es dann beim Hinzufügen einpflegen.
  11. Generelle Frage: Ist es wünschenswert wenn die Zauberkategorien erweiterbar sind, man also beispielsweise eine Kategorie für Dämonenbeschwörung hinzufügen könnte wenn dazu keine offiziellen Regeln mehr erscheinen? @seamus Finstere Magie ist von den Finstermagiern aus DUM, die schwarzen Ritualzauber werden nicht auf die klassische Weise gelernt sondern vom Mentor verliehen. Sie sind nicht für Spielercharaktere gedacht, aber ich könnte sie durchaus Einbauen wenn jemand das Programm auch für Nichtspielercharaktere nutzen möchte. Hat aber eine vergleichsweise niedrige Priorität. Bei der Blutmagie hatte ich nichts zum Lernen gefunden, von daher würde ich sie behandeln wie normale Zauber. Die FuschiHata Siegel sind ein interessante Sonderfall. Sie werden gelernt wie sonstige Zaubersiegel auch, sind aber nur von FuschiHata erlernbar. Auf der anderen Seite gibt es dann die Hexentänze die zwar Zaubertänze sind aber nicht von Derwischen gelernt werden können. Man kann entweder so verfahren, dass Spieler darauf achten beim Lernen solche Einschränkungen zu beachten oder man erstellt zusätzliche Kategorien um es unmöglich zu machen diese Regeln zu verletzen. Dann würde einer Fehlermeldung in der Art von "Zauber der Kategorie Hexentänze sind für Charaktere der Klasse Derwisch nicht erlernbar" kommen.
  12. Habe ich etwas übersehen oder umfasst diese Liste alle aktuell in M5 vorhandenen Zauberkategorien und Kampftechniken? Kampfkunst Fechtkunst Schießkunst KiDo Beherrschen Bewegen Erkennen Erschaffen Formen Verändern Zerstören Dweomer Wundertat Zauberlied Zaubersalz Runenstab Zaubersiegel Zauberrune Thaumatherapie Finstere Magie Chaoswunder Wilder Dweomer Nekromantie Kampfvers Elementarbeschwörungszauber Zaubertanz Erhaltung Zaubermittel Zauberschutz Vigilsignie Zauberblatt Artefakt
  13. Das haben damals Liz Taylor und Albert Einstein noch ganz ohne "KI" hinbekommen. Oder in einem anderem Rollenspiel aus Deutschland ganze Heerscharen an Promis (vor allem Dank Ina Kramer und Caryad).
  14. @seamusEs ist kein großer Aufwand die Methoden so umzuschreiben, dass sie die Möglichkeit unterschiedlicher Lernkosten berücksichtigen. Auch der zusätzliche Rechenaufwand ist nicht groß. Es wird lediglich für alle bestehenden Klassen herauskommen, dass es günstiger ist die Fertigkeit als Kampffertigkeit zu erlernen.
  15. @seamus Gerätekunde war von Anfang an als Ersatz für Ballista bedienen und Katapult bedienen gedacht, von daher ist es schon sinnvoll es auch als Kampffertigkeit zu führen. Ich hätte es allerdings von vorneherein nicht als Alltagsfertigkeit sondern als normale Kampf- und Wissensfertigkeit geführt. Sofern ich keinen Fehler bei dem Erstellen meiner Tabelle hatte sind das hier äquivalenten Schwierigkeiten und Fertigkeitsgruppen: A: Alltag leicht, Halbwelt leicht, Kampf leicht, Körper leicht, B: Freiland leicht, C: Alltag normal, Wissen leicht, D: Körper normal, E: Alltag schwer, Halbwelt normal, Kampf normal, Körper schwer, Sozial leicht, Wissen normal, F: Freiland normal, Wissen schwer, G: Halbwelt schwer, Sozial normal, Unterwelt leicht, H: Alltag sehr schwer, Freiland schwer, Sozial schwer, Unterwelt normal, I: Halbwelt sehr schwer, Kampf schwer, Unterwelt schwer, K: Kampf sehr schwer,
  16. @Solwac Ich hatte angenommen du würdest dich auf die Tabelle von Seite 15 beziehen. Die Tabelle von Seite 13 oben rechts nutze ich, nur dass ich es jeweils innerhalb der Charakterklassen speichere wodurch es deutlich erweiterbarer wird. @Prados Karwan Danke für den Hinweis mit der Gerätekunde. Wobei ich mir unschlüssig bin ob ich das wirklich so umsetzen sollte, da ich diese Änderung für ziemlich problematisch erachte. Selbst für Händler ist es sinnvoller es als Kampffertigkeit zu lernen da sie so weniger Gold zahlen müssen. Man kann natürlich eine theoretische Klasse mit Alltag 10 und Kampf 20 oder 30 konstruieren, aber selbst dann hätte man die Abwägung zwischen EP Kosten auf der einen und Gold und PP Kosten auf der anderen Seite.
  17. @Solwac Wenn ich die Daten wie in der Tabellensammlung aufarbeite habe ich eine Assoziation zwischen Fertigkeiten und Charakterklassen. Ich müsste also bei den Objekten von einem von beiden jeweils die Verknüpfungen speichern. Das macht einerseits den Datensatz deutlich größer, insbesondere wird aber das Hinzufügen neuer Klassen oder Fertigkeiten deutlich umständlicher da man sich dann darum kümmern muss diese Assoziationen zu erstellen oder zu aktualisieren. Und ob es dann einen Performancevorteil bietet ist ebenfalls nicht garantiert, da man ja in einer solchen Riesentabelle den passenden Eintrag finden müsste. Ich habe innerhalb der Fertigkeiten gespeichert zu welchen Gruppen sie gehört. Das sind maximal sechs, im Schnitt aber eher zwei oder drei. Für jede davon kurz bei der Klasse nachzufragen wie hoch die Kosten sind ist kein sonderlicher Aufwand. Man könnte ihn sogar als Konstant annehmen, da die Anzahl der Fertigkeitsgruppen fest ist. Was ich von der großen Tabelle übernommen habe ist im Prinzip die kleine Tabelle mit den Zeilen A-K wobei ich dort noch eine Spalte mit den LP-Kosten und dem Startwert hinzugefügt habe. Außerdem noch eine weitere Tabelle die für jede Fertigkeitsgruppe angeht welche Zeile bei Leicht, Normal, Schwer und Sehr Schwer genutzt werden soll. Damit spare ich mir ziemlich viel Code und Fallunterscheidungen im Vergleich zu vorher. Ich werde also die große Tabelle nicht implementieren, kann aber falls Interesse besteht gerne eine Methode schreiben um sie für alle eingepflegten Klassen und Fertigkeiten zu erstellen. Das lässt sich sehr schnell coden, insbesondere wenn ich mich für die Ausgabe auf HTML beschränke. Das elfische Lernen mitabzudecken war unproblematisch, hätte ich es später geändert hätte ich dafür eine Reihe von Signaturen ändern müssen. Und es funktioniert ja bereits. Wobei ich die Ausnahmen für Tanzzauber noch abdecken muss, aber auch da habe ich eine klare Vorstellung wie es funktioniert. Totems habe ich aber schon weit nach hinten geschoben und lediglich die Grundlagen geschaffen um bei einer Klasse angeben zu können ob sie eines (oder mehrere) hat. Mit itext habe ich noch keine Erfahrung, aber natürlich war es mein Plan einen PDF-Export anzubieten (wobei ich da notfalls ein .tex erzeugt hätte was dann hätte weiterverarbeitet werden können). Werde ich mir anschauen wenn ich mich an die Ausgabe mache. @Irwisch Das ist dann doch ein deutlich anderer Ansatz der es Wert ist weiterverfolgt zu werden.
  18. @Ma Kai Profi-Softwareentwickler bin ich auf keinen Fall, von daher sind Kritiken und Anregungen hilfreich. Was die Praxispunkte angeht wird auf dieser Ebene keine Referenz auf die Praxispunkte des Charakters übergeben, sondern lediglich ein Wert mit dem zurückgegeben werden kann wie teuer die Steigerung unter dieser Situation wäre. Wenn man die Möglichkeit hat ohne Goldkosten zu lernen könnte es in der Tat sinnvoll sein die Praxispunkte für später aufzuheben indem man beim Methodenaufruf für Praxispunkte 0 angibt, selbst wenn man welche hat. @Irwisch Ich bin noch sehr am Anfang. Und ich werde nichts veröffentlichen ohne dass Pegasus eine Fanlizenz herausgegeben hat die es abdeckt. Wobei es durchaus sein kann das ich bis dahin noch nichts Endanwendertaugliches habe. Außerdem kann es durchaus sinnvoll sein mehrere Programme zu haben, insbesondere wenn unterschiedliche Konzepte dahinterstecken. Es kann immer sein, dass Programme aus unterschiedlichen Gründen nicht weiterentwickelt werden oder, insbesondere bei Webanwendungen, nicht mehr verfügbar sind.
  19. Hier ist mal die Klasse AllgemeineFertigkeit um zu verdeutlichen wie die Lernkosten der Fertigkeiten ermittelt werde (und weshalb ich dabei mit relativ wenigen Tabellen auskomme), diesmal mit Kommentaren; /** * The Class AllgemeineFertigkeit. */ public class AllgemeineFertigkeit extends LernbareFertigkeit { /** Die Fertigkeitskategorien. */ Fertigkeitskategorie[] fertigkeitskategorien; /** * Gibt die Kosten zurück den Wert der allgemeine Fertigkeit um eins zu erhöhen. * * @param abenteurer die Charakterklasse * @param aktuellerWert der aktuelle wert * @param praxispunkte die zur verfügung stehenden Praxispunkte * @return die Trainigskosten, bestehend aus Erfahrungspunkten, Goldstücken und * verwendeten Praxispunkten. Aspekte wie kostenloses Lernen oder der * Ersatz von EP mit Gold werden in der Nutzeroberfläche vorgenommen */ @Override Lernkosten getTrainigskosten(Abenteurer abenteurer, int aktuellerWert, int praxispunkte) { int trainingseinheiten = this.fertigkeitskategorien[0].getFertigkeitsgruppe() .getTrainingseinheiten(this.fertigkeitskategorien[0].getSchwierigkeit(), aktuellerWert); if (trainingseinheiten > praxispunkte) trainingseinheiten -= praxispunkte; else { praxispunkte = trainingseinheiten; trainingseinheiten = 0; } return new Lernkosten(trainingseinheiten * erfahrungspunkteProTrainingseinheit(abenteurer), trainingseinheiten * 20, praxispunkte); } /** * Gibt die Kosten zurück den Wert der Waffenfertigkeit zu erlernen. * * @param abenteurer die Charakterklasse * @param rasse die Rasse (wegen den Elfen) * @return die Lernkosten, bestehend aus Erfahrungspunkten, Goldstücken und * verwendeten Praxispunkten. Aspekte wie kostenloses Lernen oder der * Ersatz von EP mit Gold werden in der Nutzeroberfläche vorgenommen * */ @Override Lernkosten getLernkosten(Abenteurer abenteurer, Rasse rasse) { int lerneinheiten = fertigkeitskategorien[0].fertigkeitsgruppe .getLerneinheiten(this.fertigkeitskategorien[0].getSchwierigkeit()); return new Lernkosten( lerneinheiten * erfahrungspunkteProTrainingseinheit(abenteurer) * 3 + rasse.getLernaufschlag(), lerneinheiten * 200, 0); } /** * Hilfsmethode um die minimalen Erfahrungspunktkosten pro Trainingseinheit zu ermitteln. * * @param abenteurer die Charakterklasse * @return minimalen Erfahrungspunktkosten pro Trainingseinheit */ private int erfahrungspunkteProTrainingseinheit(Abenteurer abenteurer) { // initialisiert den Wert auf dem globalen Maximum int erfahrungspunkteProTrainingseinheit = 40; // durchläuft alle Kategorien zu denen die Fertigkeit gehört und sucht den für // die Klasse günstigsten heraus for (Fertigkeitskategorie fertigkeitskategorie : fertigkeitskategorien) { int aktuelleKosten = abenteurer.getKostenFertigkeit(fertigkeitskategorie.getFertigkeitsgruppe().getWert()); if (erfahrungspunkteProTrainingseinheit > aktuelleKosten) erfahrungspunkteProTrainingseinheit = aktuelleKosten; } return erfahrungspunkteProTrainingseinheit; } /** * The Class Fertigkeitskategorie. */ class Fertigkeitskategorie { /** The fertigkeitsgruppe. */ Fertigkeitsgruppe fertigkeitsgruppe; /** The schwierigkeit. */ Schwierigkeit schwierigkeit; /** * Gets the fertigkeitsgruppe. * * @return the fertigkeitsgruppe */ public Fertigkeitsgruppe getFertigkeitsgruppe() { return fertigkeitsgruppe; } /** * Sets the fertigkeitsgruppe. * * @param fertigkeitsgruppe the new fertigkeitsgruppe */ public void setFertigkeitsgruppe(Fertigkeitsgruppe fertigkeitsgruppe) { this.fertigkeitsgruppe = fertigkeitsgruppe; } /** * Gets the schwierigkeit. * * @return the schwierigkeit */ public Schwierigkeit getSchwierigkeit() { return schwierigkeit; } /** * Sets the schwierigkeit. * * @param schwierigkeit the new schwierigkeit */ public void setSchwierigkeit(Schwierigkeit schwierigkeit) { this.schwierigkeit = schwierigkeit; } } } Die Lernkosten für Fertigkeiten werden innerhalb der Charakterklassen als Feld ganzer Zahlen gespeichert, jede Aufzählungstyp für Fertigkeitsgruppen hat als Attribut einen Wert der auf die passende Zelle verweist, dadurch braucht man nicht mehr 9 separate Getter. EDIT: Ich habe erste Tests geschrieben und sie laufen sauber durch, die Berechnung der EP-Kosten scheint ordnungsgemäß zu funktionieren.
  20. @Der Dan Das ist so ziemlich genau das was ich vorhabe. Nahezu alle Komponenten wie Charakterklassen, Fertigkeiten, Zauber, Rassen, etc sollen innerhalb des Programms editierbar und erstellbar sein. Das Erstellen als Kopie hatte ich mir schon überlegt um schnell Klassen wie den Wu abzubilden der sich vom normalen Schamanen durch veränderte Lernkosten unterscheidet. Im Bezug auf eine Wissensfertigkeit wie Baukunde würde es schon genügen eine neue Fertigkeit Baukunde anzulegen, die als, beispielsweise, leichte Wissensfertigkeit zählt und deren Leiteigenschaft Intelligenz ist. Midgard 5 ist etwas weniger granular was die Unterschiede der Klassen angeht und hat ein paar seltsame Folgen wie fechtende Barbaren, aber im Gegenzug erlaubt das System reibungslos das Hinzufügen neuer Klassen und Fertigkeiten.
  21. Danke für die Seitenangabe. Kampfzauber und zauberkundige Kämpfer folgen aber verschiedenen Regeln.
  22. Kannst du mir die genaue Seite mitteilen, ich habe da leider nichts finden können. Das wird auf verschiedenen Ebenen durchgereicht. Dinge wie kostenloses Lernen beim Lehrmeister oder Lernen von Spruchrollen werden auf der Ebene des Charakters stattfinden. Das ist notwendig damit Krieger ihre drei Spezialwaffen haben können. Die Spezialwaffe selbst ist ein Attribut eines Charakters, nicht seiner Charakterklasse. Aber es könnte durchaus sinnvoll sein, dieses Attribut schon für Abenteurer zu deklarieren, Zauberer haben dann halt 0 Spezialwaffen.
  23. Stimmt, die werden dann innerhalb der Rasse gespeichert, zusammen mit einer Collection von Ausnahmen um abzudecken das Elfen so tanzfreudig sind, Dafür muss man bei der Berechnung der Lernkosten neben der Klasse auch die Rasse angeben. Dann kann die Fertigkeit bei der Rasse nachfragen ob bei der eigenen Kategorie Zusatzkosten anfallen, für Zauber und Kampffähigkeiten läuft das ähnlich.
  24. @Mogadil Vielen Dank für das Angebot, aber ich werde die Lernkosten innerhalb des Enums Fertigkeitsgruppe speichern und habe auch mein Klassendiagramm entsprechend angepasst. Wobei es zunehmend schwierig wird überkreuzende Kanten zu vermeiden. Hier das überarbeitete Klassendiagramm: Außerdem habe ich mal exemplarisch alltag im Enum Fertigkeitsgruppe implementiert um besser zu verdeutlichen wie ich mir das ganz vorstelle (sollte ich mal Lust bekommen ein Sequenzdiagramm zu machen wäre das Steigern ein guter Kandidat). public enum Fertigkeitsgruppe { alltag { @Override int getLerneinheiten(Schwierigkeit schwierigkeit) { switch (schwierigkeit) { case leicht: return 0; case normal: return 0; case schwer: return 0; case sehrSchwer: return 0; default: return -1; } } @Override int getTrainingseinheiten(Schwierigkeit schwierigkeit, int aktuellerWert) { switch (schwierigkeit) { case leicht: { int[] trainingseinheiten = { 0, 0, 0, 0, 0, 0 }; return trainingseinheiten[aktuellerWert - 0]; } case normal: { int[] trainingseinheiten = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; return trainingseinheiten[aktuellerWert - 0]; } case schwer: { int[] trainingseinheiten = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; return trainingseinheiten[aktuellerWert - 0]; } case sehrSchwer: { int[] trainingseinheiten = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; return trainingseinheiten[aktuellerWert - 0]; } default: return -1; } } }; abstract int getLerneinheiten(Schwierigkeit schwierigkeit); abstract int getTrainingseinheiten(Schwierigkeit schwierigkeit, int aktuellerWert); } Ich habe sicherheitshalber mal die Werte alle auf 0 gesetzt, alternativ könnte ich auch die von Runenklingen verwenden, die sind etwas anders aber frei herunterladbar. Jedenfalls weiß eine Fertigkeit zu welchen Fertigkeitsgruppe sie mit welcher Schwierigkeit gehört und kann daher von der Fertigkeitsgruppe den Wert erfahren. Anschließend muss man nur noch anhand der Charakterklasse entscheiden welche der Gruppen der Fertigkeit die geringsten Kosten hat um es anschließend mit den berechneten Trainingseinheiten zu multiplizieren. Bei Bedarf kann man auch Praxispunkte nutzen. Wenn man nicht ausgewählt hat ohne Gold zu lernen werden die entsprechenden Goldkosten auch berechnet.
×
×
  • Neu erstellen...