Prinzipiell lässt sich das über einen Stringggrid Regeln. Du benötigst allerding wohl noch ein temporären zweiten Grid (Array) als Zwischenspeicher - so würde ich es zumindest machen.
was die Belegung angeht:
ermittle mittel Random() eine x und eine y Koordinate und prüfe ob dieses Feld bereits belegt ist, wenn nicht setzt du dort ein Kästchen und erhöhst eine Variable, welche die gesetzten Kästchen zählt um eins.
Ist das Feld dagegen schon belegt, fang einfach wieder an und such neue Koordinaten und Teste wieder auf Belegung usw.
Delphi-Quellcode:
var x, y, Anzahl: integer;
Randomize; //Initialisiert Random
repeat
x := Random(Grid.RowCount);
Y := Random(Grid.ColCount);
if Grid.Cells[y, x] = '' then
begin
Grid.Cells[y, x] := 'B'; //B kennzeichnet dabei besetzte Zellen
inc(Anzahl);
end;
until Anzahl = Eingestellter Anzahl;
Ist nur ein grobes Beispiel zur Umsetzungsweise
Johannes M.