Spiel: Items in Inventarslots

Sorry, dass ich das so sagen muss, aber: ALLES! Objektiv betrachtet ist daran SO extrem viel SO extrem SCHLECHT, dass ich kaum weiß, was genau ich dazu sagen soll.

Die Klasse arbeitet komplett auf einem Zustand, der public (!) in einer anderen Klasse liegt, nämlich in “Socius”. Der Zustandsraum, der damit aufgespannt wird, ist unmöglich handhabbar. Es existieren hunderte von Konstanten. Praktisch alle dieser if/else-Fälle sind strukturell gleich. Ich bin überzeugt, dass man diese knapp 1000 Zeilen (!) bei geeigneter Modellierung vielleicht in 100 Zeilen unterbringen könnte, und das viel besser, allgemeingültiger, übersichtlicher, verständlicher, leichter anpassbar und leichter erweiterbar.

Ob diese Klasse grundsätzlich etwas anderes macht, als das, was ich in http://forum.byte-welt.net/showthread.php?p=19462#post19462 mit der Methode “doStep” (auch nur) schnell hingeschrieben habe, weiß ich nicht. Aber überleg’ vielleicht mal, ob du etwas hinbekommen kannst, wo

  • keine public Variablen vorkommen
  • keine Methode mehr als 50 Zeilen hat
  • es eine Methode gibt wie etwa
public void move(Point from, Point to)
{
    ...
}

(die auch nicht mehr als 50 Zeilen hat!)

Es ist sehr lang und unübersichtlich, aber das ist nicht so wichtig, weil ich die vielen methoden nicht in der hauptklasse haben wollte, ich werde aber mein bestes tun die ganze sache zu verkürzen

Das ist kein Argument :wink: Ich gehe davon aus, dass es nicht so viele (und nicht so lange) Methoden sein müßten, egal, wo sie sehen. Aber ich vermute auch, dass die Aufteilung in Klassen insgesamt etwas zu kurz gekommen ist, wenn man sich die Liste der Fields in der Hauptklasse ansieht. Machen die Methoden denn etwas anderes, als von einem Punkt zum anderen zu laufen? :confused:

ich konnte das ganze jetzt auf 149 Zeilen Verkürzen, genug ? :wink:

Die Exception ist weg, aber das Item wird Links neben dem Inventar gezeichnet.

Inzwischen hab ich weiter gemacht, und jetzt überlagern sich die Items, wenn man jetzt aber in einen anderen Raum geht liegen sie nebeneinander, sehr komisch.Und je mehr man zwischen den Räumen hin und her läuft, desto weiter rückt das Item nach Links vom einen Slot in den Nächsten. :confused:

[QUOTE=Marco13]
Die Klasse arbeitet komplett auf einem Zustand, der public (!) in einer anderen Klasse liegt, nämlich in „Socius“. Der Zustandsraum, der damit aufgespannt wird, ist unmöglich handhabbar. [/QUOTE]

Wenn du dich gefragt hast, was ich mit dem „Zustandsraum“ gemeint habe, hast du jetzt die Antwort: Genau SOWAS :wink: Irgendwo wird irgendwann irgendeine Variable, die mit der Zeichenposition zu tun hat, immer kleiner. Es wird vermutlich (d.h. fast prinzipbedingt) irgendeine Variable aus der „Socius“-Klasse sein. Objektorientierte Programmierung dient eigentlich dem Zweck, Komplexität handhabbar zu machen, aber das wurde hier wohl noch nicht erreicht. Wenn du mal den akuellen Code (oder das Projekt als ZIP) irgendwo hochlädst, schaut es sich vielleicht jemand an, aber den verwirrten Code von anderen nach Fehlern zu durchsuchen macht i.a. NOCH weniger Spaß, als das bei eigenem Code zu tun…

Wo könnte man denn sowas hochladen ?

Wenn es nicht zuuu groß ist, hier im Forum als Anhang. Aber wie gesagt: Wie viel Zeit jemand bereit ist, für die Fehlersuche in fremdem Code zu investieren, ist schwer zu sagen.

http://abstrusegoose.com/432 :wink:

is zu groß, und was sollte der link ?
und wo glaubst du liegt dieser zustandsraum, vieleicht kann ich ihn selbst finden.

Der Link sollte andeuten, dass wenn man fremden Code liest, man sich durch irgendwelche Konstrukte pflügt, von denen man nich weiß, was sie machen sollen.

Mit “Zustandsraum” ist gemeint, dass es eine Menge von Variablen gibt, die den “Zustand” des Spiels beschreiben. Und diese Variablen werde von irgendwo irgendwie geändert. Und im Zweifelsfall weiß man eben nicht, wann sie von wo aus auf welchen Wert geändert werden. Man weiß also nie, in welchem Zustand sich das Spiel gerade befindet.

Bezogen auf dein Problem: Irgendwo muss es ja irgendeine Variable geben, die bewirkt, dass ein Item “nach Links vom einen Slot in den Nächsten” rückt. Und irgendwo muss diese Variable verändert werden, wenn man “zwischen den Räumen hin und her läuft”. Diesen Zusammenhang zu erkennen und etwas zu machen, damit das nicht mehr passiert, ist etwas, was langfristig gesehen nur du selbst machen kannst. (Der erste Schritt dazu ist eben, solche undurchschaubaren Zusammenhänge zu minimieren, aber dazu ist es ja jetzt schon zu spät).

Da es eigentlich nie zu spät sein sollte, um etwas besser zu machen, könnte er, wie ich bereits vorschlug, erst mal ein KSKB erstellen, das die Funktionsweise des Inventars kurz darstellt. So ein KSKB zu erstellen ist zwar nicht leicht, aber nützlich. Er könnte es dann schrittweise erweitern und eventuell Teile der bisherigen Arbeit wiederverwenden, wobei er ständig auf gutes, sinnvolles Design achtet.

Gruß,
André

Es ist sehr knifflig, es geht um die variable slotsfull[] und die tatsache, dass die berechnungen die ganze zeit durchgeführt werden.Ich versuche das Problem zu lösen, was sich als äusest schwierig darstellt(NullPointerException ohne Grund etc.) :frowning:

Ohne Grund sicher nicht. Da, wo sie herkommt, ist eine Referenz eben ‘null’. DIE Fehler sind doch eigentlich gutmütig: Draufklicken, und man weiß, wo er herkommt. Besser als unerklärliche falsche Werte oder Race Conditions oder so…

Ich habs geschafft, egal wie viele Items man aufnimmt, sie ordnen sich schön nacheinander ein.
Danke für eure Hilfe !

Was war jetzt der entscheidende Hinweis? Damit wir die Belohnung auszahlen können :o).

jedem das seine…
lass ihn doch marco, er wills so :smiley: