Autor Beitrag
Althippie
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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:

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:
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)); // zu ordnung der abstrkten richtungen (TDir) in vectoren
  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; // index des wegtyps, der in FieldDef definiert ist
        item  : byte;
     end;
  
     TMatrix = array of array of TField; // labyrinth map

var matrix:TMatrix; // irgendwie füllen...am besten mit einem map-editor
     pos:Tpoint = (x:1;y:1);
     inputDir:TDir = dNone;
     moveVect:TPoint;
...
// tasten eingabe auslesen...und irgendwie..zB:
// inputDir := dUp;

  moveVect := DirVects[TDir(dNone)]; 

// beim bewegen des player (pos) auf der map
 if inputDir in FieldDef [Matrix[pos.x,pos.y].way] then  // prüfen ob die richtung, in die man will, möglich ist
   moveVect := DirVects[TDir(inputDir)]; // echte richtung holen

 pos.x := pos.x + moveVect.x; // bewegen
 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 55



BeitragVerfasst: 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)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
// Das ist die Karte
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 initiieren
startPunkt.x := 2; startPunkt.y := 3;

// Hier die Tastaturbehandlung
 if wennNaechstesKeineWand(startPunkt, richtung) then begin
   bewege(startPunkt, richtung);
   zeichneKarte(karte);
   zeichneSpieler(startPunkt);
end;
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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:
ausblenden 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



BeitragVerfasst: Fr 03.10.03 11:53 
@mimi:
mich würde jetzt mal interessieren wie das zur Lösung des Problems beitragen soll :roll:

Ich glaube nicht dass man in einem Informatikkurs viel Wert auf besonders Tolle Optik legt.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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



BeitragVerfasst: Fr 03.10.03 12:20 
allerdings sehe ich da keinen Array und ich weiß dann auch nicht, warum man GLXTreem nehmen sollte.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 03.10.03 12:42 
mimi hat folgendes geschrieben:
...
ausblenden 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 :evil:

...nix für ungut mimi...aber is'n bisschen mager.

_________________
mfg.
mâximôv
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 03.10.03 12:43 
das erinnert mich irgendwie an code aus seinem Snake ... :roll:
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 126

WIN 2000
D7 Enterprise
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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...."