PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Berechnen welches Event näher dran ist.



FabiF
06.06.2005, 15:47
Ich möchte für mein KS eine Berechnung für den Gegner machen, damit er entscheiden kann, welcher Spieler am nächsten dran ist.
Und dann auch auf diesen Spieler zulaufen.
Und von diesem Dann wieder bis zum Nächsten bis er dann, z.b. Am EIngang einr Höhle ist.

Es soll eine KI eines Teammitglieds werden, der Sich langsam vorarbeitet, und am ende Die Hähle erreichen.
Hier ein beispiel: (Chipset aus The Blade, Charset (Skeletton) Aus Strategie KS Script, Das Chipset dient nur zur voranschaulichung, ist mir als erstes in die Hände gefallen.. sry.)


http://www.directupload.net/images/050606/82NFHz45.png


Soweit verstanden?

Und wie geht dass nochmal dass der Held dann im Zickezacke, auf das Event zuläuft?


Ihr seht, Der Chara nimmt den Gelben weg, da diese Hühner am Nächsten von ihm sind. Aber da sich die Hühner rein theoretisch bewegen, muss das Nächste Huhn dass wo am nähesten ist berechnet werden, dass dann der Chara drauf zuläuft. Und gerade dass ist dass Problem. Achja, das Ziel sollte Variirbar sein, so dass er von alleine Berechnet, welches Huhn am nächsten ist, um dann ins ziel zu komemn. dies sollte aber nacher nicht so aussehen wie der Gelbe weg, sondern dann der Rote:

http://www.directupload.net/images/050606/dXKKro9W.png


-ANMERKUNG-

Ihr müsst euch keine große Mühemachen, den ganzen Code abzutippen, mir reicht es in der "theorie" inetwa so:
Die Koordinaten vom Held speichern, und mit den koordinaten des 1-5 Huhn vergleichen ob x > als 1-5 Huhn und wen 1-3 Zutreffen on y noch am nächsten ist.. irgendwi so.

Vielen Dank FabiF

Rash
06.06.2005, 16:15
Ich hab nen kleinen ansatz, ich hoffe der hilft ;)

Du könntest die koordinaten aller NPCs speichern und dann irgendwie die Differenz ausrechnen (frag mich jetzt nicht wie, hab im moment nicht den kopf dazu :D )
Dann fragst du ab, welceh differenz am niedrigsten ist und lässt den NPC dahin laufen.

Ich hoffe das hilft dir ein bisschen ;)


Grüße
Rash

Deathball
06.06.2005, 16:30
Mit dem lieben Phytagoras kannst du die Entfernung von einem Punkt zu einem anderen Punkt ausrechnen. Also kannst du die Entfernung von deinem Held zu einem Huhn ausrechnen. Der Satz lautet(bereits mit Wurzel):

c = Wurzel {a² + b²}

c stellt die Entfernung von dem Helden zum Huhn da...
a ist die Differenz zwischen dem X-Wert des Huhns und dem X-Wert des Helden...
b ist die Differenz zwischen dem Y-Wert des Huhns und dem Y-Wert des Helden...

Um Wurzeln zu ziehen brauchst du 2 Variablen und einen Zyklus.
Variable 1(heißt ab jetzt Testvariable ) hat als erstes den Wert 0. Variable 2(heißt ab jetzt Wurzel ) bekommt den Wert 1. Dann beginnt der Zyklus. Du addierst Wurzel zu Testvariable und nimmst danach Testvariable mit sich selbst mal. Wenn Testvariable < =(größer, gleich) a² + b² ist, dann hast du deine Wurzel gefunden und du kannst den Zyklus unterbrechen. Wenn nicht muss Testvariable wieder den Wert 0 bekommen und zu Wurzel muss 1 hinzuaddiert werden. Dann beginnt der Zyklus von neuem.
Dieses Verfahren ist zwar ziemlich ungenau, aber das einzig mit dem Maker mögliche...


cya
Deathball

FabiF
06.06.2005, 17:21
Was für ein Satz XD...

Bin 8te Klasse, kenn den nur vom Namher.

Ich werd mich gleich mal hinsetzten und versuche dass zu Berechnen.

VielenDank...

MFG FabiF

____________________________________________________-

EDIT: So habs jetzt, nur es funtzt net -.- und ich glaube ich weiß an was es liegt.


Wenn Testvariable < =(größer, gleich) a² + b² ist, dann hast du deine Wurzel gefunden und du kannst den Zyklus unterbrechen. Wenn nicht muss Testvariable wieder den Wert 0 bekommen und zu Wurzel muss 1 hinzuaddiert werden. Dann beginnt der Zyklus von neuem.

Wenn dass ja nicht zutrift wird es ja imemr neu berechnet, Aber dann eght es ja nicht imemr XD....

Welche Varis muss ich nacher zwischen 2 Ounkten vergleichen welches näher dran ist?

MFG FabiF

-----------------------

Nochmal Edit:

so jetzt läuft er immer zu einem, ledier imemr zum gleichen XD (hab einen fehelr ausgemertzt) Wie muss ich denn die Varis vergleichen (welche?)

