summaryrefslogtreecommitdiff
path: root/raetselunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'raetselunit.pas')
-rw-r--r--raetselunit.pas197
1 files changed, 191 insertions, 6 deletions
diff --git a/raetselunit.pas b/raetselunit.pas
index c43d0f0..4e0ffae 100644
--- a/raetselunit.pas
+++ b/raetselunit.pas
@@ -4,8 +4,6 @@ unit raetselunit;
interface
-// TODO: Speichern/Laden
-
// TODO: Spielnummernzufall
// TODO: Cross-Compilieren
@@ -39,7 +37,9 @@ type
besitzer: tForm;
farbWahlFlaeche,
zeichenflaeche: tImage;
- erzeugeBtn: tButtonWithArrowKeys;
+ erzeugeBtn,
+ speichernBtn,
+ ladenBtn: tButtonWithArrowKeys;
progressbar1: tProgressBar;
aktuelleFarbe: tColor;
function besitzerHoehe: longint; dynamic;
@@ -51,6 +51,8 @@ type
procedure onFarbWahlMouseMove(sender: tObject; shiftState: tShiftState; x,y: longint);
procedure onFarbWahlMouseUp(sender: tObject; button: tMouseButton; shiftState: tShiftState; x,y: longint);
procedure erzeugeOnClick(sender: tObject);
+ procedure speichernOnClick(sender: tObject);
+ procedure ladenOnClick(sender: tObject);
procedure farbWahlFlaecheBemalen;
procedure loeschen; dynamic; abstract;
procedure leeren; dynamic; abstract;
@@ -61,6 +63,8 @@ type
function geloest: boolean; dynamic; abstract;
procedure randErzeugen; dynamic; abstract;
procedure startfelderFestlegen; dynamic; abstract;
+ procedure speichern(var datei: file); dynamic;
+ procedure laden(var datei: file); dynamic;
public
constructor create(aOwner: tForm);
destructor destroy; override;
@@ -95,6 +99,8 @@ type
procedure gesamtRaenderErzeugen; dynamic; abstract;
procedure startfelderfestlegen; override;
procedure alsZugSpeichern;
+ procedure speichern(var datei: file); override;
+ procedure laden(var datei: file); override;
public
constructor create(aOwner: tForm; anzInhTypen: longint; alphabetFunktion: tAlphabetFunktion);
destructor destroy; override;
@@ -193,6 +199,7 @@ end;
constructor tRaetsel.create(aOwner: tForm);
begin
inherited create;
+ randomize;
besitzer:=aOwner;
zeichenflaeche:=tImage.create(besitzer);
zeichenflaeche.parent:=besitzer;
@@ -204,11 +211,25 @@ begin
farbWahlFlaeche.onMouseUp:=@onFarbWahlMouseUp;
erzeugeBtn:=tButtonWithArrowKeys.create(besitzer);
erzeugeBtn.parent:=besitzer;
- erzeugeBtn.left:=spacing;;
- erzeugeBtn.top:=spacing;;
+ erzeugeBtn.left:=spacing;
+ erzeugeBtn.top:=spacing;
erzeugeBtn.caption:='Erzeugen!';
erzeugeBtn.onClick:=@erzeugeOnClick;
erzeugeBtn.onKeyDown:=@onKeyDown;
+ speichernBtn:=tButtonWithArrowKeys.create(besitzer);
+ speichernBtn.parent:=besitzer;
+ speichernBtn.left:=erzeugeBtn.left+erzeugeBtn.width+spacing;
+ speichernBtn.top:=spacing;
+ speichernBtn.caption:='Speichern!';
+ speichernBtn.onClick:=@speichernOnClick;
+ speichernBtn.onKeyDown:=@onKeyDown;
+ ladenBtn:=tButtonWithArrowKeys.create(besitzer);
+ ladenBtn.parent:=besitzer;
+ ladenBtn.left:=speichernBtn.left+speichernBtn.width+spacing;
+ ladenBtn.top:=spacing;
+ ladenBtn.caption:='Laden!';
+ ladenBtn.onClick:=@ladenOnClick;
+ ladenBtn.onKeyDown:=@onKeyDown;
progressbar1:=tProgressBar.create(besitzer);
progressbar1.visible:=false;
progressbar1.parent:=besitzer;
@@ -228,7 +249,11 @@ end;
function tRaetsel.besitzerBreite: longint;
begin
- result:=zeichenflaeche.width+zeichenflaeche.left+spacing;
+ result:=
+ max(
+ zeichenflaeche.width+zeichenflaeche.left,
+ ladenBtn.width+ladenBtn.left
+ )+spacing;
end;
procedure tRaetsel.zeichenFlaecheNeuKreieren;
@@ -294,6 +319,38 @@ begin
zeichnen;
end;
+procedure tRaetsel.speichernOnClick(sender: tObject);
+var
+ saveDialog1: tSaveDialog;
+ dat: file;
+begin
+ saveDialog1:=tSaveDialog.create(besitzer);
+ if saveDialog1.execute then begin
+ assignFile(dat,saveDialog1.fileName);
+ rewrite(dat,1);
+ speichern(dat);
+ closeFile(dat);
+ end;
+ saveDialog1.free;
+end;
+
+procedure tRaetsel.ladenOnClick(sender: tObject);
+var
+ openDialog1: tOpenDialog;
+ dat: file;
+begin
+ openDialog1:=tOpenDialog.create(besitzer);
+ if openDialog1.execute then begin
+ assignFile(dat,openDialog1.fileName);
+ reset(dat,1);
+ laden(dat);
+ assert(eof(dat),'Zu viele Daten in Datei!');
+ closeFile(dat);
+ zeichnen;
+ end;
+ openDialog1.free;
+end;
+
procedure tRaetsel.farbWahlFlaecheBemalen;
var
i: integer;
@@ -308,6 +365,16 @@ begin
end;
end;
+procedure tRaetsel.speichern(var datei: file);
+begin
+ blockWrite(datei,aktuelleFarbe,sizeOf(aktuelleFarbe));
+end;
+
+procedure tRaetsel.laden(var datei: file);
+begin
+ blockRead(datei,aktuelleFarbe,sizeOf(aktuelleFarbe));
+end;
+
// tFelderRaetsel **************************************************************
constructor tFelderRaetsel.create(aOwner: tForm; anzInhTypen: longint; alphabetFunktion: tAlphabetFunktion);
@@ -663,6 +730,102 @@ begin
zuege[length(zuege)-1].vorherMalFarbe:=zuege[length(zuege)-2].nachherFarbe;
end;
+procedure tFelderRaetsel.speichern(var datei: file);
+var
+ b: byte;
+ i: longint;
+begin
+ blockWrite(datei,'Fe',2);
+ b:=byte(diagonalenCB.checked);
+ blockWrite(datei,b,1);
+ b:=byte(sudokuCB.enabled);
+ blockWrite(datei,b,1);
+ b:=byte(sudokuCB.checked);
+ blockWrite(datei,b,1);
+ i:=length(groeszen);
+ blockWrite(datei,i,sizeof(i));
+ if length(groeszen)>0 then
+ blockWrite(datei,groeszen[0],length(groeszen)*sizeof(groeszen[0]));
+ i:=length(inhalt);
+ blockWrite(datei,i,sizeof(i));
+ if length(inhalt)>0 then
+ blockWrite(datei,inhalt[0],length(inhalt)*sizeof(inhalt[0]));
+ i:=length(rand);
+ blockWrite(datei,i,sizeof(i));
+ if length(rand)>0 then
+ blockWrite(datei,rand[0],length(rand)*sizeof(rand[0]));
+ blockWrite(datei,dim,sizeof(dim));
+ blockWrite(datei,nSqrt,sizeof(nSqrt));
+ blockWrite(datei,cursorPosition,sizeof(cursorPosition));
+ i:=length(feldFarben);
+ blockWrite(datei,i,sizeof(i));
+ if length(feldFarben)>0 then
+ blockWrite(datei,feldFarben[0],length(feldFarben)*sizeof(feldFarben[0]));
+ i:=length(startFeld);
+ blockWrite(datei,i,sizeof(i));
+ if length(startFeld)>0 then
+ blockWrite(datei,startFeld[0],length(startFeld)*sizeof(startFeld[0]));
+ i:=length(zuege);
+ blockWrite(datei,i,sizeof(i));
+ if length(zuege)>0 then
+ blockWrite(datei,zuege[0],length(zuege)*sizeof(zuege[0]));
+ inherited speichern(datei);
+end;
+
+procedure tFelderRaetsel.laden(var datei: file);
+var
+ s: string[2];
+ b: byte;
+ i: longint;
+begin
+ s:=#0#0;
+ b:=0;
+ i:=0;
+ blockRead(datei,s,2);
+ assert(s='Fe','Die zu lesende Datei ist kein Felder-Rätsel!');
+ blockRead(datei,b,1);
+ assert(b<=1,'Syntaxfehler in Datei!');
+ diagonalenCB.checked:=odd(b);
+ blockRead(datei,b,1);
+ assert(b<=1,'Syntaxfehler in Datei!');
+ sudokuCB.enabled:=odd(b);
+ blockRead(datei,b,1);
+ assert(b<=1,'Syntaxfehler in Datei!');
+ sudokuCB.checked:=odd(b);
+ blockRead(datei,i,sizeOf(i));
+ assert(length(groeszen)=i,'Falsche Anzahl freier Paraemeter in gespeichertem Spiel!');
+ if length(groeszen)>0 then
+ blockRead(datei,groeszen[0],length(groeszen)*sizeof(groeszen[0]));
+ for i:=0 to length(groeszen)-1 do
+ spinEdits[i+1].value:=groeszen[i];
+ blockRead(datei,i,sizeOf(i));
+ setLength(inhalt,i);
+ if length(inhalt)>0 then
+ blockRead(datei,inhalt[0],length(inhalt)*sizeof(inhalt[0]));
+ blockRead(datei,i,sizeOf(i));
+ setLength(rand,i);
+ if length(rand)>0 then
+ blockRead(datei,rand[0],length(rand)*sizeof(rand[0]));
+ blockRead(datei,dim,sizeof(dim));
+ blockRead(datei,nSqrt,sizeof(nSqrt));
+ blockRead(datei,cursorPosition,sizeof(cursorPosition));
+ blockRead(datei,i,sizeOf(i));
+ setLength(feldFarben,i);
+ if length(feldFarben)>0 then
+ blockRead(datei,feldFarben[0],length(feldFarben)*sizeof(feldFarben[0]));
+ blockRead(datei,i,sizeOf(i));
+ setLength(startFeld,i);
+ if length(startFeld)>0 then
+ blockRead(datei,startFeld[0],length(startFeld)*sizeof(startFeld[0]));
+ blockRead(datei,i,sizeOf(i));
+ setLength(zuege,i);
+ if length(zuege)>0 then
+ blockRead(datei,zuege[0],length(zuege)*sizeof(zuege[0]));
+ inherited laden(datei);
+end;
+
+// tHochhausRaetsel und tBuchstabenRaetsel
+
{$DEFINE create}
constructor tHochhausRaetsel.create(aOwner: tForm);
{$DEFINE hochhaus}
@@ -785,5 +948,27 @@ function tBuchstabenRaetsel.anzLoesungen(lPos: integer): integer;
{$UNDEF buchstaben}
{$UNDEF anzLoesungen}
+{$DEFINE speichern}
+procedure tHochhausRaetsel.speichern(var datei: file);
+{$DEFINE hochhaus}
+{$I raetselunit.inc}
+{$UNDEF hochhaus}
+procedure tBuchstabenRaetsel.speichern(var datei: file);
+{$DEFINE buchstaben}
+{$I raetselunit.inc}
+{$UNDEF buchstaben}
+{$UNDEF speichern}
+
+{$DEFINE laden}
+procedure tHochhausRaetsel.laden(var datei: file);
+{$DEFINE hochhaus}
+{$I raetselunit.inc}
+{$UNDEF hochhaus}
+procedure tBuchstabenRaetsel.laden(var datei: file);
+{$DEFINE buchstaben}
+{$I raetselunit.inc}
+{$UNDEF buchstaben}
+{$UNDEF laden}
+
end.