AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi rpg-herumlaufkarten-speicherformat
Thema durchsuchen
Ansicht
Themen-Optionen

rpg-herumlaufkarten-speicherformat

Ein Thema von dajuhsa · begonnen am 17. Mär 2008 · letzter Beitrag vom 25. Mär 2008
 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#16

Re: rpg-herumlaufkarten-speicherformat

  Alt 22. Mär 2008, 23:42
Tipp von mir: Lass das lieber mit dem "file of ...". Das ist aus der Steinzeit und auch der "klassische" Weg, aber meiner Meinung nach wirklich nicht zu empfehlen, weil es unflexibel und kompliziert ist. Guck dir lieber mal Streams an, damit kann man meiner Meinung nach sehr viel besser arbeiten.

Hier mal eine Erklärung über die Grundstruktur der unten deklarierten typen: tMap enthält zwei Layer vom Typ tTileset. dieses tTileSet ist ein zweidimensionales Array von dem record-typ tTile. tTile wiederum enthält alle Infos zu einem Tile, in diesem Fall nur den Typ, und ob man damit kollidiert. Das kann natürlich noch erweitert werden, z.b. könntest du Portale bauen, bei denen du dann speicherst, an welcher Stelle der Spieler rauskommt, oder ein Flag für wasser etc...

Pseudocode:
Delphi-Quellcode:
type
  tTileType = (tFloor,tGrass,tTree);
  tTile = record // Natürlich könnte man sich den Record auch sparen, und stattdessen tTileType benutzen, wo man dann
                 // allerdings anhand des Typen erkennen müsste, ob es eine Kollision gibt. Ich würde hier auf jeden Fall
                 // einen Record nehmen, denn wer weiß, was du später noch an Zusatzinformationen speichern willst
    Type: tTileType;
    Collide: Boolean;
  end;
  tTileset = array of array of tTile; // Beachte, dass der erste Index hier Y und der zweite X. Vom Gefühl her würde man es
                                      // vielleicht anderherum machen, aber die Erfahrung hat mich gelehrt, dass es sorum auf
                                      // Dauer praktischer ist
  tMap = array[0..1] of tTileset; // 0 = bottomlayer, 1= toplayer
var
  MemStream: tMemoryStream;
  Map: tMap;
  TileSetW,TileSetH: integer; // Breite und Höhe des Tilesets
  i,y,x: integer;
begin
  // Höhe und Breite des Tilesets in lokalen Variablen zwischenspeichern
  TileSetH := high(Map[0]) + 1;
  TileSetW := high(Map[0][0]) + 1; // Normalerweise sollte man hier noch prüfen, ob es die Höhe des Tilesets >0 ist, weil es
                                   // hier sonst eine Zugriffverletzung geben könnte
  memstream := tmemorystream.create;
  // Aus Performancegründen wird jetzt der gesamte Speicherbedarf ausgerechnet:
  // Zwei Integers (Höhe und Breite) + Anzahl der Tiles * Platzbedarf eines Tiles, und das ganze für jeden der zwei layer
  memstream.size := SizeOf(integer)*2+TileSetH*TileSetW*sizeof(tTile)*2;
  memstream.position := 0; // Wir fangen bei 0 an zu schreiben
  // Für jeden Layer:
  for i := 0 to 1 do
    for y := 0 to TilesetH-1 do
      for x := 0 to TilesetW-1 do
        memstream.write(Map[i][y][x],sizeof(tTile)); // Das hier ist der eigentliche Teil^^
  // Inhalt des memoryStreams auf der festplatte ablegen
  memstream.savetofile('fertig.map');

  memstream.free;
end;
Okay, sieht jetzt vielleicht doch etwas kompliziert aus, aber das meiste davon sind ja auch Kommentare und Typendeklarationen
So, jetzt ist meine Antwort c.a. drei fünf mal so lang ausgefallen, wie ich erwartet hatte, ich hoffe, man versteht es wenigstens
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz