Bitte benutz den Delphi-Tag um deinen Code im Beitrag zu formatieren.
Sonst kann man das wirklich nicht lesen.
Im Prinzip könnte das z.B. so funktionieren:
Delphi-Quellcode:
type
TForm1 = class(TForm)
{...}
private
FBrickBilder: array[0..4] of TPicture;
FBrick: array[1..6] of record
Image: TImage;
Broken: Integer;
end;
procedure Initialisieren;
procedure DeInitialisieren;
procedure SetBroken(AIndex, AValue: Integer);
procedure CheckBallKollision(AIndex: Integer);
end;
procedure TForm1.Initialisieren;
var
i: Integer;
begin
// ein Bild für jeden Zustand erzeugen und laden
for i := 0 to 4 do
begin
if FBrickBilder[i] = nil then
FBrickBilder[i] := TPicture.Create;
FBrickBilder[i].LoadFromFile('briks' + IntToStr(i) + '.bmp');
end;
// die Images des Formulars für den indizierten Zugriff im array ablegen
FBrick[1].Image := image2;
FBrick[2].Image := image3;
FBrick[3].Image := image4;
FBrick[4].Image := image5;
FBrick[5].Image := image6;
FBrick[6].Image := image7;
// Anfangszustand und Bild zuweisen
for i := 1 to 6 do
SetBroken(i, 0);
end;
procedure TForm1.DeInitialisieren;
var
i: Integer;
begin
// Aufräumen, Speicher der Bilder wieder freigeben
for i := 0 to 4 do
FreeAndNil(FBrickBilder[i]);
end;
procedure TForm1.SetBroken(AIndex, AValue: Integer);
begin
// Zustand und Bild zuweisen
FBrick[AIndex].Broken := AValue;
if AValue in (0..4) then
begin
FBrick[AIndex].Visible := True;
FBrick[AIndex].Picure.Assign(FBrickBilder[AValue])
end
else
FBrick[AIndex].Visible := False;
end;
procedure TForm1.CheckBallKollision(AIndex: Integer);
var
r: TRect;
x, y: Integer;
begin
// Brick sichtbar
if FBrick[AIndex].Image.Visible then
begin
// Überschneidung mit Ball
r := FBrick[AIndex].Image.BoundsRect;
if IntersectRect(imageBALL.BoundsRect, r) then
begin
SetBroken(AIndex, FBrick[AIndex].Broken + 1);
// von Oben
y := imageBALL.BoundsRect.Bottom;
if (y >= r.Top) and (y <= r.Top + 8) then
begin
y_bewegung := y_bewegung * -1;
imageBALL.Top := r.Top - imageBALL.Height;
Exit; //=>
end;
// von Rechts
{...}
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
for i := 1 to 6 do
CheckBallKollision(i);
end;