| Autor |
Beitrag |
Flolo
      
Beiträge: 146
Win 3.11, Win 98, Win 2000 Pro, Linux 6-10.3 Pro, OS/2 Warp 3, OS/2 Warp 4.0, Ms-Dos 6.22,Ms-Dos 7, DR-Dos, Oberon ...
Turbo Pascal 6,D7 Pers, Kylix 3
|
Verfasst: Mo 18.07.05 20:37
Hat jemand ne Idee, wie ich meiner Spielefigur "erkläre" das sie den kürtzesten Weg von A nach B nehmen soll und nicht erst X dann Y? Moderiert von Gausi: Topic aus Tutorials verschoben am Mo 18.07.2005 um 21:38
|
|
Tobias1
      
Beiträge: 454
Win 98, XP Prof
D3 Prof, D2005 Prof
|
Verfasst: Mo 18.07.05 20:38
Welche Spielfigur denn?
Wieso in Sparte Tutorials?
_________________ Auch das schlechteste Buch hat seine gute Seite: die letzte. (John Osborne)
|
|
Flolo 
      
Beiträge: 146
Win 3.11, Win 98, Win 2000 Pro, Linux 6-10.3 Pro, OS/2 Warp 3, OS/2 Warp 4.0, Ms-Dos 6.22,Ms-Dos 7, DR-Dos, Oberon ...
Turbo Pascal 6,D7 Pers, Kylix 3
|
Verfasst: Mo 18.07.05 20:48
Die spielefigur von meinem Spiel  . Also ein 2D Spiel, in DelphiX, Eine Figur die man mit der Maus von A nach B klickt die jedoch immer Umwege nimmt!
Mir viel gerade keine andere sparte ein als Tutorials ein, kann von mir aus auch verschoben weden!
|
|
Tobias1
      
Beiträge: 454
Win 98, XP Prof
D3 Prof, D2005 Prof
|
Verfasst: Mo 18.07.05 21:00
Flolo hat folgendes geschrieben: | Die spielefigur von meinem Spiel . Also ein 2D Spiel, in DelphiX, Eine Figur die man mit der Maus von A nach B klickt die jedoch immer Umwege nimmt! |
Zu diesem Thema, oder? www.delphi-forum.de/...39326&highlight=
Flolo hat folgendes geschrieben: | | Mir viel gerade keine andere sparte ein als Tutorials ein, kann von mir aus auch verschoben weden! |
In Tutorials kommt eigentlich rein, wenn du anderen was erklärst,also keine Topics für Fragen.
_________________ Auch das schlechteste Buch hat seine gute Seite: die letzte. (John Osborne)
|
|
Flolo 
      
Beiträge: 146
Win 3.11, Win 98, Win 2000 Pro, Linux 6-10.3 Pro, OS/2 Warp 3, OS/2 Warp 4.0, Ms-Dos 6.22,Ms-Dos 7, DR-Dos, Oberon ...
Turbo Pascal 6,D7 Pers, Kylix 3
|
Verfasst: Mo 18.07.05 21:09
Ist doch egal was für eine Spieleart. Ich hab ein Objekt bei A (x,y) und hätte gern den schnellsten Weg nach B!!!
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mo 18.07.05 21:11
Der schnellste Weg ist der Abstand zwischen beiden Punkten! Aber das ganze ist natürlich anders, wenn sich z.B. zwischen beiden eine "Wand" befindet und das ist vom Spiel abhänig.
Gruß,
maxk
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
JRegier
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mo 18.07.05 21:39
maxk hat folgendes geschrieben: | Der schnellste Weg ist der Abstand zwischen beiden Punkten! Aber das ganze ist natürlich anders, wenn sich z.B. zwischen beiden eine "Wand" befindet und das ist vom Spiel abhänig.
Gruß,
maxk |
Na ja er will vieleicht einfach diagonal gehen!
Machst du so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| var AX, BX, AY, BY, StreckeX, StreckeY, SteigungX, SteigungY : Integer; AX := SpielFigur.Left; AY := SpielFigur.Top; BX := SpielFigurMusZuX; BY := SpielFigurMusZuY; if(AX > BX)then StreckeX := AX - BX else StreckeX := BX - AX; if(AY > BY)then StreckeY := AY - BY else StreckeY := BY - AY; if(StreckeX < StreckeY)then begin SteigungY := StreckeY div StreckeX; SteigungX := 1; end else begin SteigungX := StreckeX div StreckeY; SteigungY := 1; end;
if(AX > BX)then SteigungX := SteigungX * -1;
if(AY > BY)then SteigungY := SteigungY * -1; while (AX < BX) and (AY < BY) do begin AX := AX + SteigungX; AY := AY + SteigungY; SpielFigur.Left := AX; SpielFigur.Top := AY; end; |
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Mo 18.07.05 21:39
maxk hat folgendes geschrieben: | Der schnellste Weg ist der Abstand zwischen beiden Punkten! Aber das ganze ist natürlich anders, wenn sich z.B. zwischen beiden eine "Wand" befindet und das ist vom Spiel abhänig.
Gruß,
maxk |
Eben - der KÜRZESTE Weg zwischen zwei Punkten ist die Strecke auf einer Geraden, die durch A und B läuft. Der schnellste Weg muss es deswegen noch lange nicht sein (denke man hierbei an Landkarten und Luftlinien). Das nur als Anmerkung!
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Mo 18.07.05 21:50
Wenn dein Spielfeld eine Matrix ist, kannst du den A*-Algorithmus verwenden.
|
|
Flolo 
      
