| Autor |
Beitrag |
Althippie
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 02.10.03 12:56
Hallo und guten Tag!
Schön, dass ihr reinschaut in dieses scheinbar leicht lösbare Problem. Doch für den Informatikkurs meiner Schule, dessen fröhliches Mitglied ich zu sein pflege, kann diese Schwierigkeit einfach nicht meistern, trotz aller Bemühungen.
Dabei möchten wir doch einfach nur einige Wände setzen können. So, dass es ein anständiges Labyrinth gibt, optisch sind wir da auch gar nicht anspruchsvoll, wollen halt nur, dass es funktioniert, auch die Verschachtelung wird nur sehr gering sein, im Prinzip also ein kleines fröhliches Progrämmchen.
Ich würde mich über rege Rückantwort - von Leuten, die diese Bewährungsprobe bereits hinter sich haben - freuen.
Tschüssi
|
|
ShadowThief
      
Beiträge: 278
|
Verfasst: Do 02.10.03 13:08
für 2d würd ich mich mal mit dem Canvas-Objekt auseinandersetzen, da gibt es dann so lustige funktionen wie MoveTo, LineTo usw.
für 3d is das jetzt schon schwieriger ...
shadow.
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Do 02.10.03 13:50
Wie wäre es matrix-basiert? ...im prinzip ein 2D array, in dem für jeden punkt infos über die möglichen richtungen stehen:
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: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| type TDir = (dNone, dLeft, dRight, dUp, dDown); TWayKinds = set of TDir;
const DirVects : array[0..4]of TPoint = ((x:0;y:0),(x:-1;y:0),(x:1;y:0),(x:0;y:-1),(x:0;y:1)); cWayMax = 16; FieldDef : array[0..cWayMax-1] of TWayKinds = ([], [dLeft ,dRight], [dUp ,dDown ], [dRight,dDown ], [dDown ,dLeft ], [dLeft ,dUp ], [dUp ,dRight], [dLeft ,dRight,dDown ], [dUp ,dDown ,dLeft ], [dLeft ,dRight,dUp ], [dUp ,dDown ,dRight], [dLeft ,dRight,dUp ,dDown ], [dRight], [dDown], [dLeft], [dUp]);
Type TField = record way : byte; item : byte; end; TMatrix = array of array of TField; var matrix:TMatrix; pos:Tpoint = (x:1;y:1); inputDir:TDir = dNone; moveVect:TPoint; ...
moveVect := DirVects[TDir(dNone)];
if inputDir in FieldDef [Matrix[pos.x,pos.y].way] then moveVect := DirVects[TDir(inputDir)]; pos.x := pos.x + moveVect.x; pos.y := pos.y + moveVect.y;
... | ...is halt nicht ganz einfach aber sehr dynamisch und effektiv!
PS: zu jedem fieldDef-index würde man ein bild machen, zB. eine T-kreuzung [dLeft ,dRight,dUp] und es an die richtige stelle auf dem spielfeld zeichnen.
_________________ mfg.
mâximôv
|
|
bIce
      
Beiträge: 55
|
Verfasst: Do 02.10.03 19:57
Eine 3. Möglichkeit, die auch aus einem 2D Array besteht ist, dass Du die Fläche die passierbar ist mit 0 belegst und die Wände mit einer 1.
Dann musst Du bei einer Reaktion auf eine Taste zunächst überprüfen ob das Feld wohin bewegt werden soll passierbar ist oder nicht.
Bsp (im Pseudocode)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| karte : array[0..4] of array[0..3] of Boolean = ( (1, 1, 1, 1), (1, 0, 0, 1), (1, 1, 0, 1), (1, 0, 0, 1), (1, 1, 1, 1) );
startPunkt: TPoint;
startPunkt.x := 2; startPunkt.y := 3;
if wennNaechstesKeineWand(startPunkt, richtung) then begin bewege(startPunkt, richtung); zeichneKarte(karte); zeichneSpieler(startPunkt); end; |
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 02.10.03 20:46
kann mir jemmand erklären was die vorteile von "matrix" sind ?
willst du es drei D haben ?
weil für zwei d hätte ich auch noch was:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| const mapX= 39; MapY=23;
type TMap= record Tex, Typ:Integer; end;
var Map:TMap
draw: ... create: ... |
wenn man dann auch noch DelphiX nutz oder GLXTreem ist das sehr einfach.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 03.10.03 11:53
@mimi:
mich würde jetzt mal interessieren wie das zur Lösung des Problems beitragen soll
Ich glaube nicht dass man in einem Informatikkurs viel Wert auf besonders Tolle Optik legt.
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 03.10.03 11:58
| Zitat: |
Ich glaube nicht dass man in einem Informatikkurs viel Wert auf besonders Tolle Optik legt.
|
wie kommst du auf obtik ?
du musst die wände ja verwalten und das macht man am besten in einem 2D array oder nicht ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 03.10.03 12:20
allerdings sehe ich da keinen Array und ich weiß dann auch nicht, warum man GLXTreem nehmen sollte.
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Fr 03.10.03 12:42
| mimi hat folgendes geschrieben: | ...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| const mapX= 39; MapY=23;
type TMap= record Tex, Typ:Integer; end;
var Map:TMap
draw: ... create: ... |
wenn man dann auch noch DelphiX nutz oder GLXTreem ist das sehr einfach. |
das soll anscheinend ein witz sein...so einen pseudo lösungsansatz muss man erstmal hinkriegen
...nix für ungut mimi...aber is'n bisschen mager.
_________________ mfg.
mâximôv
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 03.10.03 12:43
das erinnert mich irgendwie an code aus seinem Snake ... 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 03.10.03 13:02
du hast recht, es wäre einfacher gewesen einfach zu sagen:
schau dir mal diesen link hier an:
www.delphi-forum.de/viewtopic.php?t=10073
anstant sich jetzt zu streiten *G* oder ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
NCortex
      
Beiträge: 126
WIN 2000
D7 Enterprise
|
Verfasst: Fr 03.10.03 15:23
neee mimi wäre auch nicht viel bessa... das tutorial is zwar super.. keine Frage, aber es is zu komplex, er wollte ja nur ne lösung für die wände haben...
_________________ "...by all means, do not use a hammer." (aus einer IBM Technikerdokumentation ca. 1920)
--->außer es kam von Microsoft<---
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 03.10.03 16:23
Zu komplex... eher nutzlos (in diesem Fall)
Und für die Wände sind schon mehrere Lösungen gepostet worden.
|
|
Althippie 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 04.10.03 19:37
Hallo nochmal,
vielen Dank für eure vielfältigen Lösungsvorschläge und Beiträge, leider interessieren wir uns nur für eine 3D-Animation. Ein einfaches vor- und zurückgehen neben Wänden wäre schon ein großer Schritt und würde uns sehr weiterhelfen.
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 04.10.03 19:54
dann hilf dir vileicht glScene weiter oder direckt openGL, weil das wird dann nicht so einfach.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
|