AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia verschiedene Datentypen in eine Datei abspeichern

verschiedene Datentypen in eine Datei abspeichern

Ein Thema von Glocke89 · begonnen am 5. Mär 2007 · letzter Beitrag vom 6. Mär 2007
Antwort Antwort
Benutzerbild von Glocke89
Glocke89

Registriert seit: 2. Mär 2007
Ort: Thüringen
80 Beiträge
 
Lazarus
 
#1

verschiedene Datentypen in eine Datei abspeichern

  Alt 5. Mär 2007, 21:39
Hallöchen zusammen,
meine Kumpels und ich wollen ein Spiel programmieren (in Anlehnung an OGame (der eine oder andere wird es sicher kennen).
Dabei wollen wir die ganze Sache immer mal auf die Festplatte abspeichern.

Als erstess haben wir folgende Konstanten deklariert:

Delphi-Quellcode:
const metallmine= 1;
      siliciummine=2;
      wasserstofffilter=3;
      solarkraftwerk=4;
      schiffswerft=5;
      forschungslabor=6;

      waffentechnik=7;
      schildtechnik=8;
      Feststoffantrieb=9;
      Hyperraumantrieb=10;
      Lasertechnik=11;
      Ionentechnik=12;
      Plasmatechnik=13;
      Synchrotron=14;
      energietechnik=15;

      lasergeschuetz=16;
      ionenkanone=17;
      plasmawerfer=18;
      schildgenerator=19;

      transporter=20;
      jaeger=21;
      abfangjaeger=22;
      kreuzer=23;
      schlachtschiff=24;
      zerstoerer=25;

      MaxStufe=20;

      bewegbar=1;
      bewegt=2;
...und folgende Datentypen

Delphi-Quellcode:
type TSpieler = 1..3;
     TWeg = 1..12; //1..3 - Planet, 4..12 - Wegpunkt
     TSchiff = record
     TRess = record
               metall: integer;
               silicium: integer;
               wasserstoff: integer;
             end;
     SpielerFeld=array [TSpieler]of string;
     GebaeudeFeld=array [metallmine..forschungslabor,TSpieler]of integer;
     ForschungFeld=array [Waffentechnik .. Energietechnik, TSpieler ] of integer;
     VerteidigungFeld=array [Lasergeschuetz .. Schildgenerator, TSpieler ] of integer;
     FlottenFeld=array [Transporter .. Zerstoerer, TSpieler, TWeg,bewegbar..bewegt]of integer;
     RohstoffFeld=array [TWeg ] of TRess;
     ForschungsFeld=array [TSpieler] of integer;
     StromFeld=array[TSpieler]of integer;
...und dann noch die folgenden Variablen!

Delphi-Quellcode:
var // ständig veränderte Werte
    Spieler:SpielerFeld; //= Spielernamen; TSpieler gelöscht
    Gebaeude:GebaeudeFeld; //Stufen der Gebäude
    Verteidigung:VerteidigungFeld; //Deff-Anzahl
    Flotten:FlottenFeld; //Fleet-Anzahl Wegpunkte
    Forschungsstufen:ForschungFeld; //Forschungsstufen
    Rohstoffe:RohstoffFeld; //Rohstoffe Wegpunkt
Nun die Preisfrage im Kontext:
Wir wollen die Variablen Spieler, Gebaeude, Verteidigung, Flotten, Forschungsstufen und Rohstoffe alle in eine Datei abspeichern und laden können. Hat jemand eine Idee, ob das überhaupt so einfach geht und wenn ja, wie man das macht?

tHx im Vorraus
Christian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 5. Mär 2007, 22:57
Man könnte eine Inifile nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 6. Mär 2007, 00:35
Zitat von mkinzler:
Man könnte eine Inifile nehmen.
Das wäre eine Möglichkeit.

Eine Andere ist, so würde ich es machen, die Daten in Records zusammenfassen.
Das gibt dem Ganzen eine bessere Übersicht und es lässt sich einfacher in eine Datei
speichern.


Delphi-Quellcode:

type TSpieler = 1..3;
     TWeg = 1..12; //1..3 - Planet, 4..12 - Wegpunkt

     TRess = record
               metall: integer;
               silicium: integer;
               wasserstoff: integer;
             end;

     TSpielerFeld=array [TSpieler]of string[128]; // <---<<<
     // ...
     TRohstoffFeld=array [TWeg ] of TRess;
     TForschungsFeld=array [TSpieler] of integer;
     TStromFeld=array[TSpieler]of integer;
     
     ////////////////////////////////////////////

     TGame = Record
       SpielerFeld: TSpielerFeld;
       // ...
       RohstoffFeld: TRohstoffFeld;
       ForschungsFeld: TForschungsFeld;
       StromFeld: TStromFeld;

       // etc. ...
     end;

     ////////////////////////////////////////////

var
  Game: TGame;

Procedure ...SaveGame;
var fs: TFileStream;
begin
  fs := TFileStream.Create(...);
  fs.Write(Game, sizeof(Game));
  fs.Free;

  // ...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von WordsBG
WordsBG

Registriert seit: 17. Sep 2005
63 Beiträge
 
Delphi 7 Professional
 
#4

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 6. Mär 2007, 01:30
Einfach alles komplett als Record TGame und dann mit file of TGame speichern/lesen, einfacher gehts wohl nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 6. Mär 2007, 07:12
Irre ich mich da oder müsste mann in diesem Falle "packed record" verwenden? Und Strings müssen entweder als ShortString oder als String[1..255] deklariert werden.

ODer verwechsele ich das grade?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 6. Mär 2007, 09:09
Zitat von Florian Bernd:
Irre ich mich da oder müsste mann in diesem Falle "packed record" verwenden? Und Strings müssen entweder als ShortString oder als String[1..255] deklariert werden.

ODer verwechsele ich das grade?
Packed Record kann mann nutzen, muss aber nicht. Das Begrenzen der Strings ist Richtig und Wichtig.

Delphi-Quellcode:
type
  TSpielerFeld = array [TSpieler] of String[200]; // Setzt einen String auf die Länge
                                                   // von max 200 Zeichen
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Glocke89
Glocke89

Registriert seit: 2. Mär 2007
Ort: Thüringen
80 Beiträge
 
Lazarus
 
#7

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 6. Mär 2007, 11:08
Zitat von mkinzler:
Man könnte eine Inifile nehmen.
Kann mir das einer auf die Schnelle erkären, wie das mit dem INIFile geht?
Die ganze Sache in ein Record zu macken klingt kompliziert und sieht auch so aus.... also INI-File klingt gut
Christian
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#8

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 6. Mär 2007, 16:04
Da es ja DEIN Spiel wird, würde ich an deiner Stelle ein eigenes "Format" programmieren, da du da dann evtl. leichter mit arbeiten kannst. Dazu solltest du aber (solange es gut programmiert sein soll ein wenig mit Delphi umgehen können. Da du aber nicht einmal weißt, wie man mit Records umgeht, solltest du Inis nehmen:
Was für eine Delphi-Version hast du ? Ab 6/7 gibt es eine Unit IniFiles, welche du nur in die Uses-Klausel aufnehmen musst.
  Mit Zitat antworten Zitat
Benutzerbild von Glocke89
Glocke89

Registriert seit: 2. Mär 2007
Ort: Thüringen
80 Beiträge
 
Lazarus
 
#9

Re: verschiedene Datentypen in eine Datei abspeichern

  Alt 6. Mär 2007, 19:52
Zitat von Nils_13:
Was für eine Delphi-Version hast du ? Ab 6/7 gibt es eine Unit IniFiles, welche du nur in die Uses-Klausel aufnehmen musst.
Ich hab Delphi 7

Naja, das mit dem INI-File habe ich vorhins mit dem Tutorial hinbekommen

Der Quellcode sieht so aus
Delphi-Quellcode:
{ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Spielstand speichern
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }

procedure Spielstand_speichern(wer:integer);
var ini:TIniFile;
    i,j:integer;
begin
  ini:=TIniFile.Create(ExtractFilePath(ParamStr(-1))+pfad);
  with ini do
    begin
      //Spielername
      WriteString('Spieler '+IntToStr(wer),'Name',Game.Spieler[wer]);
      //Gebäudestufen
      for i:=Metallmine to Forschungslabor do
        WriteInteger('Gebäudestufen ('+IntToStr(wer)+')',IntToStr(i),Game.Gebaeude[i,wer]);
      //Forschungsstufe
      for i:=Waffentechnik to Energietechnik do
        WriteInteger('Forschungsstufen ('+IntToStr(wer)+')',IntToStr(i),Game.Forschungsstufen[i,wer]);
      //Verteidigungen
      for i:=Lasergeschuetz to Schildgenerator do
        WriteInteger('Verteidigungsanlagen ('+IntToStr(wer)+')',IntToStr(i),Game.Verteidigung[i,wer]);
      //Schiffe auf Wegpunkten
      for i:=Transporter to Zerstoerer do
        for j:=1 to 12 do
          WriteInteger('Flotten auf Wegpunkt '+IntToStr(j)+' ('+IntToStr(wer)+')',IntToStr(i),Game.Flotten[i,j,wer,bewegbar]);
      //Rohstoffe auf Wegpunkten
      for j:=1 to 12 do
        begin
          WriteInteger('Rohstoffe auf Wegpunkt '+IntToStr(j),'Metall',Game.Rohstoffe[j].metall);
          WriteInteger('Rohstoffe auf Wegpunkt '+IntToStr(j),'Silicium',Game.Rohstoffe[j].silicium);
          WriteInteger('Rohstoffe auf Wegpunkt '+IntToStr(j),'Wasserstoff',Game.Rohstoffe[j].wasserstoff);
        end;
      free
    end;
end;

{ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Spielstand laden
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }

procedure Spielstand_laden;
var ini:TIniFile;
    i,j,k,x:integer;
begin
  ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+pfad);
  with ini do
     try
      for k:=1 to 3 do //Spieler
        begin
          //Spielernamen
          ReadString('Spieler '+IntToStr(k),'Name',Game.Spieler[k]);
          //Gebäudestufen
          for i:=Metallmine to Forschungslabor do
            ReadInteger('Gebäudestaufen ('+IntToStr(k)+')',IntToStr(k),Game.Gebaeude[i,k]);
          //Forschungsstufe
          for i:=Waffentechnik to Energietechnik do
            ReadInteger('Forschungsstufen ('+IntToStr(k)+')',IntToStr(k),Game.Forschungsstufen[i,k]);
          //Verteidigungen
          for i:=Lasergeschuetz to Schildgenerator do
            ReadInteger('Verteidigungsanlagen ('+IntToStr(k)+')',IntToStr(k),Game.Verteidigung[i,k]);
          //Schiffe auf Wegpunkten
          for i:=Transporter to Zerstoerer do
            for j:=1 to 12 do
              ReadInteger('Flotten auf Wegpunkt '+IntToStr(j)+' ('+IntToStr(k)+')',IntToStr(k),Game.Flotten[i,k,j,bewegbar]);
        end;
          //Rohstoffe auf Wegpunkten
          for j:=1 to 12 do
            begin
              ReadInteger('Rohstoffe auf Wegpunkt '+IntToStr(j),'Metall',Game.Rohstoffe[j].metall);
              ReadInteger('Rohstoffe auf Wegpunkt '+IntToStr(j),'Silicium',Game.Rohstoffe[j].silicium);
              ReadInteger('Rohstoffe auf Wegpunkt '+IntToStr(j),'Wasserstoff',Game.Rohstoffe[j].wasserstoff);
            end;
    finally
      free
    end;
end;
Es schein zu funktionieren Wenn das Spiel im Ganzen funktioniert stellen wir es evtl. hier online

So, tHx für eure Hilfe (moralische Unterstützung pur )
Christian
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:25 Uhr.
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