PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Item anordnen in beliebiger Reihenfolge



Kat
08.11.2003, 03:26
... und schon wieder steh ich vor einem Problem:
Ich möchte in einem Raum Items selbstständig anordnen lassen. Und zwar so, daß die Items so angeordnet sind, wie ich sie finde.
Es gibt - sagen wir - 5 Plätze (von links nach rechts). Es gibt 5 Items (z.B.: Stock, Apfel, Stein, Schwert, Blume), die von links nach rechts nach in genau der Reihenfolge angeordnet werden, wir ich sie finde. Das erste Item, was ich finde erscheint also im Raum sofort an Platz 1 (ganz links - also nicht an einer vordefinierten Stelle). Wenn ich dann (wenn alle Stellen voll sind) ein Item (z.B. Nr. 3) entferne, soll das nächste Item, was ich einsammel an dieser Stelle abgelegt werden. Das klingt jetzt vielleicht verwirrend... hmm.
Ich sammle also als erstes den Apfel, folglich erscheint der Apfel auf Position 1. Dannach sammle ich die Blume, die auf Platz 2 erscheint. Den Apfel nehm ich weg (z.B. durch benutzen) und das nächste Item, was ich finde ist ein Schwert. Dieses landet nun wieder auf Platz 1 (da hier der Platz frei geworden ist). Ich hoffe sehr, daß mir zu diesem Problem geholfen werden kann, da es die Grundlage meines neuen Abenteuers und Item-Verwaltungssystems werden soll, auf das die gesamte Story baut.

Ich bekomm das einfach nicht hin - Entweder sitzt auf jedem Platz das selbe Item, oder es läßt sich nicht korrekt entfernen. Ich habe jedem Item eine eigene Variablie spendiert und jedem Platz. Auch gleichen Gegenständen (zwei Äpfel) habe ich unterschiedliche Variablen verpaßt - aber der Mißt geht einfach nicht....
Nun meine Frage: Geht das überhaupt? Und wenn ja - wie?

Gekiganger
08.11.2003, 10:19
Wenn die Items so im Inventar angeordnet werden sollen, wie man sie findet, ist es eigentlich ganz leicht... und trotzdem kompliziert.

Als erstes legst du mal eine Variablenreihe fest, die ich ganz spontan "Array" ;) nenne.
Diese besteht aus 5 Variablen, welche praktisch die Itemslots deines Menüs bilden. Da es maximal 5 Items gibt, gibt es auch maximal 5 Slots.
Idealerweise nimmst du hierfür hintereinander liegende Variablen. Dann kannst du sie später automatisch durch Schleifen und Zeigervariablen untersuchen/ordnen und musst nicht alles von Hand machen.
Reservier dir aber unbedingt genug Variblen in einer Reihe, damit du das ganze später leichter erweitern kannst!
Für dieses Beispiel nehm ich mal:


Slot1: Variable 0001
Slot2: Variable 0002
Slot3: Variable 0003
Slot4: Variable 0004
Slot5: Variable 0005

Nun musst du den Items Werte zuordnen, damit der Computer später weiß, welches Item sich im Besitz befindet. Dieser Schritt findet allerdings nur in deinem Kopf statt.


kein Item: 0
Stock: 1
Apfel: 2
Stein: 3
Schwert: 4
Blume: 5

So, also angenommen der Held nimmt ein Item auf, z.B. das Schwert, dann setzt du erstmal eine unabhängige Variable (nehmen wir die Nummer 0100) auf den Wert dieses Items, also die 4.
Nun schaust du in deinem Array von Anfang an, ob sich ein Item in dem jeweils untersuchen Slot befindet oder nicht.
Angefangen wird mit Variable 0001.
Bisher ist der Wert der Variable 0001 (Slot 1) noch 0 was heißt, dass sich hier kein Item befindet.
Also kann das Schwert hier abgelegt werden. Dazu änderst du den Wert der Variable 0001 auf 4.

