AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Allgemeines Problem in meinem Programm/ Threads!?
Thema durchsuchen
Ansicht
Themen-Optionen

Allgemeines Problem in meinem Programm/ Threads!?

Ein Thema von Simme · begonnen am 1. Mär 2010 · letzter Beitrag vom 25. Mär 2010
Antwort Antwort
Seite 5 von 5   « Erste     345   
Simme

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

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 7. Mär 2010, 13:48
Also, alle eure Vorschläge bringen nichts.
Mal eine Frage: Habt ihr schon mal probiert, eine Solche Objektliste mittels des Count-Wertes zu löschen? Das funktioniert so nicht. Ich hab mehrere Sachen ausprobiert. Alles führt zum Scheitern. Immer wieder kommt die Fehlermeldung.
Könnte man nicht einfach alle Bilder löschen (mit Image.Destroy oder so) und dann Objektliste.Clear machen?

Liebe Grüße,
Simon =)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#42

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 7. Mär 2010, 13:55
Zitat von Simme:
Also, alle eure Vorschläge bringen nichts.
Mal eine Frage: Habt ihr schon mal probiert, eine Solche Objektliste mittels des Count-Wertes zu löschen? Das funktioniert so nicht.
Ja, hier http://www.delphipraxis.net/internal...135115#1135115
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#43

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 7. Mär 2010, 14:04
Debugge die Schleife und guck dir bei jedem Durchlauf den Index an, der gelöscht werden soll.

Bomben.Delete(idx) // Hier Breakpoint drauf setzen Und wenn du den Wert von idx siehst, dann vergleichst du ihn mal mit Bomben.Count. 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.
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.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
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, 16: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
Simme

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

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 12. Mär 2010, 13:40
Sorry, war das zu viel?
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#46

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 12. Mär 2010, 13:49
Hi!
Zu viel nicht, aber doch viel und ich für meinen Teil habe es dann aufgeschoben. Ich bin immer noch willig zu helfen , aber das kann ich erst im Laufe des Wochenendes machen. Oder wenn das glorreiche Unternehmen mir endlich mal ein paar von den 38 Urlaubstagen, die ich noch habe, gibt...

Ich versuche heute Abend oder Morgen mal etwas zusammenzuschreiben. Das könnte dann allerdings auch ein langer Text werden

Bis dann!
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#47

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 17. Mär 2010, 15:06
Zitat von Simme:
Sorry, war das zu viel?
Eigentlich war das zu wenig, die Deklarationen der global verwendeten Typen und Variablen fehlen.

Dein Projekt ist extrem unübersichtlich, da alles in einer großen Methode steht.
Niemand will sich so etwas gern anschaun.
Du solltest mit Unterfunktionen mit Parametern und Rückgabewerten arbeiten.
Jede Unterfunktion erfüllt dabei genau eine Aufgabe.
Der Namen der Funktion kann die Aufgabe beschreiben.
Beipiel:
Delphi-Quellcode:
function TForm2.GetFeldImage(x, y: Integer): TImage;
begin
  Result := TImage(FindComponent('Feld' + IntToStr(y) + '_' + IntToStr(x)));
end;

function TForm2.SpielerFeldKollision(Spieler: TImage; Feld: TImage): Boolean;
begin
  Result := PtInRect(Feld.BoundsRect, Spieler.p1) or
            PtInRect(Feld.BoundsRect, Spieler.p2) or
            PtInRect(Feld.BoundsRect, Spieler.p3) or
            PtInRect(Feld.BoundsRect, Spieler.p4) or
end;

procedure TForm2.SpielerSieg(Spieler: TImage);
var
  sMsg: string;
begin
  if Spieler = Spieler1 then
    sMsg := Form1.name2 + ' ist tot! ' + Form1.name1 + ' hat gewonnen!'
  else
    sMsg := Form1.name1 + ' ist tot! ' + Form1.name2 + ' hat gewonnen!';

  ShowMessage(sMsg);
  Form1.Visible := True;
  Form1.Panel3.Visible := True;
  tot := True;
  Form2.Close;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
var
  FeldImage: TImage;

{...}

                      FeldImage := GetFeldImage(x_wert + zaehler, y_wert);
                      FeldImage.Picture.LoadFromFile('Bilder&Animationen\rot.bmp');
                      if SpielerFeldKollision(Spieler1, FeldImage) then
                          begin
                            SpielerSieg(Spieler2);
                            BREAK;
                          end;

                      if SpielerFeldKollision(Spieler2, FeldImage) then
                          begin
                            SpielerSieg(Spieler1);
                            BREAK;
                          end;
Das ist doch übersichtlicher und verständlicher als im Vergleich dein Konstrukt und das kommt auch gleich mehrmals vor:

Delphi-Quellcode:
                      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;
Dein eigentliches Problem ist aber, daß die OnTimer Methode im ProzessMessage rekursiv aufgerufen wird.
Das könnte verhindert werden, z.B. in dem der Timer wärend der Verarbeitung angehalten wird.

Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  try


  finally
    Timer1.Enabled := True;
  end;
end;
  Mit Zitat antworten Zitat
Simme

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

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 24. Mär 2010, 11:38
Danke an alle, die mir geholfen haben. Ich werde dieses Thema jetzt erstmal als beantwortet und gelöst markieren, weil mein allgemeines Problem im Allgemeinen gelöst ist.
Ich habe den letzten Beitrag von Blup nicht so richtig verstanden. Aber das ist in Ordnung, trotzdem danke.

Liebe Grüße,
Simon =)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#49

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 25. Mär 2010, 10:43
Da du so lange nicht reagiert hast, dachte ich schon, du hast dein Projekt aufgegeben.
Wenn etwas unverständlich ist, frag einfach nach.

Zur Entspannung hab ich noch ein bischen an deinem Code rumgefeilt. Vieleicht kannst du ja noch ein par Anregungen entnehmen. Insbesondere ist mir noch ein Problem bei Explosionen die sich gegenseitig überschneiden aufgefallen. Da mir die Deklarationen fehlten, habe ich diese nachempfunden.
Hinweis:
Zweidimensionale Arrays werden allgemein immer mit [Spalte, Zeile] adressiert (z.B. TStringGrid.Cells[], Point() usw.), nicht umgekehrt.
Angehängte Dateien
Dateityp: pas bomber_214.pas (7,0 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#50

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 25. Mär 2010, 10:50
Dann hier auch noch meine Version..
Angehängte Dateien
Dateityp: zip bomber_208.zip (400,4 KB, 8x aufgerufen)
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz