Einzelnen Beitrag anzeigen

Simme

Registriert seit: 8. Jan 2010
31 Beiträge
 
Delphi 7 Personal
 
#44

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 7. Mär 2010, 15:45
Zitat von wicht:
Debugge die Schleife und guck dir bei jedem Durchlauf den Index an, der gelöscht werden soll.
Also, ich glaube, ich hab noch gar nicht richtig verstanden, was der Debugger überhaupt ist. Ich weiß nämlich nicht, wie man sich da irgendwelche Werte von Variablen oder Parametern anzeigen lassen kann.

Zitat von wicht:
Bomben.Delete(idx) // Hier Breakpoint drauf setzen
Was meinst du mit "Hier Breakpoint drauf setzen"?

Zitat von wicht:
Das was Sir Rufo gepostet hat sieht okay aus und die Rückwärtsschleife benutze ich immer, funktioniert auch. Was meinst du im vorletzten Post mit "allgemeinen Schleife"? Wenn du zwei Schleifen über die selbe Liste hast und in der inneren Schleife Elemente löscht könnte das auch Essig sein.
Wenn du dich nicht mit dem Debugger auseinandersetzt oder den Quelltext postest wird es kompliziert dir zu helfen, jedenfalls was mich betrifft.
Ich habe in einer Variante von mir mal das Delete von der restlichen Funktion getrennt. Die war dann ganz außerhalb. Halt noch im Timer, aber nicht mehr innerhalb der anderen Schleife. Ich hab das jetzt aber wieder reingenommen und habe jetzt eine IF-Funktion drin, die das prüft.

Zitat von wicht:
Ansonsten, das Beispiel von Sir Rufo was er gerade nochmal erwähnte funktioniert einfach nur. Und "ist zu hoch für mich" bringt da nichts, versuche das zu verstehen und frage doch gegebenenfalls nochmal nach, wenn du etwas bestimmtes nicht verstehst. Weil genau das, was in dem Beispiel ist, willst du haben.
Also, ich habe mir nochmal das Programm von Sir Rufo angeschaut und bin jetzt eigentlich durchgestiegen. Mich verwirren nur die vielen für mich seltsamen Variablennamen und die unbekannten Bezeichnungen usw. irritiert, aber ich hab jetzt das Prinzip verstanden. Ich hab nur einen komplett anderen Programmierstil, wie mir scheint, deshalb hab ich da am Anfang nicht durchgeblickt.
Ich habe jetzt versucht, das ganze auf mein Programm zu übertragen. Dabei ist rausgekommen, dass, wenn er einmal in der While-Do-Schleife drin ist, da nie wieder rauskommt.
Meine Fragen zu Sir Rufos Programm: Bei dir ändert sich der Index nicht. Wie kommt er da wieder aus der Schleife raus? Dadurch, dass sich Objektliste.Count ändert? Bei mir zumindest scheint das irgendwie nicht zu funktionieren.
Eine weitere Frage: Was bewirkt das Inc(Index)? Das hab ich noch nie gesehen und ich habe keine Ahnung, was das bewirkt.

So. Und damit ihr auf eure Kosten kommt und mir dadurch vielleicht weiterhelfen könnt, hier der gesamte Quelltext im Timer:
Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
var
  i, e: Integer;
  gesprengt, item : ARRAY[1..4] of Boolean;
  itemx, itemy : Array[1..4] of Integer;
  zeit, x_wert, y_wert, Start, explosion : Integer;
  loesche : Boolean;
