![]() |
verschiedene Datentypen in eine Datei abspeichern
Hallöchen zusammen,
meine Kumpels und ich wollen ein Spiel programmieren :???: (in Anlehnung an ![]() Dabei wollen wir die ganze Sache immer mal auf die Festplatte abspeichern. :coder: Als erstess haben wir folgende Konstanten deklariert:
Delphi-Quellcode:
...und folgende Datentypen
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;
Delphi-Quellcode:
...und dann noch die folgenden Variablen!
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;
Delphi-Quellcode:
Nun die Preisfrage im Kontext:
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 Wir wollen die Variablen Spieler, Gebaeude, Verteidigung, Flotten, Forschungsstufen und Rohstoffe alle in eine Datei abspeichern und laden können. :coder2: Hat jemand eine Idee, ob das überhaupt so einfach geht und wenn ja, wie man das macht? :gruebel: tHx im Vorraus :zwinker: |
Re: verschiedene Datentypen in eine Datei abspeichern
Man könnte eine Inifile nehmen.
|
Re: verschiedene Datentypen in eine Datei abspeichern
Zitat:
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; // ... |
Re: verschiedene Datentypen in eine Datei abspeichern
Einfach alles komplett als Record TGame und dann mit file of TGame speichern/lesen, einfacher gehts wohl nicht.
|
Re: verschiedene Datentypen in eine Datei abspeichern
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? :gruebel: |
Re: verschiedene Datentypen in eine Datei abspeichern
Zitat:
Delphi-Quellcode:
type
TSpielerFeld = array [TSpieler] of String[200]; // Setzt einen String auf die Länge // von max 200 Zeichen |
Re: verschiedene Datentypen in eine Datei abspeichern
Zitat:
Die ganze Sache in ein Record zu macken klingt kompliziert und sieht auch so aus.... also INI-File klingt gut :) |
Re: verschiedene Datentypen in eine Datei abspeichern
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. |
Re: verschiedene Datentypen in eine Datei abspeichern
Zitat:
Naja, das mit dem INI-File habe ich vorhins mit dem Tutorial hinbekommen Der Quellcode sieht so aus
Delphi-Quellcode:
Es schein zu funktionieren :dancer: Wenn das Spiel im Ganzen funktioniert stellen wir es evtl. hier online :coder:
{ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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; So, tHx für eure Hilfe (moralische Unterstützung pur :warn: ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 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