Java-Programme und DSA

  • Moin,

    ich finde einige der Regeln in 4.1 sehr umfangreich und unübersichtlich, insbesondere Pflanzensuche ist ungemein aufwändig. Wenn man in Landstrich A eine Heilpflanze braucht blättert man sich dumm und dämlich. Habe daher angefangen das in java umzusetzen (bin eigentlich fast durch).

    Hat hier jemand Ahnung von java UND DSA? Das wäre sehr hilfreich für ein oder 2 Rückfragen.

    Gruß, Martin

  • So konkret ist mein Problem noch nicht. Ich habe die Pflanzensuchergeln (d.h. Ortskenntnis, zu durchsuchendes Gelände, Monat, Suchzeit, TaW (einzeln oder als Metatalent)) als JSwing-Oberfläche in einem JFrame zum anklicken und in einem anderen Fenster die Liste mit den Pflanzen (habe die abgetippt, naja fast alle, kämpfe noch mit dem Rest). Die wird als csv eingelesen und dann gemäß der eingegebenen Suchparameter aktualisiert, damit man dann eben nur 10 statt 130 Pflanzen anschaun muss. Aber 10 ist immer noch unpraktisch, weshalb ich die Eigenschaften der Pflanze (Heilpflanze, Nutzpflanze) etc. in die csv mit aufgenommen habe und als JTabbedPane im Ausgabefenster nochmal unterteilen will. Dann bleiben hoffentlich nur noch 2 oder 3 Pflanzen übrig, wo man schauen kann, ob die nun konkret die Heilung liefern, die gefragt ist.

    Hoffe das war verständlich. Etwas wirr vielleicht.

    Ich habe nun noch 2 Gedanken, mit denen ich spiele:
    Erstens: Ich habe noch nie TabbedPanes verwendet. Andererseits konnte ich vor diesem Projekt keine Zeile Java (zuletzt Borland Pascal 5.0 programmiert - 1993). Vielleicht wird's gar nicht so schwer.
    Zweitens: Am meisten nervt die Verbreitung. Wenn ich in der schwarzen Sichel rumturne, dann interessiert mich die geilste Heilpflanze ganz Maraskans einen Dreck. Aber mit Angaben wie "südlich der Linie Perricum - Havena" oder noch besser "südlich der roten Sichel" (ganz Aventurien? 100 Quadratkilometer südlich? In den Ausläufern der Sichel?) lässt sich ein Rechner ganz schlecht füttern. Da ist zuviel Meisterentscheid dabei. Schon bei den Erntezeiten musste ich bei Angaben wie "Frühsommer" oder "Herbst" selber entscheiden, welche Monate das dann wohl wären... Hast Du da eine Idee? Ich dachte an eine Karte, auf der man seine Position anklicken kann und dann ein KoordinatenArray, der ausliest, ob die jeweilige Pflanze da nun grad wächst oder nicht - aber uiuiui, das ist mal ein Aufwand. Ich könnte ja schon Hilfe brauchen beim Abtippen der Beschreibungen der Pflanzen, aber für jede ein Koordinatensystem speichern? Da geht mir die Gduld aus...

    Bessere Idee? Sonst meld ich mich nochmal, wenn konkrete Probleme auftauchen.

    Gruß, Martin

  • Während meinem Studium haben wir mal für eine kleine Praxisaufgabe ein Tool/Programm mit Java für die Pflanzensuche nach DSA 4.0 entwickelt.
    Das hat soweit auch ganz gut funktioniert. Müßte allerdings mal recherchieren, ob ich das noch irgendwo hab und wieder zum laufen bekomme.

    Was ich noch weiß: einer von uns hat sich damals erbarmt, die ganze Pflanzenliste als Access-DB zu erfassen. Auf diese haben wir dann mittels JDBC/ODBC zugegriffen. Was die Angaben wie Verbreitung angeht: wir sind von dem Ansatz ausgegangen, dass es sich um ein "Meister-Tool" handelt. Der Meister kann auf der Oberfläche die nötigen Werte der Helden wie Attribute, benötigte Talente, Punkte aus Sonderfertigkeiten, Suchzeit, Mitsucher etc. verwalten. Dadruch konnte er dann auf Knopfdruck eine Probe auf Pflanzensuche machen, mit deren TaW* dann alle findbarden Pflanzen angibt inklusive Verbreitung und Erntezeiten wie in ZBA. Der Rest war bei uns Meisterentscheidung.

    Ist aber auch alles schon einige Jahre her... wie gesagt, wenn ich es wiederfinde und zum laufen bekomme, dann kann ich Dir auch etwas mehr helfen.
    Ansonsten kann ich vielleicht auch den einen oder andere Hilfe in Java geben.

    Rache ist ein Gericht, das am besten kalt serviert wird.
    – altes klingonisches Sprichwort

  • Was die Verbreitung betrifft, da hab ich eine Idee, weiss nur nicht ob die sich programiertechnisch realisieren lässt:

    Du nimmst als Auswahlparameter die nächstgelegene Stadt. Dabei meine ich nur die Städte auf der großen Aventurienkarte und nicht jedes einzelne Gehöft auf dem detaillierten Kartenwerk. Die ausgewählte Stadt ist dann einem oder mehreren Verbreitungsgebiete zugewiesen und auf die Pflanzen dieser Gebiete wird dann die Auswahl eingegrenzt. So kann z.B. jemand in der Nähe Ferdoks sowohl eine Pflanze der Verbreitung "Ganz Aventurien südlich von Gerasim" als auch der Verbreitung "Nord- und Mittelaventurien, Liebliches Feld, Aranien" finden. Ist sicherlich aufwändig diese Querverweisungen zu machen, aber einmal gemacht, hättest du eine gute Möglichkeit anhand des ungefähren Orts in Aventurien die Pflanzen nach der Verbreitung einzugrenzen.

    Ich würde ja sagen, ich helfe dir dabei, doch ich weiss nicht wie du das gerne haben möchtest um es am besten in das Programm einzubinden. Und auch nicht ob du das für eine gute Idee hältst ;)

    b.

  • Ich beherrsche jetzt zwar kein Java... Aber im Prinzip würde ich es so ähnlich Programmieren, wie bpoint es vorgeschlagen hat.

    Eine Datenbank mit allen Pflanzen. Dann unterteilst du Aventurien in Sektoren. Ob du die um die Städte rumlegst, oder ob du sagst, es gibt 9 Sektoren (z. B. Norden, Nord-Ost, Osten, Süd-Ost, Süden, Süd-West, Westen, Nord-West, Mitte) ist im Prinzip egal - ist eine Frage, wie viel Arbeit du dir machen willst. Je mehr Sektoren es gibt, desto genauer werden die Informationen.

    Nun Ordnest du in der Datenbank jedem Sektor die zugehörigen Pflanzen zu. Danach klickt man auf der Karte auf ein Gebiet und erhält alle dem Sektor des Gebietes zugehörigen Pflanzen nach eingestellten Kriterien.
    --------------------------------------------
    Die aufwendigere Funktion sähe so aus: Du legst ein Koordinatensystem auf Aventurien. Dann beschreibst du anhand einer Funktion, wo die Pflanze wächst (z. B. südlich eines Flusses könnte bedeuten unterhalb einer Geraden - oder einer Kurve, je nachdem, wie gut du die Funktion dem Fluss annäherst). Anschließend klickst du einfach auf einen Punkt und dann berechnet das System automatisch, bei welchen Pflanzen die Gleichung erfüllt ist und somit an diesem Punkt wächst.

  • Zitat von "flice"

    Am meisten nervt die Verbreitung. Wenn ich in der schwarzen Sichel rumturne, dann interessiert mich die geilste Heilpflanze ganz Maraskans einen Dreck. Aber mit Angaben wie "südlich der Linie Perricum - Havena" oder noch besser "südlich der roten Sichel" (ganz Aventurien? 100 Quadratkilometer südlich? In den Ausläufern der Sichel?) lässt sich ein Rechner ganz schlecht füttern. Da ist zuviel Meisterentscheid dabei. Schon bei den Erntezeiten musste ich bei Angaben wie "Frühsommer" oder "Herbst" selber entscheiden, welche Monate das dann wohl wären...

    Ich würde solche Dinge wie Erntezeiten übrigens großzügig auslegen. Wenn dann in der Beschreibung der Pflanze die Erntezeit steht, kann der Meister selbst entscheiden, ob die hier und jetzt schon zu ernten ist oder noch nicht. Weil wenn du das sehr streng machst, weiß der Meister ja gar nicht, welche Pflanze ihm gerade entgeht, nur weil gerade nach deiner engen Definition nicht Erntezeit ist.

    Was das abtippen der Beschreibungen angeht, kann ich dir helfen. Ich schick dir mal ne PM.

  • Ich hab's so gemacht, dass man immer auch alles oder nichts ankreuzen kann. Wenn man also nicht möchte, dass der Erntemonat berücksichtigt wird, dann kann man das einstellen. Ich hatte das Tool eher für Spieler gedacht. Ich hab mir einen Druiden gebaut, der das relativ gut kann, aber es scheitert an der Realität. Wenn Kvalor (so heisst er) sagt er geht mal Pflanzen suchen, dann stöhnen die Mitspieler auf und gehen den Abend in die Kneipe, bis ich weiß worauf ich würfeln muss. Denn mit der Funktion "Ich geh mal los und schau, was es hier so gibt" findet man ja grad GAR nix. So kann ich vor dem Abend schauen wo und wann wir sind, meine Werte einstellen und sehen, welche Pflanzen überhaupt in Frage kommen. Dann kann ich sagen "Ich suche mal Donfstengel, da brauche ich eine Probe + xyz" und der Spieleabend ist nicht unterbrochen.

    Das mit dem Koordinatensystem war genau das was ich mir überlegt und für zu umständlich befunden hatte :)

    Gruß und Danke für's Feedback, Martin

  • ein genaues Koordinatensystem ist in der Tat aufwendig, wenn du wirklich jedem Feld alle Pflanzen zuordnen willst. Wenn die Koordinaten"kästchen" groß gewählt werden, wird es zwar ungenau, aber machbar.

    Daher meine Idee, das ganze mit einer mathematischen Funktion zu beschreiben. Man müsste zwar für jede Pflanze eine solche Funktion aufstellen, aber am Ende wäre das Ergebnis sehr genau :)

  • Ich hab mir grad mal den Link von bpoint angeschaut, das reizt ja schon ein bisschen. Man könnte sich ja ein Tool schreiben, das die Daten für die Blumen abfragt (Wo wächst Donfstängel?) und dann klickt man auf die Felder und die die Koordinaten werden als boolean true oder false gesetzt... Wow. Das wäre aufwändig. Hält das hier irgendjemand für nötig? Sinnvoll? Nutzen das genug Leute regelmäßig genug, dass es den Aufwand rechtfertigt? Hilft jemand bi der Umsetzung...?

  • Also mit der Karte und ein bißchen Hirnschmalz könnte da man schon einen schönen Algorithmus basteln... allerdings wäre die erste Bereitstellung der Daten schon ein Haufen Arbeit.

    Meiner Meinung nach ist es für den privaten Gebrauch schon fast überdimensioniert, zumindestens für meinen Bedarf.
    Für technische Fragen würde ich meine Hilfe anbieten.

    Rache ist ein Gericht, das am besten kalt serviert wird.
    – altes klingonisches Sprichwort

  • Ok, hier ist meine konkrete Java-Frage:

    Ich möchte die Karte von bpoint oben als Bild in Java haben, vielleicht in einem JFrame zum Beispiel. Ich möchte dann dem Raster, als ArrayList<boolean> oder als boolean[][] oder wie auch immer, zuordnen, ob die entsprechende Pflanze in dem Feld auf der Karte wächst oder nicht. Die entsprechenden Felder könnten vielleicht farbig werden oder so, damit es für den Benutzer einfcher ist. Dann könnte ich beim Einladen der Pflanzenliste diese Eingabe abfragen, der Benutzer des eigentlichen Programms könnte auf die gleiche Weise seinen eigenen Standpunkt in Aventurien eingeben (oder eine Gegend, indem er mehrere Hexagone anklickt) und man könnte die Liste angleichen.

    Also: Wie kann ich die booleans schalten? Bei hhtp gibt es doch sowas wie OnMouseOver, oder? Kann ich das Programm die Position des Mauszeigers innerhalb des Rahmens auslesen lassen und auf Mausklick die Koordinaten des Rasters der boolean-Liste zuordnen? Hunderte von kleinen JButtons gehen ja wohl wegen der Form der Hexagone nicht, außerdem würde das Programm bei hunderten von ActionListenern, glaube ich, ganz schön instabil.

    Der Hut ist im Ring, meine Damen und Herren, weiß jemand eine Lösung? :)

    Gruß, Martin

  • Zitat von &quot;flice&quot;

    Ok, hier ist meine konkrete Java-Frage:

    Ich möchte die Karte von bpoint oben als Bild in Java haben, vielleicht in einem JFrame zum Beispiel. Ich möchte dann dem Raster, als ArrayList<boolean> oder als boolean[][] oder wie auch immer, zuordnen, ob die entsprechende Pflanze in dem Feld auf der Karte wächst oder nicht. Die entsprechenden Felder könnten vielleicht farbig werden oder so, damit es für den Benutzer einfcher ist. Dann könnte ich beim Einladen der Pflanzenliste diese Eingabe abfragen, der Benutzer des eigentlichen Programms könnte auf die gleiche Weise seinen eigenen Standpunkt in Aventurien eingeben (oder eine Gegend, indem er mehrere Hexagone anklickt) und man könnte die Liste angleichen.

    Also: Wie kann ich die booleans schalten? Bei hhtp gibt es doch sowas wie OnMouseOver, oder? Kann ich das Programm die Position des Mauszeigers innerhalb des Rahmens auslesen lassen und auf Mausklick die Koordinaten des Rasters der boolean-Liste zuordnen? Hunderte von kleinen JButtons gehen ja wohl wegen der Form der Hexagone nicht, außerdem würde das Programm bei hunderten von ActionListenern, glaube ich, ganz schön instabil.

    Der Hut ist im Ring, meine Damen und Herren, weiß jemand eine Lösung? :)

    Gruß, Martin


    Ich versuch mal durchzublicken:
    Die Karte hat ein Raster und du speicherst bei jedem Raster (wie auch immer das realisiert ist) was für Pflanzen da wachsen, oder? Wenn man mit dem Mauszeiger in ein Feld geht soll entsprechend ausgelsen werden. Ich würde jedem Feld einen Mouse Listener geben, der mouseEntered und moseExited implementiert. Damit kannst du deine Abfrage realisieren. Kannst auch versuchen mit dem MouseMoutionListener die Position auszlesen und dann die Pixel auf das Raster zu mappen, ist aber eher umständlich.

    Zwei Links noch als Tipp: Java-api und ein gutes Openbook.

    "Der Plot ist ein kleines, pelziges Wesen, das bei Spielerkontakt sofort tot umfällt."