Hab das auch schonmal vor einigen Jahren gemacht, den Source hab ich jetzt leider nicht bei der Hand, sonst hätte ich ihn dir gegeben. Aber wie wäre folgendes?
Code:
1. Zufälliges Feld auswählen (--> "AusgangsFeld")
2. Richtung bestimmen (horizontal oder vertikal --> "Richtung")
3. Erstmal schauen, ob das Schiff überhaupt auf dem Spielfeld liegt:
Delphi-Quellcode:
case Richtung of
0 : // nach rechts
Passt := AusgangsFeld.x + Groesse -1 <= 10;
1 : // nach unten
Passt := AusgangsFeld.y + Groesse -1 <= 10;
end;
Code:
4. Wenn das Schiff auf dem Spielfeld liegt, dann überprüfen, ob es nirgends "aneckt"
Delphi-Quellcode:
var x1,x2,y1,y2 : integer;
//...
if Passt
then
begin
x1 := Max(AusgangsFeld.x-1,1);
// aus der Unit Math
x2 := Min(Ausgangsfeld.x+Groesse-1,10);
y1 := Max(AusgangsFeld.y-1,1);
y2 := Min(Ausgangsfeld.y+Groesse-1,10);
//
repeat
repeat
Passt :=
not(Felder[x2,y2])
// je nachdem wie du deine Felder halt speicherst
//
dec(y2);
until (y2 < y1)
or not(Passt);
//
dec(x2);
until (x2 < x1)
or not(Passt);
end;
Das ganze machst du für jedes Schiff sooft, bis du ein "Passt" hast.
Hoffe, ich hab keine allzu großen Fehler gemacht
Patti
Edit: Hab gesehen, dass dein Felder-Array von 1 bis 10 und nicht von 0 bis 9 geht. Hab mal den Code von mir etwas angepasst...