Zitat von
mimi:
Das Klingt doch gut !!!
Du musst jetzt nur beachten: Das Prinzip eines 2D Array geht nur bei gleich Großen Objekten. Bei unterschiedlich Großen Objekten wird es Komplizierter. Da müsstest du ein 1D Array nehmen und mit z.b. PtinRect Arbeiten.
Wie meinst du das mit gleich großen Objekten? Also meine fünf einzelnen Schiffe sind ja quasi nicht gleich groß...also das eine ist 5x1, das andere 4x1 etc...
Jetzt wollte ich die Prozedur für das Hinzufügen der Computer-Schiffe machen. Folgendes habe ich da zusammengebastelt:
Delphi-Quellcode:
procedure TForm1.button_startClick(Sender: TObject);
var cpu_hoehe, cpu_laenge, pos, mx, my, a, i, j, gefunden, xs, ys, t_laenge, t_hoehe : integer;
begin
For a := 1 to 5 do
begin
randomize;
pos := random(2) ;
if pos = 0 then
begin
cpu_laenge := a ;
cpu_hoehe := 1 ;
end
else
begin
cpu_laenge := 1 ;
cpu_hoehe := a ;
end;
repeat
repeat
randomize ;
mx := random(10) ;
until
mx + cpu_laenge < 10 ;
repeat
randomize ;
my := random(10) ;
until
my + cpu_hoehe < 10 ;
gefunden := 0 ;
for i:=0 to cpu_laenge + 1 do
begin
if gefunden = 1 then
begin
break ;
end;
for j:=0 to cpu_hoehe + 1 do
begin
if gefunden = 1 then
begin
break ;
end;
begin
if ( ( mx = 0 ) and ( my = 0 ) and
( i <= cpu_laenge ) and ( j <= cpu_hoehe ) and
( schiffe_cpu [mx + i , my + j] . belegt = true ) ) or
( ( mx = 0 ) and ( my > 0 ) and ( i <= cpu_laenge ) and
( schiffe_cpu [mx + i , my - 1 + j] . belegt = true ) ) or
( ( mx > 0 ) and ( my = 0 ) and ( j <= cpu_hoehe ) and
( schiffe_cpu [mx -1 + i , my + j] . belegt = true ) ) or
( ( mx > 0 ) and ( my > 0 ) and
( schiffe_cpu [mx -1 + i , my - 1 + j] . belegt = true ) ) then
begin
gefunden := 1 ;
end;
end;
end;
end;
until
gefunden = 0 ;
for i:=0 to cpu_laenge - 1 do
begin
for j:=0 to cpu_hoehe - 1 do
begin
schiffe_cpu [mx + i,my + j].belegt := true;
end;
end;
xs := mx * 25 ;
ys := mx * 25 ;
t_laenge := cpu_laenge * 25 ;
t_hoehe := cpu_hoehe * 25 ;
img_comp.canvas.pen.color:=clgreen;
img_comp.Canvas.Pen.Width:=0;
img_comp.canvas.brush.color:=clgreen;
img_comp.canvas.moveto(xs,ys);
img_comp.Canvas.Rectangle(xs, ys, xs+t_laenge, ys+t_hoehe);
end;
button_start . enabled := false ;
end;
end.
Das mit dem Zeichnen am Ende ist nur dazu da, damit ich jetzt sehen kann, ob er die Schiffe richtig platziert bzw. die Spielregeln einhält. Wenn es fertig ist und alles funktioniert, werde ich dies wieder entfernen.
Problem ist jetzt aber nur, dass sich das Programm jetzt aufhängt, sobald es diese Prozedur startet. Und falls es sich mal nicht aufhängt und die Schiffe platziert, hält er nicht die Spielregeln ein. An der langen If-Bedingung kann es aber eigentlich nicht liegen, weil die 1:1 kopiert ist. Also die gleiche Bedingung habe ich auch beim Hinzufügen meiner Schiffe, was fehlerfrei funktioniert..