Hallo kk
ich hätte da einige Tipps:
1. Randomize
sollte nur
einmal pro Application aufgerufen werden.
Entgegen der weit verbreiteten Meinung, dieses gehöre in die Create-Methode der Form,
empfehle ich den Befehl in der
dpr-Datei aufzurufen:
Delphi-Quellcode:
program Test1;
uses
Forms,
frmMain in 'frmMain.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Randomize;
Application.MainFormOnTaskbar := True;
Application.CreateForm( TForm1, Form1 );
Application.Run;
end.
2. Die Button_StartClick-Moloch-Procedure
würde ich ein wenig in einzelne Bereiche (Procedures) aufteilen, dann wird die nicht so unübersichtlich.
Beispielhaft habe ich das mal aufgeführt ... ist natürlich nicht vollständig.
Delphi-Quellcode:
type
TSpielFeld = array[ 0..9, 0..9 ] of boolean;
function IstFreieStelle( SpielFeld : TSpielFeld; PosX, PosY, Hochkant ) : boolean;
begin
// Prüfen, ob die Position so in Ordnung ist
Result := ...
end;
procedure ZufallPos( const Laenge : integer; var PosX, PosY : integer; var Hochkant : boolean );
var
a, b : integer;
begin
a := Random( 10 );
b := Random( 10 - Laenge );
Hochkant := ( Random( 2 ) = 0 )
if Hochkant then
begin
PosX := a;
PosY := b;
end
else
begin
PosX := b;
PosY := a;
end;
end;
procedure TForm1.button_startClick(Sender: TObject);
var
SchiffLaenge : integer;
SchiffPosX, SchiffPosY : integer;
SchiffHoch : boolean; // True = Hochkant; False = Waagerecht
begin
for SchiffLaenge := 1 to 5 do
begin
repeat
ZufallPos( SchiffLaenge, SchiffPosX, SchiffPosY, SchiffHoch );
until IstFreieStelle( Schiffe_Cpu, SchiffPosX, SchiffPosY, SchiffHoch );
PlatziereSchiff( Schiffe_Cpu, SchiffLaenge, SchiffPosX, SchiffPosY, SchiffHoch );
end;
ZeichneSpielFeld( Schiffe_Cpu );
end;
Wie du siehst ist deine Ursprungs-Procedure nicht mehr so überladen und durch geschickt gewählte Namen auch wesentlich "sprechender".
Vor allem sollte auffallen, dass die Function IstFreiStelle auch dafür benutzt werden kann, die Position der Spieler-Schiffe zu überprüfen