Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi rpg-herumlaufkarten-speicherformat (https://www.delphipraxis.net/110420-rpg-herumlaufkarten-speicherformat.html)

dajuhsa 17. Mär 2008 23:11


rpg-herumlaufkarten-speicherformat
 
Hi,

ich arbeite an einem RPG mit rumlaufen und kämpfen, ganz im Pokemon-Stil.
Jetzt habe ich mir überlegt, die Karte, auf der man momentan rumläuft (aus einzelnen Feldern aufgebaut)
so zu laden:

Delphi-Quellcode:
type
TKarte = Array of Array of TFeld;
var
AktuelleKarte:TKarte;

...

procedure KarteEinlesen(var ZuAenderndeKarte:TKarte;const AKarte:TKarte);
var i,j:integer;
begin
  SetLength(ZuAenderndeKarte,Length(AKarte),Length(AKarte[0]));
  for i := 0 to High(AKarte) do
  for j := 0 to High(AKarte[0]) do
    ZuAenderndeKarte[i,j] := AKarte[i,j];
end;
Meine Frage ist jetzt:
wie soll ich die Karten-arrays speichern?
Ich suche irgendeine Datenbankfreie Lösung, um so eine Teilkarte in einer Datei zu speichern.

Ich hoffe, ihr versteht mein Problem :dp:

Flips 17. Mär 2008 23:14

Re: rpg-herumlaufkarten-speicherformat
 
Hi,

poste mal bitte die Deklaration von TFeld.

dajuhsa 18. Mär 2008 00:06

Re: rpg-herumlaufkarten-speicherformat
 
hab mir noch nix überlegt, es könnte ein integer sein, also:
0 für leeres feld mit gras
1 für leeres feld mir kies
2 für felswand
...

Flips 18. Mär 2008 13:19

Re: rpg-herumlaufkarten-speicherformat
 
Also wenn 255 verschiedene Eigenschaften reichen, dann würd ichs über chars (chr & ord) machen:
Delphi-Quellcode:
//Array
type TKarte = array of array of byte;


//Speichern
list := TStringlist.Create;
try
  list.BeginUpdate;
  for i := 0 to High(AKarte) do
    begin
      buf := '';
      for j := 0 to High(AKarte[i]) do
        buf := buf + chr(AKarte[i][j]);
      list.Add(buf);
    end;
  list.EndUpdate;
  list.SaveToFile('datei.txt');
finally
  FreeAndNil(list);
end;

//Laden
list := TStringlist.Create;
try
  list.LoadFromFile('datei.txt');
  SetLength(AKarte,list.Count-1);
  for i := 0 to High(AKarte) do
    begin
      SetLength(AKarte[i],length(list[i])-1);
      for j := 0 to High(AKarte[i]) do
        AKarte[i][j] := ord(list[i][j]);
    end;
finally
  FreeAndNil(list);
end;
Ungetestet!!

Bei größerem Bedarf an Eigenschaften:
Entweder du nutzt Hier im Forum suchenexplode und Hier im Forum suchenimplode oder (wie ich es mache) du nimmst für ein Spieldfeld von 64*64 einfach ein ebensogroßes Bitmap und ordnest jeder Farbe eine Eigenschaft zu. Dann hast du genug mögliche Eigenschaften und es lässt sich leicht auslesen und speichern!

dajuhsa 18. Mär 2008 20:04

Re: rpg-herumlaufkarten-speicherformat
 
ja, danke.
ich denke mal, ich hab es grob verstanden.
Danke dir, mfG
:wink:

Flips 18. Mär 2008 20:06

Re: rpg-herumlaufkarten-speicherformat
 
Hab jetzt anhand deiner Beitragszahl geschätzt, dass du Delphi schon soweit beherrscht :-)
Wenn du's nich verstehst / umsetzen kannst dann poste nur wieder hier rein^^

dajuhsa 18. Mär 2008 20:38

Re: rpg-herumlaufkarten-speicherformat
 
ja ich versteh's,
ich hab mir ja auch erst überlegt, ne textdatei zu nehmen, nur dachte ich, dass es was besseres gibt und dass es leicht zu manipulieren wäre, aber wenn ich das als ressource mit einbinde oder die datei mit ner anderen Endung tarne, haut das schon hin :mrgreen:

CodyConcrete 18. Mär 2008 22:03

Re: rpg-herumlaufkarten-speicherformat
 
Hey,
Soweit ich mich entsinnen kann, kann man doch auch selbst Dateien von einem bestimmten Typ erstellen

Delphi-Quellcode:
FeldDatei = File of TFeld
Jetzt kannst du angenehm alle Daten der Felder in die Datei speichern. Das Problem, dass jemand die Datei manipulieren könnte, fällt auch weg. Außerdem ist es ne sehr angenehme Sache, wenn TFeld aus mehreren Variablen verschiedenen Typs besteht.

Das ganze klappt auf jeden Fall wenn dein TFeld ein Record-Typ ist und alle Elemente finit sind, also keine dynamischen Arrays enthält. Wie es bei einer Klasse aussieht kann ich dir nicht sagen, aber du könntest dort einfach einen Record für alle Daten machen, der dann als Eigenschaft der Klasse alle Daten speichert die später auch in der Datei gespeichert werden soll. Dann kannst du ein FileTyp von diesem Record machen und wieder angenehm speichern.

Wenn du willst, kann ich dir ja mal ein Beispiel daszu schreiben

3_of_8 18. Mär 2008 22:19

Re: rpg-herumlaufkarten-speicherformat
 
Der klassische Weg dafür:

Ein array of array of Byte, das man aus ner binären. Dazu gehört außerdem ein "Tileset", das ist ein Bild mit 16*16=256 Tiles. (ein Tile ist jeweils die kleinste Fläche auf einer Karte)

Das ist das Ground-Layer, also der Boden. Dazu gehört nochmal ein array[Byte] of Boolean, das darstellt, ob man über ein bestimmtes Tile gehen kann oder nicht.

Über den Ground-Layer kommt nochmal ein gleich aufgebautes Layer, das dann Objekte wie Häuser, Zäune usw. enthält.

Eine Karte besteht also aus Breite, Höhe, Tilesets für beide Layer, jeweils mit Kollisions-Map und zwei Maps für die Layer.

dajuhsa 18. Mär 2008 23:32

Re: rpg-herumlaufkarten-speicherformat
 
:shock: das wird ja immer komplizierter!
nicht, dass ich es nicht verstehen würde, aber das alles in source sinnvoll umzusetzen könnte schwierig werden.
außerdem muss ich mir ja vorher noch einen map-editor programmieren um die maps zu speichern :pale: ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz