summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-10-01 22:12:57 +0200
committerErich Eckner <git@eckner.net>2018-10-01 22:12:57 +0200
commitf6e4306d5b6faa060b89e46f3a79636270b49359 (patch)
treea1d8a5eca6a348eb0a21592a35d60f9a0e883a67
parentabf4bca5cdbce43df9813dacbb019b5a84500d3d (diff)
downloadRaetsel-f6e4306d5b6faa060b89e46f3a79636270b49359.tar.xz
speichern und laden
-rw-r--r--raetsel.lps110
-rw-r--r--raetselunit.inc35
-rw-r--r--raetselunit.pas197
3 files changed, 280 insertions, 62 deletions
diff --git a/raetsel.lps b/raetsel.lps
index f45239f..ea83dbf 100644
--- a/raetsel.lps
+++ b/raetsel.lps
@@ -9,7 +9,7 @@
<IsPartOfProject Value="True"/>
<EditorIndex Value="2"/>
<CursorPos X="35" Y="10"/>
- <UsageCount Value="55"/>
+ <UsageCount Value="56"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@@ -20,9 +20,8 @@
<ResourceBaseClass Value="Form"/>
<TopLine Value="28"/>
<CursorPos Y="52"/>
- <UsageCount Value="55"/>
+ <UsageCount Value="56"/>
<Loaded Value="True"/>
- <LoadedDesigner Value="True"/>
</Unit1>
<Unit2>
<Filename Value="unit2.pas"/>
@@ -33,24 +32,25 @@
<UnitName Value="Unit2"/>
<EditorIndex Value="-1"/>
<CursorPos Y="17"/>
- <UsageCount Value="54"/>
+ <UsageCount Value="55"/>
</Unit2>
<Unit3>
<Filename Value="raetselunit.pas"/>
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
- <CursorPos Y="7"/>
- <UsageCount Value="49"/>
+ <TopLine Value="795"/>
+ <CursorPos Y="825"/>
+ <UsageCount Value="50"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="raetselunit.inc"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="3"/>
- <TopLine Value="704"/>
- <CursorPos X="46" Y="725"/>
- <UsageCount Value="35"/>
+ <TopLine Value="785"/>
+ <CursorPos Y="807"/>
+ <UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
@@ -90,7 +90,7 @@
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
<EditorIndex Value="4"/>
- <TopLine Value="2341"/>
+ <TopLine Value="2283"/>
<CursorPos X="13" Y="2380"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
@@ -126,124 +126,122 @@
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="98" Column="16" TopLine="63"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="799" TopLine="760"/>
</Position1>
<Position2>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="405" Column="13" TopLine="370"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="819" Column="65" TopLine="780"/>
</Position2>
<Position3>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="690" Column="17" TopLine="654"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="345" Column="24" TopLine="307"/>
</Position3>
<Position4>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="712" Column="56" TopLine="676"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="372" Column="41" TopLine="346"/>
</Position4>
<Position5>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="715" Column="17" TopLine="680"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="738" Column="47" TopLine="711"/>
</Position5>
<Position6>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="730" Column="56" TopLine="695"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="21" Column="15"/>
</Position6>
<Position7>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="749" Column="60" TopLine="714"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="738" Column="47" TopLine="711"/>
</Position7>
<Position8>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="752" Column="21" TopLine="717"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="869" TopLine="838"/>
</Position8>
<Position9>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="765" Column="61" TopLine="730"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="888" Column="14" TopLine="825"/>
</Position9>
<Position10>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="768" Column="22" TopLine="733"/>
+ <Filename Value="raetselunit.pas"/>
</Position10>
<Position11>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="779" Column="61" TopLine="744"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="89" TopLine="81"/>
</Position11>
<Position12>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="782" Column="22" TopLine="747"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="735" TopLine="716"/>
</Position12>
<Position13>
- <Filename Value="ori_Unit1.pas"/>
- <Caret Line="1869" Column="13" TopLine="1833"/>
+ <Filename Value="raetselunit.pas"/>
</Position13>
<Position14>
<Filename Value="raetselunit.pas"/>
- <Caret Line="391" TopLine="370"/>
+ <Caret Line="89" TopLine="47"/>
</Position14>
<Position15>
- <Filename Value="raetselunit.inc"/>
- <Caret Line="703" Column="41" TopLine="698"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="756" Column="66" TopLine="722"/>
</Position15>
<Position16>
- <Filename Value="raetselunit.inc"/>
- <Caret Line="11" Column="39"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="734" Column="8" TopLine="718"/>
</Position16>
<Position17>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="391" TopLine="355"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="816" Column="11" TopLine="785"/>
</Position17>
<Position18>
<Filename Value="raetselunit.pas"/>
- <Caret Line="661" TopLine="640"/>
+ <Caret Line="369" Column="19" TopLine="349"/>
</Position18>
<Position19>
<Filename Value="raetselunit.pas"/>
- <Caret Line="49" Column="24" TopLine="27"/>
+ <Caret Line="47" TopLine="40"/>
</Position19>
<Position20>
<Filename Value="raetselunit.pas"/>
- <Caret Line="85" Column="24" TopLine="49"/>
+ <Caret Line="202" Column="47" TopLine="186"/>
</Position20>
<Position21>
<Filename Value="raetselunit.pas"/>
- <Caret Line="212" Column="35" TopLine="177"/>
+ <Caret Line="7"/>
</Position21>
<Position22>
<Filename Value="raetselunit.pas"/>
- <Caret Line="325" Column="39" TopLine="290"/>
+ <Caret Line="67" Column="20" TopLine="31"/>
</Position22>
<Position23>
<Filename Value="raetselunit.pas"/>
- <Caret Line="339" Column="33" TopLine="304"/>
+ <Caret Line="103" Column="20" TopLine="67"/>
</Position23>
<Position24>
<Filename Value="raetselunit.pas"/>
- <Caret Line="351" Column="37" TopLine="317"/>
+ <Caret Line="230" Column="27" TopLine="195"/>
</Position24>
<Position25>
<Filename Value="raetselunit.pas"/>
- <Caret Line="357" Column="33" TopLine="323"/>
+ <Caret Line="349" Column="14" TopLine="311"/>
</Position25>
<Position26>
<Filename Value="raetselunit.pas"/>
- <Caret Line="382" Column="35" TopLine="369"/>
+ <Caret Line="67" Column="20" TopLine="47"/>
</Position26>
<Position27>
<Filename Value="raetselunit.pas"/>
- <Caret Line="389" Column="59" TopLine="368"/>
+ <Caret Line="103" Column="20" TopLine="67"/>
</Position27>
<Position28>
<Filename Value="raetselunit.pas"/>
- <Caret Line="660" Column="56" TopLine="625"/>
+ <Caret Line="230" Column="27" TopLine="195"/>
</Position28>
<Position29>
<Filename Value="raetselunit.pas"/>
- <Caret Line="35" Column="12" TopLine="12"/>
+ <Caret Line="346" Column="10" TopLine="311"/>
</Position29>
<Position30>
<Filename Value="raetselunit.pas"/>
- <Caret Line="655" Column="42" TopLine="640"/>
+ <Caret Line="373" Column="25" TopLine="339"/>
</Position30>
</JumpHistory>
</ProjectSession>
diff --git a/raetselunit.inc b/raetselunit.inc
index b0d85d1..e319ea1 100644
--- a/raetselunit.inc
+++ b/raetselunit.inc
@@ -17,6 +17,8 @@ type
procedure randErzeugen; override;
function loesen(lPos: integer): boolean; override;
function anzLoesungen(lPos: integer): integer; override;
+ procedure speichern(var datei: file); override;
+ procedure laden(var datei: file); override;
public
constructor create(aOwner: tForm);
destructor destroy; override;
@@ -791,3 +793,36 @@ begin
result:=1;
end;
{$ENDIF}
+
+{$IFDEF speichern}
+// procedure tHochhausRaetsel.speichern(var datei: file);
+begin
+ {$IFDEF hochhaus}
+ blockWrite(datei,'Ho',2);
+ {$ENDIF}
+ {$IFDEF buchstaben}
+ blockWrite(datei,'Bu',2);
+ {$ENDIF}
+ inherited speichern(datei);
+end;
+{$ENDIF}
+
+{$IFDEF laden}
+// procedure tHochhausRaetsel.laden(var datei: file);
+var
+ s: string[2];
+begin
+ s:=#0#0;
+ blockRead(datei,s[1],2);
+ {$IFDEF hochhaus}
+ assert(s='Ho','Die zu ladende Datei ist kein Hochhausrätsel!');
+ uebersetze:=@zahlenAlphabetFunktion;
+ {$ENDIF}
+ {$IFDEF buchstaben}
+ assert(s='Bu','Die zu ladende Datei ist kein Buchstabenrätsel!');
+ uebersetze:=@buchstabenAlphabetFunktion;
+ {$ENDIF}
+ inherited laden(datei);
+end;
+{$ENDIF}
+
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.