begin
  Label5.Caption := IntToStr(Bomben.Count);
  i := 0;
  While i < Bomben.Count do //Alle Bomben die es gibt durchgehen
  begin
    Application.ProcessMessages;
    explosion := TBombe(Bomben[i]).ExplodierZeit;
    if (GetTickCount > explosion) Then//Zeit erreicht?
       begin
       //Boom, Bombe ist hochgegangen
       explosion := GetTickCount + 10000;
       For zeile := 1 To 11 Do For spalte := 1 To 11 Do
         begin
           links := (spalte - 1) * 65;
           oben := (zeile - 1) * 65;
           If ((links <= TBombe(Bomben[i]).Mitte.X) And (links + breite >= TBombe(Bomben[i]).Mitte.X) And (oben <= TBombe(Bomben[i]).Mitte.Y) And (oben + hoehe >= TBombe(Bomben[i]).Mitte.Y)) Then
             begin
               x_wert := spalte;
               y_wert := zeile;
               BREAK;
             end;
         end;
         Label4.Caption := 'Ich bin durch!';
         TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert))).Stretch := False;
         TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert))).Proportional := False;
         For zaehler := 1 To 4 Do gesprengt[zaehler] := False;
           For zaehler := 1 To Spieler1.reichweite Do
            begin
              If (x_wert + zaehler > 0) And (x_wert + zaehler < 12) Then
                begin
                  If mauer[y_wert, x_wert + zaehler] = 6 Then gesprengt[1] := True;
                  If (gesprengt[1] = False) Then
                    begin
                      If ((mauer[y_wert,x_wert + zaehler] = 1) Or (mauer[y_wert,x_wert + zaehler] = 2) Or (mauer[y_wert,x_wert + zaehler] = 3) Or (mauer[y_wert,x_wert + zaehler] = 4)) Then gesprengt[1] := True;
                      Case mauer[y_wert, x_wert + zaehler] of
                      1: begin item[1] := True; itemx[1] := x_wert + zaehler; itemy[1] := y_wert; end;
                      2: begin item[2] := True; itemx[2] := x_wert + zaehler; itemy[2] := y_wert; end;
                      3: begin item[3] := True; itemx[3] := x_wert + zaehler; itemy[3] := y_wert; end;
                      4: begin item[4] := True; itemx[4] := x_wert + zaehler; itemy[4] := y_wert; end;
                      end;
                      //If ((mauer[y_wert,x_wert + zaehler] = 0) Or (mauer[y_wert,x_wert + zaehler] = 5)) Then addon[y_wert,x_wert + zaehler] := 0;
                      mauer[y_wert,x_wert + zaehler] := 0;
                      TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Picture.LoadFromFile('Bilder&Animationen\rot.bmp');
                      If (((Spieler1.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler1.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler1.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler1.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))) Then
                          begin
                            ShowMessage(Form1.name1 + ' ist tot! ' + Form1.name2 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                      If (((Spieler2.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler2.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler2.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler2.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))) Then
                          begin
                            ShowMessage(Form1.name2 + ' ist tot! ' + Form1.name1 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                    end;
                end;
              If (y_wert + zaehler > 0) And (y_wert + zaehler < 12) Then
                begin
                  If mauer[y_wert + zaehler, x_wert ] = 6 Then gesprengt[2] := True;
                  If gesprengt[2] = False Then
                    begin
                      If ((mauer[y_wert + zaehler,x_wert] = 1) Or (mauer[y_wert + zaehler,x_wert] = 2) Or (mauer[y_wert + zaehler,x_wert] = 3) Or (mauer[y_wert + zaehler,x_wert] = 4)) Then gesprengt[2] := True;
                      Case mauer[y_wert + zaehler,x_wert] of
                      1: begin item[1] := True; itemx[1] := x_wert; itemy[1] := y_wert + zaehler; end;
                      2: begin item[2] := True; itemx[2] := x_wert; itemy[2] := y_wert + zaehler; end;
                      3: begin item[3] := True; itemx[3] := x_wert; itemy[3] := y_wert + zaehler; end;
                      4: begin item[4] := True; itemx[4] := x_wert; itemy[4] := y_wert + zaehler; end;
                      end;
                      //If ((mauer[y_wert + zaehler, x_wert] = 0) Or (mauer[y_wert + zaehler, x_wert] = 5)) Then addon[y_wert + zaehler, x_wert] := 0;
                      mauer[y_wert + zaehler, x_wert] := 0;
                      TImage(FindComponent('Feld' + IntToStr(y_wert + zaehler) + '_' + IntToStr(x_wert))).Picture.LoadFromFile('Bilder&Animationen\rot.bmp');
                       If (((Spieler1.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler1.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler1.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler1.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))) Then
                          begin
                            ShowMessage(Form1.name1 + ' ist tot! ' + Form1.name2 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                      If (((Spieler2.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler2.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler2.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler2.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))) Then
                          begin
                            ShowMessage(Form1.name2 + ' ist tot! ' + Form1.name1 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                    end;
                end;
              Spieler1.BringToFront;
            end;
         For zaehler := 1 DownTo -Spieler1.reichweite Do
            begin
              If (x_wert + zaehler > 0) And (x_wert + zaehler < 12) Then
                begin
                  If mauer[y_wert, x_wert + zaehler] = 6 Then gesprengt[3] := True;
                  If (gesprengt[3] = False) Then
                    begin
                      If ((mauer[y_wert,x_wert + zaehler] = 1) Or (mauer[y_wert,x_wert + zaehler] = 2) Or (mauer[y_wert,x_wert + zaehler] = 3) Or (mauer[y_wert,x_wert + zaehler] = 4)) Then gesprengt[3] := True;
                      Case mauer[y_wert, x_wert + zaehler] of
                      1: begin item[1] := True; itemx[1] := x_wert + zaehler; itemy[1] := y_wert; end;
                      2: begin item[2] := True; itemx[2] := x_wert + zaehler; itemy[2] := y_wert; end;
                      3: begin item[3] := True; itemx[3] := x_wert + zaehler; itemy[3] := y_wert; end;
                      4: begin item[4] := True; itemx[4] := x_wert + zaehler; itemy[4] := y_wert; end;
                      end;
                      //If ((mauer[y_wert,x_wert + zaehler] = 0) Or (mauer[y_wert,x_wert + zaehler] = 5)) Then addon[y_wert,x_wert + zaehler] := 0;
                      mauer[y_wert,x_wert + zaehler] := 0;
                      TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Picture.LoadFromFile('Bilder&Animationen\rot.bmp');
                     If (((Spieler1.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler1.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler1.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler1.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler1.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler1.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler1.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))) Then
                          begin
                            ShowMessage(Form1.name1 + ' ist tot! ' + Form1.name2 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                      If (((Spieler2.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler2.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler2.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))
                        Or ((Spieler2.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width)
                        And (Spieler2.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left)
                        And (Spieler2.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height)
                        And (Spieler2.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))) Then
                          begin
                            ShowMessage(Form1.name2 + ' ist tot! ' + Form1.name1 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                    end;

                end;
              If (y_wert + zaehler > 0) And (y_wert + zaehler < 12) Then
                begin
                  If mauer[y_wert + zaehler, x_wert ] = 6 Then gesprengt[4] := True;
                  If gesprengt[4] = False Then
                    begin
                      If ((mauer[y_wert + zaehler,x_wert] = 1) Or (mauer[y_wert + zaehler,x_wert] = 2) Or (mauer[y_wert + zaehler,x_wert] = 3) Or (mauer[y_wert + zaehler,x_wert] = 4)) Then gesprengt[4] := True;
                      Case mauer[y_wert + zaehler,x_wert] of
                      1: begin item[1] := True; itemx[1] := x_wert; itemy[1] := y_wert + zaehler; end;
                      2: begin item[2] := True; itemx[2] := x_wert; itemy[2] := y_wert + zaehler; end;
                      3: begin item[3] := True; itemx[3] := x_wert; itemy[3] := y_wert + zaehler; end;
                      4: begin item[4] := True; itemx[4] := x_wert; itemy[4] := y_wert + zaehler; end;
                      end;
                      //If ((mauer[y_wert + zaehler, x_wert] = 0) Or (mauer[y_wert + zaehler, x_wert] = 5)) Then addon[y_wert + zaehler, x_wert] := 0;
                      mauer[y_wert + zaehler, x_wert] := 0;
                      TImage(FindComponent('Feld' + IntToStr(y_wert + zaehler) + '_' + IntToStr(x_wert))).Picture.LoadFromFile('Bilder&Animationen\rot.bmp');
                      If (((Spieler1.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler1.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler1.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler1.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler1.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler1.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler1.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))) Then
                          begin
                            ShowMessage(Form1.name1 + ' ist tot! ' + Form1.name2 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                      If (((Spieler2.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler2.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler2.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))
                        Or ((Spieler2.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width)
                        And (Spieler2.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left)
                        And (Spieler2.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height)
                        And (Spieler2.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top))) Then
                          begin
                            ShowMessage(Form1.name2 + ' ist tot! ' + Form1.name1 + ' hat gewonnen!');
                            Form1.Visible := True; Form1.Panel3.Visible := True; tot := True;
                            Form2.Close;
                            BREAK;
                          end;
                    end;
                end;
              Spieler1.BringToFront;
            end;
            //Bomben.Delete(i);
            //TBombe(Bomben[i]).Explosion.Play;
            SndPlaySound('explosion.wav', SND_ASYNC);
            TBombe(Bomben[i]).Visible := False;
            Delay(1000);
            TBombe(Bomben[i]).Fertig := True;
            //TBombe(Bomben[i]).Explosion.Close;
         For zaehler := -Spieler1.reichweite To Spieler1.reichweite Do
           begin
             If (x_wert + zaehler > 0) And (x_wert + zaehler < 12) And (mauer[y_wert,x_wert + zaehler] = 0) Then
               TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Picture.LoadFromFile('Bilder&Animationen\weiß.bmp');
             If (y_wert + zaehler > 0) And (y_wert + zaehler < 12) And (mauer[y_wert + zaehler, x_wert] = 0) Then
               TImage(FindComponent('Feld' + IntToStr(y_wert + zaehler) + '_' + IntToStr(x_wert))).Picture.LoadFromFile('Bilder&Animationen\weiß.bmp');
             Spieler1.BringToFront;
           end;
         If item[4] = True Then
           begin
             TImage(FindComponent('Feld' + IntToStr(itemy[4]) + '_' + IntToStr(itemx[4]))).Picture.LoadFromFile('Bilder&Animationen\Bombe_neu.jpg');
             TImage(FindComponent('Feld' + IntToStr(itemy[4]) + '_' + IntToStr(itemx[4]))).Stretch := True;
           end;
         If item[2] = True Then
           begin
             TImage(FindComponent('Feld' + IntToStr(itemy[2]) + '_' + IntToStr(itemx[2]))).Picture.LoadFromFile('Bilder&Animationen\Schnell.bmp');
             TImage(FindComponent('Feld' + IntToStr(itemy[2]) + '_' + IntToStr(itemx[2]))).Stretch := True;
           end;
          If item[3] = True Then
           begin
             TImage(FindComponent('Feld' + IntToStr(itemy[3]) + '_' + IntToStr(itemx[3]))).Picture.LoadFromFile('Bilder&Animationen\Knall.jpg');
             TImage(FindComponent('Feld' + IntToStr(itemy[3]) + '_' + IntToStr(itemx[3]))).Stretch := True;
           end;
         Label3.Caption := 'Vorbei!';
         Label4.Caption := '';
         //TBombe(Bomben[i]).Fertig := True;
         //zahl := i;
         //ja := True;
         Spieler1.bombegelegt := Spieler1.bombegelegt - 1;
         If Spieler1.bombegelegt < 0 Then Spieler1.bombegelegt := 0;
         If Spieler1.bombegelegt < Spieler1.laufzahl_bombe Then Spieler1.zuendet := 0;
         If Spieler1.bombegelegt = 0 Then zeit := Bomben.Count - 1;
         If ((GetTickCount - TBombe(Bomben[i]).ExplodierZeit >= 4000) And (TBombe(Bomben[i]).Fertig = True)) Then
           begin
             TBombe(Bomben[i]).Fertig := False;
             Bomben.Delete(i);
           end
           Else Inc(i);
         //Bomben.Delete(i);
         {If (Spieler1.bombegelegt = 0) Then For e := zeit DownTo 0 Do
        begin
          Try
          Bomben.Delete(e);
          Except end;
         end;}

         end;
  end;
  Label1.Caption := IntToStr(Spieler1.bombegelegt);
end;
Sicherlich könnte man das in 20 zeilen schreiben, nur weiß ich nicht, wie. Sagt einfach mal was dazu. Dass es einfacherer geht, ist eindeutig...

Liebe Grüße,
Simon
  Mit Zitat antworten Zitat