MFG fabiF

--------------------------------

Nochmal Edit: es ist scheinbarso, dass sobald es zuweit, vom ersten Punkt entfernt ist nicht mehr richtig berechnet und läuft somit auch da nicht hin..
Ist er aber Nahe ab ersten Punkt berechnet er richtig.

Es liegt warscheinlich an der neuberechnng, dass es sooft die Variable wurzel +1 nimmt und testvari uf 0 setzt dass es nie zu einem ergebnis kommt was mich wundert (weiter auf fehlersuche egh)

MFG FabiF

Dhan
06.06.2005, 20:34
Aaalso, lassen wir dich das am besten selbst entwickeln und sagen dir nur die Bedeutung der Formeln, dann kapierst du das Script besser als ein fremdes.

Der Satz des Pythagoras sagt, wie das Verhältniss der Ränder in einem Dreieck mit einem rechten Winkel ist.
a und b sind die Ränder, die an dem rechten Winkel sind, c der Rand gegenüber dem rechten Winkel.
a² + b² = c²
c = squareroot (a² + b²)

Wenn du von einem Event zu einem anderen Event gehst und dabei erst horizontal und dann vertikal läufst, dann hat dein Weg einen rechten Winkel und 2 Strecken a und b die du kennst, gegenüber dem rechten Winkel liegt die Strecke, die die beiden Events direkt verbindet, also hast du ein Dreieck.
Knapp ausgedrückt, a ist der Abstand auf der x-Achse, b der Abstand auf der y-Achse und c der eigentliche Abstand

da der Maker sqrt/squareroot/Wurzel nicht berechnen kann, musst du die Wurzelfunktion selbst scripten (hat Deathball ja auch gemacht aber hast du wohl net ganz verstanden)
dafür vergleicht man einfach, man nimmt die Zahl, von der die Wurzel gezogen weden soll und schaut, welche Zahl mal sich selbst am nächsten an der Zahl dran ist und das macht man eben in einem Zyklus wie Deathball beschreibt

Alles klar soweit?



Öhm ansonsten, kauf dir ein paar Lehrbücher für höhere Mathematik, Sinusfunktion, Vektorrechnung und sowas, in der Schule kommt vor allem letzteres seeehr spät dran, für normale Menschen isses auch net so wesentlich aber für einen Scripter/Programmierer Pflicht ^^ (ohne die Sinusfunktion hast du z.B. keine Chance, Kreisbahnen zu berechnen)

übelster Held
06.06.2005, 21:39
satz des pythagoras??? ja, aber bitte kürzen...
c^-2=a^-2+b^-2 |^2
c=a+b ; zum zahlen vergleichen reicht die formel...
wir wollen ja nur vergleichen und nicht die länge c direkt bestimmen:

x koordinate des helden - x koordinate des gegners = x
(oder umgekehrt, jenachdem, wer den größeren wert hat...)
y koordinate des helden - y koordinate des gegners = y
(bemerkung wie bei x koordinate)

Weglänge = x + y

http://www.imagehosting.us/imagehosting/showimg.png/?id=514449

beweis:
siehe beispiel abstand G1

7-4=3
(weil die x koor. des helden größer ist als die des gegners...)
und 11-7=4
(weil die y koor. des gegners größer als die des helden ist...)
zusammen ergibt sich die zahl 7... wenn der held also sieben schritte macht
(in die richtige richtung...) steht er direkt auf den gegner...

zu gegner 2
7-5=2
und 7-1=6
zusammen=8
-> der gegner 1 ist näher an den helden als der gegner 2
wzbw.

gilt natürlich nur, wenn sich die bewegte figur nicht diagonal bewegen kann...

üH

FabiF
07.06.2005, 05:57
JUHU es funtzt... sry für deien Mühe übelster Held.
Habs jetzt mit dem Satzt des Pytagoras geschafft. Und meine Fehler wahren echt dumm,. es hat alels gestimmt, nur habe ich 2 Variablen, am Anfang fals bestimmt -.-
Und ein Label falsch gesetzt.

MFG FabiF
---------------------------------------
EDIT:

Nach dem jetzigen stand würde die Person derm Gelben Weg Folgen, aber dadurch einen Umweg machen. Aber es solle der Rotenweg gehn, da dieser Schneller gelaufen werden kann.
http://www.directupload.net/images/050607/ur9Gmh5Q.png

Wie gehts?
Ich hab einfach keine Ahnung.

MFG FabiF

EDIT2: Mir fällt gerade was ein... so bei jedem Punkt läuft er imemr ca. 3-4 Schritet inrichtung des Ziels, und dann zum nächsten Punkt, und dann wieder 3-4 schritte u.s.w. dann läft er aufs ziel.


So und dann noch wie war dass nochmal mit den Forks dass der Held im Zickzack draufzuläuft? so?


Fork Event1x bigger than Event2x
then Move left
end if

Fork Event1x smaller than Event2x
then Move right
end if

Fork Event1y smaller than Event2y
then Move right
end if

Fork Event1y bigger than Event2y
end if


Ber irgendwie funtz des net...

MFG fabiF