summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-10-02 11:30:30 +0200
committerErich Eckner <git@eckner.net>2018-10-02 11:30:30 +0200
commit8f2e5f01f9dc3a6813bd8431f2c0c9172a83af4d (patch)
tree802bbd42944c0f02130864060bcc024ac8ee0e63
parent871beb116f24545e797602820b10473f67d25eb3 (diff)
downloadRaetsel-8f2e5f01f9dc3a6813bd8431f2c0c9172a83af4d.tar.xz
Style + remove obsolete files
-rw-r--r--RaetselFileUnit.pas274
-rw-r--r--ori_Unit1.pas2384
-rw-r--r--raetsel.lpr8
-rw-r--r--raetsel.lps117
-rw-r--r--raetselFileUnit.pas274
-rw-r--r--raetselunit.inc529
-rw-r--r--raetselunit.pas276
-rw-r--r--unit1.pas16
-rw-r--r--unit2.pas8
9 files changed, 478 insertions, 3408 deletions
diff --git a/RaetselFileUnit.pas b/RaetselFileUnit.pas
deleted file mode 100644
index 1a389ab..0000000
--- a/RaetselFileUnit.pas
+++ /dev/null
@@ -1,274 +0,0 @@
-unit raetselFileUnit;
-
-interface
-
- uses
- dialogs, math;
-
- type
- tWort = record
- w: array of byte;
- bits: integer;
- end;
- tRaetselFile = class
- private
- f: file;
- wacc: boolean;
- inhalt,
- conv: array of byte;
- fPoint: integer;
- wB: array of tWort;
- procedure fFlush;
- procedure initWB;
- procedure concatWs(a,b: integer);
- function bIsAX(a: tWort; b: array of byte): boolean;
- procedure rConvert;
- procedure wConvert;
- public
- kennung: string;
- procedure fAssignFile(fileName: string);
- function fReset: boolean;
- procedure fRewrite;
- procedure fCloseFile;
- procedure fBlockWrite(var data; len: integer);
- function fBlockRead(var data; len: integer): boolean;
- end;
-
-implementation
-
-procedure tRaetselFile.fAssignFile(FileName: string);
-begin
- assignFile(f,fileName);
-end;
-
-function tRaetselFile.fReset: boolean;
-var
- c: cardinal;
- s: string;
-begin
- wacc:=false;
- result:=false;
- c:=0;
- reset(f,1);
- if fileSize(f) < 4 then begin
- fCloseFile;
- exit;
- end;
- blockRead(f,c,4);
- if c<>$26594131 then begin
- fCloseFile;
- exit;
- end;
- setLength(conv,fileSize(f)-4);
- blockRead(f,conv[0],length(conv));
- rConvert;
- if length(inhalt)<length(kennung) then begin
- fCloseFile;
- exit;
- end;
- s:=kennung;
- fBlockRead(s[1],length(s));
- if s<>kennung then begin
- fCloseFile;
- exit;
- end;
- result:=true;
-end;
-
-procedure tRaetselFile.initWB;
-var
- b: byte;
-begin
- setLength(wB,128);
- for b:=0 to 127 do begin
- setLength(wB[b].w,2);
- wB[b].w[0]:=b;
- wB[b].w[1]:=0;
- wB[b].bits:=7;
- end;
-end;
-
-procedure tRaetselFile.concatWs(a,b: integer);
-var
- i: integer;
-begin
- setLength(wB,length(wB)+1); // wB erweitern
- with wB[length(wB)-1] do begin
- bits:=wB[a].bits+wB[b].bits;
- setLength(w,(bits+7) div 8 + 1);
- for i:=0 to length(w)-1 do
- w[i]:=0;
- for i:=0 to length(wB[a].w)-2 do
- w[i]:=wB[a].w[i];
- for i:=0 to length(wB[b].w)-2 do begin
- w[length(wB[a].w)-2+i]:=
- w[length(wB[a].w)-2+i] or
- ($ff and (wB[b].w[i] shl (wB[a].bits mod 8)));
- if length(wB[a].w)-1+i < length(w) then
- w[length(wB[a].w)-1+i]:=
- w[length(wB[a].w)-1+i] or
- (wB[b].w[i] shr (8 - (wB[a].bits mod 8)));
- end;
- end;
-end;
-
-function tRaetselFile.bIsAX(A: tWort; b: array of byte): boolean;
-var
- i: integer;
-begin
- result:=true;
- for i:=0 to (A.bits div 8)-1 do
- result:=result and (A.w[i] = b[i]);
- result:=result and ((A.w[length(A.w)-2] and ($ff shr (8-(A.bits mod 8)))) =
- (b[length(A.w)-2] and ($ff shr (8-(A.bits mod 8)))));
-end;
-
-procedure tRaetselFile.rConvert;
-var
- rP: longint;
- wP,i: integer;
- passt,lp: integer;
- wBuff: byte;
-begin
- initWB;
- setLength(inhalt,0);
- rP:=0;
- wP:=0;
- wBuff:=0;
- lp:=-1;
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=0;
- while rP<((length(conv)-1)*8) do begin
- passt:=0;
- for i:=0 to ceil(ln(length(wB))/ln(2))-1 do begin
- passt:=passt or (byte(odd(conv[rP div 8] shr (rP mod 8))) shl i);
- inc(rP);
- end;
- for i:=0 to wB[passt].bits-1 do begin
- if wP=8 then begin
- setLength(inhalt,length(inhalt)+1);
- inhalt[length(inhalt)-1]:=wBuff;
- wP:=0;
- wBuff:=0;
- end;
- wBuff:=wBuff or (byte(odd((wB[passt].w[i div 8] shr (i mod 8)))) shl wP);
- inc(wP);
- end;
- if lp<>-1 then
- concatWs(lp,passt);
- lp:=passt;
- end;
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=wBuff;
-end;
-
-procedure tRaetselFile.wConvert;
-var
- rP: longint;
- wP,i,j: integer;
- rBuff: array of byte;
- rBBits,passt,lp: integer;
- wBuff: byte;
-begin
- initWB;
- setLength(conv,0);
- rP:=0;
- wP:=0;
- wBuff:=0;
- lp:=-1;
- setLength(inhalt,length(inhalt)+1);
- inhalt[length(inhalt)-1]:=0;
- while rP<((length(inhalt)-1)*8) do begin
- setLength(rBuff,0);
- rBBits:=0;
- passt:=-1;
- for i:=length(wB)-1 downto 0 do
- with wB[i] do begin
- if bits > (8*length(inhalt) - rP) then continue;
- if bits > rBBits then begin // mehr r-buffern
- setLength(rBuff,(bits+7) div 8);
- rBBits:=bits;
- for j:=0 to length(rBuff)-1 do begin
- rBuff[j]:=0;
- if j + rP div 8 < length(inhalt) then
- rBuff[j]:=rBuff[j] or (inhalt[j + rP div 8] shr (rP mod 8));
- if j+1 + rP div 8 < length(inhalt) then
- rBuff[j]:=rBuff[j] or ($ff and (inhalt[(rP div 8) + j+1] shl (8-(rP mod 8))));
- end;
- end;
- if ((passt=-1) or (wB[passt].bits < wB[i].bits)) and
- bIsAX(wB[i],rBuff) then
- passt:=i;
- end;
- if passt=-1 then begin // geht ja gar nicht - geht ja wohl!
- messageDlg('Zu wenig wörter im wörterbuch!',mterror,[mbOk],0);
- exit;
- end;
- rP:=rP+wB[passt].bits;
- for i:=0 to ceil(ln(length(wB))/ln(2))-1 do begin // wB-index speichern
- if wP=8 then begin // w-buffer leeren
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=wBuff;
- wP:=0;
- wBuff:=0;
- end;
- wBuff:=wBuff or byte(odd(passt shr i)) shl wP;
- inc(wP);
- end;
- if lp<>-1 then
- concatWs(lp,passt);
- lp:=passt;
- end;
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=wBuff;
-end;
-
-procedure tRaetselFile.fFlush;
-begin
- wConvert;
- blockWrite(f,conv[0],length(conv));
- setLength(inhalt,0);
-end;
-
-procedure tRaetselFile.fRewrite;
-var
- c: cardinal;
-begin
- wacc:=true;
- rewrite(f,1);
- c:=$26594131;
- blockWrite(f,c,4);
- setLength(inhalt,length(kennung));
- move(kennung[1],inhalt[0],length(kennung));
- fPoint:=length(inhalt);
-end;
-
-procedure tRaetselFile.fCloseFile;
-begin
- if wacc then begin
- fFlush;
- closeFile(f);
- end;
- setLength(inhalt,0);
- fPoint:=0;
-end;
-
-procedure tRaetselFile.fBlockWrite(var data; len: integer);
-begin
- setLength(inhalt,length(inhalt)+len);
- move(data,inhalt[fPoint],len);
- fPoint:=length(inhalt);
-end;
-
-function tRaetselFile.fBlockRead(var data; len: integer): boolean;
-begin
- result:=len<=(length(inhalt)-fPoint);
- if not result then begin
- fCloseFile;
- exit;
- end;
- move(inhalt[fPoint],data,len);
- fPoint:=fPoint+len;
-end;
-
-end.
diff --git a/ori_Unit1.pas b/ori_Unit1.pas
deleted file mode 100644
index b05de6b..0000000
--- a/ori_Unit1.pas
+++ /dev/null
@@ -1,2384 +0,0 @@
-unit Unit1;
-
-interface
-
-//{$DEFINE Buchstabenraetsel} // sonst Hochhausraetsel
-//{$DEFINE debug}
-{$DEFINE loesungsoptimierung}
-{$O+}
-//{$DEFINE keinRandomize}
-//{$DEFINE alternativLoesung}
-{$DEFINE preLoesung}
-//{$DEFINE debugFileExport}
-{$DEFINE datei}
-{$DEFINE Speichermoegl}
-
-uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, Spin, StdCtrls, ExtCtrls, Math,
-{$IFDEF Speichermoegl}
- RaetselFileUnit,
-{$ENDIF}
- ComCtrls, ExtDlgs;
-
-const ProgVers = 0;
-
-type
- TIntArray = array of integer;
- TZug = record
- Position: integer;
- Vorher: integer;
- VorherFarbe,
- VorherMalFarbe: TColor;
- end;
- TButtonWithArrowKeys = class(TButton)
- private
- procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
- end;
- TForm1 = class(TForm)
- procedure SpinEdit1Change(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure Image1DblClick(Sender: TObject);
- procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure Image2MouseMove(Sender: TObject; Shift: TShiftState;
- X, Y: Integer);
- procedure Image2MouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- {$IFDEF Speichermoegl}
- procedure Button4Click(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- {$ENDIF}
- procedure FormKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure FormResize(Sender: TObject);
- private
- { Private-Deklarationen }
- procedure preStart;
- public
- { Public-Deklarationen }
- {$IFDEF Buchstabenraetsel}
- NBuchst,
- NLeer,
- {$ENDIF}
- NGes,NSqrt: integer;
- Rand: array of Integer;
- Feld: array of Integer;
- FeldFarben: array of TColor;
- Startfeld: array of Boolean;
- Position: integer;
- Zuege: array of TZug;
- Button1,
- Button2,
- Button3: TButtonWithArrowKeys;
- Checkbox1,Checkbox2: TCheckbox;
- {$IFDEF Buchstabenraetsel}
- Spinedit2,
- {$ENDIF}
- Spinedit1,
- Spinedit3: TSpinedit;
- {$IFDEF Speichermoegl}
- OpenDialog1: TOpenDialog;
- SaveDialog1: TSaveDialog;
- Button4,Button5: TButtonWithArrowKeys;
- {$ENDIF}
- Progressbar1: TProgressbar;
- Image1,Image2,
- SchreibeImage: TImage;
- Leertaste_aktiviert: TDateTime;
- aktuelleFarbe,
- letzteFarbe: TColor;
- {$IFNDEF Buchstabenraetsel}
- {$IFDEF alternativLoesung}
- Maxima,Minima: array of Byte;
- procedure gesamtRaenderErzeugen;
- {$ENDIF}
- {$ENDIF}
- {$IFDEF preLoesung}
- AMoeglich,EMoeglich: array of Boolean;
- procedure gesamtRaenderErzeugen;
- function passtZumZeichnen(Spalte,Zeile: integer): boolean;
- {$ENDIF}
- procedure Zeichnen;
- procedure schreibe(was: String; Spalte,Zeile: integer);
- function passt(Spalte,Zeile: integer): boolean;
- function Loesen(lPos: integer): boolean;
- function geloest: boolean;
- procedure leeren;
- procedure RandErzeugen;
- function anzLoesungen(lPos: integer): integer;
- procedure WMGetDlgCode(var Msg: TMessage);// message WM_GETDLGCODE;
- procedure Image2Bemalen;
- end;
-
-var
- Form1: TForm1;
-
-const Groesse = 32;
-
-function Permutation(n: integer): TIntArray;
-function farbverlauf(Wo: extended): TColor;
-function RGB2TColor(R,G,B: Extended): TColor;
-function Vers2Str(C: Cardinal): string;
-
-{$IFDEF datei}
-{$IFDEF Buchstabenraetsel}
-const dat_name = 'Buchstabenraetsel.dat';
-{$ELSE}
-const dat_name = 'Hochhausraetsel.dat';
-{$ENDIF}
-{$ENDIF}
-
-{$IFDEF Speichermoegl}
-{$IFDEF Buchstabenraetsel}
-const dat_kennung = 'BuchstRaetsel';
-{$ELSE}
-const dat_kennung = 'HochHRaetsel';
-{$ENDIF}
-const I1_top = 64+24;
-const I2_top = 48+24;
-{$ELSE}
-const I1_top = 64;
-const I2_top = 48;
-{$ENDIF}
-
-implementation
-
-{$R *.dfm}
-
-function Vers2Str(C: Cardinal): string;
-var i: integer;
-begin
- result:='';
- for i:=0 to 3 do
- begin
- result:='.'+inttostr(C and $3)+result;
- C:=C shr 2;
- end;
- delete(result,1,1);
-end;
-
-procedure TButtonWithArrowkeys.WMGetDlgCode(var Msg: TWMGetDLGCODE);// message WM_GETDLGCODE;
-begin
- inherited;
- Msg.Result := Msg.Result or DLGC_WANTARROWS;
-end;
-
-procedure TForm1.WMGetDlgCode(var Msg: TMessage);// message WM_GETDLGCODE;
-begin
- inherited;
- Msg.Result := Msg.Result or DLGC_WANTARROWS;
-end;
-
-procedure TForm1.FormCreate(Sender: TObject);
-{$IFNDEF Debug}
-var F,G: File;
- A: Array of Byte;
-{$ENDIF}
-begin
- SchreibeImage:=TImage.Create(Form1);
- {$IFNDEF Buchstabenraetsel}
- {$IFDEF alternativLoesung}
- Setlength(Maxima,0);
- Setlength(Minima,0);
- {$ENDIF}
- {$ENDIF}
- {$IFNDEF Debug}
- if Uppercase(Extractfilename(application.ExeName))='RAETSEL.EXE' then
- begin
- assignfile(F,application.exename);
- {$IFDEF Buchstabenraetsel}
- assignfile(G,extractfilepath(application.exename)+'Buchstabenraetsel.exe');
- {$ELSE}
- assignfile(G,extractfilepath(application.exename)+'Hochhausraetsel.exe');
- {$ENDIF}
- Filemode:=fmOpenRead;
- Reset(F,1);
- Rewrite(G,1);
- Setlength(A,FileSize(F));
- Blockread(F,A[0],length(A));
- Blockwrite(G,A[0],length(A));
- Closefile(G);
- Closefile(F);
- halt;
- end;
- {$ENDIF}
- Spinedit1:=TSpinedit.create(Form1);
- Spinedit1.Parent:=Form1;
- Spinedit1.Left:=0;
- Spinedit1.Top:=0;
- Spinedit1.Height:=22;
- {$IFDEF Buchstabenraetsel}
- Spinedit1.Hint:='Anzahl Buchstaben';
- {$ELSE}
- Spinedit1.Hint:='Anzahl Zahlen';
- {$ENDIF}
- Spinedit1.MaxValue:=0;
- Spinedit1.MinValue:=0;
- Spinedit1.ShowHint:=true;
- Spinedit1.Value:=5;
- Spinedit1.Width:=57;
- Spinedit1.OnChange:=SpinEdit1Change;
- Spinedit1.OnKeyDown:=FormKeyDown;
- {$IFDEF Buchstabenraetsel}
- Form1.Caption:='Buchstabenrätsel';
- {$ELSE}
- Form1.Caption:='Hochhausrätsel';
- {$ENDIF}
- Spinedit3:=TSpinedit.Create(Form1);
- Spinedit3.Parent:=Form1;
- Spinedit3.Top:=0;
- Spinedit3.Left:=100;
- Spinedit3.MinValue:=0;
- Spinedit3.MaxValue:=99999;
- Spinedit3.MaxLength:=5;
- Spinedit3.Width:=66;
- Spinedit3.ShowHint:=true;
- Spinedit3.Hint:='Spielnummer';
- Spinedit3.OnKeyDown:=FormKeyDown;
- Checkbox1:=TCheckbox.Create(Form1);
- Checkbox1.Parent:=Form1;
- Checkbox1.Caption:='Diagonalen';
- Checkbox1.Height:=17;
- {$IFDEF Buchstabenraetsel}
- Checkbox1.Left:=117;
- {$ELSE}
- Checkbox1.Left:=64;
- {$ENDIF}
- Checkbox1.TabStop:=false;
- Checkbox1.Top:=3;
- Checkbox1.Width:=76;
- Checkbox1.OnKeyDown:=FormKeyDown;
- Checkbox1.OnClick:=SpinEdit1Change;
- Checkbox2:=TCheckbox.Create(Form1);
- Checkbox2.Parent:=Form1;
- Checkbox2.Caption:='Sudoku';
- Checkbox2.Height:=17;
- Checkbox2.Left:=Checkbox1.Left+Checkbox1.Width;
- Checkbox2.TabStop:=false;
- Checkbox2.Top:=3;
- Checkbox2.Width:=61;
- Checkbox2.OnKeyDown:=FormKeyDown;
- Checkbox2.OnClick:=SpinEdit1Change;
- Checkbox2.Enabled:=false;
- {$IFDEF Buchstabenraetsel}
- Spinedit2:=TSpinedit.create(Form1);
- Spinedit2.Parent:=Form1;
- Spinedit2.Height:=22;
- Spinedit2.Hint:='Anzahl Leerzeichen';
- Spinedit2.Left:=56;
- Spinedit2.MaxValue:=0;
- Spinedit2.MinValue:=0;
- Spinedit2.ShowHint:=true;
- Spinedit2.Top:=0;
- Spinedit2.Value:=1;
- Spinedit2.Width:=57;
- Spinedit2.OnChange:=SpinEdit1Change;
- Spinedit2.OnKeyDown:=FormKeyDown;
- {$ENDIF}
- Progressbar1:=TProgressbar.create(Form1);
- Progressbar1.Parent:=Form1;
- Progressbar1.Height:=21;
- Progressbar1.Left:=0;
- Progressbar1.Smooth:=true;
- Progressbar1.Step:=1;
- Progressbar1.Top:=I2_top+1;
- Progressbar1.Visible:=false;
- Progressbar1.Width:=473;
- Image1:=TImage.Create(Form1);
- Image1.Parent:=Form1;
- Image1.Height:=465;
- Image1.Left:=0;
- Image1.Top:=I1_top;
- Image1.Width:=473;
- Image1.OnMouseDown:=Image1MouseDown;
- Image1.OnDblClick:=Image1DblClick;
- Image2:=TImage.Create(Form1);
- Image2.Parent:=Form1;
- Image2.Height:=16;
- Image2.Left:=0;
- Image2.Top:=I2_top;
- Image2.Width:=473;
- Image2.OnMouseDown:=Image2MouseDown;
- Image2.OnMouseMove:=Image2MouseMove;
- Image2.OnMouseUp:=Image2MouseUp;
- Image2Bemalen;
-
- Leertaste_aktiviert:=-1;
- Button1:=TButtonWithArrowKeys.create(Form1);
- Button1.Caption:='Start!';
- Button1.Height:=25;
- Button1.Width:=49;
- Button1.Left:=0;
- Button1.Top:=23;
- Button1.TabOrder:=3;
- Button1.OnClick:=Button1Click;
- Button1.OnKeyDown:=Form1.OnKeyDown;
- Button1.OnKeyUp:=Form1.OnKeyUp;
- Button1.Parent:=Form1;
- Button2:=TButtonWithArrowKeys.create(Form1);
- Button2.Enabled:=False;
- Button2.Caption:='Feldgröße ändern!';
- Button2.Height:=25;
- Button2.Width:=109;
- Button2.Left:=48;
- Button2.Top:=23;
- Button2.TabOrder:=3;
- Button2.OnClick:=Button2Click;
- Button2.OnKeyDown:=Form1.OnKeyDown;
- Button2.OnKeyUp:=Form1.OnKeyUp;
- Button2.Parent:=Form1;
- Button3:=TButtonWithArrowKeys.create(Form1);
- Button3.Enabled:=False;
- Button3.Caption:='Neu starten!';
- Button3.Height:=25;
- Button3.Width:=79;
- Button3.Left:=156;
- Button3.Top:=23;
- Button3.TabOrder:=3;
- Button3.OnClick:=Button3Click;
- Button3.OnKeyDown:=Form1.OnKeyDown;
- Button3.OnKeyUp:=Form1.OnKeyUp;
- Button3.Parent:=Form1;
-
- {$IFDEF Speichermoegl}
- Button4:=TButtonWithArrowKeys.create(Form1);
- Button4.Enabled:=False;
- Button4.Caption:='Speichern!';
- Button4.Height:=25;
- Button4.Width:=79;
- Button4.Left:=0;
- Button4.Top:=47;
- Button4.TabOrder:=3;
- Button4.OnClick:=Button4Click;
- Button4.OnKeyDown:=Form1.OnKeyDown;
- Button4.OnKeyUp:=Form1.OnKeyUp;
- Button4.Parent:=Form1;
- Button5:=TButtonWithArrowKeys.create(Form1);
- Button5.Enabled:=True;
- Button5.Caption:='Laden!';
- Button5.Height:=25;
- Button5.Width:=79;
- Button5.Left:=78;
- Button5.Top:=47;
- Button5.TabOrder:=3;
- Button5.OnClick:=Button5Click;
- Button5.OnKeyDown:=Form1.OnKeyDown;
- Button5.OnKeyUp:=Form1.OnKeyUp;
- Button5.Parent:=Form1;
- OpenDialog1:=TOpenDialog.Create(Form1);
- OpenDialog1.InitialDir:=extractfilepath(application.exename);
- {$IFDEF Buchstabenraetsel}
- OpenDialog1.Filter:='Buchstabenraetsel (*.bsr)|*.bsr';
- {$ELSE}
- OpenDialog1.Filter:='Hochhausraetsel (*.hhr)|*.hhr';
- {$ENDIF}
- SaveDialog1:=TSaveDialog.Create(Form1);
- SaveDialog1.InitialDir:=extractfilepath(application.exename);
- SaveDialog1.Filter:=OpenDialog1.Filter;
- {$ENDIF}
-
- setlength(Zuege,0);
- setlength(Rand,0);
- setlength(Feld,0);
- setlength(FeldFarben,0);
- setlength(Startfeld,0);
- {$IFDEF Buchstabenraetsel}
- NBuchst:=5;
- NLeer:=1;
- {$ENDIF}
- NGes:=5;
- NSqrt:=2;
- Position:=0;
- {$IFNDEF keinRandomize}
- randomize;
- {$ENDIF}
- aktuelleFarbe:=$000000;
- letzteFarbe:=$000000;
-
- {$IFDEF preLoesung}
- gesamtRaenderErzeugen;
- {$ENDIF}
- Spinedit3.Value:=random(Spinedit3.MaxValue+1);
- Spinedit1.OnChange(Form1);
- if (Paramcount>0) and fileexists(Paramstr(1)) then
- begin
- OpenDialog1.Tag:=1;
- OpenDialog1.FileName:=Paramstr(1);
- Button5Click(Sender);
- end;
-end;
-
-procedure TForm1.FormDestroy(Sender: TObject);
-begin
- SchreibeImage.Free;
- Button1.Free;
- Button2.Free;
- Button3.Free;
- {$IFDEF Speichermoegl}
- Button4.Free;
- Button5.Free;
- OpenDialog1.Free;
- SaveDialog1.Free;
- {$ENDIF}
- {$IFDEF Buchstabenraetsel}
- Spinedit1.Free;
- Spinedit2.Free;
- {$ENDIF}
- Checkbox1.Free;
- Checkbox2.Free;
- Progressbar1.Free;
- Image1.Free;
- setlength(Zuege,0);
- setlength(Feld,0);
- setlength(FeldFarben,0);
- setlength(Startfeld,0);
- setlength(Rand,0);
-end;
-
-procedure TForm1.SpinEdit1Change(Sender: TObject);
-var I: Integer;
-begin
- if (Spinedit1.Value = 0)
- {$IFDEF Buchstabenraetsel}
- and (Spinedit2.Value = 0)
- {$ENDIF}
- then exit;
- {$IFDEF Buchstabenraetsel}
- NBuchst:=Abs(Spinedit1.Value);
- NLeer:=Abs(Spinedit2.Value);
- NGes:=NBuchst+NLeer;
- {$ELSE}
- NGes:=Abs(Spinedit1.Value);
- {$ENDIF}
- NSqrt:=round(sqrt(NGes));
- Checkbox2.Enabled:=Sqr(NSqrt)=NGes;
- if (not Checkbox2.Enabled) and Checkbox2.Checked then
- Checkbox2.Checked:=false;
- Position:=0;
-
- setlength(Zuege,0);
- setlength(Rand,4*NGes);
- For I:=0 to length(Rand)-1 do
- Rand[I]:=0;
- setlength(Feld,NGes*NGes);
- setlength(FeldFarben,NGes*NGes);
- setlength(Startfeld,NGes*NGes);
- For I:=0 to length(Feld)-1 do
- begin
- {$IFDEF Buchstabenraetsel}
- Feld[I]:=-1;
- {$ELSE}
- Feld[I]:=0;
- {$ENDIF}
- Feldfarben[I]:=$000000;
- Startfeld[I]:=true;
- end;
-
- Image1.Free;
- Image1:=TImage.Create(Form1);
- Image1.Parent:=Form1;
- Image1.Left:=0;
- Image1.Top:=I1_top;
- Image1.Width:=Groesse*(NGes+2);
- Image1.Height:=Groesse*(NGes+2);
- Image1.OnMouseDown:=Image1MouseDown;
- Image1.OnDblClick:=Image1DblClick;
- Image1.Canvas.Font.Size:=Groesse;
- SchreibeImage.Canvas.Font.Size:=Groesse;
-
- Image2.Free;
- Image2:=TImage.Create(Form1);
- Image2.Parent:=Form1;
- Image2.Height:=16;
- Image2.Left:=0;
- Image2.Top:=I2_top;
- Image2.Width:=Groesse*(NGes+2);
- Image2.OnMouseDown:=Image2MouseDown;
- Image2.OnMouseMove:=Image2MouseMove;
- Image2.OnMouseUp:=Image2MouseUp;
- Image2Bemalen;
-
- {$IFDEF Buchstabenraetsel}
- while Image1.Canvas.TextHeight('A')*2 >= Groesse*3 do
- begin
- Image1.Canvas.Font.Size:=Image1.Canvas.Font.Size-1;
- SchreibeImage.Canvas.Font.Size:=Image1.Canvas.Font.Size;
- end;
- {$ELSE}
- while Image1.Canvas.TextHeight('0')*2 >= Groesse*3 do
- begin
- Image1.Canvas.Font.Size:=Image1.Canvas.Font.Size-1;
- SchreibeImage.Canvas.Font.Size:=Image1.Canvas.Font.Size;
- end;
- {$ENDIF}
- Image1.OnMouseDown:=Image1MouseDown;
- Image1.OnDblClick:=Image1DblClick;
- {$IFDEF Buchstabenraetsel}
- Form1.Width:=Form1.Width-Form1.Clientwidth+
- Max(Image1.Width+Image1.Left,
- Checkbox2.Width+Checkbox2.Left+Spinedit3.Width);
- {$ELSE}
- Form1.Width:=Form1.Width-Form1.Clientwidth+
- Max(Image1.Width+Image1.Left,
- Max(Button3.Width+Button3.Left,
- Checkbox2.Width+Checkbox2.Left+Spinedit3.Width));
- {$ENDIF}
- Form1.Height:=Form1.Height-Form1.Clientheight+
- Max(Image1.Height+Image1.Top,
- Progressbar1.Height+Progressbar1.Top);
- Zeichnen;
-end;
-
-procedure TForm1.Zeichnen;
-var I: Integer;
- FeldGeloest,
- passtHier: Boolean;
-begin
- Image1.Canvas.Rectangle(-1,-1,Image1.Width+2,Image1.Height+2);
-
- FeldGeloest:=Geloest;
-
- if Checkbox1.Checked then
- begin
- Image1.Canvas.Brush.Color:=$E7E7E7;
- For I:=0 to NGes-1 do
- begin
- Image1.Canvas.Rectangle(Groesse*(I+1),Groesse*(I+1),
- Groesse*(I+2)+1,Groesse*(I+2)+1);
- Image1.Canvas.Rectangle(Groesse*(NGes-I),Groesse*(I+1),
- Groesse*(NGes-I+1)+1,Groesse*(I+2)+1);
- end;
- Image1.Canvas.Brush.Color:=$FFFFFF;
- end;
-
- For I:=0 to length(Feld)-1 do
- begin
- {$IFDEF preLoesung}
- passtHier:=passtZumZeichnen(I mod NGes, I div NGes);
- {$ELSE}
- passtHier:=passt(I mod NGes, I div NGes);
- {$ENDIF}
- SchreibeImage.Canvas.Brush.Color:=$FFFFFF - $181818*Byte(Checkbox1.Checked and ((I mod (NGes+1) = 0) or (I mod (NGes-1)=0)));
- SchreibeImage.Canvas.Font.Color:=
- $0000FF*Byte(not passtHier) or
- $007F00*Byte(FeldGeloest) or
- $7F7F7F*Byte(Startfeld[I] and passtHier) or
- Feldfarben[I]*Byte((not FeldGeloest) and (not Startfeld[I]) and passtHier);
- {$IFDEF Buchstabenraetsel}
- case Feld[I] of
- -1: ;
- 0: schreibe('-', I mod NGes, I div NGes);
- else schreibe(char(ord('A')-1+Feld[I]), I mod NGes, I div NGes);
- end{of Case};
- {$ELSE}
- if Feld[I]>0 then
- schreibe(inttostr(Feld[I]), I mod NGes, I div NGes);
- {$ENDIF}
- end;
- SchreibeImage.Canvas.Font.Color:=$9F0000;
- SchreibeImage.Canvas.Brush.Color:=$FFFFFF;
-
- {$IFDEF Buchstabenraetsel}
- For I:=0 to length(Rand) div 4 - 1 do
- begin
- if Rand[I]>0 then
- schreibe(char(ord('A')-1+Rand[I]), I,-1);
- if Rand[I + length(Rand) div 4]>0 then
- schreibe(char(ord('A')-1+Rand[I + length(Rand) div 4]), NGes, I);
- if Rand[I + 2*(length(Rand) div 4)]>0 then
- schreibe(char(ord('A')-1+Rand[I + 2*(length(Rand) div 4)]), I, NGes);
- if Rand[I + 3*(length(Rand) div 4)]>0 then
- schreibe(char(ord('A')-1+Rand[I + 3*(length(Rand) div 4)]), -1, I);
- end;
- {$ELSE}
- For I:=0 to length(Rand) div 4 - 1 do
- begin
- if Rand[I]>0 then
- schreibe(inttostr(Rand[I]), I,-1);
- if Rand[I + length(Rand) div 4]>0 then
- schreibe(inttostr(Rand[I + length(Rand) div 4]), NGes, I);
- if Rand[I + 2*(length(Rand) div 4)]>0 then
- schreibe(inttostr(Rand[I + 2*(length(Rand) div 4)]), I, NGes);
- if Rand[I + 3*(length(Rand) div 4)]>0 then
- schreibe(inttostr(Rand[I + 3*(length(Rand) div 4)]), -1, I);
- end;
- {$ENDIF}
- SchreibeImage.Canvas.Font.Color:=$000000;
-
- For I:=0 to NGes do
- begin
- Image1.Canvas.MoveTo(Groesse*(I+1),Groesse);
- Image1.Canvas.LineTo(Groesse*(I+1),Image1.Height-Groesse+1);
- Image1.Canvas.MoveTo(Groesse,Groesse*(I+1));
- Image1.Canvas.LineTo(Image1.Width-Groesse+1,Groesse*(I+1));
- end;
-
- Image1.Canvas.Pen.Color:=$8080FF;
- Image1.Canvas.Brush.Style:=bsClear;
- Image1.Canvas.Pen.Width:=3;
- Image1.Canvas.Rectangle((Position mod NGes+1)*Groesse,
- (Position div NGes+1)*Groesse,
- (Position mod NGes+2)*Groesse+1,
- (Position div NGes+2)*Groesse+1);
-
- Image1.Canvas.Pen.Color:=$000000;
- Image1.Canvas.Pen.Width:=3;
- Image1.Canvas.Rectangle(Groesse-1,Groesse-1,Groesse*(NGes+1)+2,Groesse*(NGes+1)+2);
- if Checkbox2.Checked then
- for I:=1 to NSqrt-1 do
- begin
- Image1.Canvas.MoveTo((I*NSqrt+1)*Groesse,Groesse);
- Image1.Canvas.LineTo((I*NSqrt+1)*Groesse,Groesse*(NGes+1));
- Image1.Canvas.MoveTo(Groesse,(I*NSqrt+1)*Groesse);
- Image1.Canvas.LineTo(Groesse*(NGes+1),(I*NSqrt+1)*Groesse);
- end;
- Image1.Canvas.Pen.Width:=1;
- Image1.Canvas.Brush.Style:=bsSolid;
-end;
-
-procedure TForm1.schreibe(was: String; Spalte,Zeile: integer);
-var bgcl,fcl: TColor;
- w,h,x,y,fs: longint;
-begin
- if (SchreibeImage.Width<Groesse) or
- (SchreibeImage.Height<Groesse) then
- begin
- bgcl:=SchreibeImage.Canvas.Brush.Color;
- fcl:=SchreibeImage.Canvas.Font.Color;
- fs:=SchreibeImage.Canvas.Font.Size;
- SchreibeImage.Free;
- SchreibeImage:=TImage.Create(Form1);
- SchreibeImage.Width:=Groesse;
- SchreibeImage.Height:=Groesse;
- SchreibeImage.Canvas.Brush.Color:=bgcl;
- SchreibeImage.Canvas.Font.Color:=fcl;
- SchreibeImage.Canvas.Font.Size:=fs;
- end;
- w:=Image1.Canvas.TextWidth(was);
- h:=Image1.Canvas.TextHeight(was);
- x:=Groesse*(Spalte+1);
- y:=Groesse*(Zeile+1);
- SchreibeImage.Canvas.Rectangle(-1,-1,Groesse+1,Groesse+1);
- SchreibeImage.Canvas.TextOut(round(0.5*(Groesse-w+1)),round(0.5*(Groesse-h+1)),was);
- Image1.Canvas.CopyRect(
- Rect(x,y,x+Groesse-1,y+Groesse-1),
- SchreibeImage.Canvas,
- Rect(0,0,Groesse-1,Groesse-1));
-end;
-
-procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
-begin
- if Spinedit1.Enabled then exit;
- if ssCtrl in Shift then
- begin
- if (Key=ord('Z')) and (length(Zuege)>0) then
- begin
- Position:=Zuege[length(Zuege)-1].Position;
- Feld[Position]:=Zuege[length(Zuege)-1].Vorher;
- FeldFarben[Position]:=Zuege[length(Zuege)-1].VorherFarbe;
- aktuelleFarbe:=Zuege[length(Zuege)-1].VorherMalFarbe;
- letzteFarbe:=aktuelleFarbe;
- setlength(Zuege,length(Zuege)-1);
- Image2bemalen;
- end;
- Zeichnen;
- exit;
- end;
- case Key of
- 37: Position:=Position-1 + Byte(Position mod NGes = 0);
- 38: Position:=Position-NGes + NGes*Byte(Position div NGes = 0);
- 39: Position:=Position+1 - Byte(Position mod NGes = NGes-1);
- 40: Position:=Position+NGes - NGes*Byte(Position div NGes = NGes-1);
- {$IFDEF Buchstabenraetsel}
- 109,189:
- if (not Startfeld[Position]) and
- ((Feldfarben[Position]<>aktuelleFarbe) or
- (Feld[Position]<>0)) then
- begin
- setlength(Zuege,length(Zuege)+1);
- Zuege[length(Zuege)-1].Position:=Position;
- Zuege[length(Zuege)-1].Vorher:=Feld[Position];
- Zuege[length(Zuege)-1].VorherFarbe:=FeldFarben[Position];
- Zuege[length(Zuege)-1].VorherMalFarbe:=letzteFarbe;
- Feld[Position]:=0;
- Feldfarben[Position]:=aktuelleFarbe;
- letzteFarbe:=aktuelleFarbe;
- end;
- {$ENDIF}
- 8,32,46:
- if (not Startfeld[Position]) and
- {$IFDEF Buchstabenraetsel}
- (Feld[Position]<>-1) then
- {$ELSE}
- (Feld[Position]<>0) then
- {$ENDIF}
- begin
- setlength(Zuege,length(Zuege)+1);
- Zuege[length(Zuege)-1].Position:=Position;
- Zuege[length(Zuege)-1].Vorher:=Feld[Position];
- Zuege[length(Zuege)-1].VorherFarbe:=FeldFarben[Position];
- Zuege[length(Zuege)-1].VorherMalFarbe:=letzteFarbe;
- {$IFDEF Buchstabenraetsel}
- Feld[Position]:=-1;
- {$ELSE}
- Feld[Position]:=0;
- {$ENDIF}
- end;
- else
- if not Startfeld[Position] then
- {$IFDEF Buchstabenraetsel}
- if (ord('A')<=Key) and
- (ord('A')+NBuchst>Key) and
- ((FeldFarben[Position]<>aktuelleFarbe) or
- (Feld[Position]<>Key-ord('A')+1)) then
- begin
- setlength(Zuege,length(Zuege)+1);
- Zuege[length(Zuege)-1].Position:=Position;
- Zuege[length(Zuege)-1].Vorher:=Feld[Position];
- Zuege[length(Zuege)-1].VorherFarbe:=FeldFarben[Position];
- Zuege[length(Zuege)-1].VorherMalFarbe:=LetzteFarbe;
- Feld[Position]:=Key-ord('A')+1;
- FeldFarben[Position]:=aktuelleFarbe;
- letzteFarbe:=aktuelleFarbe;
- end;
- {$ELSE}
- begin
- if (ord('1')<=Key) and
- (ord('1')+NGes>Key) and
- ((FeldFarben[Position]<>aktuelleFarbe) or
- (Feld[Position]<>Key-ord('0'))) then
- begin
- setlength(Zuege,length(Zuege)+1);
- Zuege[length(Zuege)-1].Position:=Position;
- Zuege[length(Zuege)-1].Vorher:=Feld[Position];
- Zuege[length(Zuege)-1].VorherFarbe:=FeldFarben[Position];
- Zuege[length(Zuege)-1].VorherMalFarbe:=LetzteFarbe;
- Feld[Position]:=Key-ord('0');
- FeldFarben[Position]:=aktuelleFarbe;
- letzteFarbe:=aktuelleFarbe;
- end;
- if (97<=Key) and
- (97+NGes>Key) and
- ((FeldFarben[Position]<>aktuelleFarbe) or
- (Feld[Position]<>Key-96)) then
- begin
- setlength(Zuege,length(Zuege)+1);
- Zuege[length(Zuege)-1].Position:=Position;
- Zuege[length(Zuege)-1].Vorher:=Feld[Position];
- Zuege[length(Zuege)-1].VorherFarbe:=FeldFarben[Position];
- Zuege[length(Zuege)-1].VorherMalFarbe:=LetzteFarbe;
- Feld[Position]:=Key-96;
- FeldFarben[Position]:=aktuelleFarbe;
- letzteFarbe:=aktuelleFarbe;
- end;
- end;
- {$ENDIF}
- end{of Case};
- {$IFDEF debug}
- Form1.Caption:=inttostr(Key);
- {$ENDIF}
- zeichnen;
-end;
-
-procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
-begin
- X:=X div Groesse;
- Y:=Y div Groesse;
- if ssCtrl in Shift then
- begin
- if (X>0) and (X<=NGes) and
- (Y>0) and (Y<=NGes) then
- begin
- Position:=(X-1) + (Y-1)*NGes;
- inc(Feld[Position]);
- {$IFDEF Buchstabenraetsel}
- if Feld[Position]>NBuchst then
- Feld[Position]:=-1;
- {$ELSE}
- if Feld[Position]>NGes then
- Feld[Position]:=-1;
- {$ENDIF}
- zeichnen;
- end
- else
- if ((X>0) and (X<=NGes)) or
- ((Y>0) and (Y<=NGes)) then
- begin
- X:=Byte(Y=0)*(X-1) +
- Byte(Y=NGes+1)*(2*NGes+(X-1)) +
- Byte(X=NGes+1)*(NGes+(Y-1)) +
- Byte(X=0)*(3*NGes+(Y-1));
- inc(Rand[X]);
- {$IFDEF Buchstabenraetsel}
- if Rand[X]>NBuchst then
- Rand[X]:=0;
- {$ELSE}
- if Rand[X]>NGes then
- Rand[X]:=0;
- {$ENDIF}
- zeichnen;
- end
- else
- begin
- if (X=0) and (Y=0) then
- begin
- GesamtRaenderErzeugen;
- exit;
- end;
- if (X=0) and (Y<>0) then
- begin
- Form1.Caption:=inttostr(AnzLoesungen(-1));
- exit;
- end;
- if (X<>0) and (Y<>0) then
- begin
- Form1.Caption:=inttostr(Byte(loesen(-1)));
- exit;
- end;
- end;
- end
- else
- if (X>0) and (X<=NGes) and
- (Y>0) and (Y<=NGes) then
- begin
- Position:=(X-1) + (Y-1)*NGes;
- zeichnen;
- end;
-end;
-
-procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
-begin
- if Button<>mbLeft then exit;
- aktuelleFarbe:=Farbverlauf(X/(Image2.Width+1));
- Image2Bemalen;
-end;
-
-procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState;
- X, Y: Integer);
-begin
- if not(ssLeft in Shift) then exit;
- aktuelleFarbe:=Farbverlauf(X/(Image2.Width+1));
- Image2Bemalen;
-end;
-
-procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
-begin
- if Button<>mbLeft then exit;
- aktuelleFarbe:=Farbverlauf(X/(Image2.Width+1));
- Image2Bemalen;
-end;
-
-function TForm1.geloest: boolean;
-var I,J: Integer;
-begin
- Result:=False;
- For I:=0 to NGes-1 do
- For J:=0 to NGes-1 do
- if (not passt(I,J)) or (Feld[I+NGes*J]<0)
- {$IFNDEF Buchstabenraetsel}
- or (Feld[I+NGes*J]=0)
- {$ENDIF}
- then exit;
- Result:=true;
-end;
-
-{$IFDEF preLoesung}
-function TForm1.passt(Spalte,Zeile: integer): boolean;
-var I,KZ,KS: Integer;
- W,S,K: Longint;
-begin
- W:=0;
- S:=0;
- K:=0;
- if Checkbox2.Checked then
- begin
- KZ:=(Zeile div NSqrt)*NSqrt;
- KS:=(Spalte div NSqrt)*NSqrt;
- For I:=0 to NGes-1 do
- begin
- {$IFDEF Buchstabenraetsel}
- W:=W*(NBuchst+2)+Feld[Zeile*NGes+I]+1;
- S:=S*(NBuchst+2)+Feld[I*NGes+Spalte]+1;
- K:=K*(NBuchst+2)+Feld[(KZ+(I div NSqrt))*NGes+KS+(I mod NSqrt)]+1;
- {$ELSE}
- W:=W*(NGes+1)+Feld[Zeile*NGes+I];
- S:=S*(NGes+1)+Feld[I*NGes+Spalte];
- K:=K*(NGes+1)+Feld[(KZ+(I div NSqrt))*NGes+KS+(I mod NSqrt)];
- {$ENDIF}
- end;
- Result:=
- {$IFDEF Buchstabenraetsel}
- AMoeglich[K*(NBuchst+1)] and
- EMoeglich[S*(NBuchst+1)+Rand[Spalte]] and
- AMoeglich[W*(NBuchst+1)+Rand[NGes+Zeile]] and
- AMoeglich[S*(NBuchst+1)+Rand[2*NGes+Spalte]] and
- EMoeglich[W*(NBuchst+1)+Rand[3*NGes+Zeile]];
- {$ELSE}
- AMoeglich[K*(NGes+1)] and
- EMoeglich[S*(NGes+1)+Rand[Spalte]] and
- AMoeglich[W*(NGes+1)+Rand[NGes+Zeile]] and
- AMoeglich[S*(NGes+1)+Rand[2*NGes+Spalte]] and
- EMoeglich[W*(NGes+1)+Rand[3*NGes+Zeile]];
- {$ENDIF}
- end
- else
- begin
- For I:=0 to NGes-1 do
- begin
- {$IFDEF Buchstabenraetsel}
- W:=W*(NBuchst+2)+Feld[Zeile*NGes+I]+1;
- S:=S*(NBuchst+2)+Feld[I*NGes+Spalte]+1;
- {$ELSE}
- W:=W*(NGes+1)+Feld[Zeile*NGes+I];
- S:=S*(NGes+1)+Feld[I*NGes+Spalte];
- {$ENDIF}
- end;
- Result:=
- {$IFDEF Buchstabenraetsel}
- EMoeglich[S*(NBuchst+1)+Rand[Spalte]] and
- AMoeglich[W*(NBuchst+1)+Rand[NGes+Zeile]] and
- AMoeglich[S*(NBuchst+1)+Rand[2*NGes+Spalte]] and
- EMoeglich[W*(NBuchst+1)+Rand[3*NGes+Zeile]];
- {$ELSE}
- EMoeglich[S*(NGes+1)+Rand[Spalte]] and
- AMoeglich[W*(NGes+1)+Rand[NGes+Zeile]] and
- AMoeglich[S*(NGes+1)+Rand[2*NGes+Spalte]] and
- EMoeglich[W*(NGes+1)+Rand[3*NGes+Zeile]];
- {$ENDIF}
- end;
- if checkbox1.checked then
- begin
- if Zeile=Spalte then
- begin
- W:=0;
- {$IFDEF Buchstabenraetsel}
- For I:=0 to NGes-1 do
- W:=W*(NBuchst+2)+Feld[I*(NGes+1)]+1;
- Result:=Result and AMoeglich[W*(NBuchst+1)];
- {$ELSE}
- For I:=0 to NGes-1 do
- W:=W*(NGES+1)+Feld[I*(NGes+1)];
- Result:=Result and AMoeglich[W*(NGes+1)];
- {$ENDIF}
- end;
- if Zeile+Spalte=NGes-1 then
- begin
- W:=0;
- {$IFDEF Buchstabenraetsel}
- For I:=0 to NGes-1 do
- W:=W*(NBuchst+2)+Feld[(I+1)*(NGes-1)]+1;
- Result:=Result and AMoeglich[W*(NBuchst+1)];
- {$ELSE}
- For I:=0 to NGes-1 do
- W:=W*(NGes+1)+Feld[(I+1)*(NGes-1)];
- Result:=Result and AMoeglich[W*(NGes+1)];
- {$ENDIF}
- end;
- end;
-end;
-
-function TForm1.passtZumZeichnen(Spalte,Zeile: integer): boolean;
-var I,KS,KZ: Integer;
- W,S: Longint;
-begin
- {$IFDEF Buchstabenraetsel}
- if Feld[Zeile*NGes+Spalte]=-1 then
- {$ELSE}
- if Feld[Zeile*NGes+Spalte]=0 then
- {$ENDIF}
- begin
- Result:=False;
- Exit;
- end;
- W:=0;
- S:=0;
- For I:=0 to NGes-1 do
- begin
- {$IFDEF Buchstabenraetsel}
- W:=W*(NBuchst+2)+Feld[Zeile*NGes+I]+1;
- S:=S*(NBuchst+2)+Feld[I*NGes+Spalte]+1;
- {$ELSE}
- W:=W*(NGes+1)+Feld[Zeile*NGes+I];
- S:=S*(NGes+1)+Feld[I*NGes+Spalte];
- {$ENDIF}
- end;
- Result:=
- {$IFDEF Buchstabenraetsel}
- (EMoeglich[S*(NBuchst+1)+Rand[Spalte]] or not EMoeglich[S*(NBuchst+1)]) and
- (AMoeglich[W*(NBuchst+1)+Rand[NGes+Zeile]] or not AMoeglich[W*(NBuchst+1)]) and
- (AMoeglich[S*(NBuchst+1)+Rand[2*NGes+Spalte]] or not AMoeglich[S*(NBuchst+1)]) and
- (EMoeglich[W*(NBuchst+1)+Rand[3*NGes+Zeile]] or not EMoeglich[W*(NBuchst+1)]);
- {$ELSE}
- (EMoeglich[S*(NGes+1)+Rand[Spalte]] or not EMoeglich[S*(NGes+1)]) and
- (AMoeglich[W*(NGes+1)+Rand[NGes+Zeile]] or not AMoeglich[W*(NGes+1)]) and
- (AMoeglich[S*(NGes+1)+Rand[2*NGes+Spalte]] or not AMoeglich[S*(NGes+1)]) and
- (EMoeglich[W*(NGes+1)+Rand[3*NGes+Zeile]] or not EMoeglich[W*(NGes+1)]);
- {$ENDIF}
- {$IFDEF Buchstabenraetsel}
- if Feld[Zeile*NGes+Spalte]=0 then W:=NLeer
- else W:=1;
- {$ELSE}
- W:=1;
- {$ENDIF}
- if checkbox1.checked then
- begin
- if Zeile=Spalte then
- begin
- S:=W;
- For I:=0 to NGes-1 do
- if (I<>Zeile) and (Feld[I*(NGes+1)]=Feld[Zeile*NGes+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
- end;
- if Zeile+Spalte=NGes-1 then
- begin
- S:=W;
- For I:=0 to NGes-1 do
- if (I<>Zeile) and (Feld[(I+1)*(NGes-1)]=Feld[Zeile*NGes+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
- end;
- end;
- if checkbox2.checked then
- begin
- KZ:=(Zeile div NSqrt)*NSqrt;
- KS:=(Spalte div NSqrt)*NSqrt;
- S:=W+1;
- For I:=0 to NGes-1 do
- if Feld[(KZ+(I div NSqrt))*NGes+KS+(I mod NSqrt)]=Feld[Zeile*NGes+Spalte] then
- dec(S);
- Result:=Result and (S>0);
- end;
- S:=W;
- For I:=0 to NGes-1 do
- if (I<>Zeile) and (Feld[I*NGes+Spalte]=Feld[Zeile*NGes+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
- S:=W;
- For I:=0 to NGes-1 do
- if (I<>Spalte) and (Feld[Zeile*NGes+I]=Feld[Zeile*NGes+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
-(* {$ELSE}
- For I:=0 to NGes-1 do
- Result:=Result and ((I=Zeile) or (Feld[I*NGes+Spalte]<>Feld[Zeile*NGes+Spalte]));
- For I:=0 to NGes-1 do
- Result:=Result and ((I=Spalte) or (Feld[Zeile*NGes+I]<>Feld[Zeile*NGes+Spalte]));
- {$ENDIF} *)
-end;
-
-{$ELSE}
-
-function TForm1.passt(Spalte,Zeile: integer): boolean;
-{$IFDEF Buchstabenraetsel}
-var I,Z: Integer;
- Frei: Integer;
-begin
- result:=true;
- if Feld[Zeile*NGes+Spalte]=-1 then exit;
- Frei:=1;
- if Feld[Zeile*NGes+Spalte]=0 then Frei:=NLeer;
- Z:=0;
- For I:=0 to NGes-1 do
- if Feld[NGes*Zeile+I]=Feld[Spalte+Zeile*NGes] then inc(Z);
- Result:=Result and (Frei>=Z);
- if not result then exit;
- Z:=0;
- For I:=0 to NGes-1 do
- if Feld[NGes*I+Spalte]=Feld[Spalte+Zeile*NGes] then inc(Z);
- Result:=Result and (Frei>=Z);
- if not result then exit;
- if Checkbox1.checked then
- begin
- if Zeile=Spalte then
- begin
- Z:=0;
- For I:=0 to NGes-1 do
- if Feld[I*(NGes+1)]=Feld[Spalte+Zeile*NGes] then inc(Z);
- Result:=Result and (Frei>=Z);
- if not result then exit;
- end;
- if Zeile+Spalte=NGes-1 then
- begin
- Z:=0;
- For I:=0 to NGes-1 do
- if Feld[(I+1)*(NGes-1)]=Feld[Spalte+Zeile*NGes] then inc(Z);
- Result:=Result and (Frei>=Z);
- if not result then exit;
- end;
- end;
- if Rand[Spalte]>0 then
- For I:=0 to NGes-1 do
- begin
- if (Feld[I*NGes+Spalte]=Rand[Spalte]) or
- (Feld[I*NGes+Spalte]<0) then break;
- if Feld[I*NGes+Spalte]>0 then
- begin
- result:=I<Zeile;
- if result then break
- else exit;
- end;
- end;
- if Rand[2*NGes+Spalte]>0 then
- For I:=NGes-1 downto 0 do
- begin
- if (Feld[I*NGes+Spalte]=Rand[2*NGes+Spalte]) or
- (Feld[I*NGes+Spalte]<0) then break;
- if Feld[I*NGes+Spalte]>0 then
- begin
- result:=I>Zeile;
- if result then break
- else exit;
- end;
- end;
- if Rand[NGes+Zeile]>0 then
- For I:=NGes-1 downto 0 do
- begin
- if (Feld[Zeile*NGes+I]=Rand[NGes+Zeile]) or
- (Feld[Zeile*NGes+I]<0) then break;
- if Feld[Zeile*NGes+I]>0 then
- begin
- result:=I>Spalte;
- if result then break
- else exit;
- end;
- end;
- if Rand[3*NGes+Zeile]>0 then
- For I:=0 to NGes-1 do
- begin
- if (Feld[Zeile*NGes+I]=Rand[3*NGes+Zeile]) or
- (Feld[Zeile*NGes+I]<0) then break;
- if Feld[Zeile*NGes+I]>0 then
- begin
- result:=I<Spalte;
- if result then break
- else exit;
- end;
- end;
-end;
-{$ELSE}
-
-var I: Integer;
-{$IFDEF alternativLoesung}
- J: Longint;
-{$ELSE}
- Za,Zi,Ha,Hi: Integer;
-{$ENDIF}
-begin
- result:=true;
- if Feld[Zeile*NGes+Spalte]=0 then exit;
- For I:=0 to NGes-1 do
- if (I<>Spalte) and (Feld[NGes*Zeile+I]=Feld[Spalte+Zeile*NGes]) then
- begin
- result:=false;
- exit;
- end;
- For I:=0 to NGes-1 do
- if (I<>Zeile) and (Feld[NGes*I+Spalte]=Feld[Spalte+Zeile*NGes]) then
- begin
- result:=false;
- exit;
- end;
- {$IFDEF alternativLoesung}
- if Rand[Spalte]>0 then
- begin
- J:=0;
- For I:=0 to NGes-1 do
- J:=J*(NGes+1)+Feld[I*NGes+Spalte];
- if (Maxima[J]<Rand[Spalte]) or
- (Minima[J]>Rand[Spalte]) then
- begin
- result:=false;
- exit;
- end;
- end;
- if Rand[2*NGes+Spalte]>0 then
- begin
- J:=0;
- For I:=NGes-1 downto 0 do
- J:=J*(NGes+1)+Feld[I*NGes+Spalte];
- if (Maxima[J]<Rand[2*NGes+Spalte]) or
- (Minima[J]>Rand[2*NGes+Spalte]) then
- begin
- result:=false;
- exit;
- end;
- end;
- if Rand[NGes+Zeile]>0 then
- begin
- J:=0;
- For I:=NGes-1 downto 0 do
- J:=J*(NGes+1)+Feld[Zeile*NGes+I];
- if (Maxima[J]<Rand[NGes+Zeile]) or
- (Minima[J]>Rand[NGes+Zeile]) then
- begin
- result:=false;
- exit;
- end;
- end;
- if Rand[3*NGes+Zeile]>0 then
- begin
- J:=0;
- For I:=0 to NGes-1 do
- J:=J*(NGes+1)+Feld[Zeile*NGes+I];
- if (Maxima[J]<Rand[3*NGes+Zeile]) or
- (Minima[J]>Rand[3*NGes+Zeile]) then
- begin
- result:=false;
- exit;
- end;
- end;
- {$ELSE}
- if Rand[Spalte]>0 then
- begin
- Za:=0;
- Zi:=0;
- Ha:=0;
- Hi:=0;
- For I:=0 to NGes-1 do
- begin
- if (Feld[I*NGes+Spalte]=0) and
- (Ha<NGes) then
- begin
- inc(Ha);
- inc(Za);
- end;
- if (Feld[I*NGes+Spalte]=0) and
- (Hi<NGes) then
- begin
- Hi:=NGes;
- inc(Zi);
- end;
- if Feld[I*NGes+Spalte]>Ha then
- begin
- Ha:=Feld[I*NGes+Spalte];
- inc(Za);
- end;
- if Feld[I*NGes+Spalte]>Hi then
- begin
- Hi:=Feld[I*NGes+Spalte];
- inc(Zi);
- end;
- end;
- if (Zi>Rand[Spalte]) or (Za<Rand[Spalte]) then
- begin
- result:=false;
- exit;
- end;
- end;
- if Rand[2*NGes+Spalte]>0 then
- begin
- Za:=0;
- Zi:=0;
- Ha:=0;
- Hi:=0;
- For I:=NGes-1 downto 0 do
- begin
- if (Feld[I*NGes+Spalte]=0) and
- (Ha<NGes) then
- begin
- inc(Ha);
- inc(Za);
- end;
- if (Feld[I*NGes+Spalte]=0) and
- (Hi<NGes) then
- begin
- Hi:=NGes;
- inc(Zi);
- end;
- if Feld[I*NGes+Spalte]>Ha then
- begin
- Ha:=Feld[I*NGes+Spalte];
- inc(Za);
- end;
- if Feld[I*NGes+Spalte]>Hi then
- begin
- Hi:=Feld[I*NGes+Spalte];
- inc(Zi);
- end;
- end;
- if (Zi>Rand[2*NGes+Spalte]) or (Za<Rand[2*NGes+Spalte]) then
- begin
- result:=false;
- exit;
- end;
- end;
- if Rand[NGes+Zeile]>0 then
- begin
- Za:=0;
- Zi:=0;
- Ha:=0;
- Hi:=0;
- For I:=NGes-1 downto 0 do
- begin
- if (Feld[Zeile*NGes+I]=0) and
- (Ha<NGes) then
- begin
- inc(Ha);
- inc(Za);
- end;
- if (Feld[Zeile*NGes+I]=0) and
- (Hi<NGes) then
- begin
- Hi:=NGes;
- inc(Zi);
- end;
- if Feld[Zeile*NGes+I]>Ha then
- begin
- Ha:=Feld[Zeile*NGes+I];
- inc(Za);
- end;
- if Feld[Zeile*NGes+I]>Hi then
- begin
- Hi:=Feld[Zeile*NGes+I];
- inc(Zi);
- end;
- end;
- if (Zi>Rand[NGes+Zeile]) or (Za<Rand[NGes+Zeile]) then
- begin
- result:=false;
- exit;
- end;
- end;
- if Rand[3*NGes+Zeile]>0 then
- begin
- Za:=0;
- Zi:=0;
- Ha:=0;
- Hi:=0;
- For I:=0 to NGes-1 do
- begin
- if (Feld[Zeile*NGes+I]=0) and
- (Ha<NGes) then
- begin
- inc(Ha);
- inc(Za);
- end;
- if (Feld[Zeile*NGes+I]=0) and
- (Hi<NGes) then
- begin
- Hi:=NGes;
- inc(Zi);
- end;
- if Feld[Zeile*NGes+I]>Ha then
- begin
- Ha:=Feld[Zeile*NGes+I];
- inc(Za);
- end;
- if Feld[Zeile*NGes+I]>Hi then
- begin
- Hi:=Feld[Zeile*NGes+I];
- inc(Zi);
- end;
- end;
- if (Zi>Rand[3*NGes+Zeile]) or (Za<Rand[3*NGes+Zeile]) then
- begin
- result:=false;
- exit;
- end;
- end;
- {$ENDIF}
-end;
-{$ENDIF}
-
-{$IFNDEF preLoesung}
-{$IFDEF alternativLoesung}
-procedure TForm1.gesamtRaenderErzeugen;
-var I,J,H,Z,Nullen,L: Integer;
- K,NullStelle: Longint;
- Nums: array of Integer;
- Verwendet: array of Boolean;
- B: Boolean;
-begin
- if length(Maxima) = round(power(NGes+1,NGes)) then exit;
- Setlength(Maxima,round(power(NGes+1,NGes)));
- Setlength(Minima,round(power(NGes+1,NGes)));
- For K:=0 to length(Maxima)-1 do
- begin
- Maxima[K]:=NGes;
- Minima[K]:=1;
- end;
- Setlength(Nums,NGes);
- Setlength(Verwendet,NGes);
- For I:=0 to NGes-1 do
- Nums[I]:=1;
-
- repeat
- B:=True;
- For I:=0 to NGes-1 do
- begin
- B:=B and (Nums[I]<>0);
- For J:=0 to I-1 do
- B:=B and (Nums[I]<>Nums[J]);
- end;
- if B then
- begin
- K:=0;
- H:=0;
- Z:=0;
- For I:=0 to NGes-1 do
- begin
- K:=K*(NGes+1) + Nums[I];
- if Nums[I]>H then
- begin
- H:=Nums[I];
- inc(Z);
- end;
- end;
- Maxima[K]:=Z;
- Minima[K]:=Z;
- end;
-
- I:=0;
- repeat
- B:=true;
- inc(Nums[I]);
- if Nums[I]>NGes then
- begin
- Nums[I]:=1;
- inc(I);
- B:=false;
- end;
- until B or (I>=NGes);
- until (not B) and (I>=NGes);
-
- For Nullen:=1 to NGes do
- begin
- For I:=0 to NGes-1 do
- Nums[I]:=0;
- repeat
- L:=0;
- B:=True;
- For I:=0 to NGes-1 do
- begin
- if Nums[I]=0 then inc(L)
- else
- For J:=0 to I-1 do
- B:=B and (Nums[I]<>Nums[J]);
- end;
-
- if B and (L=Nullen) then
- begin
- K:=0;
- Nullstelle:=0;
- For I:=0 to NGes-1 do
- Verwendet[I]:=false;
- For I:=0 to NGes-1 do
- begin
- K:=K*(NGes+1) + Nums[I];
- Nullstelle:=Nullstelle*(NGes+1);
- if Nums[I] = 0 then Nullstelle:=1
- else Verwendet[Nums[I]-1]:=true;
- end;
- Maxima[K]:=1;
- Minima[K]:=NGes;
- For I:=0 to NGes-1 do
- if not Verwendet[I] then
- begin
- if (K>=length(Maxima)) or (K+Nullstelle*(I+1) >= length(Maxima)) then
- halt;
- Maxima[K]:=max(Maxima[K],Maxima[K+Nullstelle*(I+1)]);
- Minima[K]:=min(Minima[K],Minima[K+Nullstelle*(I+1)]);
- end;
- end;
-
- I:=0;
- repeat
- B:=true;
- inc(Nums[I]);
- if Nums[I]>NGes then
- begin
- Nums[I]:=0;
- inc(I);
- B:=false;
- end;
- until B or (I>=NGes);
- until (not B) and (I>=NGes);
- end;
-end;
-{$ENDIF}
-{$ENDIF}
-{$ENDIF}
-
-{$IFDEF preLoesung}
-procedure TForm1.gesamtRaenderErzeugen;
-var I,J,K,Nullen: Integer;
- {$IFNDEF Buchstabenraetsel}
- AZ,
- {$ENDIF}
- AR: Integer;
- AK,EK,NAK,NEK: Longint;
- Nums: TIntArray;
- B: Boolean;
- Basis,Faktor: Integer;
- Schritt: Longint;
- {$IFDEF debugFileExport}
- F: Textfile;
- S: String;
- {$ENDIF}
- {$IFDEF datei}
- dat: File of Cardinal;
- lw1,lw2,L: Cardinal;
- {$ENDIF}
-function calcNums(I: Longint): TIntArray;
-var J: Integer;
-begin
- Setlength(Result,NGes);
- For J:=0 to NGes-1 do
- begin
- Result[J]:=I mod Basis;
- I:=I div Basis;
- end;
-end;
-
-function calcIndex(Nums: TIntArray): Longint;
-var J: Integer;
-begin
- Result:=0;
- For J:=0 to NGes-1 do
- Result:=Result*Basis + Nums[NGes-J-1];
-end;
-
-function swapIndex(I: Longint): Longint;
-var J: Integer;
-begin
- Result:=0;
- For J:=0 to NGes-1 do
- begin
- Result:=Result*Basis+(I mod Basis);
- I:=I div Basis;
- end;
-end;
-
-begin
- {$IFDEF Buchstabenraetsel}
- Basis:=NBuchst+2;
- Faktor:=NBuchst+1;
- {$ELSE}
- Basis:=NGes+1;
- Faktor:=NGes+1;
- {$ENDIF}
- AK:=round(power(Basis,NGes)*Faktor);
-
- if (length(AMoeglich) = AK) and
- (length(EMoeglich) = AK) then exit;
-
- {$IFDEF datei}
- if fileexists(extractfilepath(application.exename)+dat_name) then
- begin
- assignfile(dat,extractfilepath(application.exename)+dat_name);
- reset(dat);
- while not eof(dat) do
- begin
- read(dat,lw1);
- if lw1=AK then
- begin
- Setlength(AMoeglich,AK);
- Setlength(EMoeglich,AK);
- For L:=0 to length(AMoeglich)-1 do
- begin
- if L mod 32 = 0 then
- if not eof(dat) then
- read(dat,lw2)
- else
- begin
- messageDlg('Frühzeitiges Dateiende!',mterror,[mbOk],0);
- exit;
- end;
- AMoeglich[L]:=odd(lw2 shr (L mod 32));
- end;
- For L:=0 to length(EMoeglich)-1 do
- begin
- if L mod 32 = 0 then
- if not eof(dat) then
- read(dat,lw2)
- else
- begin
- messageDlg('Frühzeitiges Dateiende!',mterror,[mbOk],0);
- exit;
- end;
- EMoeglich[L]:=odd(lw2 shr (L mod 32));
- end;
- exit;
- end
- else
- Seek(dat,Filepos(dat)+((lw1-1) div 32 +1)*2);
- end;
- closefile(dat);
- end;
- {$ENDIF}
-
- Progressbar1.Visible:=true;
- Progressbar1.Min:=0;
- Progressbar1.Max:=1000;
- Progressbar1.Position:=0;
-
- Setlength(AMoeglich,AK);
- Setlength(EMoeglich,AK);
- For AK:=0 to length(AMoeglich)-1 do
- begin
- AMoeglich[AK]:=False;
- EMoeglich[AK]:=False;
- end;
- Setlength(Nums,0);
-
- Schritt:=max(1,round((length(AMoeglich) div Faktor) / Progressbar1.Max));
- For AK:=0 to length(AMoeglich) div Faktor -1 do
- begin
- if AK mod Schritt = 0 then
- Progressbar1.StepIt;
- Nums:=calcNums(AK);
- B:=true;
- {$IFDEF Buchstabenraetsel}
- Nullen:=NLeer;
- For I:=0 to length(Nums)-1 do
- begin
- B:=B and (Nums[I]<>0);
- if Nums[I]=1 then dec(Nullen)
- else
- For J:=0 to I-1 do
- B:=B and (Nums[I]<>Nums[J]);
- end;
- B:=B and (Nullen>=0);
- {$ELSE}
- For I:=0 to length(Nums)-1 do
- begin
- B:=B and (Nums[I]<>0);
- For J:=0 to I-1 do
- B:=B and (Nums[I]<>Nums[J]);
- end;
- {$ENDIF}
- if B then
- begin
- EK:=swapIndex(AK);
- AR:=0;
- {$IFNDEF Buchstabenraetsel}
- AZ:=0;
- {$ENDIF}
- For I:=0 to NGes-1 do
- begin
- {$IFDEF Buchstabenraetsel}
- if Nums[I]>1 then
- begin
- AR:=Nums[I]-1;
- break;
- end;
- {$ELSE}
- if Nums[I]>AZ then
- begin
- inc(AR);
- AZ:=Nums[I];
- end;
- {$ENDIF}
- end;
-
- AMoeglich[AK*Faktor+AR]:=true;
- EMoeglich[EK*Faktor+AR]:=true;
- AMoeglich[AK*Faktor]:=true;
- EMoeglich[EK*Faktor]:=true;
- end;
- end;
-
- Progressbar1.Position:=0;
- Schritt:=Max(round(((length(AMoeglich) div Faktor)*NGes) / Progressbar1.Max),1);
- For Nullen:=1 to NGes do
- For AK:=0 to length(AMoeglich) div Faktor -1 do
- begin
- if AK mod Schritt = 0 then
- Progressbar1.StepIt;
- Nums:=calcNums(AK);
- J:=Nullen;
- For I:=0 to NGes-1 do
- if Nums[I]=0 then dec(J);
- if J<>0 then continue;
- EK:=swapIndex(AK);
- For I:=0 to NGes-1 do
- if Nums[I]=0 then
- begin
- For J:=1 to Basis-1 do
- begin
- Nums[I]:=J;
- NAK:=calcIndex(Nums);
- NEK:=swapIndex(NAK);
- For K:=0 to Faktor-1 do
- begin
- AMoeglich[AK*Faktor+K]:=AMoeglich[AK*Faktor+K] or AMoeglich[NAK*Faktor+K];
- EMoeglich[EK*Faktor+K]:=EMoeglich[EK*Faktor+K] or EMoeglich[NEK*Faktor+K];
- end;
- end;
- break;
- end;
- end;
- Progressbar1.Visible:=False;
-
- {$IFDEF datei}
- assignfile(dat,extractfilepath(application.exename)+dat_name);
- if Fileexists(extractfilepath(application.exename)+dat_name) then
- begin
- reset(dat);
- Seek(dat,Filesize(dat));
- end
- else
- Rewrite(dat);
-
- lw1:=length(AMoeglich);
- write(dat,lw1);
- lw1:=0;
- For I:=0 to length(AMoeglich)-1 do
- begin
- lw1:=lw1 or (Byte(AMoeglich[I]) shl (I mod 32));
- if ((I mod 32) = 31) or (I = length(AMoeglich)-1) then
- begin
- write(dat,lw1);
- lw1:=0;
- end;
- end;
- For I:=0 to length(EMoeglich)-1 do
- begin
- lw1:=lw1 or (Byte(EMoeglich[I]) shl (I mod 32));
- if ((I mod 32) = 31) or (I = length(EMoeglich)-1) then
- begin
- write(dat,lw1);
- lw1:=0;
- end;
- end;
- closefile(dat);
- {$ENDIF}
-
- {$IFDEF debugFileExport}
- Assignfile(F,'Test.txt');
- Rewrite(F);
- J:=0;
- For AK:=0 to length(AMoeglich) div Faktor -1 do
- begin
- S:='';
- B:=False;
- Nums:=calcNums(AK);
- For I:=0 to length(Nums)-1 do
- S:=S+inttostr(Nums[I]);
- S:=S+#9;
- For I:=0 to Faktor-1 do
- begin
- S:=S+Char(Byte(AMoeglich[AK*Faktor+I])*(ord('x')-ord('.'))+ord('.'));
- B:=B or AMoeglich[AK*Faktor+I];
- end;
- S:=S+#9;
- For I:=0 to Faktor-1 do
- begin
- S:=S+Char(Byte(EMoeglich[AK*Faktor+I])*(ord('x')-ord('.'))+ord('.'));
- B:=B or EMoeglich[AK*Faktor+I];
- end;
- if B then
- begin
- Writeln(F,S);
- inc(J);
- end;
- end;
- Writeln(F,J);
- Closefile(F);
- {$ENDIF}
-end;
-{$ENDIF}
-
-procedure TForm1.preStart;
-begin
- Spinedit1.Enabled:=false;
- Spinedit3.Enabled:=false;
-{$IFDEF Buchstabenraetsel}
- Spinedit2.Enabled:=false;
-{$ENDIF}
- Checkbox1.Enabled:=false;
- Checkbox2.Enabled:=false;
- Button2.Enabled:=true;
- Button3.Enabled:=true;
- {$IFDEF Speichermoegl}
- Button4.Enabled:=true;
- {$ENDIF}
- RandSeed:=Spinedit3.Value;
-end;
-
-procedure TForm1.Button1Click(Sender: TObject);
-begin
- if Leertaste_aktiviert>=(now-1/24/60/60) then exit;
- if not Spinedit1.Enabled then
- begin
- {$IFNDEF keinRandomize}
- randomize;
- {$ENDIF}
- Spinedit3.Value:=random(Spinedit3.maxValue+1);
- end;
- Spinedit1.OnChange(Sender);
- preStart;
-{$IFDEF preLoesung}
- gesamtRaenderErzeugen;
-{$ENDIF}
- loesen(-1);
- RandErzeugen;
- leeren;
- Zeichnen;
-end;
-
-procedure TForm1.Button2Click(Sender: TObject);
-begin
- if Leertaste_aktiviert>=(now-1/24/60/60) then exit;
- Spinedit1.Enabled:=true;
- Spinedit3.Enabled:=true;
-{$IFDEF Buchstabenraetsel}
- Spinedit2.Enabled:=true;
-{$ENDIF}
- Checkbox1.Enabled:=true;
- Checkbox2.Enabled:=sqr(NSqrt)=NGes;
- Button1.Enabled:=true;
- Button2.Enabled:=false;
- Button3.Enabled:=false;
- {$IFDEF Speichermoegl}
- Button4.Enabled:=false;
- {$ENDIF}
- {$IFNDEF keinRandomize}
- Randomize;
- {$ENDIF}
- Spinedit3.Value:=random(Spinedit3.MaxValue+1);
- Spinedit1.OnChange(Sender);
-end;
-
-procedure TForm1.Button3Click(Sender: TObject);
-var I: integer;
-begin
- if Leertaste_aktiviert>=(now-1/24/60/60) then exit;
- For I:=0 to length(Feld)-1 do
- if not Startfeld[I] then
- {$IFDEF Buchstabenraetsel}
- Feld[I]:=-1;
- {$ELSE}
- Feld[I]:=0;
- {$ENDIF}
- aktuelleFarbe:=$000000;
- letzteFarbe:=aktuelleFarbe;
- Setlength(Zuege,0);
- Zeichnen;
- Image2Bemalen;
-end;
-
-{$IFDEF Speichermoegl}
-procedure TForm1.Button4Click(Sender: TObject);
-var F: TRaetselFile;
- C: Cardinal;
-begin
- if Leertaste_aktiviert>=(now-1/24/60/60) then exit;
- repeat
- if not Savedialog1.Execute then exit;
- {$IFDEF Buchstabenraetsel}
- if uppercase(copy(SaveDialog1.FileName,length(SaveDialog1.FileName)-3,4))<>'.BSR' then
- SaveDialog1.FileName:=SaveDialog1.FileName+'.bsr';
- {$ELSE}
- if uppercase(copy(SaveDialog1.FileName,length(SaveDialog1.FileName)-3,4))<>'.HHR' then
- SaveDialog1.FileName:=SaveDialog1.FileName+'.hhr';
- {$ENDIF}
- if fileexists(SaveDialog1.FileName) then
- case Messagedlg('Die Datei existiert schon. Überschreiben?',mtConfirmation,[mbYes,mbNo,mbAbort],0) of
- mrYes: break;
- mrAbort: exit;
- end{of Case}
- else
- break;
- until false;
- F:=TRaetselFile.Create;
- F.Kennung:=dat_Kennung;
- F.FAssignFile(SaveDialog1.FileName);
- F.FRewrite;
- C:=ProgVers;
- F.FBlockWrite(C,1);
- C:=Byte(Checkbox1.Checked);
- F.FBlockWrite(C,1);
- {$IFDEF Buchstabenraetsel}
- C:=Spinedit2.Value;
- F.FBlockWrite(C,4);
- {$ENDIF}
- C:=Spinedit1.Value;
- F.FBlockWrite(C,4);
- C:=Spinedit3.Value;
- F.FBlockWrite(C,4);
- if length(Rand)>0 then
- F.FBlockWrite(Rand[0],length(Rand)*sizeof(Rand[0]));
- if length(Feld)>0 then
- F.FBlockWrite(Feld[0],length(Feld)*sizeof(Feld[0]));
- if length(FeldFarben)>0 then
- F.FBlockWrite(FeldFarben[0],length(FeldFarben)*sizeof(FeldFarben[0]));
- if length(StartFeld)>0 then
- F.FBlockWrite(StartFeld[0],length(StartFeld)*sizeof(StartFeld[0]));
- F.FBlockWrite(Position,4);
- C:=length(Zuege);
- F.FBlockWrite(C,4);
- if length(Zuege)>0 then
- F.FBlockWrite(Zuege[0],length(Zuege)*SizeOf(Zuege[0]));
- F.FCloseFile;
-end;
-
-procedure TForm1.Button5Click(Sender: TObject);
-var F: TRaetselFile;
- C: Cardinal;
-begin
- if Leertaste_aktiviert>=(now-1/24/60/60) then exit;
- if (Opendialog1.Tag=0) and (not Opendialog1.Execute) then exit;
- Opendialog1.Tag:=0;
- F:=TRaetselFile.Create;
- F.Kennung:=dat_Kennung;
- F.FAssignFile(OpenDialog1.FileName);
- if not F.FReset then
- begin
- Messagedlg('Ungültiges Dateiformat!',mtError,[mbOk],0);
- exit;
- end;
- C:=0;
- if not F.FBlockRead(C,1) then exit;
- if C>ProgVers then
- begin
- Messagedlg(
- 'Diese Programmversion ('+Vers2Str(ProgVers)+') ist nicht mit der '+
- 'ausgewählten Dateiversion ('+Vers2Str(C)+') kompatibel!',mterror,[mbOk],0);
- exit;
- end;
- if not F.FBlockRead(C,1) then exit;
- Checkbox1.Checked:=odd(C);
- {$IFDEF Buchstabenraetsel}
- if not F.FBlockRead(C,4) then exit;
- Spinedit2.Value:=C;
- {$ENDIF}
- if not F.FBlockRead(C,4) then exit;
- Spinedit1.Value:=C;
- if not F.FBlockRead(C,4) then exit;
- Spinedit3.Value:=C;
- if length(Rand)>0 then
- if not F.FBlockRead(Rand[0],length(Rand)*sizeof(Rand[0])) then exit;
- if length(Feld)>0 then
- if not F.FBlockRead(Feld[0],length(Feld)*sizeof(Feld[0])) then exit;
- if length(FeldFarben)>0 then
- if not F.FBlockRead(FeldFarben[0],length(FeldFarben)*sizeof(FeldFarben[0])) then exit;
- if length(StartFeld)>0 then
- if not F.FBlockRead(StartFeld[0],length(StartFeld)*sizeof(StartFeld[0])) then exit;
- if not F.FBlockRead(Position,4) then exit;
- if not F.FBlockRead(C,4) then exit;
- Setlength(Zuege,C);
- if length(Zuege)>0 then
- if not F.FBlockRead(Zuege[0],length(Zuege)*SizeOf(Zuege[0])) then exit;
- F.FCloseFile;
- preStart;
- gesamtRaenderErzeugen;
- Zeichnen;
-end;
-{$ENDIF}
-
-{$IFDEF Buchstabenraetsel}
-function TForm1.loesen(lPos: integer): boolean;
-var I,P: integer;
- Perm: TIntArray;
-begin
- result:=false;
- setlength(Perm,0);
- For P:=lPos+1 to NGes*NGes-1 do
- if Feld[P]<0 then
- begin
- Perm:=Permutation(NBuchst+1);
- For I:=0 to NBuchst do
- begin
- Feld[P]:=Perm[I];
- if passt(P mod NGes,P div NGes) then
- if loesen(P) then
- begin
- result:=true;
- exit;
- end;
- end;
- Feld[P]:=-1;
- exit;
- end;
- result:=true;
-end;
-
-function TForm1.AnzLoesungen(lPos: integer): integer;
-var I,P: integer;
-begin
- result:=0;
- For P:=lPos+1 to NGes*NGes-1 do
- if Feld[P]<0 then
- begin
- For I:=0 to NBuchst do
- begin
- Feld[P]:=I;
- if passt(P mod NGes,P div NGes) then
- result:=result+Anzloesungen(P);
- {$IFDEF loesungsoptimierung}
- if result>=2 then
- begin
- Feld[P]:=-1;
- exit;
- end;
- {$ENDIF}
- end;
- Feld[P]:=-1;
- exit;
- end;
- result:=1;
-end;
-{$ELSE}
-function TForm1.loesen(lPos: integer): boolean;
-var I,P: integer;
- Perm: TIntArray;
-begin
- result:=false;
- setlength(Perm,0);
- For P:=lPos+1 to NGes*NGes-1 do
- if Feld[P]=0 then
- begin
- Perm:=Permutation(NGes);
- For I:=0 to NGes-1 do
- begin
- Feld[P]:=Perm[I]+1;
- if passt(P mod NGes,P div NGes) then
- if loesen(P) then
- begin
- result:=true;
- exit;
- end;
- end;
- Feld[P]:=0;
- exit;
- end;
- result:=true;
-end;
-
-function TForm1.AnzLoesungen(lPos: integer): integer;
-var I,P: integer;
-begin
- result:=0;
- For P:=lPos+1 to NGes*NGes-1 do
- if Feld[P]=0 then
- begin
- For I:=0 to NGes-1 do
- begin
- Feld[P]:=I+1;
- if passt(P mod NGes,P div NGes) then
- result:=result+Anzloesungen(P);
- {$IFDEF loesungsoptimierung}
- if result>=2 then
- begin
- Feld[P]:=0;
- exit;
- end;
- {$ENDIF}
- end;
- Feld[P]:=0;
- exit;
- end;
- result:=1;
-end;
-{$ENDIF}
-
-procedure TForm1.leeren;
-var Perm: TIntArray;
- tmp,i: integer;
-{$IFDEF debug}
- anz,ges: integer;
- start,
- ende: double;
-{$ENDIF}
-begin
- Progressbar1.Position:=0;
- Progressbar1.Max:=(NGes+4)*NGes-1;
- Progressbar1.Width:=Form1.ClientWidth-Progressbar1.Left;
- Progressbar1.Visible:=true;
- setlength(Perm,0);
- Perm:=Permutation(NGes*NGes);
- {$IFDEF debug}
- ges:=0;
- start:=now;
- {$ENDIF}
- {$IFDEF Buchstabenraetsel}
- For I:=0 to NGes*NGes-1 do
- if Feld[Perm[I]]=0 then
- begin
- Feld[Perm[I]]:=-1;
- {$IFDEF debug}
- anz:=AnzLoesungen(-1);
- ges:=ges+anz-1;
- if anz>1 then
- {$ELSE}
- if AnzLoesungen(-1)>1 then
- {$ENDIF}
- Feld[Perm[I]]:=0
- else
- Startfeld[Perm[I]]:=false;
- end;
- {$ELSE}
- {$IFDEF alternativLoesung}
- gesamtRaenderErzeugen;
- {$ENDIF}
- {$ENDIF}
- {$IFDEF preLoesung}
- gesamtRaenderErzeugen;
- {$ENDIF}
- For I:=0 to NGes*NGes-1 do
- begin
- if Feld[Perm[I]]>0 then
- begin
- tmp:=Feld[Perm[I]];
- {$IFDEF Buchstabenraetsel}
- Feld[Perm[I]]:=-1;
- {$ELSE}
- Feld[Perm[I]]:=0;
- {$ENDIF}
- {$IFDEF debug}
- anz:=AnzLoesungen(-1);
- ges:=ges+anz-1;
- if anz>1 then
- {$ELSE}
- if AnzLoesungen(-1)>1 then
- {$ENDIF}
- Feld[Perm[I]]:=tmp
- else
- Startfeld[Perm[I]]:=false;
- end;
- Progressbar1.StepIt;
- Application.ProcessMessages;
- end;
- Perm:=Permutation(4*NGes);
- For I:=0 to 4*NGes-1 do
- begin
- if Rand[Perm[I]]<>0 then
- begin
- tmp:=Rand[Perm[I]];
- Rand[Perm[I]]:=0;
- {$IFDEF debug}
- anz:=AnzLoesungen(-1);
- ges:=ges+anz-1;
- if anz>1 then
- {$ELSE}
- if AnzLoesungen(-1)>1 then
- {$ENDIF}
- Rand[Perm[I]]:=tmp;
- end;
- Progressbar1.Stepit;
- Application.ProcessMessages;
- end;
- Progressbar1.Visible:=False;
- {$IFDEF debug}
- ende:=now;
- Messagedlg(floattostr((ende-start)*24*3600)+' Sekunden und'#13+
- inttostr(ges)+' zusäzliche Möglichkeiten!',mtinformation,[mbok],0);
- {$ENDIF}
-end;
-
-function Permutation(n: integer): TIntArray;
-var I,J,K: Integer;
-begin
- setlength(Result,n);
- For I:=0 to n-1 do
- Result[I]:=-1;
- For I:=0 to n-1 do
- begin
- J:=random(n-I);
- K:=0;
- while K<=J do
- begin
- if Result[K]<>-1 then inc(J);
- inc(K);
- end;
- Result[J]:=I;
- end;
-end;
-
-{$IFDEF Buchstabenraetsel}
-procedure TForm1.RandErzeugen;
-var I,J: Integer;
-begin
- For I:=0 to NGes-1 do
- begin
- For J:=0 to NGes-1 do
- begin
- if Feld[I+NGes*J]=-1 then break;
- if Feld[I+NGes*J]=0 then continue;
- Rand[I]:=Feld[I+NGes*J];
- break;
- end;
- For J:=NGes-1 downto 0 do
- begin
- if Feld[I+NGes*J]=-1 then break;
- if Feld[I+NGes*J]=0 then continue;
- Rand[2*NGes+I]:=Feld[I+NGes*J];
- break;
- end;
- For J:=NGes-1 downto 0 do
- begin
- if Feld[J+NGes*I]=-1 then break;
- if Feld[J+NGes*I]=0 then continue;
- Rand[NGes+I]:=Feld[J+NGes*I];
- break;
- end;
- For J:=0 to NGes-1 do
- begin
- if Feld[J+NGes*I]=-1 then break;
- if Feld[J+NGes*I]=0 then continue;
- Rand[3*NGes+I]:=Feld[J+NGes*I];
- break;
- end;
- end;
-end;
-{$ELSE}
-procedure TForm1.RandErzeugen;
-var I,J,H,Z: Integer;
-begin
- For I:=0 to NGes-1 do
- begin
- H:=0;
- Z:=0;
- For J:=0 to NGes-1 do
- begin
- if Feld[I+NGes*J]=-1 then
- begin
- Z:=0;
- break;
- end;
- if Feld[I+NGes*J]>H then
- begin
- H:=Feld[I+NGes*J];
- inc(Z);
- end;
- end;
- Rand[I]:=Z;
- H:=0;
- Z:=0;
- For J:=NGes-1 downto 0 do
- begin
- if Feld[I+NGes*J]=-1 then
- begin
- Z:=0;
- break;
- end;
- if Feld[I+NGes*J]>H then
- begin
- H:=Feld[I+NGes*J];
- inc(Z);
- end;
- end;
- Rand[2*NGes+I]:=Z;
- H:=0;
- Z:=0;
- For J:=NGes-1 downto 0 do
- begin
- if Feld[J+NGes*I]=-1 then
- begin
- Z:=0;
- break;
- end;
- if Feld[J+NGes*I]>H then
- begin
- H:=Feld[J+NGes*I];
- inc(Z);
- end;
- end;
- Rand[NGes+I]:=Z;
- H:=0;
- Z:=0;
- For J:=0 to NGes-1 do
- begin
- if Feld[J+NGes*I]=-1 then
- begin
- Z:=0;
- break;
- end;
- if Feld[J+NGes*I]>H then
- begin
- H:=Feld[J+NGes*I];
- inc(Z);
- end;
- end;
- Rand[3*NGes+I]:=Z;
- end;
-end;
-{$ENDIF}
-
-procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
-begin
- if Key=32 then
- Leertaste_aktiviert:=now;
-end;
-
-procedure TForm1.Image2Bemalen;
-var I: Integer;
-begin
- Image2.Canvas.Pen.Color:=aktuelleFarbe;
- Image2.Canvas.Brush.Color:=aktuelleFarbe;
- Image2.Canvas.Rectangle(0,0,Image2.Width,Image2.Height div 2);
- For I:=0 to Image2.Width do
- begin
- Image2.Canvas.Pen.Color:=farbverlauf(I/(Image2.Width+1));
- Image2.Canvas.Moveto(I,Image2.Height div 2);
- Image2.Canvas.Lineto(I,Image2.Height);
- end;
-end;
-
-function farbverlauf(Wo: extended): TColor;
-const R: array[0..6] of Extended = (0.5,0.9,0.9, 0, 0,0.2,0);
- G: array[0..6] of Extended = ( 0,0.5,0.9,0.7,0.7,0.2,0);
- B: array[0..6] of Extended = (0.7, 0, 0, 0,0.7, 1,0);
-var I: Integer;
-begin
- Wo:=Wo*(length(R)-1);
- I:=floor(Wo);
- Wo:=Wo-I;
- if I<0 then
- begin
- result:=RGB2TColor(R[0],G[0],B[0]);
- exit;
- end;
- if I>=(length(R)-1) then
- begin
- result:=RGB2TColor(R[length(R)-1],G[length(R)-1],B[length(R)-1]);
- exit;
- end;
- result:=RGB2TColor(R[I+1]*Wo+R[I]*(1-Wo),
- G[I+1]*Wo+G[I]*(1-Wo),
- B[I+1]*Wo+B[I]*(1-Wo));
-end;
-
-procedure TForm1.FormResize(Sender: TObject);
-begin
- Spinedit3.Left:=Form1.ClientWidth-Spinedit3.Width;
- Progressbar1.Width:=Form1.ClientWidth;
-end;
-
-function RGB2TColor(R,G,B: Extended): TColor;
-begin
- Result:=max(0,min($FF,round(R*$100))) or
- (max(0,min($FF,round(G*$100))) shl 8) or
- (max(0,min($FF,round(B*$100))) shl 16);
-end;
-
-procedure TForm1.Image1DblClick(Sender: TObject);
-begin
- if Startfeld[Position] or
- (Feld[Position]<0)
- {$IFNDEF Buchstabenraetsel}
- or (Feld[Position]=0)
- {$ENDIF}
- then exit;
- aktuelleFarbe:=FeldFarben[Position];
- letzteFarbe:=aktuelleFarbe;
- Image2Bemalen;
-end;
-
-end.
diff --git a/raetsel.lpr b/raetsel.lpr
index a9538ec..672f9ca 100644
--- a/raetsel.lpr
+++ b/raetsel.lpr
@@ -12,9 +12,9 @@ uses
{$R *.res}
begin
- RequireDerivedFormResource:=True;
- Application.Initialize;
- Application.CreateForm(TForm1, Form1);
- Application.Run;
+ requireDerivedFormResource:=true;
+ application.initialize;
+ application.createForm(tForm1, form1);
+ application.run;
end.
diff --git a/raetsel.lps b/raetsel.lps
index cf560a8..e0413a6 100644
--- a/raetsel.lps
+++ b/raetsel.lps
@@ -8,8 +8,8 @@
<Filename Value="raetsel.lpr"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="2"/>
- <CursorPos X="47" Y="11"/>
- <UsageCount Value="61"/>
+ <CursorPos X="66" Y="13"/>
+ <UsageCount Value="62"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@@ -18,7 +18,9 @@
<ComponentName Value="Form1"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
- <UsageCount Value="61"/>
+ <TopLine Value="19"/>
+ <CursorPos X="43" Y="16"/>
+ <UsageCount Value="62"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
@@ -29,26 +31,26 @@
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit2"/>
<EditorIndex Value="-1"/>
- <CursorPos Y="17"/>
- <UsageCount Value="60"/>
+ <CursorPos X="11" Y="27"/>
+ <UsageCount Value="61"/>
</Unit2>
<Unit3>
<Filename Value="raetselunit.pas"/>
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
- <TopLine Value="332"/>
- <CursorPos Y="332"/>
- <UsageCount Value="55"/>
+ <TopLine Value="812"/>
+ <CursorPos X="50" Y="844"/>
+ <UsageCount Value="56"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="raetselunit.inc"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="3"/>
- <TopLine Value="437"/>
- <CursorPos X="33" Y="100"/>
- <UsageCount Value="41"/>
+ <TopLine Value="373"/>
+ <CursorPos X="27" Y="392"/>
+ <UsageCount Value="42"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
@@ -87,11 +89,10 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
- <EditorIndex Value="4"/>
+ <EditorIndex Value="-1"/>
<TopLine Value="2341"/>
<CursorPos X="13" Y="2380"/>
<UsageCount Value="21"/>
- <Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="/usr/share/lazarus/lcl/stdctrls.pp"/>
@@ -157,122 +158,122 @@
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="raetselunit.pas"/>
- <Caret Line="240" Column="42" TopLine="217"/>
+ <Caret Line="511" Column="82" TopLine="495"/>
</Position1>
<Position2>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="234" Column="29" TopLine="217"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="40" Column="19" TopLine="32"/>
</Position2>
<Position3>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="59" Column="21" TopLine="39"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="16" Column="41"/>
</Position3>
<Position4>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="93" Column="21" TopLine="57"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="17" Column="42"/>
</Position4>
<Position5>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="326" Column="4" TopLine="305"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="18" Column="39"/>
</Position5>
<Position6>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="328" Column="36" TopLine="305"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="46" Column="44" TopLine="13"/>
</Position6>
<Position7>
<Filename Value="unit1.pas"/>
- <Caret Line="52" TopLine="28"/>
+ <Caret Line="67" Column="45" TopLine="34"/>
</Position7>
<Position8>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="327" Column="3" TopLine="306"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="72" Column="42" TopLine="39"/>
</Position8>
<Position9>
<Filename Value="raetselunit.pas"/>
- <Caret Line="35" Column="39" TopLine="19"/>
+ <Caret Line="824" Column="55" TopLine="808"/>
</Position9>
<Position10>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="331" Column="43" TopLine="308"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="766" Column="55" TopLine="758"/>
</Position10>
<Position11>
<Filename Value="raetselunit.pas"/>
- <Caret Line="330" Column="14" TopLine="309"/>
+ <Caret Line="555" Column="43" TopLine="547"/>
</Position11>
<Position12>
<Filename Value="raetselunit.pas"/>
- <Caret Line="35" Column="49"/>
+ <Caret Line="566" Column="21" TopLine="547"/>
</Position12>
<Position13>
- <Filename Value="unit1.pas"/>
- <Caret Line="59" Column="25" TopLine="35"/>
+ <Filename Value="raetsel.lpr"/>
+ <Caret Line="13" Column="66"/>
</Position13>
<Position14>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="35" Column="49"/>
+ <Filename Value="unit1.pas"/>
+ <Caret Line="4" Column="57"/>
</Position14>
<Position15>
- <Filename Value="unit1.pas"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="766" Column="55" TopLine="758"/>
</Position15>
<Position16>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="11" Column="3"/>
+ <Filename Value="raetselunit.inc"/>
</Position16>
<Position17>
- <Filename Value="raetsel.lpr"/>
- <Caret Line="11" Column="47"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="738" Column="22" TopLine="706"/>
</Position17>
<Position18>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="11" Column="3" TopLine="46"/>
+ <Filename Value="raetsel.lpr"/>
+ <Caret Line="13" Column="66"/>
</Position18>
<Position19>
<Filename Value="raetselunit.pas"/>
- <Caret Line="375" Column="31" TopLine="343"/>
+ <Caret Line="563" Column="62" TopLine="525"/>
</Position19>
<Position20>
<Filename Value="raetselunit.pas"/>
- <Caret Line="651" Column="53" TopLine="647"/>
+ <Caret Line="169" Column="46" TopLine="152"/>
</Position20>
<Position21>
<Filename Value="raetselunit.pas"/>
- <Caret Line="44" Column="35" TopLine="24"/>
+ <Caret Line="170" Column="21" TopLine="152"/>
</Position21>
<Position22>
<Filename Value="raetselunit.pas"/>
- <Caret Line="218" Column="10" TopLine="213"/>
+ <Caret Line="2"/>
</Position22>
<Position23>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="40" Column="15" TopLine="20"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="714" Column="70" TopLine="706"/>
</Position23>
<Position24>
<Filename Value="raetselunit.pas"/>
- <Caret Line="219" Column="37" TopLine="182"/>
+ <Caret Line="170" Column="21" TopLine="138"/>
</Position24>
<Position25>
<Filename Value="raetselunit.pas"/>
- <Caret Line="54" Column="29" TopLine="34"/>
+ <Caret Line="42" Column="38" TopLine="22"/>
</Position25>
<Position26>
<Filename Value="raetselunit.pas"/>
- <Caret Line="219" Column="38" TopLine="215"/>
+ <Caret Line="227" Column="39" TopLine="196"/>
</Position26>
<Position27>
<Filename Value="raetselunit.pas"/>
- <Caret Line="332" Column="6" TopLine="316"/>
+ <Caret Line="732" Column="46" TopLine="701"/>
</Position27>
<Position28>
- <Filename Value="raetselunit.pas"/>
- <Caret Line="63" Column="20" TopLine="44"/>
+ <Filename Value="raetselunit.inc"/>
+ <Caret Line="714" Column="61" TopLine="706"/>
</Position28>
<Position29>
<Filename Value="raetselunit.inc"/>
- <Caret Line="807" TopLine="785"/>
+ <Caret Line="688" Column="63" TopLine="678"/>
</Position29>
<Position30>
- <Filename Value="raetselunit.inc"/>
- <Caret Line="14" Column="20"/>
+ <Filename Value="raetselunit.pas"/>
+ <Caret Line="812" Column="66" TopLine="808"/>
</Position30>
</JumpHistory>
</ProjectSession>
diff --git a/raetselFileUnit.pas b/raetselFileUnit.pas
deleted file mode 100644
index 1a389ab..0000000
--- a/raetselFileUnit.pas
+++ /dev/null
@@ -1,274 +0,0 @@
-unit raetselFileUnit;
-
-interface
-
- uses
- dialogs, math;
-
- type
- tWort = record
- w: array of byte;
- bits: integer;
- end;
- tRaetselFile = class
- private
- f: file;
- wacc: boolean;
- inhalt,
- conv: array of byte;
- fPoint: integer;
- wB: array of tWort;
- procedure fFlush;
- procedure initWB;
- procedure concatWs(a,b: integer);
- function bIsAX(a: tWort; b: array of byte): boolean;
- procedure rConvert;
- procedure wConvert;
- public
- kennung: string;
- procedure fAssignFile(fileName: string);
- function fReset: boolean;
- procedure fRewrite;
- procedure fCloseFile;
- procedure fBlockWrite(var data; len: integer);
- function fBlockRead(var data; len: integer): boolean;
- end;
-
-implementation
-
-procedure tRaetselFile.fAssignFile(FileName: string);
-begin
- assignFile(f,fileName);
-end;
-
-function tRaetselFile.fReset: boolean;
-var
- c: cardinal;
- s: string;
-begin
- wacc:=false;
- result:=false;
- c:=0;
- reset(f,1);
- if fileSize(f) < 4 then begin
- fCloseFile;
- exit;
- end;
- blockRead(f,c,4);
- if c<>$26594131 then begin
- fCloseFile;
- exit;
- end;
- setLength(conv,fileSize(f)-4);
- blockRead(f,conv[0],length(conv));
- rConvert;
- if length(inhalt)<length(kennung) then begin
- fCloseFile;
- exit;
- end;
- s:=kennung;
- fBlockRead(s[1],length(s));
- if s<>kennung then begin
- fCloseFile;
- exit;
- end;
- result:=true;
-end;
-
-procedure tRaetselFile.initWB;
-var
- b: byte;
-begin
- setLength(wB,128);
- for b:=0 to 127 do begin
- setLength(wB[b].w,2);
- wB[b].w[0]:=b;
- wB[b].w[1]:=0;
- wB[b].bits:=7;
- end;
-end;
-
-procedure tRaetselFile.concatWs(a,b: integer);
-var
- i: integer;
-begin
- setLength(wB,length(wB)+1); // wB erweitern
- with wB[length(wB)-1] do begin
- bits:=wB[a].bits+wB[b].bits;
- setLength(w,(bits+7) div 8 + 1);
- for i:=0 to length(w)-1 do
- w[i]:=0;
- for i:=0 to length(wB[a].w)-2 do
- w[i]:=wB[a].w[i];
- for i:=0 to length(wB[b].w)-2 do begin
- w[length(wB[a].w)-2+i]:=
- w[length(wB[a].w)-2+i] or
- ($ff and (wB[b].w[i] shl (wB[a].bits mod 8)));
- if length(wB[a].w)-1+i < length(w) then
- w[length(wB[a].w)-1+i]:=
- w[length(wB[a].w)-1+i] or
- (wB[b].w[i] shr (8 - (wB[a].bits mod 8)));
- end;
- end;
-end;
-
-function tRaetselFile.bIsAX(A: tWort; b: array of byte): boolean;
-var
- i: integer;
-begin
- result:=true;
- for i:=0 to (A.bits div 8)-1 do
- result:=result and (A.w[i] = b[i]);
- result:=result and ((A.w[length(A.w)-2] and ($ff shr (8-(A.bits mod 8)))) =
- (b[length(A.w)-2] and ($ff shr (8-(A.bits mod 8)))));
-end;
-
-procedure tRaetselFile.rConvert;
-var
- rP: longint;
- wP,i: integer;
- passt,lp: integer;
- wBuff: byte;
-begin
- initWB;
- setLength(inhalt,0);
- rP:=0;
- wP:=0;
- wBuff:=0;
- lp:=-1;
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=0;
- while rP<((length(conv)-1)*8) do begin
- passt:=0;
- for i:=0 to ceil(ln(length(wB))/ln(2))-1 do begin
- passt:=passt or (byte(odd(conv[rP div 8] shr (rP mod 8))) shl i);
- inc(rP);
- end;
- for i:=0 to wB[passt].bits-1 do begin
- if wP=8 then begin
- setLength(inhalt,length(inhalt)+1);
- inhalt[length(inhalt)-1]:=wBuff;
- wP:=0;
- wBuff:=0;
- end;
- wBuff:=wBuff or (byte(odd((wB[passt].w[i div 8] shr (i mod 8)))) shl wP);
- inc(wP);
- end;
- if lp<>-1 then
- concatWs(lp,passt);
- lp:=passt;
- end;
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=wBuff;
-end;
-
-procedure tRaetselFile.wConvert;
-var
- rP: longint;
- wP,i,j: integer;
- rBuff: array of byte;
- rBBits,passt,lp: integer;
- wBuff: byte;
-begin
- initWB;
- setLength(conv,0);
- rP:=0;
- wP:=0;
- wBuff:=0;
- lp:=-1;
- setLength(inhalt,length(inhalt)+1);
- inhalt[length(inhalt)-1]:=0;
- while rP<((length(inhalt)-1)*8) do begin
- setLength(rBuff,0);
- rBBits:=0;
- passt:=-1;
- for i:=length(wB)-1 downto 0 do
- with wB[i] do begin
- if bits > (8*length(inhalt) - rP) then continue;
- if bits > rBBits then begin // mehr r-buffern
- setLength(rBuff,(bits+7) div 8);
- rBBits:=bits;
- for j:=0 to length(rBuff)-1 do begin
- rBuff[j]:=0;
- if j + rP div 8 < length(inhalt) then
- rBuff[j]:=rBuff[j] or (inhalt[j + rP div 8] shr (rP mod 8));
- if j+1 + rP div 8 < length(inhalt) then
- rBuff[j]:=rBuff[j] or ($ff and (inhalt[(rP div 8) + j+1] shl (8-(rP mod 8))));
- end;
- end;
- if ((passt=-1) or (wB[passt].bits < wB[i].bits)) and
- bIsAX(wB[i],rBuff) then
- passt:=i;
- end;
- if passt=-1 then begin // geht ja gar nicht - geht ja wohl!
- messageDlg('Zu wenig wörter im wörterbuch!',mterror,[mbOk],0);
- exit;
- end;
- rP:=rP+wB[passt].bits;
- for i:=0 to ceil(ln(length(wB))/ln(2))-1 do begin // wB-index speichern
- if wP=8 then begin // w-buffer leeren
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=wBuff;
- wP:=0;
- wBuff:=0;
- end;
- wBuff:=wBuff or byte(odd(passt shr i)) shl wP;
- inc(wP);
- end;
- if lp<>-1 then
- concatWs(lp,passt);
- lp:=passt;
- end;
- setLength(conv,length(conv)+1);
- conv[length(conv)-1]:=wBuff;
-end;
-
-procedure tRaetselFile.fFlush;
-begin
- wConvert;
- blockWrite(f,conv[0],length(conv));
- setLength(inhalt,0);
-end;
-
-procedure tRaetselFile.fRewrite;
-var
- c: cardinal;
-begin
- wacc:=true;
- rewrite(f,1);
- c:=$26594131;
- blockWrite(f,c,4);
- setLength(inhalt,length(kennung));
- move(kennung[1],inhalt[0],length(kennung));
- fPoint:=length(inhalt);
-end;
-
-procedure tRaetselFile.fCloseFile;
-begin
- if wacc then begin
- fFlush;
- closeFile(f);
- end;
- setLength(inhalt,0);
- fPoint:=0;
-end;
-
-procedure tRaetselFile.fBlockWrite(var data; len: integer);
-begin
- setLength(inhalt,length(inhalt)+len);
- move(data,inhalt[fPoint],len);
- fPoint:=length(inhalt);
-end;
-
-function tRaetselFile.fBlockRead(var data; len: integer): boolean;
-begin
- result:=len<=(length(inhalt)-fPoint);
- if not result then begin
- fCloseFile;
- exit;
- end;
- move(inhalt[fPoint],data,len);
- fPoint:=fPoint+len;
-end;
-
-end.
diff --git a/raetselunit.inc b/raetselunit.inc
index 5b7ffe0..190ab73 100644
--- a/raetselunit.inc
+++ b/raetselunit.inc
@@ -42,7 +42,7 @@ begin
result:='-'
{$IFDEF hochhaus}
else
- result:=inttostr(i);
+ result:=intToStr(i);
{$ENDIF}
{$IFDEF buchstaben}
else begin
@@ -89,76 +89,76 @@ end;
{$IFDEF passt}
// function tHochhausRaetsel.passt(spalte,zeile: integer): boolean;
var
- I,KZ,KS: Integer;
- W,S,K: Longint;
+ i,KZ,KS: integer;
+ w,s,k: longint;
begin
- W:=0;
- S:=0;
- K:=0;
+ 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
+ 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;
+ 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)]);
+ 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])];
+ 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
+ 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;
+ 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]);
+ 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])];
+ 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;
if diagonalenCB.checked then begin
- if Zeile=Spalte then begin
- W:=0;
+ if zeile=spalte then begin
+ w:=0;
{$IFDEF buchstaben}
- for I:=0 to dim-1 do
- W:=W*(groeszen[0]+2)+inhalt[I*(dim+1)]+1;
- Result:=Result and AMoeglich[W*(groeszen[0]+1)];
+ for i:=0 to dim-1 do
+ w:=w*(groeszen[0]+2)+inhalt[i*(dim+1)]+1;
+ result:=result and AMoeglich[w*(groeszen[0]+1)];
{$ENDIF}
{$IFDEF hochhaus}
- for I:=0 to dim-1 do
- W:=W*(dim+1)+max(0,inhalt[I*(dim+1)]);
- result:=result and AMoeglich[W*(dim+1)];
+ for i:=0 to dim-1 do
+ w:=w*(dim+1)+max(0,inhalt[i*(dim+1)]);
+ result:=result and AMoeglich[w*(dim+1)];
{$ENDIF}
end;
- if Zeile+Spalte=dim-1 then begin
- W:=0;
+ if zeile+spalte=dim-1 then begin
+ w:=0;
{$IFDEF buchstaben}
- for I:=0 to dim-1 do
- W:=W*(groeszen[0]+2)+inhalt[(I+1)*(dim-1)]+1;
- Result:=Result and AMoeglich[W*(groeszen[0]+1)];
+ for i:=0 to dim-1 do
+ w:=w*(groeszen[0]+2)+inhalt[(i+1)*(dim-1)]+1;
+ result:=result and AMoeglich[w*(groeszen[0]+1)];
{$ENDIF}
{$IFDEF hochhaus}
- for I:=0 to dim-1 do
- W:=W*(dim+1)+max(0,inhalt[(I+1)*(dim-1)]);
- Result:=Result and AMoeglich[W*(dim+1)];
+ for i:=0 to dim-1 do
+ w:=w*(dim+1)+max(0,inhalt[(i+1)*(dim-1)]);
+ result:=result and AMoeglich[w*(dim+1)];
{$ENDIF}
end;
end;
@@ -175,7 +175,7 @@ begin
for j:=0 to dim-1 do
if (not passt(i,j)) or (inhalt[i+dim*j]<0)
{$IFDEF hochhaus}
- or (inhalt[I+dim*j]=0)
+ or (inhalt[i+dim*j]=0)
{$ENDIF}
then exit;
result:=true;
@@ -185,16 +185,16 @@ end;
{$IFDEF gesamtRaenderErzeugen}
// procedure tHochhausRaetsel.gesamtRaenderErzeugen;
var
- I,J,K,Nullen: Integer;
+ i,j,k,nullen: integer;
{$IFNDEF buchstaben}
AZ,
{$ENDIF}
- AR: Integer;
- AK,EK,NAK,NEK: Longint;
- Nums: tLongintArray;
- B: Boolean;
- Basis,Faktor: Integer;
- Schritt: Longint;
+ AR: integer;
+ AK,EK,NAK,NEK: longint;
+ nums: tLongintArray;
+ b: boolean;
+ Basis,faktor: integer;
+ schritt: longint;
dat: file;
buff: array of byte;
lw: Cardinal;
@@ -207,47 +207,47 @@ const dat_name =
'Hochhausraetsel.dat';
{$ENDIF}
-function calcNums(I: Longint): tLongintArray;
+function calcNums(i: longint): tLongintArray;
var
- J: Integer;
+ j: integer;
begin
- Setlength(Result,dim);
- For J:=0 to dim-1 do begin
- Result[J]:=I mod Basis;
- I:=I div Basis;
+ setLength(result,dim);
+ for j:=0 to dim-1 do begin
+ result[j]:=i mod Basis;
+ i:=i div Basis;
end;
end;
-function calcIndex(Nums: TLongintArray): Longint;
+function calcIndex(nums: tLongintArray): longint;
var
j: integer;
begin
- Result:=0;
- For j:=0 to dim-1 do
- Result:=Result*Basis + Nums[dim-J-1];
+ result:=0;
+ for j:=0 to dim-1 do
+ result:=result*Basis + nums[dim-j-1];
end;
-function swapIndex(I: Longint): Longint;
+function swapIndex(i: longint): longint;
var
j: integer;
begin
- Result:=0;
- for J:=0 to dim-1 do begin
- Result:=Result*Basis+(I mod Basis);
- I:=I div Basis;
+ result:=0;
+ for j:=0 to dim-1 do begin
+ result:=result*Basis+(i mod Basis);
+ i:=i div Basis;
end;
end;
begin
{$IFDEF buchstaben}
Basis:=groeszen[0]+2;
- Faktor:=groeszen[0]+1;
+ faktor:=groeszen[0]+1;
{$ENDIF}
{$IFDEF hochhaus}
Basis:=dim+1;
- Faktor:=dim+1;
+ faktor:=dim+1;
{$ENDIF}
- AK:=round(power(Basis,dim)*Faktor);
+ AK:=round(power(Basis,dim)*faktor);
if (length(AMoeglich) = AK) and
(length(EMoeglich) = AK) then
@@ -255,20 +255,20 @@ begin
lw:=0; // silence warning
- if fileexists(extractfilepath(application.exename)+dat_name) then begin
- assignfile(dat,extractfilepath(application.exename)+dat_name);
+ if fileExists(extractFilePath(application.exeName)+dat_name) then begin
+ assignFile(dat,extractFilePath(application.exeName)+dat_name);
reset(dat,1);
while not eof(dat) do begin
- blockread(dat,lw,sizeof(lw));
+ blockRead(dat,lw,sizeOf(lw));
if lw=AK then begin
- Setlength(AMoeglich,AK);
- Setlength(EMoeglich,AK);
- setlength(buff,(lw+7) div 8);
- blockread(dat,buff[0],length(buff));
+ setLength(AMoeglich,AK);
+ setLength(EMoeglich,AK);
+ setLength(buff,(lw+7) div 8);
+ blockRead(dat,buff[0],length(buff));
for i:=0 to length(buff)-1 do
for j:=0 to min(7,length(AMoeglich)-8*i-1) do
AMoeglich[8*i+j]:=odd(buff[i] shr j);
- blockread(dat,buff[0],length(buff));
+ blockRead(dat,buff[0],length(buff));
for i:=0 to length(buff)-1 do
for j:=0 to min(7,length(EMoeglich)-8*i-1) do
EMoeglich[8*i+j]:=odd(buff[i] shr j);
@@ -277,120 +277,120 @@ begin
else
seek(dat,filepos(dat)+2*((lw + 7) div 8));
end;
- closefile(dat);
+ closeFile(dat);
end;
- Progressbar1.Visible:=true;
- Progressbar1.Min:=0;
- Progressbar1.Max:=1000;
- Progressbar1.Position:=0;
- Application.ProcessMessages;
-
- Setlength(AMoeglich,AK);
- Setlength(EMoeglich,AK);
- For AK:=0 to length(AMoeglich)-1 do begin
- AMoeglich[AK]:=False;
- EMoeglich[AK]:=False;
+ progressBar1.visible:=true;
+ progressBar1.min:=0;
+ progressBar1.max:=1000;
+ progressBar1.position:=0;
+ application.processMessages;
+
+ setLength(AMoeglich,AK);
+ setLength(EMoeglich,AK);
+ for AK:=0 to length(AMoeglich)-1 do begin
+ AMoeglich[AK]:=false;
+ EMoeglich[AK]:=false;
end;
- Setlength(Nums,0);
+ setLength(nums,0);
- Schritt:=max(1,round((length(AMoeglich) div Faktor) / Progressbar1.Max));
- For AK:=0 to length(AMoeglich) div Faktor -1 do begin
- if AK mod Schritt = 0 then begin
- progressbar1.stepIt;
+ schritt:=max(1,round((length(AMoeglich) div faktor) / progressBar1.max));
+ for AK:=0 to length(AMoeglich) div faktor -1 do begin
+ if AK mod schritt = 0 then begin
+ progressBar1.stepIt;
application.processMessages;
end;
- Nums:=calcNums(AK);
- B:=true;
+ nums:=calcNums(AK);
+ b:=true;
{$IFDEF buchstaben}
- Nullen:=groeszen[1];
- For I:=0 to length(Nums)-1 do begin
- B:=B and (Nums[I]<>0);
- if Nums[I]=1 then
- dec(Nullen)
+ nullen:=groeszen[1];
+ for i:=0 to length(nums)-1 do begin
+ b:=b and (nums[i]<>0);
+ if nums[i]=1 then
+ dec(nullen)
else
- for J:=0 to I-1 do
- B:=B and (Nums[I]<>Nums[J]);
+ for j:=0 to i-1 do
+ b:=b and (nums[i]<>nums[j]);
end;
- B:=B and (Nullen>=0);
+ b:=b and (nullen>=0);
{$ENDIF}
{$IFDEF hochhaus}
- For I:=0 to length(Nums)-1 do begin
- B:=B and (Nums[I]<>0);
- for J:=0 to I-1 do
- B:=B and (Nums[I]<>Nums[J]);
+ for i:=0 to length(nums)-1 do begin
+ b:=b and (nums[i]<>0);
+ for j:=0 to i-1 do
+ b:=b and (nums[i]<>nums[j]);
end;
{$ENDIF}
- if B then begin
+ if b then begin
EK:=swapIndex(AK);
AR:=0;
{$IFNDEF buchstaben}
AZ:=0;
{$ENDIF}
- For I:=0 to dim-1 do begin
+ for i:=0 to dim-1 do begin
{$IFDEF buchstaben}
- if Nums[I]>1 then begin
- AR:=Nums[I]-1;
+ if nums[i]>1 then begin
+ AR:=nums[i]-1;
break;
end;
{$ENDIF}
{$IFDEF hochhaus}
- if Nums[I]>AZ then begin
+ if nums[i]>AZ then begin
inc(AR);
- AZ:=Nums[I];
+ AZ:=nums[i];
end;
{$ENDIF}
end;
- AMoeglich[AK*Faktor+AR]:=true;
- EMoeglich[EK*Faktor+AR]:=true;
- AMoeglich[AK*Faktor]:=true;
- EMoeglich[EK*Faktor]:=true;
+ AMoeglich[AK*faktor+AR]:=true;
+ EMoeglich[EK*faktor+AR]:=true;
+ AMoeglich[AK*faktor]:=true;
+ EMoeglich[EK*faktor]:=true;
end;
end;
- Progressbar1.Position:=0;
- Schritt:=Max(round(((length(AMoeglich) div Faktor)*dim) / Progressbar1.Max),1);
- For Nullen:=1 to dim do
- For AK:=0 to length(AMoeglich) div Faktor -1 do begin
- if AK mod Schritt = 0 then begin
- progressbar1.stepIt;
+ progressBar1.position:=0;
+ schritt:=max(round(((length(AMoeglich) div faktor)*dim) / progressBar1.max),1);
+ for nullen:=1 to dim do
+ for AK:=0 to length(AMoeglich) div faktor -1 do begin
+ if AK mod schritt = 0 then begin
+ progressBar1.stepIt;
application.processMessages;
end;
- Nums:=calcNums(AK);
- J:=Nullen;
- For I:=0 to dim-1 do
- if Nums[I]=0 then
- dec(J);
- if J<>0 then
+ nums:=calcNums(AK);
+ j:=nullen;
+ for i:=0 to dim-1 do
+ if nums[i]=0 then
+ dec(j);
+ if j<>0 then
continue;
EK:=swapIndex(AK);
- For I:=0 to dim-1 do
- if Nums[I]=0 then begin
- For J:=1 to Basis-1 do begin
- Nums[I]:=J;
- NAK:=calcIndex(Nums);
+ for i:=0 to dim-1 do
+ if nums[i]=0 then begin
+ for j:=1 to Basis-1 do begin
+ nums[i]:=j;
+ NAK:=calcIndex(nums);
NEK:=swapIndex(NAK);
- For K:=0 to Faktor-1 do begin
- AMoeglich[AK*Faktor+K]:=AMoeglich[AK*Faktor+K] or AMoeglich[NAK*Faktor+K];
- EMoeglich[EK*Faktor+K]:=EMoeglich[EK*Faktor+K] or EMoeglich[NEK*Faktor+K];
+ for k:=0 to faktor-1 do begin
+ AMoeglich[AK*faktor+k]:=AMoeglich[AK*faktor+k] or AMoeglich[NAK*faktor+k];
+ EMoeglich[EK*faktor+k]:=EMoeglich[EK*faktor+k] or EMoeglich[NEK*faktor+k];
end;
end;
break;
end;
end;
- Progressbar1.Visible:=False;
+ progressBar1.visible:=false;
- assignfile(dat,extractfilepath(application.exename)+dat_name);
- if fileexists(extractfilepath(application.exename)+dat_name) then begin
+ assignFile(dat,extractFilePath(application.exeName)+dat_name);
+ if fileExists(extractFilePath(application.exeName)+dat_name) then begin
reset(dat,1);
- seek(dat,filesize(dat));
+ seek(dat,fileSize(dat));
end
else
rewrite(dat,1);
lw:=length(AMoeglich);
- blockWrite(dat,lw,sizeof(lw));
- setlength(buff,(length(AMoeglich)+7) div 8);
+ blockWrite(dat,lw,sizeOf(lw));
+ setLength(buff,(length(AMoeglich)+7) div 8);
for i:=0 to length(buff)-1 do begin
buff[i]:=0;
for j:=0 to min(7,length(AMoeglich)-8*i-1) do
@@ -403,108 +403,108 @@ begin
buff[i]:=buff[i] or (byte(EMoeglich[8*i+j]) shl j);
end;
blockWrite(dat,buff[0],length(buff));
- closefile(dat);
+ closeFile(dat);
end;
{$ENDIF}
{$IFDEF passtZumZeichnen}
// function tHochhausRaetsel.passtZumZeichnen(spalte,zeile: integer): boolean;
var
- I,KS,KZ: Integer;
- W,S: Longint;
+ i,KS,KZ: integer;
+ w,s: longint;
begin
result:=false;
if (spalte>=0) and (zeile>=0) and (spalte<dim) and (zeile<dim) then begin // im inneren
{$IFDEF buchstaben}
- if inhalt[Zeile*dim+Spalte]=-1 then
+ if inhalt[zeile*dim+spalte]=-1 then
exit;
{$ENDIF}
{$IFDEF hochhaus}
- if inhalt[Zeile*dim+Spalte]<=0 then
+ if inhalt[zeile*dim+spalte]<=0 then
exit;
{$ENDIF}
- W:=0;
- S:=0;
- for I:=0 to dim-1 do begin
+ w:=0;
+ s:=0;
+ 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;
+ 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]);
+ 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])];
+ 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])];
{$IFDEF buchstaben}
- if inhalt[Zeile*dim+Spalte]=0 then
- W:=groeszen[1]
+ if inhalt[zeile*dim+spalte]=0 then
+ w:=groeszen[1]
else
{$ENDIF}
- W:=1;
+ w:=1;
if diagonalenCB.checked then begin
- if Zeile=Spalte then begin
- S:=W;
- for I:=0 to dim-1 do
- if (I<>Zeile) and (inhalt[I*(dim+1)]=inhalt[Zeile*dim+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
+ if zeile=spalte then begin
+ s:=w;
+ for i:=0 to dim-1 do
+ if (i<>zeile) and (inhalt[i*(dim+1)]=inhalt[zeile*dim+spalte]) then
+ dec(s);
+ result:=result and (s>0);
end;
- if Zeile+Spalte=dim-1 then begin
- S:=W;
- For I:=0 to dim-1 do
- if (I<>Zeile) and (inhalt[(I+1)*(dim-1)]=inhalt[Zeile*dim+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
+ if zeile+spalte=dim-1 then begin
+ s:=w;
+ for i:=0 to dim-1 do
+ if (i<>zeile) and (inhalt[(i+1)*(dim-1)]=inhalt[zeile*dim+spalte]) then
+ dec(s);
+ result:=result and (s>0);
end;
end;
if sudokuCB.checked then begin
- KZ:=(Zeile div NSqrt)*NSqrt;
- KS:=(Spalte div NSqrt)*NSqrt;
- 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
- dec(S);
- Result:=Result and (S>0);
+ KZ:=(zeile div nSqrt)*nSqrt;
+ KS:=(spalte div nSqrt)*nSqrt;
+ 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
+ dec(s);
+ result:=result and (s>0);
end;
- S:=W;
- For I:=0 to dim-1 do
- if (I<>Zeile) and (inhalt[I*dim+Spalte]=inhalt[Zeile*dim+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
- S:=W;
- For I:=0 to dim-1 do
- if (I<>Spalte) and (inhalt[Zeile*dim+I]=inhalt[Zeile*dim+Spalte]) then
- dec(S);
- Result:=Result and (S>0);
+ s:=w;
+ for i:=0 to dim-1 do
+ if (i<>zeile) and (inhalt[i*dim+spalte]=inhalt[zeile*dim+spalte]) then
+ dec(s);
+ result:=result and (s>0);
+ s:=w;
+ for i:=0 to dim-1 do
+ if (i<>spalte) and (inhalt[zeile*dim+i]=inhalt[zeile*dim+spalte]) then
+ dec(s);
+ result:=result and (s>0);
end
- else begin // auf dem Rand
+ else begin // auf dem rand
if zeile=-1 then begin
if rand[spalte]=-1 then
exit;
s:=0;
- for I:=0 to dim-1 do begin
+ for i:=0 to dim-1 do begin
{$IFDEF buchstaben}
- S:=S*(groeszen[0]+2)+inhalt[I*dim+Spalte]+1;
+ s:=s*(groeszen[0]+2)+inhalt[i*dim+spalte]+1;
{$ENDIF}
{$IFDEF hochhaus}
- S:=S*(dim+1)+max(0,inhalt[I*dim+Spalte]);
+ s:=s*(dim+1)+max(0,inhalt[i*dim+spalte]);
{$ENDIF}
end;
result:=
- EMoeglich[S*(groeszen[0]+1)+max(0,Rand[Spalte])] or
- not EMoeglich[S*(groeszen[0]+1)];
+ EMoeglich[s*(groeszen[0]+1)+max(0,rand[spalte])] or
+ not EMoeglich[s*(groeszen[0]+1)];
exit;
end;
if spalte=dim then begin
if rand[dim+zeile]=-1 then
exit;
w:=0;
- for I:=0 to dim-1 do begin
+ for i:=0 to dim-1 do begin
{$IFDEF buchstaben}
w:=w*(groeszen[0]+2)+inhalt[zeile*dim+i]+1;
{$ENDIF}
@@ -513,7 +513,7 @@ begin
{$ENDIF}
end;
result:=
- AMoeglich[w*(groeszen[0]+1)+max(0,Rand[dim+zeile])] or
+ AMoeglich[w*(groeszen[0]+1)+max(0,rand[dim+zeile])] or
not AMoeglich[w*(groeszen[0]+1)];
exit;
end;
@@ -521,24 +521,24 @@ begin
if rand[2*dim+spalte]=-1 then
exit;
s:=0;
- for I:=0 to dim-1 do begin
+ for i:=0 to dim-1 do begin
{$IFDEF buchstaben}
- S:=S*(groeszen[0]+2)+inhalt[I*dim+Spalte]+1;
+ s:=s*(groeszen[0]+2)+inhalt[i*dim+spalte]+1;
{$ENDIF}
{$IFDEF hochhaus}
- S:=S*(dim+1)+max(0,inhalt[I*dim+Spalte]);
+ s:=s*(dim+1)+max(0,inhalt[i*dim+spalte]);
{$ENDIF}
end;
result:=
- AMoeglich[S*(groeszen[0]+1)+max(0,Rand[2*dim+Spalte])] or
- not EMoeglich[S*(groeszen[0]+1)];
+ AMoeglich[s*(groeszen[0]+1)+max(0,rand[2*dim+spalte])] or
+ not EMoeglich[s*(groeszen[0]+1)];
exit;
end;
if spalte=-1 then begin
if rand[3*dim+zeile]=-1 then
exit;
w:=0;
- for I:=0 to dim-1 do begin
+ for i:=0 to dim-1 do begin
{$IFDEF buchstaben}
w:=w*(groeszen[0]+2)+inhalt[zeile*dim+i]+1;
{$ENDIF}
@@ -547,7 +547,7 @@ begin
{$ENDIF}
end;
result:=
- EMoeglich[w*(groeszen[0]+1)+max(0,Rand[3*dim+zeile])] or
+ EMoeglich[w*(groeszen[0]+1)+max(0,rand[3*dim+zeile])] or
not EMoeglich[w*(groeszen[0]+1)];
exit;
end;
@@ -578,24 +578,24 @@ begin
{$IFDEF buchstaben}
if inhalt[i+dim*j]=0 then
continue;
- Rand[I]:=inhalt[I+dim*J];
+ rand[i]:=inhalt[i+dim*j];
break;
{$ENDIF}
{$IFDEF hochhaus}
- if inhalt[I+dim*J]>H then begin
- H:=inhalt[I+dim*J];
- inc(Z);
+ if inhalt[i+dim*j]>h then begin
+ h:=inhalt[i+dim*j];
+ inc(z);
end;
{$ENDIF}
end;
{$IFDEF hochhaus}
- Rand[I]:=Z;
+ rand[i]:=z;
- H:=0;
- Z:=0;
+ h:=0;
+ z:=0;
{$ENDIF}
- For J:=dim-1 downto 0 do begin
- if inhalt[I+dim*J]=-1 then begin
+ for j:=dim-1 downto 0 do begin
+ if inhalt[i+dim*j]=-1 then begin
{$IFDEF hochhaus}
z:=0;
{$ENDIF}
@@ -604,69 +604,70 @@ begin
{$IFDEF buchstaben}
if inhalt[i+dim*j]=0 then
continue;
- Rand[2*dim+I]:=inhalt[I+dim*J];
+ rand[2*dim+i]:=inhalt[i+dim*j];
break;
{$ENDIF}
{$IFDEF hochhaus}
- if inhalt[I+dim*J]>H then begin
- H:=inhalt[I+dim*J];
- inc(Z);
+ if inhalt[i+dim*j]>h then begin
+ h:=inhalt[i+dim*j];
+ inc(z);
end;
{$ENDIF}
end;
{$IFDEF hochhaus}
- Rand[2*dim+I]:=Z;
+ rand[2*dim+i]:=z;
- H:=0;
- Z:=0;
+ h:=0;
+ z:=0;
{$ENDIF}
- For J:=dim-1 downto 0 do begin
- if inhalt[J+dim*I]=-1 then begin
+ for j:=dim-1 downto 0 do begin
+ if inhalt[j+dim*i]=-1 then begin
{$IFDEF hochhaus}
z:=0;
{$ENDIF}
break;
end;
{$IFDEF buchstaben}
- if inhalt[J+dim*I]=0 then
+ if inhalt[j+dim*i]=0 then
continue;
- Rand[dim+I]:=inhalt[J+dim*I];
+ rand[dim+i]:=inhalt[j+dim*i];
break;
{$ENDIF}
{$IFDEF hochhaus}
- if inhalt[J+dim*I]>H then begin
- H:=inhalt[J+dim*I];
- inc(Z);
+ if inhalt[j+dim*i]>h then begin
+ h:=inhalt[j+dim*i];
+ inc(z);
end;
{$ENDIF}
end;
{$IFDEF hochhaus}
- Rand[dim+I]:=Z;
+ rand[dim+i]:=z;
- H:=0;
- Z:=0;
+ h:=0;
+ z:=0;
{$ENDIF}
- For J:=0 to dim-1 do begin
- if inhalt[J+dim*I]=-1 then begin
+ for j:=0 to dim-1 do begin
+ if inhalt[j+dim*i]=-1 then begin
{$IFDEF hochhaus}
- Z:=0;
+ z:=0;
{$ENDIF}
break;
end;
{$IFDEF buchstaben}
- if inhalt[J+dim*I]=0 then continue;
- Rand[3*dim+I]:=inhalt[J+dim*I];
+ if inhalt[j+dim*i]=0 then
+ continue;
+ rand[3*dim+i]:=inhalt[j+dim*i];
break;
{$ENDIF}
{$IFDEF hochhaus}
- if inhalt[J+dim*I]>H then begin
- H:=inhalt[J+dim*I];
- inc(Z);
+ if inhalt[j+dim*i]>h then begin
+ h:=inhalt[j+dim*i];
+ inc(z);
end;
{$ENDIF}
end;
{$IFDEF hochhaus}
- Rand[3*dim+I]:=Z;
+ rand[3*dim+i]:=z;
{$ENDIF}
end;
end;
@@ -675,7 +676,7 @@ end;
{$IFDEF relativeInhaltsAenderung}
// procedure tHochhausRaetsel.relativeInhaltsAenderung(diff: longint);
begin
- if (cursorPosition<0) or (cursorPosition>=dim*dim) or startfeld[cursorPosition] then
+ if (cursorPosition<0) or (cursorPosition>=dim*dim) or startFeld[cursorPosition] then
exit;
alsZugSpeichern;
{$IFDEF hochhaus}
@@ -694,7 +695,7 @@ end;
{$IFDEF absoluteInhaltsAenderung}
// function tHochhausRaetsel.absoluteInhaltsAenderung(key: word): boolean;
begin
- if (cursorPosition<0) or (cursorPosition>=dim*dim) or startfeld[cursorPosition] then begin
+ if (cursorPosition<0) or (cursorPosition>=dim*dim) or startFeld[cursorPosition] then begin
result:=false;
exit;
end;
@@ -738,29 +739,29 @@ var
perm: tLongintArray;
begin
result:=false;
- setlength(perm,0);
+ setLength(perm,0);
for p:=lPos+1 to dim*dim-1 do
- if inhalt[P]=-1 then begin
+ if inhalt[p]=-1 then begin
{$IFDEF buchstaben}
perm:=permutation(groeszen[0]+1);
{$ENDIF}
{$IFDEF hochhaus}
perm:=permutation(dim);
{$ENDIF}
- for I:=0 to dim-1 do begin
+ for i:=0 to dim-1 do begin
{$IFDEF buchstaben}
- inhalt[P]:=Perm[I];
+ inhalt[p]:=perm[i];
{$ENDIF}
{$IFDEF hochhaus}
- inhalt[P]:=Perm[I]+1;
+ inhalt[p]:=perm[i]+1;
{$ENDIF}
- if passt(P mod dim,P div dim) then
- if loesen(P) then begin
+ if passt(p mod dim,p div dim) then
+ if loesen(p) then begin
result:=true;
exit;
end;
end;
- inhalt[P]:=-1;
+ inhalt[p]:=-1;
exit;
end;
result:=true;
@@ -773,21 +774,21 @@ var
i,p: integer;
begin
result:=0;
- for P:=lPos+1 to dim*dim-1 do
- if inhalt[P]=-1 then begin
+ for p:=lPos+1 to dim*dim-1 do
+ if inhalt[p]=-1 then begin
for
- {$IFDEF hochhaus} I:=1 {$ENDIF}
- {$IFDEF buchstaben}I:=0 {$ENDIF}
+ {$IFDEF hochhaus} i:=1 {$ENDIF}
+ {$IFDEF buchstaben}i:=0 {$ENDIF}
to groeszen[0] do begin
- inhalt[P]:=I;
- if passt(P mod dim,P div dim) then
- result:=result+Anzloesungen(P);
+ inhalt[p]:=i;
+ if passt(p mod dim,p div dim) then
+ result:=result+anzLoesungen(p);
if result>=2 then begin
- inhalt[P]:=-1;
+ inhalt[p]:=-1;
exit;
end;
end;
- inhalt[P]:=-1;
+ inhalt[p]:=-1;
exit;
end;
result:=1;
diff --git a/raetselunit.pas b/raetselunit.pas
index 982d7ff..ad4a43a 100644
--- a/raetselunit.pas
+++ b/raetselunit.pas
@@ -15,7 +15,7 @@ type
tButtonWithArrowKeys = class(tButton)
private
- procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
+ procedure wMGetDlgCode(var msg: tWMGetDlgCode); message wM_GETDLGCODE;
end;
tSmarterCheckBox = class(tCheckBox)
@@ -23,11 +23,11 @@ type
end;
tZug = record
- Position: integer;
- Vorher: integer;
+ position: integer;
+ vorher: integer;
vorherFarbe,
nachherFarbe,
- vorherMalFarbe: TColor;
+ vorherMalFarbe: tColor;
end;
tOnSetCaption = procedure(c: string) of object;
@@ -36,12 +36,12 @@ type
private
besitzer: tForm;
farbWahlFlaeche,
- zeichenflaeche: tImage;
+ zeichenFlaeche: tImage;
erzeugeBtn,
speichernBtn,
ladenBtn: tButtonWithArrowKeys;
zufallSE: tSpinEdit;
- progressbar1: tProgressBar;
+ progressBar1: tProgressBar;
aktuelleFarbe: tColor;
function besitzerHoehe: longint; dynamic;
function besitzerBreite: longint; dynamic;
@@ -63,7 +63,7 @@ type
function passt(spalte,zeile: integer): boolean; dynamic; abstract;
function geloest: boolean; dynamic; abstract;
procedure randErzeugen; dynamic; abstract;
- procedure startfelderFestlegen; dynamic; abstract;
+ procedure startFelderFestlegen; dynamic; abstract;
procedure speichern(var datei: file); dynamic;
procedure laden(var datei: file); dynamic;
public
@@ -83,8 +83,8 @@ type
cursorPosition: longint;
zellGroesze: extended;
uebersetze: tAlphabetFunktion;
- FeldFarben: array of tColor;
- startfeld: array of boolean;
+ 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;
@@ -99,7 +99,7 @@ type
procedure relativeInhaltsAenderung(diff: longint); dynamic; abstract;
function absoluteInhaltsAenderung(key: word): boolean; dynamic; abstract;
procedure gesamtRaenderErzeugen; dynamic; abstract;
- procedure startfelderfestlegen; override;
+ procedure startFelderFestlegen; override;
procedure alsZugSpeichern;
procedure speichern(var datei: file); override;
procedure laden(var datei: file); override;
@@ -121,8 +121,8 @@ type
{$UNDEF interface}
-function farbverlauf(wo: extended): tColor;
-function RGB2TColor(R,G,B: Extended): TColor; inline;
+function farbVerlauf(wo: extended): tColor;
+function rgb2TColor(r,g,b: extended): tColor; inline;
const
spacing = 2;
@@ -143,43 +143,43 @@ function buchstabenAlphabetFunktion(i: longint): string;
{$UNDEF buchstaben}
{$UNDEF alphabetFunktion}
-function farbverlauf(wo: extended): tColor;
+function farbVerlauf(wo: extended): tColor;
const
- R: array[0..6] of extended = (0.5,0.9,0.9, 0, 0,0.2,0);
- G: array[0..6] of extended = ( 0,0.5,0.9,0.7,0.7,0.2,0);
- B: array[0..6] of extended = (0.7, 0, 0, 0,0.7, 1,0);
+ r: array[0..6] of extended = (0.5,0.9,0.9, 0, 0,0.2,0);
+ g: array[0..6] of extended = ( 0,0.5,0.9,0.7,0.7,0.2,0);
+ b: array[0..6] of extended = (0.7, 0, 0, 0,0.7, 1,0);
var
i: integer;
begin
- wo:=wo*(length(R)-1);
- I:=floor(Wo);
- Wo:=Wo-I;
- if I<0 then begin
- result:=RGB2TColor(R[0],G[0],B[0]);
+ wo:=wo*(length(r)-1);
+ i:=floor(wo);
+ wo:=wo-i;
+ if i<0 then begin
+ result:=rgb2TColor(r[0],g[0],b[0]);
exit;
end;
- if I>=(length(R)-1) then begin
- result:=RGB2TColor(R[length(R)-1],G[length(R)-1],B[length(R)-1]);
+ if i>=(length(r)-1) then begin
+ result:=rgb2TColor(r[length(r)-1],g[length(r)-1],b[length(r)-1]);
exit;
end;
- result:=RGB2TColor(R[I+1]*Wo+R[I]*(1-Wo),
- G[I+1]*Wo+G[I]*(1-Wo),
- B[I+1]*Wo+B[I]*(1-Wo));
+ result:=rgb2TColor(r[i+1]*wo+r[i]*(1-wo),
+ g[i+1]*wo+g[i]*(1-wo),
+ b[i+1]*wo+b[i]*(1-wo));
end;
-function RGB2TColor(R,G,B: extended): tColor;
+function rgb2TColor(r,g,b: extended): tColor;
begin
- result:=max(0,min($FF,round(R*$100))) or
- (max(0,min($FF,round(G*$100))) shl 8) or
- (max(0,min($FF,round(B*$100))) shl 16);
+ result:=max(0,min($FF,round(r*$100))) or
+ (max(0,min($FF,round(g*$100))) shl 8) or
+ (max(0,min($FF,round(b*$100))) shl 16);
end;
-// tButtonWithArrowkeys ********************************************************
+// tButtonWithArrowKeys ********************************************************
-procedure tButtonWithArrowkeys.WMGetDlgCode(var msg: tWMGetDLGCODE);// message WM_GETDLGCODE;
+procedure tButtonWithArrowKeys.wMGetDlgCode(var msg: tWMGetDlgCode);// message wM_GETDLGCODE;
begin
inherited;
- msg.Result := msg.Result or DLGC_WANTARROWS;
+ msg.result := msg.result or DLGC_WANTARROWS;
end;
// tSmarterCheckBox ************************************************************
@@ -203,9 +203,9 @@ begin
inherited create;
randomize;
besitzer:=aOwner;
- zeichenflaeche:=tImage.create(besitzer);
- zeichenflaeche.parent:=besitzer;
- zeichenflaeche.onMouseDown:=@onMouseDown;
+ zeichenFlaeche:=tImage.create(besitzer);
+ zeichenFlaeche.parent:=besitzer;
+ zeichenFlaeche.onMouseDown:=@onMouseDown;
farbWahlFlaeche:=tImage.create(besitzer);
farbWahlFlaeche.parent:=besitzer;
farbWahlFlaeche.onMouseDown:=@onFarbWahlMouseDown;
@@ -242,29 +242,29 @@ begin
zufallSE.value:=random(zufallSE.maxValue+1);
zufallSE.showHint:=true;
zufallSE.hint:='Nummer';
- progressbar1:=tProgressBar.create(besitzer);
- progressbar1.visible:=false;
- progressbar1.smooth:=true;
- progressbar1.parent:=besitzer;
+ progressBar1:=tProgressBar.create(besitzer);
+ progressBar1.visible:=false;
+ progressBar1.smooth:=true;
+ progressBar1.parent:=besitzer;
end;
destructor tRaetsel.destroy;
begin
- zeichenflaeche.free;
+ zeichenFlaeche.free;
farbWahlFlaeche.free;
inherited destroy;
end;
function tRaetsel.besitzerHoehe: longint;
begin
- result:=zeichenflaeche.height+zeichenflaeche.top+spacing;
+ result:=zeichenFlaeche.height+zeichenFlaeche.top+spacing;
end;
function tRaetsel.besitzerBreite: longint;
begin
result:=
max(
- zeichenflaeche.width+zeichenflaeche.left,
+ zeichenFlaeche.width+zeichenFlaeche.left,
ladenBtn.width+ladenBtn.left
)+spacing;
end;
@@ -274,15 +274,15 @@ var
i: tImage;
begin
i:=tImage.create(besitzer);
- i.parent:=zeichenflaeche.parent;
- i.left:=zeichenflaeche.left;
- i.top:=zeichenflaeche.top;
- i.width:=zeichenflaeche.width;
- i.height:=zeichenflaeche.height;
- i.canvas.font.size:=zeichenflaeche.canvas.font.size;
- i.onMouseDown:=zeichenflaeche.onMouseDown;
- zeichenflaeche.free;
- zeichenflaeche:=i;
+ i.parent:=zeichenFlaeche.parent;
+ i.left:=zeichenFlaeche.left;
+ i.top:=zeichenFlaeche.top;
+ i.width:=zeichenFlaeche.width;
+ i.height:=zeichenFlaeche.height;
+ i.canvas.font.size:=zeichenFlaeche.canvas.font.size;
+ i.onMouseDown:=zeichenFlaeche.onMouseDown;
+ zeichenFlaeche.free;
+ zeichenFlaeche:=i;
i:=tImage.create(besitzer);
i.parent:=farbWahlFlaeche.parent;
@@ -300,9 +300,9 @@ end;
procedure tRaetsel.onFarbWahlMouseDown(sender: tObject; button: tMouseButton; shiftState: tShiftState; x,y: longint);
begin
- if Button<>mbLeft then
+ if button<>mbLeft then
exit;
- aktuelleFarbe:=Farbverlauf(X/farbWahlFlaeche.Width);
+ aktuelleFarbe:=farbVerlauf(x/farbWahlFlaeche.width);
farbWahlFlaecheBemalen;
end;
@@ -310,15 +310,15 @@ procedure tRaetsel.onFarbWahlMouseMove(sender: tObject; shiftState: tShiftState;
begin
if not(ssLeft in shiftState) then
exit;
- aktuelleFarbe:=Farbverlauf(X/farbWahlFlaeche.Width);
+ aktuelleFarbe:=farbVerlauf(x/farbWahlFlaeche.width);
farbWahlFlaecheBemalen;
end;
procedure tRaetsel.onFarbWahlMouseUp(sender: tObject; button: tMouseButton; shiftState: tShiftState; x,y: longint);
begin
- if Button<>mbLeft then
+ if button<>mbLeft then
exit;
- aktuelleFarbe:=Farbverlauf(X/farbWahlFlaeche.Width);
+ aktuelleFarbe:=farbVerlauf(x/farbWahlFlaeche.width);
farbWahlFlaecheBemalen;
end;
@@ -372,13 +372,13 @@ procedure tRaetsel.farbWahlFlaecheBemalen;
var
i: integer;
begin
- farbWahlFlaeche.Canvas.Pen.Color:=aktuelleFarbe;
- farbWahlFlaeche.Canvas.Brush.Color:=aktuelleFarbe;
- farbWahlFlaeche.Canvas.Rectangle(0,0,farbWahlFlaeche.width,farbWahlFlaeche.height div 2);
- For I:=0 to farbWahlFlaeche.width-1 do begin
- farbWahlFlaeche.Canvas.Pen.Color:=farbverlauf(I/farbWahlFlaeche.Width);
- farbWahlFlaeche.Canvas.Moveto(I,farbWahlFlaeche.height div 2);
- farbWahlFlaeche.Canvas.Lineto(I,farbWahlFlaeche.height);
+ farbWahlFlaeche.canvas.pen.color:=aktuelleFarbe;
+ farbWahlFlaeche.canvas.brush.color:=aktuelleFarbe;
+ farbWahlFlaeche.canvas.rectangle(0,0,farbWahlFlaeche.width,farbWahlFlaeche.height div 2);
+ for i:=0 to farbWahlFlaeche.width-1 do begin
+ farbWahlFlaeche.canvas.pen.color:=farbVerlauf(i/farbWahlFlaeche.width);
+ farbWahlFlaeche.canvas.moveTo(i,farbWahlFlaeche.height div 2);
+ farbWahlFlaeche.canvas.lineTo(i,farbWahlFlaeche.height);
end;
end;
@@ -401,8 +401,8 @@ begin
inherited create(aOwner);
uebersetze:=alphabetFunktion;
cursorPosition:=-1;
- setlength(spinEdits,anzInhTypen+1);
- setlength(groeszen,length(spinEdits)-1);
+ setLength(spinEdits,anzInhTypen+1);
+ setLength(groeszen,length(spinEdits)-1);
for i:=0 to length(spinEdits)-1 do begin
spinEdits[i]:=tSpinEdit.create(besitzer);
spinEdits[i].onKeyDown:=@onKeyDown;
@@ -443,8 +443,8 @@ begin
farbWahlFlaeche.left:=spacing;
farbWahlFlaeche.top:=diagonalenCB.top+diagonalenCB.height+spacing;
farbWahlFlaeche.height:=16;
- zeichenflaeche.left:=spacing;
- zeichenflaeche.top:=farbWahlFlaeche.top+farbWahlFlaeche.height+spacing;
+ zeichenFlaeche.left:=spacing;
+ zeichenFlaeche.top:=farbWahlFlaeche.top+farbWahlFlaeche.height+spacing;
aktualisiereGroesze;
end;
@@ -467,15 +467,15 @@ 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);
+ 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;
+ zeichnen;
exit;
end;
@@ -529,13 +529,13 @@ begin
groeszen[i]:=spinEdits[i+1].value;
dim:=dim+groeszen[i];
end;
- setlength(inhalt,dim*dim);
- setlength(startfeld,dim*dim);
- setlength(feldFarben,dim*dim);
- setlength(rand,4*dim);
+ setLength(inhalt,dim*dim);
+ setLength(startFeld,dim*dim);
+ setLength(feldFarben,dim*dim);
+ setLength(rand,4*dim);
- NSqrt:=round(sqrt(dim));
- sudokuCB.enabled:=Sqr(NSqrt)=dim;
+ nSqrt:=round(sqrt(dim));
+ sudokuCB.enabled:=Sqr(nSqrt)=dim;
if (not sudokuCB.enabled) and sudokuCB.checked then
sudokuCB.checked:=false;
@@ -550,7 +550,7 @@ var
i: longint;
begin
aktuelleFarbe:=$000000;
- setlength(zuege,0);
+ setLength(zuege,0);
for i:=0 to length(inhalt)-1 do begin
inhalt[i]:=-1;
startFeld[i]:=true;
@@ -567,13 +567,13 @@ var
i,w: longint;
begin
p:=permutation(dim*dim);
- progressbar1.step:=1;
- progressbar1.min:=0;
- progressbar1.max:=dim*(dim+4);
- progressbar1.position:=0;
- progressbar1.visible:=true;
+ progressBar1.step:=1;
+ progressBar1.min:=0;
+ progressBar1.max:=dim*(dim+4);
+ progressBar1.position:=0;
+ progressBar1.visible:=true;
for i:=0 to length(p)-1 do begin
- progressbar1.stepIt;
+ progressBar1.stepIt;
application.processMessages;
if inhalt[p[i]]<0 then
continue;
@@ -585,7 +585,7 @@ begin
p:=permutation(dim*4);
for i:=0 to length(p)-1 do begin
- progressbar1.stepIt;
+ progressBar1.stepIt;
application.processMessages;
if rand[p[i]]<0 then continue;
w:=rand[p[i]];
@@ -593,22 +593,22 @@ begin
if anzLoesungen(-1)<>1 then
rand[p[i]]:=w;
end;
- progressbar1.visible:=false;
+ progressBar1.visible:=false;
end;
procedure tFelderRaetsel.aktualisiereZeichenflaechenGroesze;
begin
- zeichenflaeche.canvas.font.size:=schriftGroesze;
+ zeichenFlaeche.canvas.font.size:=schriftGroesze;
zellGroesze:=
- 2*spacing + zeichenflaeche.canvas.pen.width +
+ 2*spacing + zeichenFlaeche.canvas.pen.width +
max(
- zeichenflaeche.canvas.textWidth(uebersetze(dim)),
- zeichenflaeche.canvas.textHeight(uebersetze(dim))
+ zeichenFlaeche.canvas.textWidth(uebersetze(dim)),
+ zeichenFlaeche.canvas.textHeight(uebersetze(dim))
);
- zeichenflaeche.height:=round((dim+2)*zellGroesze);
- zeichenflaeche.width:=zeichenflaeche.height;
+ zeichenFlaeche.height:=round((dim+2)*zellGroesze);
+ zeichenFlaeche.width:=zeichenFlaeche.height;
farbWahlFlaeche.height:=16;
- farbWahlFlaeche.width:=zeichenflaeche.width;
+ farbWahlFlaeche.width:=zeichenFlaeche.width;
zeichenFlaecheNeuKreieren;
besitzer.height:=besitzerHoehe;
besitzer.width:=
@@ -617,7 +617,7 @@ begin
sudokuCB.left+sudokuCB.width+spacing),
spinEdits[length(spinEdits)-1].left+spinEdits[length(spinEdits)-1].width+spacing
);
- progressbar1.width:=besitzer.width;
+ progressBar1.width:=besitzer.width;
zeichnen;
end;
@@ -645,7 +645,7 @@ var
s: string;
begin
s:=uebersetze(i);
- with zeichenflaeche.canvas do begin
+ with zeichenFlaeche.canvas do begin
brush.color:=$FFFFFF;
if (x>=0) and (y>=0) and (x<dim) and (y<dim) and (diagonalenCB.checked and ((x=y) or (x+y=dim-1))) then
brush.color:=brush.color - $181818;
@@ -674,20 +674,20 @@ procedure tFelderRaetsel.zeichnen;
var
i: longint;
begin
- zeichenflaeche.canvas.brush.color:=$ffffff;
- zeichenflaeche.canvas.rectangle(-10,-10,zeichenflaeche.width+10,zeichenflaeche.height+10);
- zeichenflaeche.canvas.pen.width:=3-2*byte(sudokuCB.checked);
- zeichenflaeche.canvas.pen.color:=$000000;
+ zeichenFlaeche.canvas.brush.color:=$ffffff;
+ zeichenFlaeche.canvas.rectangle(-10,-10,zeichenFlaeche.width+10,zeichenFlaeche.height+10);
+ zeichenFlaeche.canvas.pen.width:=3-2*byte(sudokuCB.checked);
+ zeichenFlaeche.canvas.pen.color:=$000000;
if diagonalenCB.checked then
for i:=1 to dim do begin
- zeichenflaeche.canvas.brush.color:=$ffffff - $181818;
- zeichenflaeche.canvas.fillRect(
+ zeichenFlaeche.canvas.brush.color:=$ffffff - $181818;
+ zeichenFlaeche.canvas.fillRect(
round(i*zellGroesze),
round(i*zellGroesze),
round((i+1)*zellGroesze),
round((i+1)*zellGroesze)
);
- zeichenflaeche.canvas.fillRect(
+ zeichenFlaeche.canvas.fillRect(
round(i*zellGroesze),
round((dim-i+1)*zellGroesze),
round((i+1)*zellGroesze),
@@ -695,31 +695,31 @@ begin
);
end;
for i:=0 to dim do
- with zeichenflaeche.canvas do begin
+ with zeichenFlaeche.canvas do begin
pen.width:=3-2*byte(sudokuCB.checked and (i mod nSqrt <> 0));
moveTo(round((i+1)*zellGroesze),round(zellGroesze));
lineTo(round((i+1)*zellGroesze),round((dim+1)*zellGroesze));
moveTo(round(zellGroesze),round((i+1)*zellGroesze));
lineTo(round((dim+1)*zellGroesze),round((i+1)*zellGroesze));
end;
- zeichenflaeche.canvas.pen.width:=3;
- zeichenflaeche.canvas.pen.color:=$8080ff;
+ zeichenFlaeche.canvas.pen.width:=3;
+ zeichenFlaeche.canvas.pen.color:=$8080ff;
if (cursorPosition>=0) and (dim>0) then begin
- zeichenflaeche.canvas.brush.color:=
+ zeichenFlaeche.canvas.brush.color:=
$ffffff - $181818 * byte(
diagonalenCB.checked and (
(cursorPosition mod (dim+1)=0) or
(cursorPosition mod (dim-1)=0)
)
);
- zeichenflaeche.canvas.rectangle(
+ zeichenFlaeche.canvas.rectangle(
round(((cursorPosition mod dim)+1)*zellGroesze),
round(((cursorPosition div dim)+1)*zellGroesze),
round(((cursorPosition mod dim)+2)*zellGroesze+1),
round(((cursorPosition div dim)+2)*zellGroesze+1)
);
end;
- zeichenflaeche.canvas.brush.color:=$ffffff;
+ zeichenFlaeche.canvas.brush.color:=$ffffff;
for i:=0 to dim-1 do begin
schreibeZentriert(i,-1,rand[i]);
schreibeZentriert(dim,i,rand[dim+i]);
@@ -730,12 +730,12 @@ begin
schreibeZentriert(i mod dim,i div dim,inhalt[i]);
end;
-procedure tFelderRaetsel.startfelderfestlegen;
+procedure tFelderRaetsel.startFelderFestlegen;
var
i: longint;
begin
for i:=0 to length(inhalt)-1 do
- startfeld[i]:=inhalt[i]>=0;
+ startFeld[i]:=inhalt[i]>=0;
end;
procedure tFelderRaetsel.alsZugSpeichern;
@@ -764,32 +764,32 @@ begin
b:=byte(sudokuCB.checked);
blockWrite(datei,b,1);
i:=length(groeszen);
- blockWrite(datei,i,sizeof(i));
+ blockWrite(datei,i,sizeOf(i));
if length(groeszen)>0 then
- blockWrite(datei,groeszen[0],length(groeszen)*sizeof(groeszen[0]));
+ blockWrite(datei,groeszen[0],length(groeszen)*sizeOf(groeszen[0]));
i:=length(inhalt);
- blockWrite(datei,i,sizeof(i));
+ blockWrite(datei,i,sizeOf(i));
if length(inhalt)>0 then
- blockWrite(datei,inhalt[0],length(inhalt)*sizeof(inhalt[0]));
+ blockWrite(datei,inhalt[0],length(inhalt)*sizeOf(inhalt[0]));
i:=length(rand);
- blockWrite(datei,i,sizeof(i));
+ 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));
+ 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));
+ blockWrite(datei,i,sizeOf(i));
if length(feldFarben)>0 then
- blockWrite(datei,feldFarben[0],length(feldFarben)*sizeof(feldFarben[0]));
+ blockWrite(datei,feldFarben[0],length(feldFarben)*sizeOf(feldFarben[0]));
i:=length(startFeld);
- blockWrite(datei,i,sizeof(i));
+ blockWrite(datei,i,sizeOf(i));
if length(startFeld)>0 then
- blockWrite(datei,startFeld[0],length(startFeld)*sizeof(startFeld[0]));
+ blockWrite(datei,startFeld[0],length(startFeld)*sizeOf(startFeld[0]));
i:=length(zuege);
- blockWrite(datei,i,sizeof(i));
+ blockWrite(datei,i,sizeOf(i));
if length(zuege)>0 then
- blockWrite(datei,zuege[0],length(zuege)*sizeof(zuege[0]));
+ blockWrite(datei,zuege[0],length(zuege)*sizeOf(zuege[0]));
inherited speichern(datei);
end;
@@ -816,32 +816,32 @@ begin
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]));
+ 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,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,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,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,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]));
+ blockRead(datei,zuege[0],length(zuege)*sizeOf(zuege[0]));
inherited laden(datei);
end;
diff --git a/unit1.pas b/unit1.pas
index 05b97d8..84cda28 100644
--- a/unit1.pas
+++ b/unit1.pas
@@ -13,12 +13,12 @@ type
{ tForm1 }
tForm1 = class(tForm)
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure FormShow(Sender: TObject);
+ procedure formCreate(sender: tObject);
+ procedure formDestroy(sender: tObject);
+ procedure formShow(sender: tObject);
private
{ private declarations }
- procedure WMGetDlgCode(var msg: tMessage); message WM_GETDLGCODE;
+ procedure wMGetDlgCode(var msg: tMessage); message wM_GETDLGCODE;
procedure onSetCaption(c: string);
public
{ public declarations }
@@ -26,7 +26,7 @@ type
end;
var
- Form1: TForm1;
+ form1: tForm1;
implementation
@@ -37,7 +37,7 @@ uses
// tForm1 **********************************************************************
-procedure tForm1.WMGetDlgCode(var msg: tMessage);// message WM_GETDLGCODE;
+procedure tForm1.wMGetDlgCode(var msg: tMessage);// message wM_GETDLGCODE;
begin
inherited;
msg.result := msg.result or DLGC_WANTARROWS;
@@ -64,12 +64,12 @@ begin
form1.caption:=c;
end;
-procedure tForm1.FormDestroy(Sender: TObject);
+procedure tForm1.formDestroy(sender: tObject);
begin
raetsel.free;
end;
-procedure tForm1.FormShow(Sender: TObject);
+procedure tForm1.formShow(sender: tObject);
begin
if assigned(raetsel) then
raetsel.zeichnen;
diff --git a/unit2.pas b/unit2.pas
index 11e7551..8c30ae8 100644
--- a/unit2.pas
+++ b/unit2.pas
@@ -11,9 +11,9 @@ type
{ TForm2 }
- TForm2 = class(TForm)
- Button1: TButton;
- Button2: TButton;
+ tForm2 = class(tForm)
+ button1: tButton;
+ button2: tButton;
private
{ private declarations }
public
@@ -21,7 +21,7 @@ type
end;
var
- Form2: TForm2;
+ form2: tForm2;
const
mrHochhausraetsel = 314;