diff options
-rw-r--r-- | raetsel.lps | 110 | ||||
-rw-r--r-- | raetselunit.inc | 35 | ||||
-rw-r--r-- | raetselunit.pas | 197 |
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. |