Beiträge: 146
Win 3.11, Win 98, Win 2000 Pro, Linux 6-10.3 Pro, OS/2 Warp 3, OS/2 Warp 4.0, Ms-Dos 6.22,Ms-Dos 7, DR-Dos, Oberon ...
Turbo Pascal 6,D7 Pers, Kylix 3
|
Verfasst: Mi 20.07.05 09:59
Danke für die Antworten, das langt mir bereits!
|
|
JRegier
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 20.07.05 13:45
Flolo hat folgendes geschrieben: | | Danke für die Antworten, das langt mir bereits! |
Hast du mein Code getestet? Also ich nicht! Habe nur so Ansatzweise überlegt wie es gehen könnte!
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 22.07.05 13:20
Soll die Figur durch ein Labyrinth gehen ? So etwa :
seth2000.se.funpic.d...p;um=show&fid=12

|
|
Flolo 
      
Beiträge: 146
Win 3.11, Win 98, Win 2000 Pro, Linux 6-10.3 Pro, OS/2 Warp 3, OS/2 Warp 4.0, Ms-Dos 6.22,Ms-Dos 7, DR-Dos, Oberon ...
Turbo Pascal 6,D7 Pers, Kylix 3
|
Verfasst: So 24.07.05 19:47
Aso irgentwie funktioniert das Beispiel nicht (kann auch an mir liegen) die Figur will sich nicht Bewegen.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 24.07.05 22:08
Wenn Du mir eine neue SuperVision-SourceView 6002 Enterprise-Kugel schenkst, kann ich Dir vielleicht auch ohne Source helfen ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
hans mans
      
Beiträge: 38
Win XP, SuSE 10.0
D7 Pers, D2005 Pers
|
Verfasst: So 24.07.05 22:30
Also wenn ich das richtig sehe geht deine Figur einfach immer an einer Wand entlang. Das Programm überprüft, ob das Feld in Laufrichtung links auf dem Feld eine Wand ist. Die Figur geht daran entlang und sucht sich, währen sie läut ihren Weg.
Meiner Ansicht nach wird sie so nur durch Zufall das Ziel auf dem kürzesten Weg erreichen. Ich denke, es währe effektiver, wenn auch rechenaufwändiger, wenn du das Programm jeden möglichen Weg probieren lässest, so, dass es den kürzesten weg finden muss.
Dazu könntest du die Figur von jedem Feld aus in jede Richtung gehen lassen, wo Boden ist. Wenn ein Weg gefunden ist, wird die länge in Feldern gespeichert und die nächste Möglichkeit ausprobiert, bis die Figur am Ziel ist, oder die Länge des vorherigen Wegs erreicht wird. Wenn der Weg kürzer ist, wird die Länge des neuen Weges gespeichert. Dadurch sparst du dann ein bischen Zeit.
Aber wie BenBE es schon sagt, mit Source wäre hlfen leichter, so stütze ich mich nur auf Vermutungen.
Ich hoffe, das hilft dir trotzdem.
PS: vom schon gegangenen Weg könntest du sämtliches vorwärts gehen und drehen in einem Array Speichern.
|
|
blocade
      
Beiträge: 23
|
Verfasst: Mo 25.07.05 01:21
sind bei deinem spiel die spielfelder quadratisch?
und ist der diagonale weg dann um wurzel(2) kürzer?
angenommen dies ist nicht der fall, kansnt du dann nicht einfach einmal testen wie schneller er ist, wenn er links dran vorbei geht und wie schnell er ist, wenn er rechts dran vorbei geht?
und so probierst du dann einfach die beiden möglichkeiten aus.
wenn es nun >1 hinderniss ist, musst du einfach alle möglichkeiten ausprobieren, also:
links, links; links, rechts; rechts, links; rechts, rechts.
d.h es gibt dann, wenn n die anzahl der hindernisse ist, 2^n möglichkeiten die du durchprobieren musst ...
|
|
|