summaryrefslogtreecommitdiff
path: root/buchstabenunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'buchstabenunit.pas')
-rw-r--r--buchstabenunit.pas108
1 files changed, 108 insertions, 0 deletions
diff --git a/buchstabenunit.pas b/buchstabenunit.pas
new file mode 100644
index 0000000..718a70d
--- /dev/null
+++ b/buchstabenunit.pas
@@ -0,0 +1,108 @@
+unit buchstabenunit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, raetselunit, Forms;
+
+type
+ tBuchstabenRaetsel = class(tFelderRaetsel)
+ private
+ procedure relativeInhaltsAenderung(diff: longint); override;
+ function absoluteInhaltsAenderung(key: word): boolean; override;
+ public
+ constructor create(aOwner: tForm);
+ destructor destroy; override;
+ function _loesen(lm: tFelderLoesMeta): longint; override;
+ end;
+
+function buchstabenAlphabetFunktion(i: longint): string;
+
+implementation
+
+uses
+ math;
+
+function buchstabenAlphabetFunktion(i: longint): string;
+begin
+ if i<0 then
+ result:=''
+ else if i=0 then
+ result:='-'
+ else begin
+ result:='';
+ while i>0 do begin
+ dec(i);
+ result:=char(ord('A')+(i mod 26))+result;
+ i:=i div 26;
+ end;
+ end;
+end;
+
+// tBuchstabenRaetsel **********************************************************
+
+constructor tBuchstabenRaetsel.create(aOwner: tForm);
+begin
+ inherited create(aOwner,2,@buchstabenAlphabetFunktion);
+ spinEdits[1].showHint:=true;
+ spinEdits[1].hint:='Anzahl Buchstaben';
+ spinEdits[1].value:=5;
+ spinEdits[2].showHint:=true;
+ spinEdits[2].hint:='Anzahl Leerfelder';
+ spinEdits[2].value:=1;
+ aktualisiereGroesze;
+end;
+
+destructor tBuchstabenRaetsel.destroy;
+begin
+ inherited destroy;
+end;
+
+procedure tBuchstabenRaetsel.relativeInhaltsAenderung(diff: longint);
+begin
+ if (cursorPosition<0) or (cursorPosition>=dim*dim) then exit;
+ inhalt[cursorPosition]:=min(max(-1,inhalt[cursorPosition]+diff),groeszen[0]);
+end;
+
+function tBuchstabenRaetsel.absoluteInhaltsAenderung(key: word): boolean;
+begin
+ result:=true;
+ if (key>=ord('A')) and (key<=min(ord('A')+groeszen[0]-1,ord('Z'))) then begin
+ inhalt[cursorPosition]:=key-ord('A')+1;
+ exit;
+ end;
+ if (key=ord(' ')) or (key=46) or (key=8) then begin
+ inhalt[cursorPosition]:=-1;
+ exit;
+ end;
+ if (key=189) then begin
+ inhalt[cursorPosition]:=0;
+ exit;
+ end;
+ result:=false;
+end;
+
+function tBuchstabenRaetsel._loesen(lm: tFelderLoesMeta): longint;
+begin
+ if not lm.fwd then begin
+ result:=1;
+ exit;
+ end;
+ if inhalt[lm.posi]>=0 then begin
+ result:=_loesen(lm);
+ exit;
+ end;
+
+ result:=0;
+ //for
+
+ if not lm.inhaltBehalten then begin
+ inhalt[lm.posi]:=-1;
+ lm.aktualisiereInhalt(lm.posi);
+ end;
+end;
+
+end.
+