summaryrefslogtreecommitdiff
path: root/raetselunit.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-10-01 20:55:17 +0200
committerErich Eckner <git@eckner.net>2018-10-01 20:55:17 +0200
commitabf4bca5cdbce43df9813dacbb019b5a84500d3d (patch)
tree2ec277d3cef31cab1a45a3d94cee8aa8919fe160 /raetselunit.pas
parent73c655065d36eb03f79f7e9b05754cbd498f7ae8 (diff)
downloadRaetsel-abf4bca5cdbce43df9813dacbb019b5a84500d3d.tar.xz
Rückgängig gangbar
Diffstat (limited to 'raetselunit.pas')
-rw-r--r--raetselunit.pas45
1 files changed, 42 insertions, 3 deletions
diff --git a/raetselunit.pas b/raetselunit.pas
index 4615ddd..c43d0f0 100644
--- a/raetselunit.pas
+++ b/raetselunit.pas
@@ -4,7 +4,9 @@ unit raetselunit;
interface
-// TODO: Rückgängig
+// TODO: Speichern/Laden
+
+// TODO: Spielnummernzufall
// TODO: Cross-Compilieren
@@ -24,6 +26,14 @@ type
function width: longint;
end;
+ tZug = record
+ Position: integer;
+ Vorher: integer;
+ vorherFarbe,
+ nachherFarbe,
+ vorherMalFarbe: TColor;
+ end;
+
tRaetsel = class
private
besitzer: tForm;
@@ -69,6 +79,7 @@ type
uebersetze: tAlphabetFunktion;
FeldFarben: array of tColor;
startfeld: array of boolean;
+ zuege: array of tZug;
procedure anzSEsOnChange(sender: tObject);
procedure onKeyDown(sender: tObject; var key: word; shiftState: tShiftState); override;
procedure onMouseDown(sender: tObject; button: tMouseButton; shiftState: tShiftState; x,y: longint); override;
@@ -83,6 +94,7 @@ type
function absoluteInhaltsAenderung(key: word): boolean; dynamic; abstract;
procedure gesamtRaenderErzeugen; dynamic; abstract;
procedure startfelderfestlegen; override;
+ procedure alsZugSpeichern;
public
constructor create(aOwner: tForm; anzInhTypen: longint; alphabetFunktion: tAlphabetFunktion);
destructor destroy; override;
@@ -273,8 +285,6 @@ begin
end;
procedure tRaetsel.erzeugeOnClick(sender: tObject);
-var
- i: longint;
begin
loeschen;
loesen(-1);
@@ -370,6 +380,19 @@ end;
procedure tFelderRaetsel.onKeyDown(sender: tObject; var key: word; shiftState: tShiftState);
begin
+ if ssCtrl in shiftState then begin
+ if (Key=ord('Z')) and (length(Zuege)>0) then begin
+ cursorPosition:=Zuege[length(Zuege)-1].Position;
+ inhalt[cursorPosition]:=Zuege[length(Zuege)-1].Vorher;
+ FeldFarben[cursorPosition]:=Zuege[length(Zuege)-1].VorherFarbe;
+ aktuelleFarbe:=Zuege[length(Zuege)-1].VorherMalFarbe;
+ setlength(Zuege,length(Zuege)-1);
+ farbWahlFlaecheBemalen;
+ end;
+ Zeichnen;
+ exit;
+ end;
+
if not absoluteInhaltsAenderung(key) then
case key of
VK_DOWN:
@@ -440,6 +463,8 @@ procedure tFelderRaetsel.loeschen;
var
i: longint;
begin
+ aktuelleFarbe:=$000000;
+ setlength(zuege,0);
for i:=0 to length(inhalt)-1 do begin
inhalt[i]:=-1;
startFeld[i]:=true;
@@ -447,6 +472,7 @@ begin
end;
for i:=0 to length(rand)-1 do
rand[i]:=-1;
+ farbWahlFlaecheBemalen;
end;
procedure tFelderRaetsel.leeren;
@@ -624,6 +650,19 @@ begin
startfeld[i]:=inhalt[i]>=0;
end;
+procedure tFelderRaetsel.alsZugSpeichern;
+begin
+ setLength(zuege,length(zuege)+1);
+ zuege[length(zuege)-1].position:=cursorPosition;
+ zuege[length(zuege)-1].vorher:=inhalt[cursorPosition];
+ zuege[length(zuege)-1].vorherFarbe:=feldFarben[cursorPosition];
+ zuege[length(zuege)-1].nachherFarbe:=aktuelleFarbe;
+ if length(zuege)=1 then
+ zuege[length(zuege)-1].vorherMalFarbe:=$000000
+ else
+ zuege[length(zuege)-1].vorherMalFarbe:=zuege[length(zuege)-2].nachherFarbe;
+end;
+
{$DEFINE create}
constructor tHochhausRaetsel.create(aOwner: tForm);
{$DEFINE hochhaus}