Hallo Danny...
Erst mal Glückwunsch, daß du ein Programm,
was funktioniert, fertiggestellt hast.
Hinter den Kulissen hast du allerdings ein paar Fehler.
Du hast selbst gesagt du willst dich verbessern.
Hinweise:
1: StyleGuide mal durcharbeiten
2:
Dich mit DRY dringend beschäftigen.
3.
Nicht alle Dateien in einem Ordner. Besser eine Ordnerstruktur für dich definieren und als Template für neue Projekte verwenden.
(Beispiel: siehe Bild1)
4.
Codeformatter benutzen. (z.B. CnPack)
5.
kein WTITH im Quelltext (Bild4)
6. Hinweise des Beitrages #10, Punkte 1-4
http://www.delphipraxis.net/1379518-post10.html durcharbeiten.
* Styleguide der 2.
* DRY (Bild3) Hier kann man eine procedure machen mit den entsprechenden Parametern.
* KISS
* CamelCase
* Denglisch bitte vermeiden.
Delphi-Quellcode:
...
function getLaenge: integer;
besser
Delphi-Quellcode:
...
function IsShip(a: TPoint): Boolean;
Verbesserungen:
*
ReportMemoryLeaksOnShutdown := True; in die Projektdatei aufnehmen.
* mehrere Klassen können auch in der selben
Unit stehen.
* Sprechende Namen verbessern. Heute haben wir keine Speicherprobleme mehr.
* Formatter immer benutzen
*
then immer in der gleichen Zeile wie
if (siehe Styleguide)
Delphi-Quellcode:
if a.X=b.X then
begin
vmin:=min(a.Y,b.Y); vmax:=max(a.Y,b.Y);
laenge:=vmax-vmin+1;
if (laenge>5) or (Length(vSchiff[laenge])>=flottengroesse[laenge]) then
result:=false
else
begin
abbruch:=false;
i:=vmin;
repeat
if feld[a.X-1,i-1]=1 then abbruch:=true;
Inc(i);
until abbruch or (i>vmax);
i:=vmin;
if a.X>1
then
repeat
if feld[a.X-2,i-1]=1 then abbruch:=true;
Inc(i);
until abbruch or (i>vmax);
i:=vmin;
if a.X<feldgroesse
then
repeat
if feld[a.X,i-1]=1 then abbruch:=true;
Inc(i);
until abbruch or (i>vmax);
if vmin>1 then
if feld[a.X-1,vmin-2]=1 then abbruch:=true;
if vmax<feldgroesse then
if feld[a.X-1,vmax]=1 then abbruch:=true;
if abbruch
then result:=false
else result:=true
end;
end else
..wird:
Delphi-Quellcode:
if a.X = b.X then
begin
vmin := min(a.Y, b.Y);
vmax := max(a.Y, b.Y);
laenge := vmax - vmin + 1;
if (laenge > 5) or (Length(vSchiff[laenge]) >= flottengroesse[laenge]) then
result := false
else
begin
abbruch := false;
i := vmin;
repeat
if feld[a.X - 1, i - 1] = 1 then
abbruch := true;
Inc(i);
until abbruch or (i > vmax);
i := vmin;
if a.X > 1 then
repeat
if feld[a.X - 2, i - 1] = 1 then
abbruch := true;
Inc(i);
until abbruch or (i > vmax);
i := vmin;
if a.X < feldgroesse then
repeat
if feld[a.X, i - 1] = 1 then
abbruch := true;
Inc(i);
until abbruch or (i > vmax);
if vmin > 1 then
if feld[a.X - 1, vmin - 2] = 1 then
abbruch := true;
if vmax < feldgroesse then
if feld[a.X - 1, vmax] = 1 then
abbruch := true;
if abbruch then
result := false
else
result := true
end;
end
else
Fehler:
1. Warnungen abarbeiten
Dringend:
Zitat:
[dcc32 Warnung] USchiff.pas(18): W1010 Methode 'Destroy' verbirgt virtuelle Methode vom Basistyp 'TObject'
Zitat:
[dcc32 Warnung] UFlotte.pas(31): W1010 Methode 'Destroy' verbirgt virtuelle Methode vom Basistyp 'TObject'
destructor Destroy; override;
Daher kommen auch die Ressource Leaks. (Bild2)
...ansonsten weiter so.
Du hast ja das Forum als Hilfe.