PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zugreihenfolge festlegen?!



Fuxfell
19.07.2010, 14:13
So, ich hab folgendes Problem:
Ich bastel zZ an einem eignen Kampfsystem herum und möchte nun, nachdem alle Skills und das entsprechende Ziel ausgewählt ist, festlegen welcher der Charaktere als erstes seinen Zug ausführen darf.

D.h. ich habe 6 Variablen, in denen der Agi-Wert jedes Kämpfers eingespeichert ist.
Jetzt muss ich irgendwie rausfinden, welche davon den größten Wert besitzt, welche den 2. größten usw. usw.

Mein Lösungsweg bisher sieht so aus, dass ich einfach über Bedingungen abfrage, ob Variable 1 höher ist als Variable 2, höher als Variable 3, usw. usw.
Das erscheint mir jedoch äußerst arbeits-/zeitaufwendig :D

Hoffe meine Problematik ist erkennbar und jemand weiß, wie ich mir nen Haufen Zeit sparen kann :)

(also im Endeffekt will ich einfach nur 6 Variablen der größe nach ordnen.)

relxi
19.07.2010, 14:50
Einen Haufen Zeit müsstest du sowieso für ein dynamisches Kampfsystem investieren ;)
Dein Lösungsweg ist (finde ich zumindest) der unaufwendigste, den man anwenden kann :( man könnte ihn eventuell noch mit Event-Calls oder Label-Jumbs übersichtlicher gestalten.
Wer weiß, vielleicht kennt jemand einen noch besseren?

Schreib wenigstens hinein, wie du das Kampfsystem geskriptet hast, es konnte uns der Lösung näher bringen

Aldinsys
19.07.2010, 15:09
Im Zweifelsfall einfach Bubble Sort (http://en.wikipedia.org/wiki/Bubble_sort) anwenden, um den Sortieraufwand möglichst zu minimieren. Bei 6 Variablen ist das ziemlich praktikabel.

R.F.
19.07.2010, 15:46
Im Zweifelsfall einfach Bubble Sort (http://en.wikipedia.org/wiki/Bubble_sort) anwenden, um den Sortieraufwand möglichst zu minimieren. Bei 6 Variablen ist das ziemlich praktikabel.

Allerdings ist Bubblesort ziemlich, naja...es lohnt sich nicht wirklich, den für nur 6 Variablen zu benutzen. Nimm einfach nur den ersten Wert, vergleiche ihn mir dem zweiten, ist dieser dann größer nimm den größeren und setze das bis zum Ende fort. Nebenbei noch einen Zähler laufen lassen, der sich merkt, wo die bisher größere Zahl ist und dann müsstest dus haben. Falls du aber dennoch Bubblesort haben willst...ich hab einen für den rm2k in meiner Signatur. :D

RPG Hacker
19.07.2010, 15:56
Allerdings ist Bubblesort ziemlich, naja...es lohnt sich nicht wirklich, den für nur 6 Variablen zu benutzen.

Wenn man ihn allerdings dynamisch programmiert (sprich: Mit Variabel-Pointern) lohnt es sich schon, da man ihn dann für alles mögliche verwenden kann.

Fuxfell
19.07.2010, 16:07
@Bubblesort
Irgendwie leuchtet mir noch nicht ganz ein, wie ich das ins Projekt einbauen soll und würde vermtulich, bis ich es überhaupt verstehe noch mehr Zeit beanspruchen.
Auch das Skript von R.F. ist für mich nicht sonderlich durchsichtig.

@RPG Hacker
Weil du gerade das Stichwort Variabel-Pointer fallen gelassen hast:
Nach einer Erklärung dieser Pointer hab ich schon die Forensuchmaschine
bemüht, aber nix gefunden.
Was ist die Funktion eines Variabel-Pointers, wäre der hier nützlich?

@relxi
Jop, Zeitaufwand ist immer vorhanden, aber manchmal kann man sich unnötige Arbeit sparen, indem man einfach mal nachfragt, kostet ja nix ;)

Danke für die Hilfe soweit :)

R.F.
19.07.2010, 16:19
Weil du gerade das Stichwort Variabel-Pointer fallen gelassen hast:
Nach einer Erklärung dieser Pointer hab ich schon die Forensuchmaschine
bemüht, aber nix gefunden.
Was ist die Funktion eines Variabel-Pointers, wäre der hier nützlich?


Du kannst Variablen auch eine Zahl merken lassen und dann z.B. einer anderen Variablen den Wert derjenigen Variablen übergeben, deren Nummer du in der Variablen gespeichert hast.

Var[1]= 5
Var[5]= 42
Var[2]=Var[Var[1]]=42

Klingt erstmal komplizierter, als es eigendlich ist und sowas hab ich in meinen Skript halt oft benutzt, daher auch vielleicht das Missverständnis :D

Fuxfell
19.07.2010, 16:48
@R.F.
Ah, Variabel-Pointer sind ja einfach als ich dachte x3
Hier leider unnütz.

@Topic
Habs jetzt folgender Maßen umgesetzt:
Variable 1 mit allen andern Variablen verglichen.
Variable 2 mit allen andern, außer der ersten, verglichen.
usw. usw.

Immer wenn die Variable 1 größer ist als eine andere,
bekommt eine andere Variable [Wie oft ist 1 größer?] einen Punkt.

Die größte Variable hat dann 5 Punkte, die nächste 4, usw. usw.

Nachdem das fertig ist, geht eine Schleife los und eine Variable
zählt von 5 nach unten.
Dann frag ich einfach immer ab, ob [Wie oft ist 1 größer?] gleich der
runterzählenden Variable ist, wenn ja, dann wird die Aktion von
Spieler 1 ausgeführt.

Ging eigentlich doch relativ flott, waren nur 15 Bedingungen x3

=> Problem gelöst

Daru
19.07.2010, 16:53
Mach dir doch mal grundsätzlcihe Gedanken darum, wie du das aufbauen willst...

Die bekannten Shemata wären CTB und ATB o.0

Und biedes basiert darauf, dass du einen Maximalwert festlegst und dann die Agi-Werte eines Charakters mit sich selbst addierst... Wer den höchten Agi-WErt hat, ist am ehestens auf dem maximalwert und somit dran... nach seiner Runde wird sein Wert zurückgesetzt und der nächste (der ja noch von den addierungen zuvor seinen wert hat) addiert weiter und erreicht den maximalwert. je nach Umsetzung des Ganzen kannst du dir daraus ein CTB oder ATB bauen...

Zur Nohoooot... könnte ich dir auch ein CTB-Script schicken, dass noch recht am Anfang steht und daher "relativ" übersichtlich ist....

(ist btw ziemlich schwer ohne seitenweise erläuterung wirklich hilfreich eine antwort zu posten)

Fuxfell
19.07.2010, 16:59
@Daru
Habe mir bereits Gedanken gemacht :P
Und meiner Auffassung nach (bin mir bei den Begriffen nicht so sicher) habe ich weder ein ATB noch ein CTB.

Es läuft wie folgt: (ist bisher ein 2 Spieler Spiel)
Spieler 1 hat 3 Figuren, jede hat 3 Skills => Weißt jeder Figur einen Skill und ein Ziel zu.
Spieler 2 macht genau das gleiche mit seinen Figuren.

=> Jetzt werden die Handlungen ausgeführt, beginnend mit der Figur mit dem höchsten Geschwindigkeitswert.

Das hab ich jetzt im Endeffekt auch so, wie ichs will :P

(deine Methode funktioniert in meinem KS sicherlich auch, aber da das bei mir jetzt schon vollkommen funktionstüchtig ist, werd ichs vermutlich nicht mehr ändern, aber ich merks mir für die Zukunft :P)

Und ich werf gern mal nen Blick auf dein CTB-Script, kann ja nicht schaden ;)
Danke auch dir :)

Daru
19.07.2010, 17:10
Nya... es is halt ein bestehendes Projekt also wenn dus nicht brauchst, würd ichs dir ungern schicken weil es nicht jeder sehen soll. Und ja.. das was du hast ist simple rundenbasierung auch wenn ich sie bei einem anderen KS anders gemacht hab ^^ Aber is ja schön, wenns jetzt so klappt, wie dus möchtest.