Nun nimmt der Held ein neues Item auf, einen Apfel. Also wird erstmal die unabhängige Variable von vorhin (0100) auf 2 gesetzt.
Jetzt durchsuchst du wieder dein Array nach einem freien Platz.
Angefangen wird mit der Variable 0001. Diese hat den Wert 4, es befindet sich hier also schon ein anderes Item, du musst einen Platz weiter suchen.
Der nächste Slot, Variable 0002 hat den Wert 0, hier kannst du dein Item ablegen, also die Variable 0002 auf den Wert 2 setzen.

OK, nun machen wir noch schnell ein 3. Item rein, die Blume. Der nächste freie Slot ist die Variable 0003, also wird ihr der Wert 5 zugewiesen.
Als nächstes packt er noch nen Stock mit rein, nächster freier Slot ist Variable 0004, also kriegt sie den Wert 1

Hier erstmal ein kleiner Zwischenstand, wie das Inventar jetzt aussieht:


Variable 0001: 4
Variable 0002: 2
Variable 0003: 5
Variable 0004: 1
Variable 0005: 0

Der held beschließt, den Apfel zu essen, er soll also aus dem Inventar genommen werden.
Zuerst muss untersucht werden, wo sich der Apfel überhaupt befindet.
Alle Slots werden der Reihe nach nach dem Wert des Apfels (2) abgesucht.
Variable 0001 hat den Wert 4, also weiter zu Variable 0002. Diese hat den Wert 2, da ist der Apfel. Dieser wird aus dem Inventar entfernt, indem die dazugehörige Variable, hier 0002, auf 0 zurückgesetzt wird.

Allerdings befindet sich jetzt ein Loch im Inventar.
Um es zu schließen, müssen alle folgenden Elemente um einen Slot nach oben rücken.
Das Item aus Slot 3 muss nach Slot 2, das von Slot 4 nach Slot 3...
Und das machst du jetzt auch. Den Wert aus Variable 0003 schreibst du in Variable 0002 usw...
Jetzt sind sie wieder sortiert.
Es könnte aber möglich sein, dass in Slot 5 ein Item steckt (hier in diesem Beispiel jetzt nicht).
Da das Item von Slot 5 auf Slot 4 rüberkopiert wurde, wäre es aber nun doppelt vorhanden, in Slot 4 und 5.
Darum löschst du immer, nachdem alles sortiert wurde, den letzten Slot (Variable auf 0 setzen), auch wenn sich dort garkein Item befindet.


Zur Anzeige der Items machst du 5 Events, jedes mit 5 Seiten.
Als Event Conditions nimmst du fürs erste Event die Variable des ersten Slots, Variable 0001, fürs zweite Event 0002 usw...
Diese Variablen stellst du auf jeden Seiten als Conditions ein und als Werte auf der ersten Seite immer 1, auf der zweiten 2 usw...
Und dann gibst du jeder Seite die Grafik des zum Wert gehörenden Items.
Auf der Eventseite mit dem Wert 1 den Stock, auf der Seite mit dem Wert 5 die Blume usw...


Komplizierter wirds, wenn du mehrere Items des selben Typs aufnehmen kannst.
Dann musst du zu den Items parallel einen weiteren Array nehmen, in dem die Anzahl der Items festgelegt wird.
Beim Löschen eines Items aus dem Inventar darfst du nicht nur abfragen, in welchem Slot das Item steckt steckt, sondern auch, welchen Wert die dazugehörige Anzahlsvariable hat.
Erklären möchte ich das hier jetzt allerdings nicht bzw. nur auf Wunsch, da ich das Gefühl habe, dass diese Erklärung schon abschreckend genug wirkt.^^"

Kat
08.11.2003, 18:14
Danke Gekiganger, für deine Mühe. Das es nicht all zu einfach wird, dachte ich mir schon. Ich probier erst mal ein wenig herum und versuche hinzubekommen, was du beschrieben hast. Es klingt alles sehr logisch. Bei Problemen würde ich noch einmal melden.