summaryrefslogtreecommitdiff
path: root/raetselunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'raetselunit.pas')
-rw-r--r--raetselunit.pas44
1 files changed, 39 insertions, 5 deletions
diff --git a/raetselunit.pas b/raetselunit.pas
index 34bfef6..4ea8d77 100644
--- a/raetselunit.pas
+++ b/raetselunit.pas
@@ -104,6 +104,7 @@ type
function besitzerBreite: longint; override;
procedure schreibeZentriert(x,y,i: longint);
procedure relativeInhaltsAenderung(diff: longint); dynamic; abstract;
+ function naechsterWert(pos: longint): boolean; dynamic; abstract;
function absoluteInhaltsAenderung(key: word): boolean; dynamic; abstract;
procedure gesamtRaenderErzeugen; dynamic; abstract;
procedure startFelderFestlegen; override;
@@ -612,8 +613,9 @@ end;
procedure tFelderRaetsel.leeren;
var
- p: tLongintArray;
- i,w: longint;
+ p: tLongintArray;
+ i,w: longint;
+ funktioniert: boolean;
begin
p:=permutation(dim*dim);
progressBar1.step:=1;
@@ -628,7 +630,17 @@ begin
continue;
w:=inhalt[p[i]];
inhalt[p[i]]:=-1;
- if anzLoesungen(-1)<>1 then
+ funktioniert:=true;
+ while funktioniert and naechsterWert(p[i]) do begin
+ if inhalt[p[i]]=w then
+ continue;
+ if passt(p[i] mod dim,p[i] div dim) and (anzLoesungen(-1)>0) then
+ funktioniert:=false;
+ end;
+ writeln;
+ if funktioniert then
+ inhalt[p[i]]:=-1
+ else
inhalt[p[i]]:=w;
end;
@@ -638,8 +650,19 @@ begin
application.processMessages;
if rand[p[i]]<0 then continue;
w:=rand[p[i]];
- rand[p[i]]:=-1;
- if anzLoesungen(-1)<>1 then
+ rand[p[i]]:=0;
+ funktioniert:=true;
+ while funktioniert and (rand[p[i]]<dim) do begin
+ inc(rand[p[i]]);
+ if rand[p[i]]=w then
+ continue;
+ if anzLoesungen(-1)>0 then
+ funktioniert:=false;
+ end;
+ writeln;
+ if funktioniert then
+ rand[p[i]]:=-1
+ else
rand[p[i]]:=w;
end;
progressBar1.visible:=false;
@@ -1058,6 +1081,17 @@ procedure tBuchstabenRaetsel.relativeInhaltsAenderung(diff: integer);
{$UNDEF buchstaben}
{$UNDEF relativeInhaltsAenderung}
+{$DEFINE naechsterWert}
+function tHochhausRaetsel.naechsterWert(pos: longint): boolean;
+{$DEFINE hochhaus}
+{$I raetselunit.inc}
+{$UNDEF hochhaus}
+function tBuchstabenRaetsel.naechsterWert(pos: longint): boolean;
+{$DEFINE buchstaben}
+{$I raetselunit.inc}
+{$UNDEF buchstaben}
+{$UNDEF naechsterWert}
+
{$DEFINE absoluteInhaltsAenderung}
function tHochhausRaetsel.absoluteInhaltsAenderung(key: word): boolean;
{$DEFINE hochhaus}