Autor Beitrag
Flolo
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
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
BeitragVerfasst: 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 user profile iconGausi: Topic aus Tutorials verschoben am Mo 18.07.2005 um 21:38
Tobias1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 454

Win 98, XP Prof
D3 Prof, D2005 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
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
BeitragVerfasst: Mo 18.07.05 20:48 
Die spielefigur von meinem Spiel 8) . 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 454

Win 98, XP Prof
D3 Prof, D2005 Prof
BeitragVerfasst: Mo 18.07.05 21:00 
user profile iconFlolo hat folgendes geschrieben:
Die spielefigur von meinem Spiel 8) . 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=
user profile iconFlolo 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mo 18.07.05 21:39 
user profile iconmaxk 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:
ausblenden volle Höhe Delphi-Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: Mo 18.07.05 21:39 
user profile iconmaxk 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 18.07.05 21:50 
Wenn dein Spielfeld eine Matrix ist, kannst du den A*-Algorithmus verwenden.
Flolo Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
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
BeitragVerfasst: Mi 20.07.05 09:59 
Danke für die Antworten, das langt mir bereits!
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mi 20.07.05 13:45 
user profile iconFlolo 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
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
BeitragVerfasst: So 24.07.05 19:47 
Aso irgentwie funktioniert das Beispiel nicht (kann auch an mir liegen) die Figur will sich nicht Bewegen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 38

Win XP, SuSE 10.0
D7 Pers, D2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: 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 ...