Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verwaltung von Einstellungen (https://www.delphipraxis.net/114155-verwaltung-von-einstellungen.html)

Neutral General 22. Mai 2008 15:23

Re: Verwaltung von Einstellungen
 
Hi,

Ich bin mir nicht so sicher. Also es ist ja so, das es nicht darum geht den aktuelle Spielstand zu speichern oder zu laden, sondern nur die Spieldaten. Wie machen es denn andere Spiele.. z.B. Shooter.. Die ganzen Modells, Sprites etc.. Also wenn es wirklich viele Daten sind. Wann werden die geladen und wie werden sie verwaltet?

Also ich schreib mal nen kleinen Pseudocode hierhin, jetzt nicht mit Kreaturen/Autos sondern mit Gebieten.

Delphi-Quellcode:
var
  Gebiete: TObjectlist;
  TileList: TTileList; // TObjectlist


procedure BeiSpielStart;
begin
  Gebiete.LoadFromFile('Gebiete.dat');
  TileList.LoadFromFile('Tiles.dat');
end;

procedure TGebiet.DoEnter(Sender: TObject);
begin
  LoadMap(Self.MapID);
end;

procedure TGebiet.LoadMap(ID: Integer);
var i: Integeger;
begin
  // Map malen
  for i:= 0 to Gebiete[ID].Tiles.Count-1 do
    TileList[Gebiete[ID].Tiles[i].ID].Draw;
  // Kreaturen drauf stellen
  for i:= 0 to Gebiete[ID].Creatures.Count-1 do
    with TCreature.Create(...) do
    begin
      Assign(Creatures[Gebiete[ID].Creatures[i].ID]);
      x := Gebiete[ID].Creatures[i].x;
      y := Gebiete[ID].Creatures[i].y;
    end;
end;
So würde ich das bisher ungefähr machen. Aber ich weiß nicht ob mir das gefällt. Vor allem Zeilen wie:

Delphi-Quellcode:
TileList[Gebiete[ID].Tiles[i].ID].Draw;
sind mir ein Dorn im Auge und in der Praxis wird sowas eventuell noch schlimmer aussehn.

stahli 22. Mai 2008 15:53

Re: Verwaltung von Einstellungen
 
Deine zwei Listen sind ja global und stellen eine Sammlung von Objekten dar (z.B. TGebiet).
Aus dem Objekt selbst greifst Du dann auf die globale Liste zu...

statt
for i:= 0 to Gebiete[ID].Tiles.Count-1 do
sollte doch
for i:= 0 to Tiles.Count-1 do
auch reichen!?

Und darüber hinaus könntest Du die optisch komplizierten Anweisungen in eine globale Funktion bzw. Prozeduren auslagern:
Delphi-Quellcode:
  for i:= 0 to Tiles.Count-1 do
    TileListDraw(MapID, I);

  procedure TileListDraw(MapId, I: Integer);
  begin
    TileList[Gebiete[MapID].Tiles[I].ID].Draw;
  end;
Das ändert zwar an der Anweisung nichts, vereinfacht aber etwas die Lesbarkeit Deines "eigentlichen" Programmcodes.

stahli


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr.
Seite 2 von 2     12   

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