diff options
Diffstat (limited to 'raetselunit.inc')
-rw-r--r-- | raetselunit.inc | 67 |
1 files changed, 28 insertions, 39 deletions
diff --git a/raetselunit.inc b/raetselunit.inc index 90315bf..025d68a 100644 --- a/raetselunit.inc +++ b/raetselunit.inc @@ -89,50 +89,39 @@ end; {$IFDEF passt} // function tHochhausRaetsel.passt(spalte,zeile: integer): boolean; var - i,KZ,KS: integer; - w,s,k: longint; + i: integer; + w,s,k: longint; + kachel: longint; begin w:=0; s:=0; k:=0; - if sudokuCB.checked then begin - KZ:=(zeile div nSqrt)*nSqrt; - KS:=(spalte div nSqrt)*nSqrt; - for i:=0 to dim-1 do begin - {$IFDEF buchstaben} - w:=w*(groeszen[0]+2)+inhalt[zeile*dim+i]+1; - s:=s*(groeszen[0]+2)+inhalt[i*dim+spalte]+1; - k:=k*(groeszen[0]+2)+inhalt[(KZ+(i div nSqrt))*dim+KS+(i mod nSqrt)]+1; - {$ENDIF} - {$IFDEF hochhaus} - w:=w*(dim+1)+max(0,inhalt[zeile*dim+i]); - s:=s*(dim+1)+max(0,inhalt[i*dim+spalte]); - k:=k*(dim+1)+max(0,inhalt[(KZ+(i div nSqrt))*dim+KS+(i mod nSqrt)]); - {$ENDIF} - end; - result:= - AMoeglich[k*(groeszen[0]+1)] and - EMoeglich[s*(groeszen[0]+1)+max(0,rand[spalte])] and - AMoeglich[w*(groeszen[0]+1)+max(0,rand[dim+zeile])] and - AMoeglich[s*(groeszen[0]+1)+max(0,rand[2*dim+spalte])] and - EMoeglich[w*(groeszen[0]+1)+max(0,rand[3*dim+zeile])]; - end - else begin + for i:=0 to dim-1 do begin + {$IFDEF buchstaben} + w:=w*(groeszen[0]+2)+inhalt[zeile*dim+i]+1; + s:=s*(groeszen[0]+2)+inhalt[i*dim+spalte]+1; + {$ENDIF} + {$IFDEF hochhaus} + w:=w*(dim+1)+max(0,inhalt[zeile*dim+i]); + s:=s*(dim+1)+max(0,inhalt[i*dim+spalte]); + {$ENDIF} + end; + result:= + EMoeglich[s*(groeszen[0]+1)+max(0,rand[spalte])] and + AMoeglich[w*(groeszen[0]+1)+max(0,rand[dim+zeile])] and + AMoeglich[s*(groeszen[0]+1)+max(0,rand[2*dim+spalte])] and + EMoeglich[w*(groeszen[0]+1)+max(0,rand[3*dim+zeile])]; + if puzzleTeile[0][0]>=0 then begin + kachel:=invPuzzleTeile[zeile*dim+spalte]['x']; for i:=0 to dim-1 do begin {$IFDEF buchstaben} - w:=w*(groeszen[0]+2)+inhalt[zeile*dim+i]+1; - s:=s*(groeszen[0]+2)+inhalt[i*dim+spalte]+1; + k:=k*(groeszen[0]+2)+inhalt[puzzleTeile[kachel][i]]+1; {$ENDIF} {$IFDEF hochhaus} - w:=w*(dim+1)+max(0,inhalt[zeile*dim+i]); - s:=s*(dim+1)+max(0,inhalt[i*dim+spalte]); + k:=k*(dim+1)+max(0,inhalt[puzzleTeile[kachel][i]]); {$ENDIF} end; - result:= - EMoeglich[s*(groeszen[0]+1)+max(0,rand[spalte])] and - AMoeglich[w*(groeszen[0]+1)+max(0,rand[dim+zeile])] and - AMoeglich[s*(groeszen[0]+1)+max(0,rand[2*dim+spalte])] and - EMoeglich[w*(groeszen[0]+1)+max(0,rand[3*dim+zeile])]; + result:=result and AMoeglich[k*(groeszen[0]+1)]; end; if diagonalenCB.checked then begin if zeile=spalte then begin @@ -411,8 +400,9 @@ end; {$IFDEF passtZumZeichnen} // function tHochhausRaetsel.passtZumZeichnen(spalte,zeile: integer): boolean; var - i,KS,KZ: integer; - w,s: longint; + i: integer; + w,s: longint; + kachel: longint; begin result:=false; if (spalte>=0) and (zeile>=0) and (spalte<dim) and (zeile<dim) then begin // im inneren @@ -464,11 +454,10 @@ begin end; end; if sudokuCB.checked then begin - KZ:=(zeile div nSqrt)*nSqrt; - KS:=(spalte div nSqrt)*nSqrt; + kachel:=invPuzzleTeile[zeile*dim+spalte]['x']; s:=w+1; for i:=0 to dim-1 do - if inhalt[(KZ+(i div nSqrt))*dim+KS+(i mod nSqrt)]=inhalt[zeile*dim+spalte] then + if inhalt[puzzleTeile[kachel][i]]=inhalt[zeile*dim+spalte] then dec(s); result:=result and (s>0); end; |